From 49c0ea4e3ba0ad5eab7470b9b46f626117c513c1 Mon Sep 17 00:00:00 2001 From: OmniaX Date: Wed, 27 Dec 2023 21:25:09 +0100 Subject: [PATCH] Removed target and code --- .gitignore | 2 + CMakeLists.txt | 79 +- extra/make_and_run | 7 +- extra/models/cube3.ox3d | Bin 949 -> 0 bytes extra/models/monkey2.ox3d | Bin 114821 -> 0 bytes extra/other/tileset.xcf | Bin 553982 -> 0 bytes extra/shaders/basicShader.fs | 104 - extra/shaders/basicShader.vs | 23 - extra/shaders/lightShader.fs | 8 - extra/shaders/lightShader.vs | 15 - extra/shaders/screenPlane.fs | 12 - extra/shaders/screenPlane.vs | 14 - extra/shaders/skybox.fs | 12 - extra/shaders/skybox.vs | 17 - extra/textures/awesomeface.png | Bin 59277 -> 0 bytes extra/textures/container.jpg | Bin 184939 -> 0 bytes extra/textures/container2.png | Bin 467893 -> 0 bytes extra/textures/container2_specular.png | Bin 144081 -> 0 bytes extra/textures/skybox/back.jpg | Bin 740068 -> 0 bytes extra/textures/skybox/bottom.jpg | Bin 280589 -> 0 bytes extra/textures/skybox/front.jpg | Bin 473329 -> 0 bytes extra/textures/skybox/left.jpg | Bin 601885 -> 0 bytes extra/textures/skybox/right.jpg | Bin 538038 -> 0 bytes extra/textures/skybox/top.jpg | Bin 346139 -> 0 bytes extra/textures/sub_win_shadow.png | Bin 15442 -> 0 bytes extra/textures/tetris.png | Bin 906 -> 0 bytes extra/textures/tileset.png | Bin 88308 -> 0 bytes extra/textures/wall.jpg | Bin 256989 -> 0 bytes extra/textures/wood.jpg | Bin 63783 -> 0 bytes extra/textures/wood.jpg.001.jpg | Bin 86912 -> 0 bytes licences/SFML-LICENSE.md | 9 - licences/clip-LICENSE.txt | 20 - licences/stb-LICENSE | 37 - src/ogfx/BitmapFont.cpp | 270 - src/ogfx/BitmapFont.hpp | 50 - src/ogfx/BlendRenderer.cpp | 101 - src/ogfx/BlendRenderer.hpp | 72 - src/ogfx/Camera.cpp | 187 - src/ogfx/Camera.hpp | 98 - src/ogfx/DataStructures.hpp | 225 - src/ogfx/DebugTools.cpp | 240 - src/ogfx/DebugTools.hpp | 95 - src/ogfx/Errors.cpp | 81 - src/ogfx/Errors.hpp | 45 - src/ogfx/GLBuffers.cpp | 167 - src/ogfx/GLBuffers.hpp | 120 - src/ogfx/GraphicsApplication.cpp | 695 -- src/ogfx/GraphicsApplication.hpp | 137 - src/ogfx/Mesh.cpp | 79 - src/ogfx/Mesh.hpp | 36 - src/ogfx/OX3DLoader.cpp | 137 - src/ogfx/OX3DLoader.hpp | 26 - src/ogfx/RTData.cpp | 12 - src/ogfx/RTData.hpp | 18 - src/ogfx/RenderCommands.cpp | 446 - src/ogfx/RenderCommands.hpp | 229 - src/ogfx/RenderCore.cpp | 336 - src/ogfx/RenderCore.hpp | 152 - src/ogfx/RenderTarget.cpp | 87 - src/ogfx/RenderTarget.hpp | 46 - src/ogfx/Renderer2D.cpp | 570 -- src/ogfx/Renderer2D.hpp | 96 - src/ogfx/ResourceManager.cpp | 268 - src/ogfx/ResourceManager.hpp | 97 - src/ogfx/Shader.cpp | 365 - src/ogfx/Shader.hpp | 88 - src/ogfx/Texture.cpp | 387 - src/ogfx/Texture.hpp | 135 - src/ogfx/Widgets.cpp | 639 -- src/ogfx/Widgets.hpp | 258 - src/ogfx/Window.cpp | 93 - src/ogfx/Window.hpp | 64 - .../static_resources/BasicShadowTexture.hpp | 785 -- src/ogfx/static_resources/StateGradient.hpp | 44 - .../static_resources/default_bitmap_font.hpp | 4077 --------- src/ogfx/static_resources/default_icon_64.hpp | 899 -- .../default_light_texture.hpp | 2784 ------ src/ogfx/static_resources/default_shaders.hpp | 112 - src/ostd/BaseObject.cpp | 7 +- src/ostd/BaseObject.hpp | 18 +- src/ostd/Color.cpp | 36 +- src/ostd/Color.hpp | 16 +- src/ostd/Console.cpp | 256 +- src/ostd/Console.hpp | 92 + src/ostd/DataFile.cpp | 439 - src/ostd/DataFile.hpp | 80 - src/ostd/Errors.cpp | 5 +- src/ostd/Errors.hpp | 4 +- src/ostd/File.cpp | 2 + src/ostd/Geometry.cpp | 4 +- src/ostd/Geometry.hpp | 12 +- src/ostd/IOHandlers.hpp | 332 + src/ostd/Logger.cpp | 22 +- src/ostd/Logger.hpp | 10 +- src/ostd/Logic.cpp | 1 + src/ostd/Logic.hpp | 20 - src/ostd/OutputHandlers.cpp | 563 +- src/ostd/PathFinder.cpp | 2 +- src/ostd/PathFinder.hpp | 2 +- src/ostd/QuadTree.cpp | 2 +- src/ostd/QuadTree.hpp | 2 +- src/ostd/Random.hpp | 2 +- src/ostd/Serial.cpp | 4 +- src/ostd/Serial.hpp | 4 +- src/ostd/ShuntingYard.cpp | 3 +- src/ostd/SineWave.cpp | 2 +- src/ostd/SineWave.hpp | 2 +- src/ostd/String.hpp | 107 + src/ostd/StringEditor.cpp | 3 +- src/ostd/TextStyleParser.cpp | 92 +- src/ostd/TextStyleParser.hpp | 31 +- src/ostd/Types.hpp | 2 +- src/ostd/Utils.cpp | 148 +- src/ostd/Utils.hpp | 279 +- src/{ => ostd}/vendor/FastNoiseLite.hpp | 0 src/{ => ostd}/vendor/TermColor.hpp | 1822 ++-- src/test/TestApp2D.cpp | 110 - src/test/TestApp2D.hpp | 70 - src/test/TestApp3D.cpp | 233 - src/test/TestApp3D.hpp | 51 - src/test/TetrisApp.cpp | 265 - src/test/TetrisApp.hpp | 222 - src/test/main.cpp | 20 - src/vendor/GLAD/KHR/khrplatform.h | 311 - src/vendor/GLAD/glad.c | 1840 ---- src/vendor/GLAD/glad/glad.h | 3611 -------- src/vendor/glm/common.hpp | 539 -- src/vendor/glm/detail/_features.hpp | 394 - src/vendor/glm/detail/_fixes.hpp | 27 - src/vendor/glm/detail/_noise.hpp | 81 - src/vendor/glm/detail/_swizzle.hpp | 804 -- src/vendor/glm/detail/_swizzle_func.hpp | 682 -- src/vendor/glm/detail/_vectorize.hpp | 162 - src/vendor/glm/detail/compute_common.hpp | 50 - .../glm/detail/compute_vector_relational.hpp | 30 - src/vendor/glm/detail/func_common.inl | 792 -- src/vendor/glm/detail/func_common_simd.inl | 231 - src/vendor/glm/detail/func_exponential.inl | 152 - .../glm/detail/func_exponential_simd.inl | 37 - src/vendor/glm/detail/func_geometric.inl | 243 - src/vendor/glm/detail/func_geometric_simd.inl | 163 - src/vendor/glm/detail/func_integer.inl | 372 - src/vendor/glm/detail/func_integer_simd.inl | 65 - src/vendor/glm/detail/func_matrix.inl | 443 - src/vendor/glm/detail/func_matrix_simd.inl | 249 - src/vendor/glm/detail/func_packing.inl | 189 - src/vendor/glm/detail/func_packing_simd.inl | 6 - src/vendor/glm/detail/func_trigonometric.inl | 197 - .../glm/detail/func_trigonometric_simd.inl | 0 .../glm/detail/func_vector_relational.inl | 87 - .../detail/func_vector_relational_simd.inl | 6 - src/vendor/glm/detail/glm.cpp | 263 - src/vendor/glm/detail/qualifier.hpp | 230 - src/vendor/glm/detail/setup.hpp | 1156 --- src/vendor/glm/detail/type_float.hpp | 68 - src/vendor/glm/detail/type_half.hpp | 16 - src/vendor/glm/detail/type_half.inl | 241 - src/vendor/glm/detail/type_mat2x2.hpp | 177 - src/vendor/glm/detail/type_mat2x2.inl | 536 -- src/vendor/glm/detail/type_mat2x3.hpp | 159 - src/vendor/glm/detail/type_mat2x3.inl | 510 -- src/vendor/glm/detail/type_mat2x4.hpp | 161 - src/vendor/glm/detail/type_mat2x4.inl | 520 -- src/vendor/glm/detail/type_mat3x2.hpp | 167 - src/vendor/glm/detail/type_mat3x2.inl | 532 -- src/vendor/glm/detail/type_mat3x3.hpp | 184 - src/vendor/glm/detail/type_mat3x3.inl | 601 -- src/vendor/glm/detail/type_mat3x4.hpp | 166 - src/vendor/glm/detail/type_mat3x4.inl | 578 -- src/vendor/glm/detail/type_mat4x2.hpp | 171 - src/vendor/glm/detail/type_mat4x2.inl | 574 -- src/vendor/glm/detail/type_mat4x3.hpp | 171 - src/vendor/glm/detail/type_mat4x3.inl | 598 -- src/vendor/glm/detail/type_mat4x4.hpp | 189 - src/vendor/glm/detail/type_mat4x4.inl | 706 -- src/vendor/glm/detail/type_mat4x4_simd.inl | 6 - src/vendor/glm/detail/type_quat.hpp | 191 - src/vendor/glm/detail/type_quat.inl | 412 - src/vendor/glm/detail/type_quat_simd.inl | 188 - src/vendor/glm/detail/type_vec1.hpp | 308 - src/vendor/glm/detail/type_vec1.inl | 553 -- src/vendor/glm/detail/type_vec2.hpp | 402 - src/vendor/glm/detail/type_vec2.inl | 915 -- src/vendor/glm/detail/type_vec3.hpp | 435 - src/vendor/glm/detail/type_vec3.inl | 1070 --- src/vendor/glm/detail/type_vec4.hpp | 508 -- src/vendor/glm/detail/type_vec4.inl | 1142 --- src/vendor/glm/detail/type_vec4_simd.inl | 775 -- src/vendor/glm/exponential.hpp | 110 - src/vendor/glm/ext.hpp | 255 - src/vendor/glm/ext/matrix_clip_space.hpp | 522 -- src/vendor/glm/ext/matrix_clip_space.inl | 555 -- src/vendor/glm/ext/matrix_common.hpp | 36 - src/vendor/glm/ext/matrix_common.inl | 16 - src/vendor/glm/ext/matrix_double2x2.hpp | 23 - .../glm/ext/matrix_double2x2_precision.hpp | 49 - src/vendor/glm/ext/matrix_double2x3.hpp | 18 - .../glm/ext/matrix_double2x3_precision.hpp | 31 - src/vendor/glm/ext/matrix_double2x4.hpp | 18 - .../glm/ext/matrix_double2x4_precision.hpp | 31 - src/vendor/glm/ext/matrix_double3x2.hpp | 18 - .../glm/ext/matrix_double3x2_precision.hpp | 31 - src/vendor/glm/ext/matrix_double3x3.hpp | 23 - .../glm/ext/matrix_double3x3_precision.hpp | 49 - src/vendor/glm/ext/matrix_double3x4.hpp | 18 - .../glm/ext/matrix_double3x4_precision.hpp | 31 - src/vendor/glm/ext/matrix_double4x2.hpp | 18 - .../glm/ext/matrix_double4x2_precision.hpp | 31 - src/vendor/glm/ext/matrix_double4x3.hpp | 18 - .../glm/ext/matrix_double4x3_precision.hpp | 31 - src/vendor/glm/ext/matrix_double4x4.hpp | 23 - .../glm/ext/matrix_double4x4_precision.hpp | 49 - src/vendor/glm/ext/matrix_float2x2.hpp | 23 - .../glm/ext/matrix_float2x2_precision.hpp | 49 - src/vendor/glm/ext/matrix_float2x3.hpp | 18 - .../glm/ext/matrix_float2x3_precision.hpp | 31 - src/vendor/glm/ext/matrix_float2x4.hpp | 18 - .../glm/ext/matrix_float2x4_precision.hpp | 31 - src/vendor/glm/ext/matrix_float3x2.hpp | 18 - .../glm/ext/matrix_float3x2_precision.hpp | 31 - src/vendor/glm/ext/matrix_float3x3.hpp | 23 - .../glm/ext/matrix_float3x3_precision.hpp | 49 - src/vendor/glm/ext/matrix_float3x4.hpp | 18 - .../glm/ext/matrix_float3x4_precision.hpp | 31 - src/vendor/glm/ext/matrix_float4x2.hpp | 18 - .../glm/ext/matrix_float4x2_precision.hpp | 31 - src/vendor/glm/ext/matrix_float4x3.hpp | 18 - .../glm/ext/matrix_float4x3_precision.hpp | 31 - src/vendor/glm/ext/matrix_float4x4.hpp | 23 - .../glm/ext/matrix_float4x4_precision.hpp | 49 - src/vendor/glm/ext/matrix_int2x2.hpp | 38 - src/vendor/glm/ext/matrix_int2x2_sized.hpp | 70 - src/vendor/glm/ext/matrix_int2x3.hpp | 33 - src/vendor/glm/ext/matrix_int2x3_sized.hpp | 49 - src/vendor/glm/ext/matrix_int2x4.hpp | 33 - src/vendor/glm/ext/matrix_int2x4_sized.hpp | 49 - src/vendor/glm/ext/matrix_int3x2.hpp | 33 - src/vendor/glm/ext/matrix_int3x2_sized.hpp | 49 - src/vendor/glm/ext/matrix_int3x3.hpp | 38 - src/vendor/glm/ext/matrix_int3x3_sized.hpp | 70 - src/vendor/glm/ext/matrix_int3x4.hpp | 33 - src/vendor/glm/ext/matrix_int3x4_sized.hpp | 49 - src/vendor/glm/ext/matrix_int4x2.hpp | 33 - src/vendor/glm/ext/matrix_int4x2_sized.hpp | 49 - src/vendor/glm/ext/matrix_int4x3.hpp | 33 - src/vendor/glm/ext/matrix_int4x3_sized.hpp | 49 - src/vendor/glm/ext/matrix_int4x4.hpp | 38 - src/vendor/glm/ext/matrix_int4x4_sized.hpp | 70 - src/vendor/glm/ext/matrix_integer.hpp | 91 - src/vendor/glm/ext/matrix_integer.inl | 38 - src/vendor/glm/ext/matrix_projection.hpp | 149 - src/vendor/glm/ext/matrix_projection.inl | 106 - src/vendor/glm/ext/matrix_relational.hpp | 132 - src/vendor/glm/ext/matrix_relational.inl | 88 - src/vendor/glm/ext/matrix_transform.hpp | 144 - src/vendor/glm/ext/matrix_transform.inl | 153 - src/vendor/glm/ext/matrix_uint2x2.hpp | 38 - src/vendor/glm/ext/matrix_uint2x2_sized.hpp | 70 - src/vendor/glm/ext/matrix_uint2x3.hpp | 33 - src/vendor/glm/ext/matrix_uint2x3_sized.hpp | 49 - src/vendor/glm/ext/matrix_uint2x4.hpp | 33 - src/vendor/glm/ext/matrix_uint2x4_sized.hpp | 49 - src/vendor/glm/ext/matrix_uint3x2.hpp | 33 - src/vendor/glm/ext/matrix_uint3x2_sized.hpp | 49 - src/vendor/glm/ext/matrix_uint3x3.hpp | 38 - src/vendor/glm/ext/matrix_uint3x3_sized.hpp | 70 - src/vendor/glm/ext/matrix_uint3x4.hpp | 33 - src/vendor/glm/ext/matrix_uint3x4_sized.hpp | 49 - src/vendor/glm/ext/matrix_uint4x2.hpp | 33 - src/vendor/glm/ext/matrix_uint4x2_sized.hpp | 49 - src/vendor/glm/ext/matrix_uint4x3.hpp | 33 - src/vendor/glm/ext/matrix_uint4x3_sized.hpp | 49 - src/vendor/glm/ext/matrix_uint4x4.hpp | 38 - src/vendor/glm/ext/matrix_uint4x4_sized.hpp | 70 - src/vendor/glm/ext/quaternion_common.hpp | 135 - src/vendor/glm/ext/quaternion_common.inl | 144 - src/vendor/glm/ext/quaternion_common_simd.inl | 18 - src/vendor/glm/ext/quaternion_double.hpp | 39 - .../glm/ext/quaternion_double_precision.hpp | 42 - src/vendor/glm/ext/quaternion_exponential.hpp | 63 - src/vendor/glm/ext/quaternion_exponential.inl | 89 - src/vendor/glm/ext/quaternion_float.hpp | 39 - .../glm/ext/quaternion_float_precision.hpp | 36 - src/vendor/glm/ext/quaternion_geometric.hpp | 70 - src/vendor/glm/ext/quaternion_geometric.inl | 36 - src/vendor/glm/ext/quaternion_relational.hpp | 62 - src/vendor/glm/ext/quaternion_relational.inl | 35 - src/vendor/glm/ext/quaternion_transform.hpp | 47 - src/vendor/glm/ext/quaternion_transform.inl | 24 - .../glm/ext/quaternion_trigonometric.hpp | 63 - .../glm/ext/quaternion_trigonometric.inl | 37 - src/vendor/glm/ext/scalar_common.hpp | 181 - src/vendor/glm/ext/scalar_common.inl | 170 - src/vendor/glm/ext/scalar_constants.hpp | 40 - src/vendor/glm/ext/scalar_constants.inl | 24 - src/vendor/glm/ext/scalar_int_sized.hpp | 70 - src/vendor/glm/ext/scalar_integer.hpp | 92 - src/vendor/glm/ext/scalar_integer.inl | 243 - src/vendor/glm/ext/scalar_packing.hpp | 32 - src/vendor/glm/ext/scalar_packing.inl | 0 src/vendor/glm/ext/scalar_reciprocal.hpp | 135 - src/vendor/glm/ext/scalar_reciprocal.inl | 107 - src/vendor/glm/ext/scalar_relational.hpp | 65 - src/vendor/glm/ext/scalar_relational.inl | 40 - src/vendor/glm/ext/scalar_uint_sized.hpp | 70 - src/vendor/glm/ext/scalar_ulp.hpp | 74 - src/vendor/glm/ext/scalar_ulp.inl | 284 - src/vendor/glm/ext/vector_bool1.hpp | 30 - src/vendor/glm/ext/vector_bool1_precision.hpp | 34 - src/vendor/glm/ext/vector_bool2.hpp | 18 - src/vendor/glm/ext/vector_bool2_precision.hpp | 31 - src/vendor/glm/ext/vector_bool3.hpp | 18 - src/vendor/glm/ext/vector_bool3_precision.hpp | 31 - src/vendor/glm/ext/vector_bool4.hpp | 18 - src/vendor/glm/ext/vector_bool4_precision.hpp | 31 - src/vendor/glm/ext/vector_common.hpp | 228 - src/vendor/glm/ext/vector_common.inl | 147 - src/vendor/glm/ext/vector_double1.hpp | 31 - .../glm/ext/vector_double1_precision.hpp | 36 - src/vendor/glm/ext/vector_double2.hpp | 18 - .../glm/ext/vector_double2_precision.hpp | 31 - src/vendor/glm/ext/vector_double3.hpp | 18 - .../glm/ext/vector_double3_precision.hpp | 34 - src/vendor/glm/ext/vector_double4.hpp | 18 - .../glm/ext/vector_double4_precision.hpp | 35 - src/vendor/glm/ext/vector_float1.hpp | 31 - .../glm/ext/vector_float1_precision.hpp | 36 - src/vendor/glm/ext/vector_float2.hpp | 18 - .../glm/ext/vector_float2_precision.hpp | 31 - src/vendor/glm/ext/vector_float3.hpp | 18 - .../glm/ext/vector_float3_precision.hpp | 31 - src/vendor/glm/ext/vector_float4.hpp | 18 - .../glm/ext/vector_float4_precision.hpp | 31 - src/vendor/glm/ext/vector_int1.hpp | 32 - src/vendor/glm/ext/vector_int1_sized.hpp | 49 - src/vendor/glm/ext/vector_int2.hpp | 18 - src/vendor/glm/ext/vector_int2_sized.hpp | 49 - src/vendor/glm/ext/vector_int3.hpp | 18 - src/vendor/glm/ext/vector_int3_sized.hpp | 49 - src/vendor/glm/ext/vector_int4.hpp | 18 - src/vendor/glm/ext/vector_int4_sized.hpp | 49 - src/vendor/glm/ext/vector_integer.hpp | 149 - src/vendor/glm/ext/vector_integer.inl | 85 - src/vendor/glm/ext/vector_packing.hpp | 32 - src/vendor/glm/ext/vector_packing.inl | 0 src/vendor/glm/ext/vector_reciprocal.hpp | 135 - src/vendor/glm/ext/vector_reciprocal.inl | 105 - src/vendor/glm/ext/vector_relational.hpp | 107 - src/vendor/glm/ext/vector_relational.inl | 75 - src/vendor/glm/ext/vector_uint1.hpp | 32 - src/vendor/glm/ext/vector_uint1_sized.hpp | 49 - src/vendor/glm/ext/vector_uint2.hpp | 18 - src/vendor/glm/ext/vector_uint2_sized.hpp | 49 - src/vendor/glm/ext/vector_uint3.hpp | 18 - src/vendor/glm/ext/vector_uint3_sized.hpp | 49 - src/vendor/glm/ext/vector_uint4.hpp | 18 - src/vendor/glm/ext/vector_uint4_sized.hpp | 49 - src/vendor/glm/ext/vector_ulp.hpp | 109 - src/vendor/glm/ext/vector_ulp.inl | 74 - src/vendor/glm/fwd.hpp | 1233 --- src/vendor/glm/geometric.hpp | 116 - src/vendor/glm/glm.hpp | 136 - src/vendor/glm/gtc/bitfield.hpp | 266 - src/vendor/glm/gtc/bitfield.inl | 626 -- src/vendor/glm/gtc/color_space.hpp | 56 - src/vendor/glm/gtc/color_space.inl | 84 - src/vendor/glm/gtc/constants.hpp | 165 - src/vendor/glm/gtc/constants.inl | 167 - src/vendor/glm/gtc/epsilon.hpp | 60 - src/vendor/glm/gtc/epsilon.inl | 80 - src/vendor/glm/gtc/integer.hpp | 43 - src/vendor/glm/gtc/integer.inl | 33 - src/vendor/glm/gtc/matrix_access.hpp | 60 - src/vendor/glm/gtc/matrix_access.inl | 62 - src/vendor/glm/gtc/matrix_integer.hpp | 433 - src/vendor/glm/gtc/matrix_inverse.hpp | 50 - src/vendor/glm/gtc/matrix_inverse.inl | 118 - src/vendor/glm/gtc/matrix_transform.hpp | 36 - src/vendor/glm/gtc/matrix_transform.inl | 3 - src/vendor/glm/gtc/noise.hpp | 61 - src/vendor/glm/gtc/noise.inl | 807 -- src/vendor/glm/gtc/packing.hpp | 728 -- src/vendor/glm/gtc/packing.inl | 938 -- src/vendor/glm/gtc/quaternion.hpp | 173 - src/vendor/glm/gtc/quaternion.inl | 208 - src/vendor/glm/gtc/quaternion_simd.inl | 0 src/vendor/glm/gtc/random.hpp | 82 - src/vendor/glm/gtc/random.inl | 303 - src/vendor/glm/gtc/reciprocal.hpp | 24 - src/vendor/glm/gtc/round.hpp | 160 - src/vendor/glm/gtc/round.inl | 155 - src/vendor/glm/gtc/type_aligned.hpp | 1315 --- src/vendor/glm/gtc/type_precision.hpp | 2094 ----- src/vendor/glm/gtc/type_precision.inl | 6 - src/vendor/glm/gtc/type_ptr.hpp | 230 - src/vendor/glm/gtc/type_ptr.inl | 386 - src/vendor/glm/gtc/ulp.hpp | 152 - src/vendor/glm/gtc/ulp.inl | 173 - src/vendor/glm/gtc/vec1.hpp | 30 - src/vendor/glm/gtx/associated_min_max.hpp | 207 - src/vendor/glm/gtx/associated_min_max.inl | 354 - src/vendor/glm/gtx/bit.hpp | 98 - src/vendor/glm/gtx/bit.inl | 92 - src/vendor/glm/gtx/closest_point.hpp | 49 - src/vendor/glm/gtx/closest_point.inl | 45 - src/vendor/glm/gtx/color_encoding.hpp | 54 - src/vendor/glm/gtx/color_encoding.inl | 45 - src/vendor/glm/gtx/color_space.hpp | 72 - src/vendor/glm/gtx/color_space.inl | 141 - src/vendor/glm/gtx/color_space_YCoCg.hpp | 60 - src/vendor/glm/gtx/color_space_YCoCg.inl | 107 - src/vendor/glm/gtx/common.hpp | 76 - src/vendor/glm/gtx/common.inl | 125 - src/vendor/glm/gtx/compatibility.hpp | 133 - src/vendor/glm/gtx/compatibility.inl | 62 - src/vendor/glm/gtx/component_wise.hpp | 69 - src/vendor/glm/gtx/component_wise.inl | 127 - src/vendor/glm/gtx/dual_quaternion.hpp | 274 - src/vendor/glm/gtx/dual_quaternion.inl | 352 - src/vendor/glm/gtx/easing.hpp | 219 - src/vendor/glm/gtx/easing.inl | 436 - src/vendor/glm/gtx/euler_angles.hpp | 335 - src/vendor/glm/gtx/euler_angles.inl | 899 -- src/vendor/glm/gtx/extend.hpp | 42 - src/vendor/glm/gtx/extend.inl | 48 - src/vendor/glm/gtx/extended_min_max.hpp | 137 - src/vendor/glm/gtx/extended_min_max.inl | 138 - src/vendor/glm/gtx/exterior_product.hpp | 45 - src/vendor/glm/gtx/exterior_product.inl | 26 - src/vendor/glm/gtx/fast_exponential.hpp | 95 - src/vendor/glm/gtx/fast_exponential.inl | 136 - src/vendor/glm/gtx/fast_square_root.hpp | 98 - src/vendor/glm/gtx/fast_square_root.inl | 75 - src/vendor/glm/gtx/fast_trigonometry.hpp | 79 - src/vendor/glm/gtx/fast_trigonometry.inl | 142 - src/vendor/glm/gtx/float_notmalize.inl | 13 - src/vendor/glm/gtx/functions.hpp | 56 - src/vendor/glm/gtx/functions.inl | 30 - src/vendor/glm/gtx/gradient_paint.hpp | 53 - src/vendor/glm/gtx/gradient_paint.inl | 36 - .../glm/gtx/handed_coordinate_space.hpp | 50 - .../glm/gtx/handed_coordinate_space.inl | 26 - src/vendor/glm/gtx/hash.hpp | 142 - src/vendor/glm/gtx/hash.inl | 184 - src/vendor/glm/gtx/integer.hpp | 76 - src/vendor/glm/gtx/integer.inl | 185 - src/vendor/glm/gtx/intersect.hpp | 92 - src/vendor/glm/gtx/intersect.inl | 200 - src/vendor/glm/gtx/io.hpp | 201 - src/vendor/glm/gtx/io.inl | 440 - src/vendor/glm/gtx/log_base.hpp | 48 - src/vendor/glm/gtx/log_base.inl | 16 - src/vendor/glm/gtx/matrix_cross_product.hpp | 47 - src/vendor/glm/gtx/matrix_cross_product.inl | 37 - src/vendor/glm/gtx/matrix_decompose.hpp | 46 - src/vendor/glm/gtx/matrix_decompose.inl | 192 - src/vendor/glm/gtx/matrix_factorisation.hpp | 69 - src/vendor/glm/gtx/matrix_factorisation.inl | 84 - src/vendor/glm/gtx/matrix_interpolation.hpp | 60 - src/vendor/glm/gtx/matrix_interpolation.inl | 146 - src/vendor/glm/gtx/matrix_major_storage.hpp | 119 - src/vendor/glm/gtx/matrix_major_storage.inl | 166 - src/vendor/glm/gtx/matrix_operation.hpp | 103 - src/vendor/glm/gtx/matrix_operation.inl | 176 - src/vendor/glm/gtx/matrix_query.hpp | 77 - src/vendor/glm/gtx/matrix_query.inl | 113 - src/vendor/glm/gtx/matrix_transform_2d.hpp | 81 - src/vendor/glm/gtx/matrix_transform_2d.inl | 68 - src/vendor/glm/gtx/mixed_product.hpp | 41 - src/vendor/glm/gtx/mixed_product.inl | 15 - src/vendor/glm/gtx/norm.hpp | 88 - src/vendor/glm/gtx/norm.inl | 95 - src/vendor/glm/gtx/normal.hpp | 41 - src/vendor/glm/gtx/normal.inl | 15 - src/vendor/glm/gtx/normalize_dot.hpp | 49 - src/vendor/glm/gtx/normalize_dot.inl | 16 - src/vendor/glm/gtx/number_precision.hpp | 61 - src/vendor/glm/gtx/number_precision.inl | 6 - src/vendor/glm/gtx/optimum_pow.hpp | 54 - src/vendor/glm/gtx/optimum_pow.inl | 22 - src/vendor/glm/gtx/orthonormalize.hpp | 49 - src/vendor/glm/gtx/orthonormalize.inl | 29 - src/vendor/glm/gtx/pca.hpp | 111 - src/vendor/glm/gtx/pca.inl | 343 - src/vendor/glm/gtx/perpendicular.hpp | 41 - src/vendor/glm/gtx/perpendicular.inl | 10 - src/vendor/glm/gtx/polar_coordinates.hpp | 48 - src/vendor/glm/gtx/polar_coordinates.inl | 36 - src/vendor/glm/gtx/projection.hpp | 43 - src/vendor/glm/gtx/projection.inl | 10 - src/vendor/glm/gtx/quaternion.hpp | 174 - src/vendor/glm/gtx/quaternion.inl | 159 - src/vendor/glm/gtx/range.hpp | 98 - src/vendor/glm/gtx/raw_data.hpp | 51 - src/vendor/glm/gtx/raw_data.inl | 2 - src/vendor/glm/gtx/rotate_normalized_axis.hpp | 68 - src/vendor/glm/gtx/rotate_normalized_axis.inl | 58 - src/vendor/glm/gtx/rotate_vector.hpp | 123 - src/vendor/glm/gtx/rotate_vector.inl | 187 - src/vendor/glm/gtx/scalar_multiplication.hpp | 75 - src/vendor/glm/gtx/scalar_relational.hpp | 36 - src/vendor/glm/gtx/scalar_relational.inl | 88 - src/vendor/glm/gtx/spline.hpp | 65 - src/vendor/glm/gtx/spline.inl | 60 - src/vendor/glm/gtx/std_based_type.hpp | 68 - src/vendor/glm/gtx/std_based_type.inl | 6 - src/vendor/glm/gtx/string_cast.hpp | 46 - src/vendor/glm/gtx/string_cast.inl | 492 - src/vendor/glm/gtx/texture.hpp | 46 - src/vendor/glm/gtx/texture.inl | 17 - src/vendor/glm/gtx/transform.hpp | 60 - src/vendor/glm/gtx/transform.inl | 23 - src/vendor/glm/gtx/transform2.hpp | 89 - src/vendor/glm/gtx/transform2.inl | 125 - src/vendor/glm/gtx/type_aligned.hpp | 982 -- src/vendor/glm/gtx/type_aligned.inl | 6 - src/vendor/glm/gtx/type_trait.hpp | 85 - src/vendor/glm/gtx/type_trait.inl | 61 - src/vendor/glm/gtx/vec_swizzle.hpp | 2782 ------ src/vendor/glm/gtx/vector_angle.hpp | 57 - src/vendor/glm/gtx/vector_angle.inl | 45 - src/vendor/glm/gtx/vector_query.hpp | 66 - src/vendor/glm/gtx/vector_query.inl | 154 - src/vendor/glm/gtx/wrap.hpp | 37 - src/vendor/glm/gtx/wrap.inl | 6 - src/vendor/glm/integer.hpp | 212 - src/vendor/glm/mat2x2.hpp | 9 - src/vendor/glm/mat2x3.hpp | 9 - src/vendor/glm/mat2x4.hpp | 9 - src/vendor/glm/mat3x2.hpp | 9 - src/vendor/glm/mat3x3.hpp | 8 - src/vendor/glm/mat3x4.hpp | 8 - src/vendor/glm/mat4x2.hpp | 9 - src/vendor/glm/mat4x3.hpp | 8 - src/vendor/glm/mat4x4.hpp | 9 - src/vendor/glm/matrix.hpp | 161 - src/vendor/glm/packing.hpp | 173 - src/vendor/glm/simd/common.h | 240 - src/vendor/glm/simd/exponential.h | 20 - src/vendor/glm/simd/geometric.h | 124 - src/vendor/glm/simd/integer.h | 115 - src/vendor/glm/simd/matrix.h | 1028 --- src/vendor/glm/simd/neon.h | 155 - src/vendor/glm/simd/packing.h | 8 - src/vendor/glm/simd/platform.h | 408 - src/vendor/glm/simd/trigonometric.h | 9 - src/vendor/glm/simd/vector_relational.h | 8 - src/vendor/glm/trigonometric.hpp | 210 - src/vendor/glm/vec2.hpp | 14 - src/vendor/glm/vec3.hpp | 14 - src/vendor/glm/vec4.hpp | 15 - src/vendor/glm/vector_relational.hpp | 121 - src/vendor/stb_image/stb_image.h | 7897 ----------------- src/vendor/stb_image/stb_image_resize.h | 2634 ------ src/vendor/stb_image/stb_image_write.h | 1724 ---- tools/build.nr | 2 +- 556 files changed, 2276 insertions(+), 100747 deletions(-) delete mode 100644 extra/models/cube3.ox3d delete mode 100644 extra/models/monkey2.ox3d delete mode 100755 extra/other/tileset.xcf delete mode 100755 extra/shaders/basicShader.fs delete mode 100755 extra/shaders/basicShader.vs delete mode 100755 extra/shaders/lightShader.fs delete mode 100755 extra/shaders/lightShader.vs delete mode 100755 extra/shaders/screenPlane.fs delete mode 100755 extra/shaders/screenPlane.vs delete mode 100755 extra/shaders/skybox.fs delete mode 100755 extra/shaders/skybox.vs delete mode 100755 extra/textures/awesomeface.png delete mode 100755 extra/textures/container.jpg delete mode 100755 extra/textures/container2.png delete mode 100755 extra/textures/container2_specular.png delete mode 100755 extra/textures/skybox/back.jpg delete mode 100755 extra/textures/skybox/bottom.jpg delete mode 100755 extra/textures/skybox/front.jpg delete mode 100755 extra/textures/skybox/left.jpg delete mode 100755 extra/textures/skybox/right.jpg delete mode 100755 extra/textures/skybox/top.jpg delete mode 100644 extra/textures/sub_win_shadow.png delete mode 100644 extra/textures/tetris.png delete mode 100755 extra/textures/tileset.png delete mode 100755 extra/textures/wall.jpg delete mode 100755 extra/textures/wood.jpg delete mode 100755 extra/textures/wood.jpg.001.jpg delete mode 100755 licences/SFML-LICENSE.md delete mode 100755 licences/clip-LICENSE.txt delete mode 100755 licences/stb-LICENSE delete mode 100755 src/ogfx/BitmapFont.cpp delete mode 100755 src/ogfx/BitmapFont.hpp delete mode 100755 src/ogfx/BlendRenderer.cpp delete mode 100755 src/ogfx/BlendRenderer.hpp delete mode 100755 src/ogfx/Camera.cpp delete mode 100755 src/ogfx/Camera.hpp delete mode 100755 src/ogfx/DataStructures.hpp delete mode 100644 src/ogfx/DebugTools.cpp delete mode 100644 src/ogfx/DebugTools.hpp delete mode 100755 src/ogfx/Errors.cpp delete mode 100755 src/ogfx/Errors.hpp delete mode 100755 src/ogfx/GLBuffers.cpp delete mode 100755 src/ogfx/GLBuffers.hpp delete mode 100644 src/ogfx/GraphicsApplication.cpp delete mode 100644 src/ogfx/GraphicsApplication.hpp delete mode 100644 src/ogfx/Mesh.cpp delete mode 100755 src/ogfx/Mesh.hpp delete mode 100755 src/ogfx/OX3DLoader.cpp delete mode 100755 src/ogfx/OX3DLoader.hpp delete mode 100755 src/ogfx/RTData.cpp delete mode 100755 src/ogfx/RTData.hpp delete mode 100755 src/ogfx/RenderCommands.cpp delete mode 100755 src/ogfx/RenderCommands.hpp delete mode 100755 src/ogfx/RenderCore.cpp delete mode 100755 src/ogfx/RenderCore.hpp delete mode 100755 src/ogfx/RenderTarget.cpp delete mode 100755 src/ogfx/RenderTarget.hpp delete mode 100755 src/ogfx/Renderer2D.cpp delete mode 100755 src/ogfx/Renderer2D.hpp delete mode 100755 src/ogfx/ResourceManager.cpp delete mode 100755 src/ogfx/ResourceManager.hpp delete mode 100755 src/ogfx/Shader.cpp delete mode 100755 src/ogfx/Shader.hpp delete mode 100755 src/ogfx/Texture.cpp delete mode 100755 src/ogfx/Texture.hpp delete mode 100644 src/ogfx/Widgets.cpp delete mode 100644 src/ogfx/Widgets.hpp delete mode 100755 src/ogfx/Window.cpp delete mode 100755 src/ogfx/Window.hpp delete mode 100644 src/ogfx/static_resources/BasicShadowTexture.hpp delete mode 100644 src/ogfx/static_resources/StateGradient.hpp delete mode 100644 src/ogfx/static_resources/default_bitmap_font.hpp delete mode 100755 src/ogfx/static_resources/default_icon_64.hpp delete mode 100755 src/ogfx/static_resources/default_light_texture.hpp delete mode 100755 src/ogfx/static_resources/default_shaders.hpp create mode 100644 src/ostd/Console.hpp delete mode 100755 src/ostd/DataFile.cpp delete mode 100755 src/ostd/DataFile.hpp create mode 100644 src/ostd/IOHandlers.hpp create mode 100644 src/ostd/String.hpp rename src/{ => ostd}/vendor/FastNoiseLite.hpp (100%) mode change 100755 => 100644 rename src/{ => ostd}/vendor/TermColor.hpp (96%) mode change 100755 => 100644 delete mode 100644 src/test/TestApp2D.cpp delete mode 100644 src/test/TestApp2D.hpp delete mode 100644 src/test/TestApp3D.cpp delete mode 100644 src/test/TestApp3D.hpp delete mode 100644 src/test/TetrisApp.cpp delete mode 100644 src/test/TetrisApp.hpp delete mode 100755 src/test/main.cpp delete mode 100755 src/vendor/GLAD/KHR/khrplatform.h delete mode 100755 src/vendor/GLAD/glad.c delete mode 100755 src/vendor/GLAD/glad/glad.h delete mode 100755 src/vendor/glm/common.hpp delete mode 100755 src/vendor/glm/detail/_features.hpp delete mode 100755 src/vendor/glm/detail/_fixes.hpp delete mode 100755 src/vendor/glm/detail/_noise.hpp delete mode 100755 src/vendor/glm/detail/_swizzle.hpp delete mode 100755 src/vendor/glm/detail/_swizzle_func.hpp delete mode 100755 src/vendor/glm/detail/_vectorize.hpp delete mode 100755 src/vendor/glm/detail/compute_common.hpp delete mode 100755 src/vendor/glm/detail/compute_vector_relational.hpp delete mode 100755 src/vendor/glm/detail/func_common.inl delete mode 100755 src/vendor/glm/detail/func_common_simd.inl delete mode 100755 src/vendor/glm/detail/func_exponential.inl delete mode 100755 src/vendor/glm/detail/func_exponential_simd.inl delete mode 100755 src/vendor/glm/detail/func_geometric.inl delete mode 100755 src/vendor/glm/detail/func_geometric_simd.inl delete mode 100755 src/vendor/glm/detail/func_integer.inl delete mode 100755 src/vendor/glm/detail/func_integer_simd.inl delete mode 100755 src/vendor/glm/detail/func_matrix.inl delete mode 100755 src/vendor/glm/detail/func_matrix_simd.inl delete mode 100755 src/vendor/glm/detail/func_packing.inl delete mode 100755 src/vendor/glm/detail/func_packing_simd.inl delete mode 100755 src/vendor/glm/detail/func_trigonometric.inl delete mode 100755 src/vendor/glm/detail/func_trigonometric_simd.inl delete mode 100755 src/vendor/glm/detail/func_vector_relational.inl delete mode 100755 src/vendor/glm/detail/func_vector_relational_simd.inl delete mode 100755 src/vendor/glm/detail/glm.cpp delete mode 100755 src/vendor/glm/detail/qualifier.hpp delete mode 100755 src/vendor/glm/detail/setup.hpp delete mode 100755 src/vendor/glm/detail/type_float.hpp delete mode 100755 src/vendor/glm/detail/type_half.hpp delete mode 100755 src/vendor/glm/detail/type_half.inl delete mode 100755 src/vendor/glm/detail/type_mat2x2.hpp delete mode 100755 src/vendor/glm/detail/type_mat2x2.inl delete mode 100755 src/vendor/glm/detail/type_mat2x3.hpp delete mode 100755 src/vendor/glm/detail/type_mat2x3.inl delete mode 100755 src/vendor/glm/detail/type_mat2x4.hpp delete mode 100755 src/vendor/glm/detail/type_mat2x4.inl delete mode 100755 src/vendor/glm/detail/type_mat3x2.hpp delete mode 100755 src/vendor/glm/detail/type_mat3x2.inl delete mode 100755 src/vendor/glm/detail/type_mat3x3.hpp delete mode 100755 src/vendor/glm/detail/type_mat3x3.inl delete mode 100755 src/vendor/glm/detail/type_mat3x4.hpp delete mode 100755 src/vendor/glm/detail/type_mat3x4.inl delete mode 100755 src/vendor/glm/detail/type_mat4x2.hpp delete mode 100755 src/vendor/glm/detail/type_mat4x2.inl delete mode 100755 src/vendor/glm/detail/type_mat4x3.hpp delete mode 100755 src/vendor/glm/detail/type_mat4x3.inl delete mode 100755 src/vendor/glm/detail/type_mat4x4.hpp delete mode 100755 src/vendor/glm/detail/type_mat4x4.inl delete mode 100755 src/vendor/glm/detail/type_mat4x4_simd.inl delete mode 100755 src/vendor/glm/detail/type_quat.hpp delete mode 100755 src/vendor/glm/detail/type_quat.inl delete mode 100755 src/vendor/glm/detail/type_quat_simd.inl delete mode 100755 src/vendor/glm/detail/type_vec1.hpp delete mode 100755 src/vendor/glm/detail/type_vec1.inl delete mode 100755 src/vendor/glm/detail/type_vec2.hpp delete mode 100755 src/vendor/glm/detail/type_vec2.inl delete mode 100755 src/vendor/glm/detail/type_vec3.hpp delete mode 100755 src/vendor/glm/detail/type_vec3.inl delete mode 100755 src/vendor/glm/detail/type_vec4.hpp delete mode 100755 src/vendor/glm/detail/type_vec4.inl delete mode 100755 src/vendor/glm/detail/type_vec4_simd.inl delete mode 100755 src/vendor/glm/exponential.hpp delete mode 100755 src/vendor/glm/ext.hpp delete mode 100755 src/vendor/glm/ext/matrix_clip_space.hpp delete mode 100755 src/vendor/glm/ext/matrix_clip_space.inl delete mode 100755 src/vendor/glm/ext/matrix_common.hpp delete mode 100755 src/vendor/glm/ext/matrix_common.inl delete mode 100755 src/vendor/glm/ext/matrix_double2x2.hpp delete mode 100755 src/vendor/glm/ext/matrix_double2x2_precision.hpp delete mode 100755 src/vendor/glm/ext/matrix_double2x3.hpp delete mode 100755 src/vendor/glm/ext/matrix_double2x3_precision.hpp delete mode 100755 src/vendor/glm/ext/matrix_double2x4.hpp delete mode 100755 src/vendor/glm/ext/matrix_double2x4_precision.hpp delete mode 100755 src/vendor/glm/ext/matrix_double3x2.hpp delete mode 100755 src/vendor/glm/ext/matrix_double3x2_precision.hpp delete mode 100755 src/vendor/glm/ext/matrix_double3x3.hpp delete mode 100755 src/vendor/glm/ext/matrix_double3x3_precision.hpp delete mode 100755 src/vendor/glm/ext/matrix_double3x4.hpp delete mode 100755 src/vendor/glm/ext/matrix_double3x4_precision.hpp delete mode 100755 src/vendor/glm/ext/matrix_double4x2.hpp delete mode 100755 src/vendor/glm/ext/matrix_double4x2_precision.hpp delete mode 100755 src/vendor/glm/ext/matrix_double4x3.hpp delete mode 100755 src/vendor/glm/ext/matrix_double4x3_precision.hpp delete mode 100755 src/vendor/glm/ext/matrix_double4x4.hpp delete mode 100755 src/vendor/glm/ext/matrix_double4x4_precision.hpp delete mode 100755 src/vendor/glm/ext/matrix_float2x2.hpp delete mode 100755 src/vendor/glm/ext/matrix_float2x2_precision.hpp delete mode 100755 src/vendor/glm/ext/matrix_float2x3.hpp delete mode 100755 src/vendor/glm/ext/matrix_float2x3_precision.hpp delete mode 100755 src/vendor/glm/ext/matrix_float2x4.hpp delete mode 100755 src/vendor/glm/ext/matrix_float2x4_precision.hpp delete mode 100755 src/vendor/glm/ext/matrix_float3x2.hpp delete mode 100755 src/vendor/glm/ext/matrix_float3x2_precision.hpp delete mode 100755 src/vendor/glm/ext/matrix_float3x3.hpp delete mode 100755 src/vendor/glm/ext/matrix_float3x3_precision.hpp delete mode 100755 src/vendor/glm/ext/matrix_float3x4.hpp delete mode 100755 src/vendor/glm/ext/matrix_float3x4_precision.hpp delete mode 100755 src/vendor/glm/ext/matrix_float4x2.hpp delete mode 100755 src/vendor/glm/ext/matrix_float4x2_precision.hpp delete mode 100755 src/vendor/glm/ext/matrix_float4x3.hpp delete mode 100755 src/vendor/glm/ext/matrix_float4x3_precision.hpp delete mode 100755 src/vendor/glm/ext/matrix_float4x4.hpp delete mode 100755 src/vendor/glm/ext/matrix_float4x4_precision.hpp delete mode 100755 src/vendor/glm/ext/matrix_int2x2.hpp delete mode 100755 src/vendor/glm/ext/matrix_int2x2_sized.hpp delete mode 100755 src/vendor/glm/ext/matrix_int2x3.hpp delete mode 100755 src/vendor/glm/ext/matrix_int2x3_sized.hpp delete mode 100755 src/vendor/glm/ext/matrix_int2x4.hpp delete mode 100755 src/vendor/glm/ext/matrix_int2x4_sized.hpp delete mode 100755 src/vendor/glm/ext/matrix_int3x2.hpp delete mode 100755 src/vendor/glm/ext/matrix_int3x2_sized.hpp delete mode 100755 src/vendor/glm/ext/matrix_int3x3.hpp delete mode 100755 src/vendor/glm/ext/matrix_int3x3_sized.hpp delete mode 100755 src/vendor/glm/ext/matrix_int3x4.hpp delete mode 100755 src/vendor/glm/ext/matrix_int3x4_sized.hpp delete mode 100755 src/vendor/glm/ext/matrix_int4x2.hpp delete mode 100755 src/vendor/glm/ext/matrix_int4x2_sized.hpp delete mode 100755 src/vendor/glm/ext/matrix_int4x3.hpp delete mode 100755 src/vendor/glm/ext/matrix_int4x3_sized.hpp delete mode 100755 src/vendor/glm/ext/matrix_int4x4.hpp delete mode 100755 src/vendor/glm/ext/matrix_int4x4_sized.hpp delete mode 100755 src/vendor/glm/ext/matrix_integer.hpp delete mode 100755 src/vendor/glm/ext/matrix_integer.inl delete mode 100755 src/vendor/glm/ext/matrix_projection.hpp delete mode 100755 src/vendor/glm/ext/matrix_projection.inl delete mode 100755 src/vendor/glm/ext/matrix_relational.hpp delete mode 100755 src/vendor/glm/ext/matrix_relational.inl delete mode 100755 src/vendor/glm/ext/matrix_transform.hpp delete mode 100755 src/vendor/glm/ext/matrix_transform.inl delete mode 100755 src/vendor/glm/ext/matrix_uint2x2.hpp delete mode 100755 src/vendor/glm/ext/matrix_uint2x2_sized.hpp delete mode 100755 src/vendor/glm/ext/matrix_uint2x3.hpp delete mode 100755 src/vendor/glm/ext/matrix_uint2x3_sized.hpp delete mode 100755 src/vendor/glm/ext/matrix_uint2x4.hpp delete mode 100755 src/vendor/glm/ext/matrix_uint2x4_sized.hpp delete mode 100755 src/vendor/glm/ext/matrix_uint3x2.hpp delete mode 100755 src/vendor/glm/ext/matrix_uint3x2_sized.hpp delete mode 100755 src/vendor/glm/ext/matrix_uint3x3.hpp delete mode 100755 src/vendor/glm/ext/matrix_uint3x3_sized.hpp delete mode 100755 src/vendor/glm/ext/matrix_uint3x4.hpp delete mode 100755 src/vendor/glm/ext/matrix_uint3x4_sized.hpp delete mode 100755 src/vendor/glm/ext/matrix_uint4x2.hpp delete mode 100755 src/vendor/glm/ext/matrix_uint4x2_sized.hpp delete mode 100755 src/vendor/glm/ext/matrix_uint4x3.hpp delete mode 100755 src/vendor/glm/ext/matrix_uint4x3_sized.hpp delete mode 100755 src/vendor/glm/ext/matrix_uint4x4.hpp delete mode 100755 src/vendor/glm/ext/matrix_uint4x4_sized.hpp delete mode 100755 src/vendor/glm/ext/quaternion_common.hpp delete mode 100755 src/vendor/glm/ext/quaternion_common.inl delete mode 100755 src/vendor/glm/ext/quaternion_common_simd.inl delete mode 100755 src/vendor/glm/ext/quaternion_double.hpp delete mode 100755 src/vendor/glm/ext/quaternion_double_precision.hpp delete mode 100755 src/vendor/glm/ext/quaternion_exponential.hpp delete mode 100755 src/vendor/glm/ext/quaternion_exponential.inl delete mode 100755 src/vendor/glm/ext/quaternion_float.hpp delete mode 100755 src/vendor/glm/ext/quaternion_float_precision.hpp delete mode 100755 src/vendor/glm/ext/quaternion_geometric.hpp delete mode 100755 src/vendor/glm/ext/quaternion_geometric.inl delete mode 100755 src/vendor/glm/ext/quaternion_relational.hpp delete mode 100755 src/vendor/glm/ext/quaternion_relational.inl delete mode 100755 src/vendor/glm/ext/quaternion_transform.hpp delete mode 100755 src/vendor/glm/ext/quaternion_transform.inl delete mode 100755 src/vendor/glm/ext/quaternion_trigonometric.hpp delete mode 100755 src/vendor/glm/ext/quaternion_trigonometric.inl delete mode 100755 src/vendor/glm/ext/scalar_common.hpp delete mode 100755 src/vendor/glm/ext/scalar_common.inl delete mode 100755 src/vendor/glm/ext/scalar_constants.hpp delete mode 100755 src/vendor/glm/ext/scalar_constants.inl delete mode 100755 src/vendor/glm/ext/scalar_int_sized.hpp delete mode 100755 src/vendor/glm/ext/scalar_integer.hpp delete mode 100755 src/vendor/glm/ext/scalar_integer.inl delete mode 100755 src/vendor/glm/ext/scalar_packing.hpp delete mode 100755 src/vendor/glm/ext/scalar_packing.inl delete mode 100755 src/vendor/glm/ext/scalar_reciprocal.hpp delete mode 100755 src/vendor/glm/ext/scalar_reciprocal.inl delete mode 100755 src/vendor/glm/ext/scalar_relational.hpp delete mode 100755 src/vendor/glm/ext/scalar_relational.inl delete mode 100755 src/vendor/glm/ext/scalar_uint_sized.hpp delete mode 100755 src/vendor/glm/ext/scalar_ulp.hpp delete mode 100755 src/vendor/glm/ext/scalar_ulp.inl delete mode 100755 src/vendor/glm/ext/vector_bool1.hpp delete mode 100755 src/vendor/glm/ext/vector_bool1_precision.hpp delete mode 100755 src/vendor/glm/ext/vector_bool2.hpp delete mode 100755 src/vendor/glm/ext/vector_bool2_precision.hpp delete mode 100755 src/vendor/glm/ext/vector_bool3.hpp delete mode 100755 src/vendor/glm/ext/vector_bool3_precision.hpp delete mode 100755 src/vendor/glm/ext/vector_bool4.hpp delete mode 100755 src/vendor/glm/ext/vector_bool4_precision.hpp delete mode 100755 src/vendor/glm/ext/vector_common.hpp delete mode 100755 src/vendor/glm/ext/vector_common.inl delete mode 100755 src/vendor/glm/ext/vector_double1.hpp delete mode 100755 src/vendor/glm/ext/vector_double1_precision.hpp delete mode 100755 src/vendor/glm/ext/vector_double2.hpp delete mode 100755 src/vendor/glm/ext/vector_double2_precision.hpp delete mode 100755 src/vendor/glm/ext/vector_double3.hpp delete mode 100755 src/vendor/glm/ext/vector_double3_precision.hpp delete mode 100755 src/vendor/glm/ext/vector_double4.hpp delete mode 100755 src/vendor/glm/ext/vector_double4_precision.hpp delete mode 100755 src/vendor/glm/ext/vector_float1.hpp delete mode 100755 src/vendor/glm/ext/vector_float1_precision.hpp delete mode 100755 src/vendor/glm/ext/vector_float2.hpp delete mode 100755 src/vendor/glm/ext/vector_float2_precision.hpp delete mode 100755 src/vendor/glm/ext/vector_float3.hpp delete mode 100755 src/vendor/glm/ext/vector_float3_precision.hpp delete mode 100755 src/vendor/glm/ext/vector_float4.hpp delete mode 100755 src/vendor/glm/ext/vector_float4_precision.hpp delete mode 100755 src/vendor/glm/ext/vector_int1.hpp delete mode 100755 src/vendor/glm/ext/vector_int1_sized.hpp delete mode 100755 src/vendor/glm/ext/vector_int2.hpp delete mode 100755 src/vendor/glm/ext/vector_int2_sized.hpp delete mode 100755 src/vendor/glm/ext/vector_int3.hpp delete mode 100755 src/vendor/glm/ext/vector_int3_sized.hpp delete mode 100755 src/vendor/glm/ext/vector_int4.hpp delete mode 100755 src/vendor/glm/ext/vector_int4_sized.hpp delete mode 100755 src/vendor/glm/ext/vector_integer.hpp delete mode 100755 src/vendor/glm/ext/vector_integer.inl delete mode 100755 src/vendor/glm/ext/vector_packing.hpp delete mode 100755 src/vendor/glm/ext/vector_packing.inl delete mode 100755 src/vendor/glm/ext/vector_reciprocal.hpp delete mode 100755 src/vendor/glm/ext/vector_reciprocal.inl delete mode 100755 src/vendor/glm/ext/vector_relational.hpp delete mode 100755 src/vendor/glm/ext/vector_relational.inl delete mode 100755 src/vendor/glm/ext/vector_uint1.hpp delete mode 100755 src/vendor/glm/ext/vector_uint1_sized.hpp delete mode 100755 src/vendor/glm/ext/vector_uint2.hpp delete mode 100755 src/vendor/glm/ext/vector_uint2_sized.hpp delete mode 100755 src/vendor/glm/ext/vector_uint3.hpp delete mode 100755 src/vendor/glm/ext/vector_uint3_sized.hpp delete mode 100755 src/vendor/glm/ext/vector_uint4.hpp delete mode 100755 src/vendor/glm/ext/vector_uint4_sized.hpp delete mode 100755 src/vendor/glm/ext/vector_ulp.hpp delete mode 100755 src/vendor/glm/ext/vector_ulp.inl delete mode 100755 src/vendor/glm/fwd.hpp delete mode 100755 src/vendor/glm/geometric.hpp delete mode 100755 src/vendor/glm/glm.hpp delete mode 100755 src/vendor/glm/gtc/bitfield.hpp delete mode 100755 src/vendor/glm/gtc/bitfield.inl delete mode 100755 src/vendor/glm/gtc/color_space.hpp delete mode 100755 src/vendor/glm/gtc/color_space.inl delete mode 100755 src/vendor/glm/gtc/constants.hpp delete mode 100755 src/vendor/glm/gtc/constants.inl delete mode 100755 src/vendor/glm/gtc/epsilon.hpp delete mode 100755 src/vendor/glm/gtc/epsilon.inl delete mode 100755 src/vendor/glm/gtc/integer.hpp delete mode 100755 src/vendor/glm/gtc/integer.inl delete mode 100755 src/vendor/glm/gtc/matrix_access.hpp delete mode 100755 src/vendor/glm/gtc/matrix_access.inl delete mode 100755 src/vendor/glm/gtc/matrix_integer.hpp delete mode 100755 src/vendor/glm/gtc/matrix_inverse.hpp delete mode 100755 src/vendor/glm/gtc/matrix_inverse.inl delete mode 100755 src/vendor/glm/gtc/matrix_transform.hpp delete mode 100755 src/vendor/glm/gtc/matrix_transform.inl delete mode 100755 src/vendor/glm/gtc/noise.hpp delete mode 100755 src/vendor/glm/gtc/noise.inl delete mode 100755 src/vendor/glm/gtc/packing.hpp delete mode 100755 src/vendor/glm/gtc/packing.inl delete mode 100755 src/vendor/glm/gtc/quaternion.hpp delete mode 100755 src/vendor/glm/gtc/quaternion.inl delete mode 100755 src/vendor/glm/gtc/quaternion_simd.inl delete mode 100755 src/vendor/glm/gtc/random.hpp delete mode 100755 src/vendor/glm/gtc/random.inl delete mode 100755 src/vendor/glm/gtc/reciprocal.hpp delete mode 100755 src/vendor/glm/gtc/round.hpp delete mode 100755 src/vendor/glm/gtc/round.inl delete mode 100755 src/vendor/glm/gtc/type_aligned.hpp delete mode 100755 src/vendor/glm/gtc/type_precision.hpp delete mode 100755 src/vendor/glm/gtc/type_precision.inl delete mode 100755 src/vendor/glm/gtc/type_ptr.hpp delete mode 100755 src/vendor/glm/gtc/type_ptr.inl delete mode 100755 src/vendor/glm/gtc/ulp.hpp delete mode 100755 src/vendor/glm/gtc/ulp.inl delete mode 100755 src/vendor/glm/gtc/vec1.hpp delete mode 100755 src/vendor/glm/gtx/associated_min_max.hpp delete mode 100755 src/vendor/glm/gtx/associated_min_max.inl delete mode 100755 src/vendor/glm/gtx/bit.hpp delete mode 100755 src/vendor/glm/gtx/bit.inl delete mode 100755 src/vendor/glm/gtx/closest_point.hpp delete mode 100755 src/vendor/glm/gtx/closest_point.inl delete mode 100755 src/vendor/glm/gtx/color_encoding.hpp delete mode 100755 src/vendor/glm/gtx/color_encoding.inl delete mode 100755 src/vendor/glm/gtx/color_space.hpp delete mode 100755 src/vendor/glm/gtx/color_space.inl delete mode 100755 src/vendor/glm/gtx/color_space_YCoCg.hpp delete mode 100755 src/vendor/glm/gtx/color_space_YCoCg.inl delete mode 100755 src/vendor/glm/gtx/common.hpp delete mode 100755 src/vendor/glm/gtx/common.inl delete mode 100755 src/vendor/glm/gtx/compatibility.hpp delete mode 100755 src/vendor/glm/gtx/compatibility.inl delete mode 100755 src/vendor/glm/gtx/component_wise.hpp delete mode 100755 src/vendor/glm/gtx/component_wise.inl delete mode 100755 src/vendor/glm/gtx/dual_quaternion.hpp delete mode 100755 src/vendor/glm/gtx/dual_quaternion.inl delete mode 100755 src/vendor/glm/gtx/easing.hpp delete mode 100755 src/vendor/glm/gtx/easing.inl delete mode 100755 src/vendor/glm/gtx/euler_angles.hpp delete mode 100755 src/vendor/glm/gtx/euler_angles.inl delete mode 100755 src/vendor/glm/gtx/extend.hpp delete mode 100755 src/vendor/glm/gtx/extend.inl delete mode 100755 src/vendor/glm/gtx/extended_min_max.hpp delete mode 100755 src/vendor/glm/gtx/extended_min_max.inl delete mode 100755 src/vendor/glm/gtx/exterior_product.hpp delete mode 100755 src/vendor/glm/gtx/exterior_product.inl delete mode 100755 src/vendor/glm/gtx/fast_exponential.hpp delete mode 100755 src/vendor/glm/gtx/fast_exponential.inl delete mode 100755 src/vendor/glm/gtx/fast_square_root.hpp delete mode 100755 src/vendor/glm/gtx/fast_square_root.inl delete mode 100755 src/vendor/glm/gtx/fast_trigonometry.hpp delete mode 100755 src/vendor/glm/gtx/fast_trigonometry.inl delete mode 100755 src/vendor/glm/gtx/float_notmalize.inl delete mode 100755 src/vendor/glm/gtx/functions.hpp delete mode 100755 src/vendor/glm/gtx/functions.inl delete mode 100755 src/vendor/glm/gtx/gradient_paint.hpp delete mode 100755 src/vendor/glm/gtx/gradient_paint.inl delete mode 100755 src/vendor/glm/gtx/handed_coordinate_space.hpp delete mode 100755 src/vendor/glm/gtx/handed_coordinate_space.inl delete mode 100755 src/vendor/glm/gtx/hash.hpp delete mode 100755 src/vendor/glm/gtx/hash.inl delete mode 100755 src/vendor/glm/gtx/integer.hpp delete mode 100755 src/vendor/glm/gtx/integer.inl delete mode 100755 src/vendor/glm/gtx/intersect.hpp delete mode 100755 src/vendor/glm/gtx/intersect.inl delete mode 100755 src/vendor/glm/gtx/io.hpp delete mode 100755 src/vendor/glm/gtx/io.inl delete mode 100755 src/vendor/glm/gtx/log_base.hpp delete mode 100755 src/vendor/glm/gtx/log_base.inl delete mode 100755 src/vendor/glm/gtx/matrix_cross_product.hpp delete mode 100755 src/vendor/glm/gtx/matrix_cross_product.inl delete mode 100755 src/vendor/glm/gtx/matrix_decompose.hpp delete mode 100755 src/vendor/glm/gtx/matrix_decompose.inl delete mode 100755 src/vendor/glm/gtx/matrix_factorisation.hpp delete mode 100755 src/vendor/glm/gtx/matrix_factorisation.inl delete mode 100755 src/vendor/glm/gtx/matrix_interpolation.hpp delete mode 100755 src/vendor/glm/gtx/matrix_interpolation.inl delete mode 100755 src/vendor/glm/gtx/matrix_major_storage.hpp delete mode 100755 src/vendor/glm/gtx/matrix_major_storage.inl delete mode 100755 src/vendor/glm/gtx/matrix_operation.hpp delete mode 100755 src/vendor/glm/gtx/matrix_operation.inl delete mode 100755 src/vendor/glm/gtx/matrix_query.hpp delete mode 100755 src/vendor/glm/gtx/matrix_query.inl delete mode 100755 src/vendor/glm/gtx/matrix_transform_2d.hpp delete mode 100755 src/vendor/glm/gtx/matrix_transform_2d.inl delete mode 100755 src/vendor/glm/gtx/mixed_product.hpp delete mode 100755 src/vendor/glm/gtx/mixed_product.inl delete mode 100755 src/vendor/glm/gtx/norm.hpp delete mode 100755 src/vendor/glm/gtx/norm.inl delete mode 100755 src/vendor/glm/gtx/normal.hpp delete mode 100755 src/vendor/glm/gtx/normal.inl delete mode 100755 src/vendor/glm/gtx/normalize_dot.hpp delete mode 100755 src/vendor/glm/gtx/normalize_dot.inl delete mode 100755 src/vendor/glm/gtx/number_precision.hpp delete mode 100755 src/vendor/glm/gtx/number_precision.inl delete mode 100755 src/vendor/glm/gtx/optimum_pow.hpp delete mode 100755 src/vendor/glm/gtx/optimum_pow.inl delete mode 100755 src/vendor/glm/gtx/orthonormalize.hpp delete mode 100755 src/vendor/glm/gtx/orthonormalize.inl delete mode 100755 src/vendor/glm/gtx/pca.hpp delete mode 100755 src/vendor/glm/gtx/pca.inl delete mode 100755 src/vendor/glm/gtx/perpendicular.hpp delete mode 100755 src/vendor/glm/gtx/perpendicular.inl delete mode 100755 src/vendor/glm/gtx/polar_coordinates.hpp delete mode 100755 src/vendor/glm/gtx/polar_coordinates.inl delete mode 100755 src/vendor/glm/gtx/projection.hpp delete mode 100755 src/vendor/glm/gtx/projection.inl delete mode 100755 src/vendor/glm/gtx/quaternion.hpp delete mode 100755 src/vendor/glm/gtx/quaternion.inl delete mode 100755 src/vendor/glm/gtx/range.hpp delete mode 100755 src/vendor/glm/gtx/raw_data.hpp delete mode 100755 src/vendor/glm/gtx/raw_data.inl delete mode 100755 src/vendor/glm/gtx/rotate_normalized_axis.hpp delete mode 100755 src/vendor/glm/gtx/rotate_normalized_axis.inl delete mode 100755 src/vendor/glm/gtx/rotate_vector.hpp delete mode 100755 src/vendor/glm/gtx/rotate_vector.inl delete mode 100755 src/vendor/glm/gtx/scalar_multiplication.hpp delete mode 100755 src/vendor/glm/gtx/scalar_relational.hpp delete mode 100755 src/vendor/glm/gtx/scalar_relational.inl delete mode 100755 src/vendor/glm/gtx/spline.hpp delete mode 100755 src/vendor/glm/gtx/spline.inl delete mode 100755 src/vendor/glm/gtx/std_based_type.hpp delete mode 100755 src/vendor/glm/gtx/std_based_type.inl delete mode 100755 src/vendor/glm/gtx/string_cast.hpp delete mode 100755 src/vendor/glm/gtx/string_cast.inl delete mode 100755 src/vendor/glm/gtx/texture.hpp delete mode 100755 src/vendor/glm/gtx/texture.inl delete mode 100755 src/vendor/glm/gtx/transform.hpp delete mode 100755 src/vendor/glm/gtx/transform.inl delete mode 100755 src/vendor/glm/gtx/transform2.hpp delete mode 100755 src/vendor/glm/gtx/transform2.inl delete mode 100755 src/vendor/glm/gtx/type_aligned.hpp delete mode 100755 src/vendor/glm/gtx/type_aligned.inl delete mode 100755 src/vendor/glm/gtx/type_trait.hpp delete mode 100755 src/vendor/glm/gtx/type_trait.inl delete mode 100755 src/vendor/glm/gtx/vec_swizzle.hpp delete mode 100755 src/vendor/glm/gtx/vector_angle.hpp delete mode 100755 src/vendor/glm/gtx/vector_angle.inl delete mode 100755 src/vendor/glm/gtx/vector_query.hpp delete mode 100755 src/vendor/glm/gtx/vector_query.inl delete mode 100755 src/vendor/glm/gtx/wrap.hpp delete mode 100755 src/vendor/glm/gtx/wrap.inl delete mode 100755 src/vendor/glm/integer.hpp delete mode 100755 src/vendor/glm/mat2x2.hpp delete mode 100755 src/vendor/glm/mat2x3.hpp delete mode 100755 src/vendor/glm/mat2x4.hpp delete mode 100755 src/vendor/glm/mat3x2.hpp delete mode 100755 src/vendor/glm/mat3x3.hpp delete mode 100755 src/vendor/glm/mat3x4.hpp delete mode 100755 src/vendor/glm/mat4x2.hpp delete mode 100755 src/vendor/glm/mat4x3.hpp delete mode 100755 src/vendor/glm/mat4x4.hpp delete mode 100755 src/vendor/glm/matrix.hpp delete mode 100755 src/vendor/glm/packing.hpp delete mode 100755 src/vendor/glm/simd/common.h delete mode 100755 src/vendor/glm/simd/exponential.h delete mode 100755 src/vendor/glm/simd/geometric.h delete mode 100755 src/vendor/glm/simd/integer.h delete mode 100755 src/vendor/glm/simd/matrix.h delete mode 100755 src/vendor/glm/simd/neon.h delete mode 100755 src/vendor/glm/simd/packing.h delete mode 100755 src/vendor/glm/simd/platform.h delete mode 100755 src/vendor/glm/simd/trigonometric.h delete mode 100755 src/vendor/glm/simd/vector_relational.h delete mode 100755 src/vendor/glm/trigonometric.hpp delete mode 100755 src/vendor/glm/vec2.hpp delete mode 100755 src/vendor/glm/vec3.hpp delete mode 100755 src/vendor/glm/vec4.hpp delete mode 100755 src/vendor/glm/vector_relational.hpp delete mode 100755 src/vendor/stb_image/stb_image.h delete mode 100755 src/vendor/stb_image/stb_image_resize.h delete mode 100755 src/vendor/stb_image/stb_image_write.h diff --git a/.gitignore b/.gitignore index adb9ffe..7dfcbcf 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ bin Debug Build +tools/win-release-tools +win-release \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index 9e0bfb5..24eeecf 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,3 +1,12 @@ +#Variables +#----------------------------------------------------------------------------------------- +set(PROJ_NAME omnia-framework) +set(MAJOR_VER 0) +set(MINOR_VER 1) +set(OMNIA_STD_LIB ostd) +set(RUN_CONFIG O_F_DEBUG) +#----------------------------------------------------------------------------------------- + #Setup #----------------------------------------------------------------------------------------- set(CMAKE_CXX_COMPILER "clang++") @@ -9,64 +18,19 @@ set(CMAKE_CXX_STANDARD 20) file(STRINGS "./tools/build.nr" BUILD_NUMBER) #----------------------------------------------------------------------------------------- - - -#Variables -#----------------------------------------------------------------------------------------- -set(PROJ_NAME omnia-framework) -set(MAJOR_VER 0) -set(MINOR_VER 1) -set(OMNIA_STD_LIB ostd) -set(OMNIA_GFX_LIB ogfx) -set(TEST_TARGET framework-test) -set(RUN_CONFIG O_F_DEBUG) - message("** Building ${PROJ_NAME} ${MAJOR_VER}.${MINOR_VER}.${BUILD_NUMBER}") -#----------------------------------------------------------------------------------------- - - #Sources #----------------------------------------------------------------------------------------- list(APPEND INCLUDE_DIRS ${CMAKE_CURRENT_LIST_DIR}/src ${CMAKE_CURRENT_LIST_DIR}/src/ostd - ${CMAKE_CURRENT_LIST_DIR}/src/vendor - ${CMAKE_CURRENT_LIST_DIR}/src/vendor/GLAD -) -list(APPEND TEST_SOURCE_FILES - ${CMAKE_CURRENT_LIST_DIR}/src/test/main.cpp - ${CMAKE_CURRENT_LIST_DIR}/src/test/TestApp2D.cpp - ${CMAKE_CURRENT_LIST_DIR}/src/test/TestApp3D.cpp - ${CMAKE_CURRENT_LIST_DIR}/src/test/TetrisApp.cpp -) -list(APPEND OGFX_SOURCE_FILES - ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/BitmapFont.cpp - ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/BlendRenderer.cpp - ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/Errors.cpp - ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/Camera.cpp - ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/GraphicsApplication.cpp - ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/GLBuffers.cpp - ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/Mesh.cpp - ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/OX3DLoader.cpp - ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/Renderer2D.cpp - ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/RenderCommands.cpp - ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/RenderCore.cpp - ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/RenderTarget.cpp - ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/ResourceManager.cpp - ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/RTData.cpp - ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/Shader.cpp - ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/Texture.cpp - ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/Window.cpp - ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/Widgets.cpp - ${CMAKE_CURRENT_LIST_DIR}/src/ogfx/DebugTools.cpp - ${CMAKE_CURRENT_LIST_DIR}/src/vendor/GLAD/glad.c + ${CMAKE_CURRENT_LIST_DIR}/src/ostd/vendor ) list(APPEND OSTD_SOURCE_FILES ${CMAKE_CURRENT_LIST_DIR}/src/ostd/BaseObject.cpp ${CMAKE_CURRENT_LIST_DIR}/src/ostd/Color.cpp ${CMAKE_CURRENT_LIST_DIR}/src/ostd/Console.cpp - ${CMAKE_CURRENT_LIST_DIR}/src/ostd/DataFile.cpp ${CMAKE_CURRENT_LIST_DIR}/src/ostd/Errors.cpp ${CMAKE_CURRENT_LIST_DIR}/src/ostd/File.cpp ${CMAKE_CURRENT_LIST_DIR}/src/ostd/FileSystem.cpp @@ -90,32 +54,16 @@ list(APPEND OSTD_SOURCE_FILES #Targets #----------------------------------------------------------------------------------------- add_library(${OMNIA_STD_LIB} SHARED ${OSTD_SOURCE_FILES}) -add_library(${OMNIA_GFX_LIB} SHARED ${OGFX_SOURCE_FILES}) -add_executable(${TEST_TARGET} ${TEST_SOURCE_FILES}) target_compile_definitions(${OMNIA_STD_LIB} PUBLIC ${RUN_CONFIG} BUILD_NR=${BUILD_NUMBER} MAJ_V=${MAJOR_VER} MIN_V=${MINOR_VER} VERSION_STR="${MAJOR_VER}.${MINOR_VER}.${BUILD_NUMBER}") -target_compile_definitions(${OMNIA_GFX_LIB} PUBLIC ${RUN_CONFIG} BUILD_NR=${BUILD_NUMBER} MAJ_V=${MAJOR_VER} MIN_V=${MINOR_VER} VERSION_STR="${MAJOR_VER}.${MINOR_VER}.${BUILD_NUMBER}") target_include_directories(${OMNIA_STD_LIB} PUBLIC ${INCLUDE_DIRS}) -target_include_directories(${OMNIA_GFX_LIB} PUBLIC ${INCLUDE_DIRS}) -target_include_directories(${TEST_TARGET} PUBLIC ${INCLUDE_DIRS}) #TODO: Different flags for Release/Debug add_compile_options(-O3 -m32 -MMD -MP -Wall -ggdb -fsanitize=address) if (UNIX) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath='$ORIGIN'") - target_link_libraries(${OMNIA_GFX_LIB} PUBLIC X11 GL) target_link_libraries(${OMNIA_STD_LIB} PUBLIC tinfo) endif (UNIX) - -target_link_libraries(${OMNIA_GFX_LIB} PUBLIC sfml-system sfml-window sfml-graphics) -#----------------------------------------------------------------------------------------- - -#Linking Targets -#----------------------------------------------------------------------------------------- -target_link_libraries(${OMNIA_GFX_LIB} PUBLIC ${OMNIA_STD_LIB}) - -target_link_libraries(${TEST_TARGET} PUBLIC ${OMNIA_STD_LIB}) -target_link_libraries(${TEST_TARGET} PUBLIC ${OMNIA_GFX_LIB}) #----------------------------------------------------------------------------------------- #BuildNumber Target @@ -142,12 +90,11 @@ add_custom_target( #Finalize #----------------------------------------------------------------------------------------- -#TODO: Change TEST_TARGET to last lib built, for release config -add_custom_command(TARGET ${TEST_TARGET} POST_BUILD +add_custom_command(TARGET ${OMNIA_STD_LIB} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory - ${CMAKE_SOURCE_DIR}/extra/ $ + ${CMAKE_SOURCE_DIR}/extra/ $ VERBATIM ) add_custom_target(FinalMessage ALL ${CMAKE_COMMAND} -E cmake_echo_color --cyan "[100%] Built ${PROJ_NAME} ${MAJOR_VER}.${MINOR_VER}.${BUILD_NUMBER}") -add_dependencies(FinalMessage ${TEST_TARGET}) +add_dependencies(FinalMessage ${OMNIA_STD_LIB}) #----------------------------------------------------------------------------------------- diff --git a/extra/make_and_run b/extra/make_and_run index 2c0b67e..f407cc4 100755 --- a/extra/make_and_run +++ b/extra/make_and_run @@ -1,14 +1,9 @@ #!/bin/bash -printf "\n============================================[ Building Application ]============================================\n\n" -rm -r ./res +printf "\n============================================[ Building Library ]============================================\n\n" \cp -r ../extra/* ./ if [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then make elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW64_NT" ]; then mingw32-make.exe fi -if [ $? -eq 0 ]; then - printf "\n============================================[ Running Application ]============================================\n\n" - ./framework-test -fi diff --git a/extra/models/cube3.ox3d b/extra/models/cube3.ox3d deleted file mode 100644 index 38be7fcc566bb060b918219216f2bb2e1c91dfc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 949 zcmZ{jIZgvX5Jii92eT7SKx~-{z#PQ^5)z5YNV%Cg8t?UVL60?*^wiV!7mqDDBDNyp zA>wNdF9U4Kcwa))eR`@~{GHnKU)D^H&+4H^*2Agpv!h<}Y8CgXf74y=`u@>J`RW@| zwLi0Y(vxF<-|XAZ(4$`7T~GC8R&RN~jeM(zdBHoCR}b?WWJkyTSGPml)$#L7KfBT~ zp_hE!XEx7{T%TD_d`{~2N8P)d(o3G)=DX=%n#u34hr5$KU2|6};LB0(n|$aID%t1fm1kxbGU#RT!M22cG+_ccG+_S gcG+_acG+_WcG+_ecA1aa=W6vjfB$%!FBVUpKd~8scK`qY diff --git a/extra/models/monkey2.ox3d b/extra/models/monkey2.ox3d deleted file mode 100644 index 9140b7eeb88fbb00bb0638514ed89f1344874185..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114821 zcmYgY1yEI87kz|)h=?MhND86?A_hv`vq2G2L_j4JMZ#7j6%*_husc5!unUoUHUVs{7sKF|03KW3b9X3t)Gt#!^lb6z3Sd#p`l+`SZEteFn=l~Y_|f-ai%!&oF;C# zIshhzKOp>CP+Gq=YD{%uCO*D!(8C1B-pkW|KUeEF>F>SyG znLn+C>iP|ReDRp7{`()%5K(C=^zkf}zU>W7@iysOLi!$<41|b!j=~>)R^?B^Zy%J% zpX=n0{mp17Jll>@`)~_Y`+RI1h-IRErmZUo+ZG4s4|EXzquT%4Gkx(a`9JkOD>#}r z7{W0gvO$B1CuMf%s6k1aUScqmkbG-Vzu>O!`aHU7@9V{0D;K}d)KM;NT; z{-a`Hw)1nATu~p&+FD^%{&>cn2SVgy1%7#&R}l1KIAo_jWueP8AUCHOx@8tfM-Q}s zgP(r$x8v*M$a9hK-lUpoD0D$fVS+)S%cY`^PO!P+6;EB%0OJPrhijicvfc9=LSBys zq`{0i59|wNBi`}*?N;-HUt+<#-A8KsCJ+`{AHzZ?u#@32VDs@k-)TGjm?C==92)aM z;G>2LU;gNX%Lsom;cI?~fX25fCDMm#eXAb@VT4Mbl}8Lj=<102sIK3BU|-xp_1{zd zDT`u2kMc<$?*6|%JgU-nV@H2jHMoxO2i5+ZbRLMIrmza^!Z{B9HFLu!k1I@J$ncJ9KEM;Lk ztf^TpX?;J-nin?3=h`l~BQ^qNuDs0_X&qt~X%0BZ{Hd32=8X9B|M2I=#J@H1->M%9TL(53_*{)Y zvfpj4L-_XyeZbA2chmWo8K$FyyT{dcOI^0}G9ow0Y{2)H=#0!uPK#5@c;qEShb^m4`{Y0!2X{GRTMvjRiG>{q#n zb9Yr-cjhBGoZ=c8zF5AeFKpWHA^34MznGn;xFPZDPW()s^n<}&I*9uGiK>3eYb~x% z^_x=tF=gR!ZLp8v&(-`xP0sSM#Q!nzPdOL~Jx6#6e`x&pPJjANp{BVAyf~{@+T^g6(923uZW6p;DuWdK5FWZs{!VY!~JDUNhzrpFFM$ zE-h5x$p#VN+l;f*NwF*|&Qm$QugrPN7oKs(x*h9b+Ks-@(7cfCexAiVoZXfE|KH8s zxk-bTs2J{ns~hzN%|mBIKL1ZXn@9OZls|?1?T|j0nWwGfWB<>e?Iiw5#J{6?INZt# z7WiC^U$MD6Ga`H)!ry$L51bzxB=~c|Kab`oql8OrD)FC3{8R6TL-~V2LO)mQf8*oH z4w3#=q`%qLe&7`uBK+l*Dt}+L{w}Ni)oRusirV|J2-kTm+1gq8{I9K;%-c`U#nkd3 z1e0JeKT*OuUhK}2&$}qc*M_P3xZ2qWGhbVw@9kiizWf+H-yLWSY_1$%JzVQyOmi)a zyKIjwr}lvKxrdpC_Y4+x-A4I*pZPhJ2StA1%PxfDk<$aOEn>&(+Uds7f=V1pd zZsm$U`Wz@o$c=<-DUY4s@6Oz#yzobc3)|Jh9ybkdk3HV5;C&~C!{mbpSXI6rOP<_L zIe*>G?upHwHNjuzrpI4c^oPWMwz6G0Kcu{~_R9IE#po`0E4dCTPVeUv8qoOjYP-ni zN&n9Wk^kGu^!VEeG=I6z6Zx__-(hqYxJ~&VPVMK#aUrlqp2K>EUYEl{TPWwRt#N(9 z`lTVRJ>^&s)hz=2ak!#)1rKCp$_rwg@@^_+0n zdS#rz=hlQ@M(any2Z29#>})spCIg|U`#8amXR7!e)ocZVp9%46aUv4@-G&PN{G3Yv zyhd-BHR;bJ{VhB7hrFo+*!;>wmYdT&!Q@{t^4TR}F@1Pf|s`(qECUJHsBbRr%v= zV&GrX8Orf-F^#XGp~%{nzGu+94YsMM3xkIZg*CBLSvL76`j60Odie(nSLw^S7Y8mH zquFC>U$sB|{7qmz`IAHbG@$kE*JI;_zkIjK-=GwCFeHC}joMgnyHOO_@zHt>yj=giL zjVH#N;6WR6=-O;J?6lnW_xTOIp2rHReQ>XXA*K}XWw#Pzpq>6|@%%~Z=Px&|FE*y< zug`ABf-_sg!K}|J<@hAVSAqZ4sWuc6{(i!*JAOE@sdN55-va+wwGZqj{E3AB!XOrk zS}jwKpJM#gRNP=$Ee#;lpbnn=+ze8$jDn8Kmi&Ewg}xJuJz=&=-=pa<@Umw9-}%k$ z;#HP>EP&70+Y;*^b_b0EBOy5Ez~A*nviV&WKcrGRKd>2Ix!(o6568n+i{pRij})g$ zw(@BzKRUA>R)6RL3Af|nZOm@v`p}ZrhmZ4Lu;}Y2q)1bJG;S9LZO7+yD3%-<}6)-P3VM_9`3VBRXb8TR804#W%vMV$gMe={+EXIB=m zCH-DWJB%%``eQd(ZZI68bNJu&QPta%?C2nS{&2QCdX07j$JWEanjiVQe$*@~Wjz8E z?7cyI^lsJxbjOT@>8A4E^__^%4p8uFiu+Ss$8#j49*7e4xmcfx`i=X)l6O=6M^s;U>^)Fcths4rRLLV3Us!89F+rdmCeLYB@o)7K+rVaVK z{uS}KkW1`gU=zIbuM6znKO7ADpJvvo^|cru&K|UZiZ+e0+nL{NqsMTV-1h9>_4QM# zzbUGOb!JXzt!D#4Jw^d5I{kNlFUBv+`%OUiqCHOh_>$S@j)Vb=&x`dvOQ!veC$-PH z;pf@cA?7$ms||$R8Uxzni`gR8{#oRk-fw~;e*xvUvK|SikArf5Ao4}~9vpt2>kT!> zG|JzSItCQ21OM*t#rTt+YK==jnPLNX4R{z64@M*1gg)i^Sm-N1XoELNpG5kK>Bp_G&K!69Pv}`zs3GujDLe) zIAUJjH~#UGAsjbI1BFeqzxzX>uefJ9A4&SUkiNKW$uOMt_|xI_wElP?_V3E`12H~p7xV$^-k@5vJP}uXjl-(Ou$r|eWV|Zvbi$6>Avauh!-)PPjJQxfSS?5?qz!Ub5+zp4f znZSysSwgN(clFL;4=x|hwxvO*V$e*9nHWdUmjRWic9)dqt^FKSy5;qh7-$M=; zq#TF^w=Bj?#++sC0{yY)ru{7N=2f=V-WY!ubb!Zh!+^Cu&2Z}>7PzVhwtaM%?WlPq znOmD;(EgsVc>7RjxE|T7uBB{B_W+z+mdD1H6|r`%Juvd-7j~G==gu@gE%dQEDt+JX zYJwfU0-q0o z#HbL`e~72g3&c0g_p#~a&AHZ$zPNIQ9`x)o1P)z@VD-nGEjHHTb@WWgGWW_MfIHTA0+UIm&rP z;4z5KFAp7K+EX{PHPJyz{d+U=pPtk%j!aqUyl206bJTg?^^VKT+FX?&GMZ(`q_;b3^`ulzq(|@&? z)~~_J{$tX03G12>i+AQ0vR)Vq>(XM`nRy$zTHm{wG3+4eTTA*_^C3`lIfnLLlh|gt zm$LudD)+^Chip+%b*7;8l_nT%wu3{&~d?!srfbNx`cNpe&xh3{aGwbesEmWr~cVX z`Fxj^`@&kP|EpF>!ODYCQ2uPFz~^}?{Ls8=HihsT5dNZ1(eSc5j^?KsJf?Gq^7*u! z_>S4hG5B@;(}F0+K`^&(taAS)_J?A8$^YyKiL}4@hxRvVU!tLO!x*8DtM!dw9bqx) zJ4O0jzD0xGg5iJlFEkEfJFa)Y;9E8r@N)~FrZo_*?J5-Qr|ciLA064iT{Yb5baT8l z&=_+oA|Y>b(O>;0ciOWyk&AiVq-dOd?hLp2JOC`cPAL5o`ZN@MSd`^6Ub$faI({C^ zcUBC9=U!asV`_cb6W?(i()WAB(}G)JgP>>U!oTfrNcj4ZigNW1qo#^8nIyo%~+gv2!3i}h|_)#fb&kJ%I8b;|Fyvu?7{ne^6K(FIKQ4D z8m$-r4Y!~E`}~XiPsf_^Xv(i;W{A(S27uk$9)h2;{|kQh5#dbDFV!*<7Tye@{rhGv zo?n5V{eGXco$%8Lf4%1b7;M=4@AxG6H)Bua4aEOF@$a7z3He|A|BjzZ{qxJ&;@=JN za_bK0>N^n5xBUP7BmBEjVF{`EO)#mc2Aa4If-4U$DaS`K{)_gz)=?Ak=l8&C6}$PT z#e<;p;S0*~brOw#f?vi4WG9`v;Q}WOod0tmoStw_Ie&=pRpg)OsEPklehB6JYYl?x z(eQWt6Z~q;FXz*V-*e(89UB0_uf3Jys~Eope*OmJ8wr08;lG{09+#mo-rk-O7^ePyMgKbf*c`lu zc15R?E&E@$dX5@}o9(L3heep!_q}qiOthQ_i1aeir#F9-Cu-RsKKM=zPIK zVns90vof1N)T!Hp4L`b@jWkNYNfl4!+0E$uWAItF_1<;%_-g>x`#zqvh&ja$ZyJpU zuhlNFpA`!YC!b}HBM-5H$su^acmnHVzhnoOXyszYoHfT|2Vq;$F;g-Z*Tq zrX&BE9t9WApAm7cj;}o3i@Q*K9L2Ai()q`zKxVn<6jz-2gYO@;igzGKFbB{Alxsh5Cg5f$-gH$3pPP0m}A`qV}ETw~-yB{hX{wL*1>8?A!Y| zSoi3}U;od}+00ha`r+Z-3Fy2ckd0mv2h{`cum2*RF(praK=CCM_wE}9bE6~w_78!- zKnmjdgujUJhis374&=Z3`4jw%Q+KmnJrmH>`mQvnblp6=Mt)i|1>-5+HY^3^#I2A8z8B#SAGA-lBm7&0|LLM8{8HhI_v0z% ziMZQaI(*&M6#X{#!m*SevLsRH<7$0ZkG0@J-we_>%}4__+bi|SLZ24t>-31r?JO?x zZlrH>ye8bGGdl90FIM>%BU#w@o5s+KywXKlQNcYZAshT+G7zt&<(r zrQ(YGI*@rN3Bp2Gu<+|TbcQe*BQ~1B-VNvEl!P8=^4S2!86?5>9D2W3X@l;DLvTdv zv+TH*7tZTd7w6{a!vN<52wNV@!k(Gn?tKZkIc*ucV|Sk?Mfb-675b2VJQ14edei$q z8yq`&Bo+^v#}X|Z@b`jtXnwCYIG#!nae9AegDDihG-w{5Nb&a+&!V-~;Nk?>okQ;j zRrM2FpXDd0{uHV|#qc-#?4qpC)%Dk;E#ptA{urwNJ@*&u%oBw_T=-*6{w%okgKr>z zjLDy7IX{?Yd!;`-nf!T7{vfcSq)v)!$l0lq1g@x)-JQTM%PXSGjTHL62w#;4_Lcp*D*mZU}s~X-2OXOIzx9tSO z4%WrDp?A33JOj9sngEtNwzBYTI#@M64%^Nd0rpIj`wc7MPA}?$MJ)C2=(SAKs0mtj z3d0bsU>J1A07um8%AL&X!pGrbAZ0)r&Hr{7aXk_(Vrtl#_1*Dmw`2T-OC7l0ZH%bT zMg20W-^jKTj;Hz>VRv{^$aj`8K0)Nu{QD>0G^U0ZQT}VnkJI?Y*7l$?xahT9TUEci zRxpmC`W{rjx5GCkj~)YyD|d3CKlP7(eB@q>cOv}`3qP^Vqm}x&(D#J&wVyKr8<4(0 z(iffih20&RDEc2)_rI`>W_VQ9|AtKX#+Dc*LEil3EOQ3k>si?vJ6{Q-{-BRh-?~dH zt{KA8!6T{v>|oh_>fn=G-gu#E3fMe+ETiRQ=`=F}*HiI?znNKdGsK*n7T9R{WC&ST zEnn1mBTar@9~?T40`qPeOw-x{!#;Uq$`Ml-dZs4^6`qjW)zkr(?V})EUc*x9OtM7w z#eXcqVO^X)j>&2vXJ4)h{qBs0B=e~(&!GjTtP4T~y;o}dqbD}GJb<5AUI&(1#EUrX z-~Pn)8`eW(inpM6LdTyh(mGz?^F$T?dW&$}O85zxE#$%S7uMwdXu*#Qe&NJ#>Jd{M zpyC%A`-7G293}jr`T4IuxR?CFuid4*gP+*ZVI#pxcL!JdbG~W{hO7Mf`0zb5DT{}! z88cY;tY*0T`3qj!G7O~hTDa7tB|EgMKGeD%3)aI{v!-9_(Vdh!=+$Tv_+0xXCtI7b zrPqwX{?IVUs?1_#Nk(W^D{I>ZcY8Fz`8%4z z_AfnfkAEv^;?TM{`8lRkK z{ArD+9L%8pz@AvsN~7@35(CicHA2Lx|NM!UI+&q>h&yQ%wsrr`s)I%dd@k^_2!F-z zPz)mc62kX=`JSD=GF0&6f?qE2o3W!Q<`F;W-bxyk^_9IRe&i4Tk3Z;6{;VN?=Kg-e z%C5$O`LNa8;{X1j@MjMB({|enR&#Wi=zm=Fzq~*F52L96eWCt$Z2B8^)^il>%t@qo z)D7{GTRVQy(F`j3XY)br0n0<0!s2CpU~Bi4>~fSHR_VNwzmFz}j{~lI(3n3cvV@y;b@0-B6Z|~C5zK!b1e(#CS@_ucXj#&LU)DRutR5}k zyWIxU`*JHVd>aI%`!BPqx#svVf0x{^?kRT4r8bs4^2WM3HsDaZJB@FpG`=~YbEc!b zb!ai0#ocgU8)Mx5)e`32=n8j7En=4&xnkq|dGbCN&I0o3UB$}Z{6dSyu)*3Nq_5^| z=u#i7Mw3qy+MlC#*O=wLAlRFe$p6zmc#hg9n%bwwiVF5^R3G6#pQ7^rc9A9C zApdWW{{uswu+e9Ngns@X{k#|H-%0u}UHrfvxb=YCoLj8)odGHo59QIlida$5bUw7% zVEnw#4#Ix~K;{%}2hpZ3gP^w`}_sjnAYX908X32GMZ||nKsXv{im-tZsY()Po zu~%rIbg#VvwqNtaXp0y8?w6KO@EFLy-z?147JnuVINovP9o9pa?oe9Q!O{hGU|O$> z$jATW<4#rn(C#PLK5KxiDcY#!UugV{R}uee;vdkpm~DCNEAV-Q3cvZvJ3N%|I}`pm zx3erPt+U{dYX0qB8{LR;wh6yWhr zZ}7;ZIrE~##z!((Q(qr5BG2;h6K&z%zwYFpE0iWRq5E6@ELhVF=IMIkk3rjb{0?W( zx#b3-hg-tq2s3mud?$sEGX}3vcbpq>lBdNv!O(Oskxy&$Kly>0W;loPjia~m)*lYD z9{W29{;1|}Fv3f@wd0XC5|S4_mIComu0qYr7yV1w)i{2KyK>U4veGP!tNfP5Vp+% zEuLnwcirp4uvLC|X!AP0X;T|Gt*gvOb^hv=zSy4fUs3)Qi@j{*#Wo@zBUJg7-Roi^ zkuvty;$*qU%-+3KCqvoBtZw}eyV0aA440gtX>yz8&ahRN^eH?+_|ug9N&iv9 z9+5w{$e*V3+rXwxZK3Rh6RPn~KQKTW!nY#)epyG@$m~}1{CB|r;Pdu`f0gjh-8jO| zFK7+nq2lgXd(6$LV4don;L&FB__gwm$AgK-S-=+up`ZHJAN_-;YvM-IUr72rHtu8R zy0;YiQRuHC{ZsZhU=z}Rf%LD)-_MdaI0=98KmMZH-zVpCSCdE7o(g6 zJ{S1OfAGr)%B2(O2gD*Wx9yZJ@JcP9L!KTooCxh=rDpsHi23jH?oFK$(ZeRL^`tA2BID|BmFPw4)7m;aQ{};ko@@)zg`;g(GD&y zX)f^T{=*;q)WT`}72$^y{<;3Q*j*!Q!Hj?EZ~l(8T=dZ4^!helr}SgKbr8j-mn5QTT3WTa$`^O8G2^6g5a!{ z$h4aAHBnwreY^>{n3zF$tEo)mXLrnPvr{|lCe4b4C*?;ooAj-c?`3LshV}Y?&biUG?C!2@R{?r7D?sk#h z%}K|a@28|vW-qngg&m;ck|_DX)Nh0B7G~@ zRWSPwN`JZVx0L+twy6&rLH;fze|1alu-IlzK-*ivvad2Mn`Q#Nv%+xh&RcTnFFhC# z+7JwOnn8m3KT;NraT-$<@Yu082D?chhXXc zT7Z{+$qhD4LBoYZrHv;V!hrWS!XLV0`^TTRce}{KpHlKCK%)sA!<^SNrNx~mM z_-C4ZWr`I_e6Gfycj=d8O!&@(KQ{FxI}~C==a&_7c3d!x@lTo7DO=WO;ACVKAyUe} zpIGBTwnD$G*8kM8H;f|vFG&At_KlfYD)n=rKZ*2jb+Uy*(%+i&XDoQdoE}&RfBAp> zg%v7)zrT6K_SZClx+RuU)+sNv-tmO>Ep3ARTm$$gA3r#EyEYVbGFP5oR=Ii6{kHpT zQe&GA;T`AklUv5Y$<4K(QK~s?oZnWOU#C0X{C1b=q<`ag!&~9XH}%2GULSIpjWU01 zfIrT!b%pK{DHLrdbw$O~W{^9x7RlVJ#l7l) z&w=J}JgGub`(t^^mWPl(HFrWJyWjPo|5;m+FN^%%lt0Z{k4>Ze#A_p@=C(B~b9{4U z{UJ*OQTlp_Y0c|;Xv(Y%v^H`@oKcEMzZE#G}s641UA62`urTIb)C;D|sAl9JIF zdvX$Anq>lgTQvu*qG7DGeju&ybig-$4%6B*2KOdT=2rEZz_BKFBF;tJ;!m85_+g44 zUQ@|#2iuDJG=Bc6e>Y?y7xi!M$l%>x{>v)T>_vSp>OZCWlg2LN%cy=gsvoxGIkTH% zC;XxL`Hw&ABGz)@&wTO+r&qIDOz96#Rr%9v*nD1x{Mk?bobr6n{72bCa>Wwnxxp8$ zb-%N3)}btMPa=-6n$Np$XbNZCTR_QWx>r<9{*~8(&#{f!n}x}E@JlwIZfObaHrhca z=Y=eEQ~*}>Hh^yip)B4k2~V}2!zY$Bg;j5D!P9vm52yH(KXE>q;uk2MVs)RL*S8h; zT#bJ>wlNp@M+yIKpWAHr7F)rOyQ}zJwhraviC-_`XX|vIr4F*E_2m;fzwkzj9pBjG z*HzLS|0JY&gg@P83-di%(%SMQOMVHcVf~I-8NQdkFG$1PuEY5IM%K{oZA}l4lWrGvfcQ^a8W4Pwkg~lBcNn*D`!BeZelu ztO{KoPxXQ7C!M^_T0XL;^Rq^fvaSufXP#iJnIT)AlYkxjZsUtDw}iXCZ9ucIHdw87 z$CCI;mVNh)^l-~4T>gS{U(XhB$k>tA_S&FXF7|*|+0=ji*w#6TIJsXozo%^veX5-x zSKkt{XV7_n$pz+l{Ihg2cO*uboZ=l59boLs)*_Bss`$Nv&vG%vy(vB*5!sfNPM|2P zjq3W1D&EKyRDT`SPw+g$9Yy=n`-MO4ySHseo=EK*MD05rF0qZYf3R3d7{kT)AKTcqpDWpowt!p< zRK?qT@6X#)d<(@Fh974+51a)*RP(#=b0ru2-V(o>Eyvi7_HDuHixmofZh!dk(Zp{p z@f+6(*#S!zP!zR)|&7-()o6AJ74;zqtZ^TL{^e_H@6wGg~?EDeE&c3cJk+SYD4d5y0IJG zK5>2G_tI)2UsQOUEm_h@@I!YMzq^{nT=4rz{J@p7^gDEqFW;8VFaG#nFDjc0|L2qc z@LFbD{Mtddi2*F`V^80&Es$~w=zHR_-q1c*vA4kqR`r1KqAcNc+=1}sY8U7os z$&7A&U^B&oj2_dWEx*xac$0bFV}91SijfN7&)tiCm%8g16?23WB-x#UB zJ<8a?SHYN6eTz>{Xa<`{E8|=p_w*>^!zdm@@ttcgvZdF(1wXFlSK_>%pCo=KiC@Fw zTg>uMXUNp5hG8uc&Nr1puS_F1WYj;&rL(fjRz ztnYQ8_MaoQD%WJ!^(W(|_)qfV3C6%W0R%*6vNtInIMqP6aHHK^c6Vh0epxh{+r*fH z_roqwld+VAcJ)L|Y9T!-1@^p2Dq7?x@x~RVFmshRT#5n~o$P}(EsuJ3>*~P*VkV){ z_das2mVk_O0?MLVDf7;Kl+aex9?Kg$m zFE8j08P#L^|L?R8lED{EyUU zTxZPada9657$Z-j_2G~HtGw=|>%(Wyt^!|ft-^mZHcArs8MZoJ*YE#g4-F-eFNdn~ z*H0KDiTvOFR(UMYnHm6!k zT}a=Um$CA(Ywy__4GH$7X>c|F0S8LFtciac;@_tHE2~=Q4Q`o+^o^B2=8nu~uTI7@ z?Vl;Q;F}-sc)W3@J0+@HYbz$LVI$Ni|Wy$`y zb>Twg{={W=8aCTGop0_+`-9jv%D6>I7up|(DdTk`C*YIPVce%}E$F+U0|Z~6BZUv4 zdvm=am}TZ!uSOb^aMY1*eB`UzuZ8vi~^S#e#^tR#{Z#U#omE>ke-r9S_4zAi2L zTm^qQLB+qDWr4hy_y-Yx&ol*iw{{Wu@_+CP8xsC3!oQuQfZlX=N&4hal|I<`zR;QU z8IrygR^Ql`fo(;7SzUimY@#IU>r(ySjlVIMQ#8NP-$yNP9B|NxWgkC#C{`yOw^#p? z`&iTdjJ|V9G&iAdAbjw?n+{vJrb_;8Jq1^~o|CuR*8};H2ke}`Tn|T?+U`sa<=P4BbhR!Ub z_6_MC#ivpHnZZ})^r(}l&qe(zs-Lu`N)q*5sD5F+&#dV`%KEap{yqD3UM;EqXsX{& zPXSLpxWNOr6;f$Z8!USlgN-wHO2-@ZLkB$_47{uZ+Y`sYrn7O9=GIndIb;MruvsEi zuWgT0rn+KDqz)_}n*duKZb}*tTVa*|Fx1p*$POO$#EB*j$oJ@iKi&Uu&TJ|@UFA&g zZwF(IyQX9|It-tzuY*zdYr(HWbbo>VG&Z$DZR?RJ{y#9H9WLF`3DfERj&XK^s4uJQ zqs;Iz+;>eU#=qjJ%oSXLsQlu{5l)z;JzzbFzWCap-)!p%UHBiK1TZ5 zkiMG_G$Ac%jNmV;`M=g}$oCNc>BN7FrY5AfO`!LmKP7j=_O!pC4~!a*WC^uKqS^3V zzQREdCR)aW)yf8}Y$JXDw=NFdcBQa#yB;{I%m^RRd1=JyF);rhC+5YR(ChaAyuWQ5 z>;5PL{flq%r6IK;wJycuu1box^nK*Sfv7v(mNo1ZgI;f{c*J^Lxb#7Z&(-)3cBSy^ zgda-yD|IyBYq2t4)};JA%6~A;mYY((E9I9PYr@Nq@q)kXsp9X_cqC6E{>H>VdA0_e zwu%@0xQB|L{`PI$i}(#9ey0X0pijLqU~^KN^*Zi~mml>&)914oJCcYi8V%w{qV!5lNgsrg&|i z#avTE0UjSl3w}J9_+2G_Z=TKKe#CD&@iXkL0Vf_R`SJP0&w%)SbU4igKTF~_adi!w zuxAwAAL>izlP>=Zd@MJK*iD#jO9^QTQ;anY=n#A6x>5i+uS%`CQ}&QvSrQ8gQ2Ki9atP{+7f) z^U+EEo%q)f|L~k&>?83fe6GglTZ{Q1!Y?QMCli0O-o1tk{<50?K`TEVN&JIu>dDMn z1C|qi($CfU_gj_n+oXRG>EE>TC#xPCE&Szbe{Y7^;63tJSL=ZEu;4T6nH~cTmU*$d zm)oP}TMt~?r-b>qkHnTWw`JZ;AB={NgiFKTN^=*xqh4@FwAviSE?7)Jqw{O!>E3!^ zoG?P5Z65hF$alhyq%?qfLDqyG2BO^*lVX+VoV`0^aW*C%|B z%~4$7Z#=hFew3gAbrVNGc4S-0^d8`zl{@(E)LP73Z!9W?&g3)fbzw&Beh_~7ko04@ zgxXROul+58wQV{Pe-@uBoa9>@?pM+`^p6UphI<%(Zn=&ZuGq(REFOwmde7mhH)}(& zWrTA4(^Sy+Wtq9Wom)(YPK(m8Jb5}la#tIwBKy&qtCN)fhM}F^DSjzuk)+cx1KBcD zx%USh==41D&-iH#7-mw;=M=fQw!e{qmR%aiOYdkyKHBSozK?my+ja3{@wSuDW2IF1yj&0N+#V$I>Gu~Hx>LUC zleuySResG+O(@tf=udrx_k0J$sS$N&ia5zq>FYJ><`%5D<>A%W#_2CSB zVBJMNP4m;G)qmo-Idp!X)B?r)m7PoRiXd6sZ*|mA;>(^Y{EV_W@(9A8O8DbUv>=D@ ziJxq);^($!ku3OG#q^YyT4;f#%`h0`6D56JyQ)_4=>2T#Of5e2i3QIHC!1lP4cAmnWW_B+-CyX1`p>VzWK}uu3BM3DAMH~({!MpLK&CWtK!3&Y?Koy&Nb3y*EU*EMseaN3x2PO z-~E{xvKH~1a~ya;FD+O`{KWi8?_jWF<`6!|CJb!-^l*AwE#BpK9Vi;o2U6?YlN^Wp z;>EMm_>c}gU{~f|KG9JVH#zCUl=8lCYWGWte##8JB4_dX+N~hLtSwH@U(Ou|*MZIJ zLh1bA1I^D}(fwj9$5j(y|Do3WQsOf?IbWZCzn~AyuDmUs_32K(kCV=S@9hk)?(gH> zP8eXV=-P1FwJ)s?wo94{f2?#{z;9^%V!v*EeQW5<0)OR)~hV8 zZL0vyWN`=00_{HPfpfPokuR(BpKAT$8n-|4NXlR9Pxp%>LWMqA=(|k%qC51!Qqq@3 z`j}-6+j6e2z?aqdKbt8~gYb_K{)1u#-0u=5_{(bk-}ZLKAH=^W@n1cF)^Bb53jOkb z^kX*Z&mjF141P1;CViCizuNz$Hepzo{Ldl(pJx1EHwN|*{>o~9ZM9qBK$X9Ta(~jd zxuIhGlK(S)@r^WoU8eEtEY`3OW)aZI@Ra0vzYA85H|I`t=Vs>K+j5sfZV**L{?hlv z7A0?_(ik6H{ErtuYU}}e)9rEcxfpijY#oSt98CTHgtRBehsHlsZdGd@Gk-FYzMoye zKCRY=p%Z%1`<)WHU+#|&+|2o+>#bqQbp@B~-Qh&n+OVu+FjTs|kg|6BV&yF_z9J_H zHr?DWkNCWWx$UI<&LJ?r@-6j`9&~>vntvFX3USkB^H)a=d45rCX!f)>tg3uV{{4x+ z9+`^q6d#mt$anpyVVx^`3w(Kz3V&%%5~dOU48p(O@i((%A%Y*>PyfSj&h^%~iuiRQ zen-<4^gcQme%Cycb4PZk=hKV7S~iA$+ocyjF=7pi*Hplov=HH+toARgWgE;R|18MA zsgG*d%Oy(xWZ~a@@^8H{trN(<3*_I@&p+7Ed%=)i`NB*8a2K5WxjtXpWDQ@@v@ve_ zz+g(I4ovUTi{5`mOD!wBarz1ke$l{7ew#H8o9549Qv&tCq_C%Qd@vj6jR(tg__9G8 zI~@CGJT53rVUxaVLwrt88vpGiE7JGKtpRVBvz}Y$ui<&`hr%L5UAQO(L6Av?w0d+G z{M^4Tx68F-!}L$`^qwQYGe8ekOz8zX95SVn%XA0kVqJbw>ck>`8uPMd6JTyPJvcHl zNW^7ze1z1A&!PBvif_))fCgiNM17^dqP|(qde(&M@2C20j%dQ!&dU1oN>%+nxpw?I z)gMgtH)qoOr}SRJpF#tbKZ~2JVN=PU1LV&eKl+x{Pw9`W_UBCYq}rdAud{&lS`^JC6U&nx*to`lqSz#Ut^KJgKnb5ow7f;x~WTaZMY# zp6>;o*B!m4-1SAduN`kaxgj=sS;74uxj>64wcyItKl!f@cg7)aY3rLnSGPERSbygewDeAw~2pLB8R zjjg=jHh;KMT?=xyDdUCexXCA7*hcXl6mLQMBgHCh3 z_q2iU4-@(H{QSv(us@S0Q2sN@Z}UhK40?o#`m(zI&DB%6sQ-xSH_O$8qQGz^e%|vQ z7;dsmiNC+l8yin)i8l$q{6;7|C~=fF)bzl~7qa;4^C7I=K{s^l(+WRs)Pa|iLjhi{ zqjxF+xT<_MPaA)X>BKk3=bs#L;7?tU5BG(=Pg+Pjeg@*e zbb#&XtLh)UXn#JRhsA0g+VeY>?#jI6rT4Yr=fl1NUsmJCk3Yuk3I77&zef%5I;g~# zw-J6c;VUAa$rA~`CE=HM(SlFg`ofN!h4Sv_fpq>fgKzC0&Nui6;Ot-Z@nAbm`h6&x z-%1>1wZ5n4L%1#J^CEr!Hr0YflR}mJQq1Z5}^raaqgE6;X2R^8y7XNW}1g@zmW=_L&pvoi!YHGSk8j2v)P}p+M@sH$y<$Z8L z-?~t4s|!CC2E+Xu?vml?o_KJ0V{W^5Ja6Bp0e+|cYwe&5$u&VDUsmVGjejH!p!{UY zFIuAs^|ONo|3WqYj#u;9cjDiW_&?jF1&Ikte7UX)|LLCb%$V>SZ}*3PmT7{vwvxX* zUB!P(M=kc5_-`ftm-^BA%`^mpW-pM;+=B49wjJLWRwOkF7=UM;6i{8F3tmTqVek0G z(#l@}*dwta_wL_}1sfP*IQ{mSY^DdB=r`z$b`>f070kBb9qG*WTq^^FuNE-3g!YFy z!2(}a<3o6nY(w}*34hvW4d`%8nJ+8-q5P)%jqoDn_o4h1Uls5_y1qQDr!DHgq%wqv z6iuR3G%Af}Es9Dqq>-Y`Bxx2!$vicfGGB8Pk!#l3n+z2)lOdIvgiIHqe(Tit`@Z*i ze)sJ!kNvFAu+RCPv(MgptsRj!5`+8;n)+vyzZugWx1ZIH2;irRtH5oNBL4lmNuRi0 zrq5`MA#*2vp`>rz9!31D)%5GvSwvX@v%ae{4yG&}08Fu8@l#CNp@SBh;TB!Ou-f zU}0s^@b=Akt~B%}J6EBK5tLs*?V`NhzAT!(qxLq`?(%nN&=xi^1j!5Aj)V#$TWh&S>dz9??G>R|nFudvaAN(ts zf4!^&IrRIT`^yJ!yq_nyMEUS;o-S;Jp_?!#bT02!H3F1`)gcycS6!@WIh_)2>IZ1I(ze}eq^7Z)4|3H1CsK+nIp6{`4S zgr5{I9+kzb=A?<&D1INsTiPn2(q>>)|m57L+iyBC)=Uj z9bepdLv?4XG{ZfIzVXSx*sl;Te~Ir4If_ow)XHb3BO zaZ@}yE{k{Q47`Bi6DdB{>I{Q1HX)pL6K0LYE|UtpDIA@v{ixFD3q*S1MeC_&M`L1hyctGKA;c*f5 z&)hMRel|g-fAL2PzKir%k^a2=AFwz%0L^SVKwXX_@7?k|yRqsaWM@s~tJOLPOTM&4 z!=)j#KY9>kXjs$tdl4J)yboTfaN<)`l%S=42b^?lti%uLGXBrKoN+VpA3ytBFfZ$X zQE6kOc$P)+hbZ3bc^`g*;zv__mCiTFIXqV4XLA0Ns~)ng#GlfxgW#I{3uY_~!GKFK zP!ep&;|5XA!InUDU+|NK+C;#~s!q7lk>-C=7t{V{b^g*pWFyDL;F$M%?9R+gxYnyH zs-%Tsde8Cj@<9(8^Xy^!0z&FgnyIpUBA45&GW(}eN3*;YD*w@k?AW>e-DdnLy_{|Xn$67{#)Sb z+1!`%-)>U=+uNGg;P#qoB>9I^jc;{+;L2+DXl4{zg$-wKXia(NMJ;^jA57nWiIiX4 zf#!d9v6tg#;qzb%_Q2>b_-UqvsRzeWefM$H-jVOmO=Jowv6yo*oOM3u3x9Rirq}pr ze5vjS3ZHxMSJ%>6uVIt0v8I%1wVen$VV!aQ{?Vk*1N6W5wpdoYga29y(S!h=FQ*yh;r zIOW7$=C3`S9lq5WHx>Hgs^P&oG9 zp60?fS#W9o%gHVrD;)$O;8K4cQ#+6|15JU=En=&w21ccd3LZ`mr~cm~#BS|R^YgC! ze$jb0qQyrxZM!$Grf1dOvZi=3NEY8{peY6=6|tEVpGV`%b{Wn5PU(cNXp2gjXzag_pzbMylVbMY?ApH%be_fIiJ|+F+UzGd5xh!1pCIA1B|6+Q-9$gZS zOP}u%<@z2Lod;*q7eV^+OIzTu>%^aWMNk-E#{=y~@mDd4EF>_Fr<7Q;c?(ss#eoPM ziFbt42kiN)k)GVa$)DAlMDcxjt66N0Dn3h_LGkB=Vrx5II*{7$`tf_`-?8Vz{$eJA zD(Ym;Xd2&?e6pealOy?GJxBAP)-8C-S#2=UQAHuO315`(UlaarCx4LeR}wz7Zh;RM zHsOnCo+Rk2((`e} zI3Ac2!oq*e;f*eTpRM&%!2*RyY)n}v=w@5-z)OLA-zRIHv$rExQh5pqxhiw|%zh7Xo-szqUM;?!Q-8BJpg&YnQ;* zR@~`T7_aDAC%*fg%qFG=CAwPw@73Dc5!Q_c30$km9#e z4N>ARl=BDltP?&F{{y{J;fNN^FAzWB7naKKZ~Fv8AHrWi_~%?&;x0LUZ&S(-58;y6 z+cOP#&3q4({AH!h#4R-!UFOlg_CR{Kv`HGlhSzuJE9o2yg#cw7A3GEO%5@X?T~i)p zG=}dP|BStSsKQGhIHJ{EW!&dF6O*1-xM-{};+eYx`Mmq@M5oeO{7KLOcs4{C>nZQ7kJL`e9eNcaJSKW+RoknkT9{?!T^f4Vi{7fSf) zgx|6JoiLd2mlJ;bsWg9I6+!bKzT)jlBd$~I&t3U?*l{I{zkYEZG#Zp}$N31!U!mOJ z_M{Qehx~0Le}BeM|B=5$&kW(spg!F4yFc&i)t}bYkFoOs-SNe66|{I4fmU^gg^ttA zc|`dL4%;HR;fzttrEnv3I;euGQzK~nlq;n7B>i2ehMeytsy%a#g}9|cO^^!i@}uAP z$u+{Xd&a!t&M2Pop6YmXaOCd$%3xP}6--*wq+gKq>yrLed_CJh`X7@1s-wy{iu4n{ zDB%YY{zBhLc!BT-68_gfB{cSrz*Nr+QLf+Et3S>r{Z~nUhY3n}jPw(~DCduPPvc|a z??L=Sb}8X&;wOKi%4f0pkQVI8yzuvK@g#i;R`S7it+~jIF|C7Ij z?H;^|UAwG;uh zy^TqX9XI7xYIaq>v2&0{P6Vxt=`+a?J01|{r{Kdk|mDPym8 z^!%m27aOf;fBvAR-`B!VWh^HwoDZY>yG@4~7^!0_e2+2Xhca4 z^oeqPPqqnSs~#onI_bOeObMe&Uqeb;K~c|`J0*|c36?1?ha2Mgn}w@cSeP;zxil9#XMR3bo}ZO6qd08?WS_S7(KSCl?pBz(9|xf%GxK3Wnf0_XQK7ksQpU#j@tG0jUoM^8+U5& z1pU6cuxnx>pE|xP6E>>jm>7HPzEqd;CkAmJ|4?}Stuveao7O*lu8H@Z)$w3UJ1qXx z4_a8c@yM;(Q1{)J-HJ@$`|jAV1;HIrJ<}1dM7vUrxj}qit|90?`s$)smBL-(EDA%G zcEZF*4wzrlpU&@)>c>-^n5;TssP26J>%r$jr`nF#O3|LaKddNzFuh+Uz?H$qFv>ld zw|_QFJbj`g4u54U;nV*1X8gj3UkfGt`WTDC7Qr83N16j_>l-tc%yc%Vj~ z>bJPl{_ic&V65R>y(xunpEOC_V&4&uY_de>58a?RWiT&Uy$DJo_K9s%=JVpoYefCY z>KGDWgL&arRNrkd*I&8_D(W0SJurzsDTxxN|LBN%8*S+M(Vyy{xYP4-BPa&Dz@LV> z{IE)fIN)3-Jcw2jK9l3Wj@T!(C;U*tf6?YER5w^l_*B1bFxMgcqn{j@3gI`FMu~xs z>R^JcjijII$29Bzt*LSL8R>7BFi8|LKSPO~rNqzlW&EkZF6;;KBk^~S{0Mb7Eb&*P zIi&yPPVbxonDt?suw^;%_sXW6qE2Yvf%0?L4~B!A-Fe3D%aGKgJ#1_-kK5l#6^B)H z#uM%O(DiYHtXRsA`F#+6G}^+r>bZR5lCxrdr_T6Do%WvVjHdm`QvM8w_>nzf`hz5n zq5H*xYhCc<@V-(!lgH;M*s&mrf4%su*y?R9%+55&777+DgY-Qoec2zjiJM5D1L=$1 z^by8v>?`FD(f#L1&#s$b9g)qJQvQ%RN^1=u5s#6z*s*$G(Pc+Wro@E8B7we3!Ed?6i`h)cQXgQ!2C=9uEwjZ0% z8$GXx-?C_bbF7mT&*brXBTu;$QGCO-0_LAn1J`q1r1+-amlU7kdds;l#pifk5x1GX z2Mui}bWEQ^_qQA0om(mVwZl@}_Gu39r#zZHHh2qXseSr6>Q~ma4{Hv?Rvd@J7 zHFN{}9{dh>VQNmXd?@i}?R*AB z_go}@?5fP4_Yq&_LjDeuzk?kggV}wc{Iv>r;cCYfGSh@fXHLNPenWY^*>6_-Kpz`u ze|OB*pAfLvnvb~0grE1`Lut(rKEmiaYx&F&O(F$~|4Q>Wwp_~N>ve;{ZO7?6eV;9} z?QVz>b6qfN;X_!n(1B_U>=V*VcY+VS%}uW^VxxlfaqU@w<|n?={8Mwh+6~5}_|7@D zENIycSY6^w?G;R}FY(L?_LKCzCw(7U-i1Z}fawb#vP>ENA=8~~2;tik{sfJCaKliL z^s^w+A4vKe@4aUyNq+|EU-YsJZWp@Xi_dK^rh;n!9B2ny%YH(gjW5quUc=N*8DYPE zbbr0+g3i!~ubAit4_efMYt%S?@vsA1R?{0-?W6pat?KC5-hw}O@Pzvbo8j$+SU&%v zo4Bda7z0K)Q2hrLbZVgUd9HVbv(Ha}rfMY5d2n2;I?)R|uXd8+xjg=C!e&-W@i#BI ziHXB5!_Eozl0GiiH^1yBQ|#x<$CJJ*{YxM{%n5bMRk(u;KlAws)`Rdp%a4nlMqGgi z(NWUR<@&`IwakO`GtzHSaRKU&+M}XocMQy;nrZfl(DQyd+*~+?|A>Dq3aX~4+P6RI zE$vP@Fnzewhqd6+@*J4_9l=w!EfcE;nqt=v{pj~gd5E-cz%e}w_S}qusXY_9z580R z73GFSwX?;{o?S4`#hf3gnGKIFrorFzZA~{Wbu(Vqu6wcFQ)hv zh8H2O-bT{L<@)UJm$OpRr;+ej3@AJgPI`7U|JH@a$nbM6rm?q#zk~40r(A@68g{6= zv^$sUk8XL6btCH9b#5vX~2nTcUXH#~Z|gxxMkeh84zEbV8}VQ^xb%FxD>(ZfYg)zRSzS zrRym7&Xw?MJJ7eU6;E%DXJ;rrmEv>!FTuEX78qaAiOb_t{Lxp?a5MJPA6 z#*B$=Y3`BEKS=)@s*<*|mw!j`q(L27@v>rA6>TZ$=W_jX{>fo!q~DVCzYQ;f)a#Ug zbyEQwPxt4UBTB%|yBO{%&fs;)TZGk(y)d)01?o+$g3)_jXnu))FZc3b=Yw!=(JL5g zdKls^r@rWz{|gic(3us(&%>>CBACX^_qdHVBfkm|mZ;3>D~XCA!=nvYE-ex@hmuk`4}Qi*@`qTVnh_&yx@+2oJO{i*3` zGBxstyKcL9t3QIUdJ{~4mkkQ@U3q@OE9m;%1~inDd3D43Ld&e~$U>>UiPvH%rE@D^ zB|e4C%j{rzRT59$d#>N-YQ)mdwxn+9Q0-=#I~Ko8h6{6-*xQ)S?|*Lh<>h?F0|;Dfm{?|a;ZuHdGk)8ZS}cU{?P*Q&b&E<+xYwkg z$@M2Lvtz4B|GZu23Xgd_gWOFfIO^qO$l!x{)`k1fyQ()F7@5pJnwyG!`*p>W4^7cw zcsw|g|q~ONK_?JTI-wCkb zT?BW{U(ZrIbi)NTP54y*ZV=^{o(88I$5=Sw-yr-|^{>HULthD>$?;3Q|6&rprfC`5 zT|)IK4Eoaj9Zlm;S6Y8K0X|U0(vNuYU8;}S(=D%HuZFqgpXrkSc=8XYquE{ZpSe1g z1sr|>EQV@`nWeK#ng11k4`x%y|0eQ3(EBOmUNw{SGr9iFeqUYJYq z+u+3;SFW@24pgo-f<@`Hzu8TZ>O*$Nyt(xItT_Z3cLwt38}GnJzD~HdWiGEC=f>RZ zb@6I>AJV@a0=^BT{wssi@ivgHPwU?!R~elm@YRG;sh z^!z;sfya>t`CkR+C%+35R6RJ}G~f|T57%}#M}Plv${!MVUhYNsb234Uj5gqQ&)xZm zIR;qqnVxUQ&oeoHLqs=m6!DKdvX7muz7OSpOV7u1EI@{TuHv_gDdGP`_{+zZgPTK> zJ|@>UQnyHSCVf*#U!RS);eKgfiJ$U^n)&rlCkREvU-!(NA1tNo-NGDWR;i+NK4@w5 zVc<)ggp|=C{NoixUY%uxuD`6X`;31eSJRP4-z|ht_XWM9fQ+=)Q zPjvlhPH6pUu-HFQ{Hv7_UuNk>XFM6=j&qd1uF#U6VOCs8;UMhyEE3;8qP>o^2P!Sf z2q&deeXsCOEKn9dfB!_`IK{_N{OnEFVNVgge`ox|4$An~c~ppvMm~HS@ej!;gA`8- zNk5m)FS<L{@tqMKeNXwz;pES* zFV8nif`MKctZGdhSG{~*C~a?yt*+UT|5oJDoUXqgq$rrP_48tQ_oS5|+%v+2nf6#b zhsO6Z{zcjM1d0E~(q6*Su*+cZ!&btlwXJ6SheI;pBjHC8zIH`1RNS?d^il2NW_|M} z$GUtceV=WtA-%B}F4I0R;wS&j{Hcw7A&2tv{yIJZx#GHQnC^kfP%! z*eB2CK0+#Jt4j4B9Z^rU4y5&~Ck|hP>WdeINLrs_M>FB=_8$1pMan;4PkY7?tcY`5dSK2vXNjNY z8=Cn$==q6A{2yIX!H{2t`o2`3aJ>ST-4z)jB5E7kcr6 zm`wU6k-nIWn_$(+S>k8;GX9UN4+`gq|BaI(MvS=yKb|{bbZR-o9&z9$PtOTscbmh0 zix|Fh`fAvqua9r4T`>0dStzk~;Un)A2%kU3g2TjFywj*9Fvd>@Kbr~IGF3Vw*`B`d z?+GJ~oP|U$KVG|`J-W5l$E71&h`*4|Xmg_9UkRN*J`75~j-c;THEct9`P14o#nbz# zIo_g|vzSWpPbuE!+C8eD=q%}Da(zX+&Dl}X=SKSe%Dx90gPZg*Nna4@EB_eFBz_?etP%OjJmBL1{F8BnG045I3({^G_|mM7D16t{)lB>i@z-%RrjtS%;e zg+)#EOC)rEm%@l50s$AV@rNO z!K=<#N&A(2{rzSBtzq@ko@jj3nx|y!hmVaKIQ5>r6wl=G@pbjAj^e)*|A3FnsTSc~ z2T323>-$!4ifNF(G>aT?%zp=R$w5eA4$f>HD+!J@o%*FY(L#Tf^d~ zJ-Hh3>t@nfd{MP9J<1-PBB{RB6&kl5r9Cw6OlypIz0d!8Ee>BaHHjn@OpbA#V#(y!kUD2SxT*9Z{ zZ!`XzCl0)l@NX0T2g6!uekSKu_*)VG z)X=vO_;-`PrusdSza#B5_&V~}Nd6WNd=G>ASmCId0Q%14zt3X06rhLkA3b=ZO@X+H zY9X#VX@lK70P@bb@rwmhVCNPC{5sl$|Cw{#X>@fb3@eu2Z$p}{|GwOCc-zt)+dCUl z9#&VEZ4We1>#8k1ABNELgZy<_0?X?LV^j|Vo?LQI{M3#5uS|Ns4r#i6Qv8#aG>=a4 zDObC?Xnm-KHREh0eN0!TuRK7HPa}PYNuScZ4{+AYM#87(OEZ2@9i6>O_>TyG;j&sN z3u@BOz3Z(z$YW^!rs%c=@9*H;JnT>E8nfJQuxZ%tz-UWqfd3 z6D_ye2w&;_#&qAno2XWtg={G7nh}Iou2FtYktUYkJuTc(wcr=mDqxhC6VD5dhx#SG zaMX(Scw(L=M&)}7^Ec~r%V#w(r_C|;_DU9;HFOdRMXhm=ddDVy=X8BOeA-LM+IRoh z@xLE2zr?8+@=_U#{-{g%;yoFDq?Z$B6MiG%oBi_>BDyr;i*o$!ZH|E`!*8eB0zXu# zqejQptky@DUtXht%K~fRi+W#J`fD5}`1}UFB6Z21_>auryQo%JN&Y&Mzo1i!*lI1+ z*sfLs(bST!)$D?8oZYAn+yxM~E2G!y&bZ226TPMlgn-GGJb9oAzCPcJJGEkT4ptwG zUEU2}^rf1fNdkPD(u3a@HE?iaJ-aLpz#n(2L8r1aCi-`j^nqO8%D`G?(y=crB7NQe zYKJ9;9VL7w$G>~N7Y-o&0fetp^%RWzQBBDtfywb*8|$H%@V^oMAn`q%*{n{#?*RHf z=|$s1L+n(pfM;j*#~jCcXlq&pL9yzRKlU$wm@M-b_4Yk%r@6&-7HQDW&z$yUTBD~< zJbNOGo)`1>C@KL!9L46O888|KTh~j zDt_!T;ZG#|V&Mk7QSB<>GdaFz-82Xwd~?DVHSfW$OC9O^U>|ESz<|D=Oi}NWyV%th zaLEfZoJRFw>WH8GG0ERf^5?7*4=>1{8TrdJe*g`8y5NqA>o8l_5sh(kXkDKtIa3AQWjKLX$%&|ex$H~DWq?vT%cfIxS z_|-DuSn)7itEGv<(rN8yhnA!d<1$}p3@oI_5Q_9$?&y2ZnC>F z{6{U%LjMF^93L#QMTCE!@V8to6HgI-I^ln^;NW*x6aO)J!IJ4*f;Q#t(66*wR6p4Q z?~fRRb4LFSg_+$Xe@yPLdTKS>K>ntXzhwcJ=v}Oh-9=5jb6JyrQC7j!~% zn1JJ$H74}zg)f6FP_eoLtv`K*XT$Hn+2I{wn*S8^^07k)1yih0*T9sAExCbi3w&p| z1KI_~!0Y50I3a`TH>Vp)`arHPyR=%6^xY+W73S8cu~|pL=W_f9!|$*n!Vf3>m#Ysz ztx|6ZpZ^P=eGZ6$w}ih)JOJL)4A7~)8842mr*G7c@K^q2#>Vx5pqA4xy~hryL}Szu zHM!hht86oAqVoUxotGH-_}RtfMoK(@Zcg+?&hs-Ml99#f0C3@NHanfp(-N`o}xdxAp(v z^D~5>MEDDOZUd%iM(Z2W+T(Lt<2et>DS>>7>U@Zt{SD%bHpBM!^nKoWATO2q`&p~S zFUb6*R_}qL_I)tOV>kwuePn^kYhc~>WIU+V6UK#pDvUbgfaZ_-qoS2NI(?{O(mHh- z)nf=#IVv3bQo4CU`sGGmSnP9+J%6wkI^Rjg@?qK#Su;>LO=H`+g;d{bt2;{i zRyXUz1*C5h>C2knf|1%*5<_qneX^IWH`)T-8(nC9*qzJkkKfat$fr^L z@$vPKSQm{0(5j1*k6SoRr!m9<(z=@S#4GT#>GpBjiSPw7*h&Uton z^+d;CH0Pu5yIy>#O?yyB*ka8BPkiBNM{ATPX$^M2z~6adsL4Rl)oaTTXxf?pA zQ;q%q^@pL32V7p0ze}T>@v%Kf_&k^J2c$RQ^Dx4{Px#X(9RS~V9+EyT*Jssd0Iz

@yr2C)|QbrBB)7cb~-bVl|zS*NP>_PvmV#&*c`e;<1h)b0*z8sF$G-OSQ2 zDA9eUpfD51Vb^XAYys7t_2`*IdRGbx2Dwc4WGDLW83g7(qjAchrR>jFJ*+FDGn(ly zMkj}*Kkv*tF1mDVal~w_pT3Z_oo9f0ipfpwaXQP{mFUmRd8fK<$__nD`ryg`8EA}A zgXiLi!J7p~r>!inl_F2fo&g(1`=ZioCEknX*RG54G=9&g`aR2O4d5NC`k4jmPISO^ zG=De7qBkBfjYIz~o#3F?9+si>4;%jI3tY)ZY*ejfK5q?CeOnan&us;(pBFH{d+m7c ztURb4IUVmP#j_)0^l;VWSP7r%=ll;o%Od;@gg?9CA{-jqgwN#oeviJe62kvQ_?mGv z2XUUxM^Z3g#nEeM4}Jy9J<@}pfB7D6KGoxAPG16tDb4#!|I5FB=VAz))8t>2`=60L zgJqHbw&ed}46SFqif`(_|GGXt_pd>PchmI|<<}=*(jaC=*C&>)kHX4(u%&voL4W3j6OvuLZG9_`1c1SwI(aF3vi0?A!Vz6aod-;i(pu|C)ym=~;r` zw?Y=PiuU;Yt`h8S#N)Kh3t8DeopAU1xlQpgI%lZ{xCf6u)9*Nz$KjJj>sg1v9WnEt z6zqC(xsZGND2x6|XRN%^2RpktnB(4u&DGRKy(4pIZM`)(3_r~rEsVKk-v}74I~%Vx z)Qi^)v~hG^Jic-01WxJa==u-fij7?%@IfNZ9q7a+*J^MBo+?leCfW{@oD6Z8L9A9IlDn@Q^jZ_m&9Kl?{4ehP_g=S%$~2Fm)! z<9C&4OZ_v0`e)|y_po)_TuDEZ>wnnLm5nC->7-vb{T-~SN@&7&Y=48!PzvQQKYlo- z5;+!kB`WZ&_HFU@)nwW~y-(0x`kKAmAIUA=_Yq?6(fc?Uc+&aSXga0&_czA>EzR*n zamlOp$)0%g`XJtk_Wx<@oP)(ZwhEcwud}>_u{0;ZI_XIFQ%!;K5)p#D-F zaJ0D2u6zpO7`8_6HHg5hup;J|)d7<;6KMQrO!a4`hGJ1qItI5qqy zBwmWAYj>T_I0@pt!`6tyD1HmY*Lr=0j1A5H{_Fm*{ay#s{XzOfxxT89S)!zG4(V%c z_5;k9HuwL3_0JLCKOpNLQQkk5wSB}G>YozopO-HhVd%8kw7<)U#um>=UpTLG8!yWB zw@IysS7Gs(5t}bKtyAQIloua(d9mHCnT%hgHWM$)&>>pQe~ z7%lNr{!=r5SH)^}g7}?@-*?$Jc(FJJPfpkkCMNHhFgb*e*gFaTINpFyk35-aQU`2p z6ixHLyQzNYdv@^35MJA6CZ?@qkQlX4C>TcdwT+^1#<(?bto$BxFY@DC@2FwpR9_UQ zHi%cZt7D8^49%~shK5Euqsf74811Ds`?*7KxN29SaGVBS933t3Gb0(l=iW(lzQhe^ zB>u0FU%|3Zw1m%2%JBExQRDT5uQ07a)HeMLM_ghgeN57qNBZ8jnaMLqUl{2dcDW8x z%%$_^R@3~{Z8<+bPW+L?|7#D;n@@~JM~m%HZ2gHT9<<>FuV&)g6-VG`k}4P+(!f{2 zk$5mS8(t-Tqce=OdH?mZ&~m_D&_1IMwV;Vl_s*d8O{#m?`!>^k-HY#0Fh@^M+EX_3 zl;HSO6W=eLMbDp9coAZ0!W|j`dQqL^cj=Bk2haI)nRFWbSjhhTM+*r zP2dv$e&RQtS_!AFN6^?inDz%;VuzeuxWl$AID0e>OU7i2X*Qiv<3KF-*BlN9BG0qD zh8{fbPYDbPnSllkHwxcv(!xPnG3eLDgWmrlJ2j*`0N9&)iv3 zJd@%NQGDW`66Q+rRex?2-Zgs$Elr!^>G{zdkAKwoPl{hp@jZ+lLXWIjl0MpB(5w%( zWid(LInp<&#XIPEEEa8Yror7aWh{8VAHVY58YbM2Mcodm>^))8Sarj^+it9EA5v_0hO!GCGbM0D(XN%fZu=zNmq@y+fdJy06oJfQJSt24&<)*(`g zXEFa9&!zZ}6#ppc0a$uXm-I2YzRw@2PAln~M*8^VTQGfCgyfIq%KRms4(G3A{#tjs z3+^{2OZw^Ec#y?4>*rlazXs{wVRscO2T#Y`XPFRS{e#)FMphxlU=Q0&2%V}4D>rE2 zO`U0&o4XvYWc{S^$sN{^8joW%1L53VS9mwS8`jR6B*il+-ihL$h%vky#Sf+UK#gbc zwpUX;`&T^orTEhnKi#$xYGWti@x-IOpqy&smY6-sGV&PGBcU|gD?Yp0RWirRNxx(TVDCg6)>b6D)7E9~CxHEhL^ zX?*F8zs1^vH`&&1*I>t*P>G-Yi=WH+H77rY+XKhb{?bIsKW)yBeKvj;|3vw*FDXB^ z|FdUQ|9>p1I*x~EL4_AB^rdr9!qM_j7TdjfHQVt<2Y-DE#9^b7p??ciE{JyQ{HacO zty3$Ot~i3`5%q9$m_P1*od7l)ezW+tZcO2#3+B_=cNu&BFub9Ub+ZD|u|4g(FHoTM zB`dZ!k8-}Yd9jC$eq7VT09&4Eif5Lx_y#(sqJ-k-Q~b)PJJ6Tv!;n5E*QfkDocAGp z8Kkeh-$OWgw@Dwflj$oy)rm9Gw~X}J!+rQ>?=SH)IsdM_mi#gC-zEOODYrpA(;pvp z*$d}4wB$>&G}&d70tnW9Tev_Yio4hw;&+8n=oYmD_J-B7h|XHfEUy$!#q?y4&P?TB z$I&=-x3ARBNX=78u9ixSccbd#63{!HDXz=^Pe1RbGb~d&gpyVKy85 zc_KdZ3Zw52Q^;FmMs?B#iS3P3;C#Iwrrr6&W{8vU^T=>IA7(SWbkLYVkZ zcQkofYmE()9r#gNqd2rGLBeNp{Ic_9>>c436aGOfefVH86*V6jvqv)g)E~)Aj^Ash zDXcP!#^KX8u|Y|#sQ;9h`;{u@?WciXKUr}Px&y`@oi6!j|MJfwWd6UHw1rW7CP@C- zzx*@Fe+v13HD?$`%`!6M|kD1tf_xgRy4pw{c&7y8;!4D%#r+oo6Mi@l`0rU{yvhwd-h|n zclK0lt*Z~6KfHjv{tH;+-}B*ghYz5-Xf&_&_D9tz(P$L67UsRZ1+RXLVY_r{z?k+` zTv$eHpod0ba*J?uOz#M<9;^b#$Q-sOJQZeYtb>A-2)-lQ3qMS6{yw-Ay$<~S53}@i zP22sMbT-}k7=GSqIQ9_cN%%~TzgMS*N%-dp-+FH#bfx;OgwOtk&!S}bVIz|u<4YXv zuV2RUa+4ueXARZFe#iO@9S_T$LU`oq6!`WwLh{Et%KRxGo6ic#pECKoF=05A?vQ=| z|40Az`3GUz_2&7T|I+W_90`ZIr!@V3a&or_qy4Wm_5Y~f!@>IGT&`{*V3*<~bUGOa zdXYgwD$OBHovMH*jf;g7>LI)$TEH^h2(-6T0LyKwgmo3?*~6C0VaXc@xb79h>4Z7_ z=X5MC4z3h_#J>|yUBAuB+_%Bb+OBYSPZZY*w5Ixl&H8UdzYzWXA2;z&(E-@EDv5{m z=!>m==1TnRU;Mn7_)ii4`P6La_9#Na7v=cH?%P<748P~XBVctS7C)^V&1#NmvvC=x z*vIwVc!TR&mywFzeEaSrVCz3a($9L!^xtc_oJsm`kp9+*8=?2Uxc{?%w&NyHtZeSz z|I)u{{8iUiGGq3rd%N@jbIo~2o8Rf556p89Ge9wbB z*nYxKApFdEB1}CKE5$P@{uIT}e`my{cn^x#3Se+uwK@O!zxcm9orm&Ob8*SxKzN(Bnr>nWFZS zNmz4i4xM>(g*|M3f8%V~`};-5#mm+%Xj3zj1uC8vp55`s0pE1kEDKfsE(p+akUQ$Adg5z`6k4Ad z3cEWcVuSGuvD5zXOqXi+Zx}lOt!bZ}oAO+ia^S|<4nd~4aG(P_7v{uY&vL?;tf9D> za_BnbXN%&sYlW!}v?ev8CsXZf%b(N^#Dh*Fklz}F%e=0ML)dL0i{1wj-4)o;4Hazb zia{8@(38fm!>9&@3afOO0@sX^(DFq~W)Q5wF0OXR@=2}|KK~a!UqSdS34i*QRdA%u z2)smlgXI36+@Tz4@|QsV&U&wd^GgRy{QO`1d>ru?5`W*0OW{Y2hvbjT{iz3;@_6#c z$sf$x3i*aZX@8g}m-o+(PKn&L_Y2XO`secK49M?~^!+!C|4TpbPx`e<|D}dB2=X0> z&rXejST))QXZ;hh=Prh0t!LoPI~!q8SqvVkZm!=H0R zDNca}-NSL?03SSc(jAP<5c3Q(!FK;5&=F?ioSTCS-Hc|T+KLdoRe1u~ItyAmO@;D= zTX5#;G~AfASyYLdioaHmmfD%T{awN>c7oauQ@g>lI-xc`SmLL(k!Jo*)9X!G!}d4++PEL#6&<@v{C|J9jaY`lpQg$7AFoL5u41 zNx%93>Yw&?j>6Eu=JC&ejc+_o>=aJNMPY8u1aL@CV9xXX&`jG7e%Q3 zcXspnZ3+tKMa9%`{GqVg)>|`!@oVukww;AxAqGwSxw&cdebQWu(7U1?&(`+G!4s!r zc)b?gzqjc8yrFFM#G&}O@(S!7pu#IZ48VQQLh!;56I7Zu0fLN8oU(gx^;ct7;mL(E?5aH+O=L^LPrTmXu^nGxVYN$*=eIP0p$M_`8RN?6rNV} zkggAtu8$*KpPt%w>=#|1Mum|$WUU&kn%up~(|=u`4)vRaqTSm6r+?nnR=C#M5S^z? zfV|twA@Al?JR7M6U$-p=x4v&$DTdb0XdFQo;=E{|Yg( zVgfu5dIg#EEwFl$7nlrbgC^5`u%&h!&i_p3AJJdt^Ut)0y!rlmn$#LQe+g__Td27K z5?Fp&pc9aQ{51h@}!*7+v7nmLmH13!SuY&Qq0ZQncx3_k6~@XNg>u~s-aDP}oseibOa5Myzn}dR!MH8u$K18SpB;v<7^aF#@AbePt?Jmv_qu5Pbr=r!r2XkN2I$b< zhaIZ#j4m0P*kPOke;;FrpEi%g8Ff~8@Dc4#iFTwpgb#Gyj6V*IKhBa<$^qXFMa{?d zlz%%IwTgFAjUTG_Uq2e79oDifORK?K)dyY2I??&@cJytXFXq*E!^-6r*stOo%U)rC z7Ycl_m7zVYPZ`oZcuI6?-vMfsI~+fnV|eDMJBKU{9X&53^} z@hji*2J5ZlpYkc>{%kM!bAR$TgZ%xRJqvc^(fM>W23+1h{WCOqXX>91)IZgB!LX%N z%I`Pia{X_Dd-8D7A4B@RY>|pMQ+)&#d$i1NCFms?rVc+q=_-3X+`2~j9KivpkoN~b!G{dk=O+n==;G1LPP(jsM!l&AV&G?6dr||8B zA4~XK8tox!5Ivt&?77_EvDYrVJNc_5f9-cW!0>8&bkwuwa{jo3Zd_f)um8#vdMt6K z{91P|_xED+c%DiA?8x6yXLm5}D&;2_a;bk_Q2+GVV8&yqf7(<3-2Y?>*SFY8`l)um z5uK6Zg7Ij^=aGIT(yw}}8>}gDz|t&3^#8UN^ve6=n}(iPG$b3UXW8NRA7Q9Y4l z{^;Pe8Z4b@KK+mzzO`Nq4_bA_g_&cqL2Dp-o*9IVe=UZ^7VU6l>J%)P?+**pF2E$( zgEw8%4Nq>M9Ax|R;2qWp<3>8+lV2_A+}xKC5lSsTC^P`;d43u>eMNm5&j&)pBZ2dG35g#eEu(dUMa)x>)9RpxDP__lUIjj$Yta?KMmgMpfE>}^wa*EX8kq$yK+hYVbb4eM_X9k=!%Qq4a7ZBx4`ezIykU{ z@~zw*5dF3a>-GdOC>fOq*)NtD)pExpikOEFFp4jq+Tcya>er+mZi| zt}g+r>HFSqQdEk{+=MbGLxk>G3rQlSc~(?pN+pVlBuZ2wM43sGWRALLn@i>)Geu;c z$B(K1+Pe4q^E`h%&w8$NcI$oLweG#=p0kIwu@#!(#O(i|=nSoW_-ca2aWwv!)LHuA zqYqB?b;OD-M(8=@oRr4Thv3eY)>8j(SwwGYV2}|5F-~;Swrh~;xdg7=%!I<`X80`<+ zl<5<`0^xT!{!#ov_&$V>-#-f$dkJ4xopJxPMt@Q6ze4MyASoD%X)el4&R=m?fyEHN z8}Vz*R|fBaPFU%$js}aC!I^bqaGR?#E_;#=ceglVO;QjB_M-X?o|l2&zZuZ|o2~M8 zh@|^B1G<0vuyG2STpUF67uB(0ff|+ZcEV7q$@-<2kEHgY8@hj*fP1OF0^u_`{tj1V zwwmy768@z23J|S3g!?nO|Ew*VRJ+SrI5^ zbhpF!>EqE^kJhJot7A%_hG_L#LbZpuo(zKjZ#`$$#(aHjMk*lD|@XfAFODp>l>gR>aX7+OC~2QcVZ@SZT0+D-2M* z+8Gny^u!JoS3rOARvP~@!-YrB!|uH%Z0V&g=yur++iI9%>OKve^b6`xlY_wO2pID>8qbj4-Mzx+f^LZfJEl@yUhhf~*(^AV3GjK}%NIX~A1tn?MA-~`% z-9zhOr}u?m-a?yA?=T!MeQ>~bZ|M2>y%v-E+pxo882Jw%|E3;^;JByLKj;4{PE7-g z9AmCul2oE0r@WjXxo0E)-}DXiXa)5< z)qm^zTmJ$)y(N?iE&sWG!L-E~v@q7f{dp^309|*(_0-YrxP$1hsRa(ZWRJ7zMq}Qm zR{vbzpmTQ|F8bb_p5OmI|KDuKi3ER{In9rZTQVE%K3{cyG?fmtpm=pX@jTc-50tK&}C_TmC^C-8flqV8iygQ;-sqo48cLMVq zhDxb}F+wt$o{^o!w9ff(#Ck4jRt^-;YPE!un@8fLWxT!<(lhGsIa1)z+#C1O^Kmsj zAG^el#EiuQxIdHoAGV&$bjkk;`Rnvr1eT9!|IwmR><@m{hxlg@|AHcVK7U||S67e4 z9KTo6r>BmBjYkyvxp|3O6*ch~T5^#*a6ZW3bQyQGV7!I>I#LhWV#Rd1I!iUkQ zvfmnm-N)gAE%oKS%5Fl-Yjbg$LR0azXJ6<=d((KfLXOY!{|}!nApA7KA8#8Dtq)q^ z6!&rL4}Z3W{I8O~UiEnJP5sT!&^Bh@DUy6+KiZ{Kiy>Ewd!oV}2Kd^I#p zn~%SI?WC2fj!Nh3cfdHhM!mKkhm!-A2xogg1x?L)7(a7q`ThIeFs!!=j&3##gQ$qv z#G+4v_Wr%F=D+y}aSzJ7^(z)en>f?hsSP^YIpCVMW)MF8Is6zGg-I4=!bayPQ2y+O zy_2o+o%J{-$8WAlwe<-9GT}RTIzsLyH}6 z`kIN$o4kOo_O4h}Ws4E#Ml-p8)y8nPNajB*#}b@3*l>O(=ikt|8&f9!7R28&Y$!aP zGMeKvIsX0;{_F|iuP6L|H^;zwOURO%Bul&O|m;L7`f zeEbpQpvTdW`FjB>ny;cEEjgUtIl76F;?hC4HHGN80?D z3SJIxFFuI$V4H&_I9cL`9zth)^E^O!;#4G^MECLu)jDEZaAiq(HrP$U4a3^2<+7GIaQi7?;P zjq787=o1^B_*?BDeKs{Q@W#UntM91emAYl3=fcg>2??|(=uvYqe5wn3v}^!gDH?~t zgKt3xyRBl+sOI9K#Z7VFnUUhW3TIZEYL1%WZrq>!;m^4L4DwgnlM5lCzx~BO{8_Hd zzr4pjNOEw)X2Z9`iRs5gEp=P5#McCEB2&fddX~&{UN_7&^}->qH$jHeBQdF$xj0`` z$Mt2G#SOQu*h*7VEV6RPFtZIXQhA+7&nx2GAAQkc7K)t;`?8?Co;b1051S0%E}oX* z7yFtpM;ZR{L&v~V+Y2MjHi*_T|2aSUvSH-knfy;c8AKlUqy5=8iJX67BR^YC{F{m2 zDXkLhblh=KaXREDMT^?5>7sP91Ut7?7n5#wXH!eeP|RpuXi<~e_fM8EOKMN2 z_DhzBV0iFEJe9T*gq)9JL0J!Rl*%tiU-nv@mu|&w@9%`3JKcD@I8@f|ukuUe?X#$T z{_^v1d7c}NP3@1}cHM)5WGygTriOF7+oP6VrnpVf1AP@;(4oC9-nOcvIn?JRu}2=l z<+eR(U(j~6N4p1Zp*c7ixyI=K?mHYYFoxB&&2aL=ky!RUS1c5~QM=5Q=Cjc}c3&;L zpEVfXC1~M0x?h-gcDdN=iXYZaap(B#4}9^W41dC=;Slt}3s-E=WKx;`>jW+KiTr1g zzro;6P~_l&^Y?rf18J{-JKb_5rMbGS_Ow3UnXJyz{~G}3-}>?RXii*Xe0`RwvDp+~ z2Z}GtoVNB-apC%zTz^_^Gd5GE-#w}?WSYD2{v#&uKdSs{!VIbZ$e;R;f(Ca1nC6Ig z9=(CW2t#ylBVLO2r02_rG(P*k>nq-tU0*Bg?XZ@{*Dozs$8G=RL)Ws^ z(jEnS;qkIMxG>O#y?-(et+)H2s>Mst5XxXo^*QN&T9eXd$q6{@Gn92W}w^#kVs4?2dj=XYY$m1B{qFKJ6?u(NY%QXu3aWdft=sGdX{JiydMY;&&u|TMs)h z9`1>^f=+^m(<#{LY%ChQ)WMNsi=j^;ur2qUu%>?ywh_;OLY@-l6|9p!ZQT+F1}Wi* z3R9+};f3csCh~SsN!I?dbxUR;YhSU-3da2mS7}7?1*I;;z6LjehWA5$$z1 zSr-SNe*@hvKM~w_Od5Pr{Lm z7I<-h6DwZ&LfXCKTWG-);nCMcOhFph6Y z_zqe_q~(O4LHNF~1qP{q7d#F`vokXM0~syYdBR_n@cuf>|A&>^}ip4 zk~2z7W4$-K`Ljy8&u|k|_R*lYCoy^aS7tv2A6fj_ySBs4qT7P9aTJrsKS`sX_=Dol zq4@1=S3-37E1@W5Hj}?U_or@yGJ1c!=>0jdDFfavzrx=i8o&GB`y)Q0_a~9wpJU_V z;pmW80>w}9HO7BXtvMS=@xP?_bEhUiQJxB997@Bqn1e9L`w3j6Ib{pV$Fgq2XzfXB z4XnKJNzhkYfdx}ffx+ar&}PdvAuOn`IEmI3ezwp;kI8 z35`(-)5Q@Nn_{v~Q#iS24Lze({LX(>eFogP7|L!GO%RvQY=Jp1+CsaAEUFQE1}gj3 z!b)u#*PHIfJm(Za_CsCFTG1SgZL_Hl{RU*zJq4(F1Pjk5i@TP2#JV@mbb960<43B8qRSeOowJq6k%~n{n5? zD==gT)!R+E3EF3an43jAsMl_bO|9u(xnvvF$h!xTKh8i#dn+8P@j+B?^&PIA(nsU& z-N0+?22|L5iE0oX1jh!65P2zvWe@Ks=1rvW*vS6SL3=w|X;p(#z-n0X@DPN)2xS*1 zsT}q;Y>URiI8Z#glg7aALqkIr91%vMQ8QyURH;(9cEAv8C%SQbCdU_lNu&{k|AO$1 z?)8Vtst-+19U%&DEf3{gQtuW9cx-+&cO(- z5C707a(%X>&u*C>=IJ}Z!-B2oB2+_dH-M@Qhv1V(C|eMnA}#H#hsKjbg#Y& zMz&UfZO4l3dd+1=^dAea7PZ75R?|SmGY7+SF3|O-P?+AOhMv)b*zo?(q=%{RP?IHq zQv4?BU_=t5{egt^3ZjR*T$^~FBke;SSQT+GLuc~S_~%+x`BTDA|4;(@japV z4sSRlex>*ZQGDBz2ExhuSv-Gq{b|gf!C7P%D1WAuzY(Q9;cnVouAj;Ech4NmN=Sb` z>3_dsBy^)W21@a(a0t~R{I8*Bd3mA%7QfjfzO)_8794Gcp>|YTbm%&oBiE>J@`ZKM zxukC_=__BPi3x@AkhUU&YAlyQgR8aG5#{E%!N`HFZ3qzK&#Ix$$W)qJw20on9PrnF zQhu!86Zqc4jn%c=4x7~#aQUy55UH7n25K9Cg}Y1d=eNNdsTS;_M};^hR{?K6Sp&Zo zBvSp0LZDej(h8tRV0$uK=bABf0znkBNasKPXFM&nS-f$hvIhoEpXCDD@%a>FJ zJBpLd0@%A5v<|a;24qz%=lNsu{2fR%V2>z&Pbhzvc1?hZKUQ-6R9~Y}|FB+lq7mue zPx{+hE`Y7t8>lwb6siG{2($ICNmFJn1=S8V;-)R(Os&}`7}|aZjZ222t6LaoS4@;< zc2mRIv`(_y$9~X!-aBZjn+=L9X^)ku(?MZef%FpH=gg?>%i11LWF6ApfzJ0$lphcJ z{T~eD+!jjzJ6;BdhXk_>TnK(4b+BH23m95Dp>ahYXk#l%w^*dZr95|LH|>q6J@p}6 z|F)B^TeOFy{#Zz?dn&E0PY}lUog{X67R~BA)kEoq-L&@DgMMEd@zqb1iKT>}MEIX( zZh?;rw{m@~`2X~=DWtCh={qT`f*$97^D{Yro<+KNk@#JRfBIV5Lw!a*kDu1oG{&Fa zO^wZ?_?uJw?fR{PQ4e!?{@5S+6Pr{1HcBtn{O})TqX)ba`gLm0 zR#Ts7fQ16OUPyz=VY5-mI1@G%B$R86{VKGyxhlFDOvVSFK0>F845$nbq&+^O!6@xS zIg3z*YnLyGOOH>+w4!HF+ItNYri{m5%nkaa8A~PCQ$g!<7nZlp0+kll!^;*_dpSIi z$^G|6&^%-EPa=QKN9$o;kSGf8@Ljh|tLbzOR@Z-}-v0 z*n;qL3IB1QjbOMghwEo@{lDzLNGkw4DU=YOE!d99w-t;C22 z_WR%m+TW>Y{~{Q8ArXh9?S}<*rB>|SWfMe zs6GEh0v!Cboa<+D{V#rmfimfDN%|ckXF}fWrJSE}ek0-!zE%%!h`*Tl*PfmUZ_So) z{me+F|9w$QbSM3}q<@*0H<&H6s0VN4&nXTux*tq0^|jtm8T_(fmfPw1Ywm)a>E`sew7DzxEd7P8~?=9!Ic8yLH*Nq;xpF zoc7=BG!>lVvN0pD4hCuU1xKnqiAS=f!niFEN9)U9HlM=VnY`VmcLc62&z8DT`>R_H zkXRkc?+@wz=^j|6T@(s)hvBSQ3gR$V6T~Tg5E(ijo|Wd%_4R-Hus7*L($}zPBz$b^ z$MrF}zL}FpU;*hnOZw99kAm3NVLX27|8IS%-8Z$ay zfV!Iu!e(6*Za4E}duvo#kfjzzKQRU8>P$?f`3ST0_kyLkO*-O(Ia9qdh*@9O#AvU6 z@VI+67FAt`2np?pW_n2U*70H=?P(9G651a~Y6X=O*3;+j0sX#jgsWG~SZ(hnZ1#E; z)|cvtgj})a?R0%_Y}dVNhI6QWIkhJn+QQR(JI+tFvm5!lirWMU@i!;_JKzlEXDm5C zlk<1zatKBff77v*Vy8C%S*M2a_!y7x3B?yU>!S1?#aBY{EgE4DZ^L^+m`Nf=#^!-R z*Q2nkg*M*G@6NmiG>9)78bH6Q1>_YZ(%P>>AW7Q`&*(G%^kYjlw|OVlx>f=8j~GG0 zmF4t|E(OKBQ*fi0YMS{7EOSmXW>lm`bF|xlLhW)KQd~vrn-0Of_ySP#@5GL7=*Q{< z)UZ^m3vXwCw2MmAev;ZZvdLg_tq13)y$c%oUu&tdSHwS)_%mfQ)7)C=_>OcjIbA ziO+ioY1I;xkIux@z$7@cClBWBGR20RE=&Sv#az`V5Z1d57}!S8{HrxEIBf%Ttfc*r zo++`?Q7UX#+zTkNHGvG5Sd=*IfQ&`?u=IN;tT?U8-eU{)?$9UL?rB8#g%LFWsnNf4 zr8(;b(mB#2DefC48sX z%VGJRPFz2e>kr*!%9?EG!dyxJ(#&i)x4Rug-m*e$QYIN6xk&O%-JSZ}dP_$sX)?)R zTl}@j0Xr@2ga2LE2DT|(I_Ax1$Zx5}Oq%p(*Fr~Q@+~*a+};;0Ula;64-Akd&KZiY zA3BO{)*G|)#-s4`R%h&S#}W%qy%Vh5N0x`!PQq6SgGKYDXT^HW(Kvms6DEEZaP6gB z!DxS1VVUt147-sed^&eY%)M`iYDZ}e+|oYm4}LL=`1=sQXXl#5P%%7>8i}(NdO^d8@lrhxdY0y=e%80Jz}J+YXv)ti!zviEe=|Ib8p-7T>K+NA3i;QP|Ieknz#(}%?3^lL zoIj8F)s||BYl*)P@n7Dy8?usj1I16*_r~~l&k%%sS^OWS6vE1~GWgf~yS;5W1g+f9 z_5Jnz(>!+srmxrn3NCgyzkhAnwx%jz@i`oSy%=IOY2Z#V{n04&T4jfZ4t5wF7%xm} z(FV@7iNL3B$wJrHTg9dYWAH;V%};l+V}JNlX`mrif#iR3UJO|3*`dCJ9h3W?Zxg}H z-IE1l@_#pNCWILO9>4qR_@M5pN(dU*9MV<&@ygeUaC%`0oa(m{DrdN|GjX3loKy`z zW>Wu%sSj!&hyx?FLy$hkPE2wz7YBBU!bRV%Ky=ktA^*AuUgT80Xd>O8hd@z}9nju}_O$Hl&OXfUDE8iP6HXq}qj|T}QQkkbmHG*F zseft{^-s-ltb=nOn{s`O>#J(iM|(@Vvc05lcAH%wdEN{niYC(iZzH~ujVkLz_;crU z6j!SiKuC0JAbm`(&y22LTwe<5JG}D{SX8uye~oXZY94{1O|*FYjK|-B;*T6-2lHg{ z>-o{=$LG6{t2GW!4|jlzdQGLz{D#5hGtJr0wT@VR>MnHg$%cr#?sWeW3HlWW%B5K^ zg##aUib_qwQ0eId=zV@Q^}mgyIV=evadRuz&3psG;yTfBg*8UczXyA_tb`e#Z87wN z50rOIEC1L-0T->+W7;7m*hS+y1o>rgf9gMI^#8Q#jc88(-sJDByb~rqUj?L({h?3f z`Wi@I*N;0PYex>pXMfjy2@4)en z>9lu@6V>Ni3iInKCEiYeE*E>SK2nJwe7Fr_=rYiXL~OcYBq$8=6Vl_t(CgWDG28sD z^zplsP~wsat`Q^gRkO*kVBLBv#TW^ScMMsuMG7cAxdKOID7 zuwAnJd}(3B?oxifQGU#7@*v)a>cH#U(){)mdXB6VF5eAB@6M$(MY^GE(7vls(vS9e z9cPEXPA!BqyGWti(Xpu#YdKX7 z#pl=I(fUQO#9##amd%1U2l9mY0W)xH)KO7#u1ER#2^ZkP{l!pE>ljMcEC&TcXQ6p| zAC$bI=cB$`AZ+Jtm^UQ}Jlz~=kCYX#vmi~lx<()OXEtNPMm_BBejAkLCi3@}$=_c) zCt#E5{dFjp2oV$WVda+PTtAcRFFn+ctt9==NdG;B66lwE{yKWXx&&HwO7!d2fL|W=kh91^MnrD<6I3Y3VxuOXoI)=4u_~96|l;liWN;? zNux|oiZ|%<|D$Cb*gmzz(O1Ku)j4I*x-*3isJDxd3>8HotO>9cb4Ll#+N{^f(S5JOJk&gF5otR`ui*0v25@avHs#gF>2Hq z2zx#lls1n?m+B}8k4*xXou=6Ih6&Zey)2HLejT!+`_OZrH|+sGp6<_Af#&3a_-$kt z7FeGo_S$qF#(8$4aTf>bKNv-SXAk!xCgOpX)5XB7i{c5&&-Pd+h)nZ9XTRC-*fRu@ znh(Oy&D2@v)LJnn@-l2TvZm)ETI0HCDTMoaLE5N(cuV(-xb8nSmOS?+WUd}f@lg#H z`uv3H$H6Mvk5kyI%6bn_WW_)3LXkLx`?Ej%SsD4~k$;=I0*GF2PtT1m^nBF#{$}sC zWHadfZ8)yOZjCO6%m?FPu$BY$Uo`5kiI~XBW%_%q7vb$}s%@X@aqjagp= zKl=Bhaj}WNzaKoli~;6sD8<)@;xjSLg@9TKC}mEU5u@%=ZNJdi!1_uq@&|Hs1*K%b?Z zq149}+YRmsMgc2fd9%5A#NSa|IHq3O`GXTa*ft6iKRM$5?akqIL?~=N9Dxf|Qlv|o zZW0IGbHr=mcKEN)XJT7tJlAy$?Z5K(&)=XSE~q|sH2&-U$NYo~KBMcwzx0=;+e14= zJ0$%~u0N&OTy}@_Pa^%!S6pD%K3k6e*ZY^R{q5nF>L{-NukU}@K__TwFq+5DZk{_A{Q|TR2~ROq`K17QM&XqhyDGTKk&8 zg6>{|^+Kx0R~K7;YiGWgbbSm4`8ndhu20*#JEBs61FfI@`}gzWXIguq^c$c3fzQ4@ zjxE1S_|4-&p~vjs_*1> z3B-mmG`{}#?_bw@?$C7b82)_r*XNI>m1D5`UT3`YW-u<9tqU>9rjpW%Sr|?IKPRRK zhz4}sZ>Hpg|GNJey3!sm9dhFO|9XED={pvqrQ^8&U++&+R!xJKt(@_~o54)Zf4pKA z%ggc-Zxa8H>tPT(+zIQiO~Z(=98lhz3{mg<;1g74nG=-Qr4CP_+vkB$)i;v%Fx^4d zxit_&>&?w=o3iB&itOj1H}GR(Z}6NQM0+q~fwNl#98~Rtb*mIv{)i^*$f$>qxMw)| zO{V+XZ7?t`7}_>ziBy(_J!^GPyz24-14F7ucQ5rDBtJAHXEUlI|}i)BR^7ev2k8*>u9cL--fJ zWP={{yFa=%jq&&tD8AVDeHf2#CB--5<$CZe8qE1={I8MUyQUoj;@2VmkAv4huLROR zJBTUB;ww_^!=6%nyD2`y*PEf%#D>OwBkB6yn4dXM%~&VO&vwes`R=R0WNu%spUL&F zT&K^xNWYZyZ_!8x`x8UJ=!qMR->s!_A~Q(Z+#Tl){37bF(qS!5-iD%W{*V#lhXq&G zK(3AxNY3;?3wuTO)J&7bE8Yi{*m0mVGytnIwm@B}4O~2}gg>|2Fzj(Xc_*h&E45*!dE8zsJnSE^zsBy92&sn{zpzLF`XSYY$W+lj@=Ad4qo)T=}GzB z3^jvHVAZgf;s!%|_O(Zam|(S?=G;tz^cX)@EYoLxrU$boeJ@Gh`H&rub{6ftxsBu|Lo z@iBRP9|uifJU(fQALYG=7eSU{99+0H2J=>}g|=Py3&lrh-E1rB{|;!5@po^5m>my$ zsE_Gd^DMCRTP=9+ZHuM8E!oFGEz$4IT?jpy0J#!JT&c7f+6+1&1h%{l4kx|X)pHwQ zgTg%sYlwkebDfyn-+ymgmPP*BgInU1UOQp@k44;{$^9c+-WDCne-HUz|DFq*C(nn< zcdo3kU^9&$ZWdMq+z>|&_h62J#h`m-8$3U^kn3l1{nw9B-ze!{NBUJP3ZO{35c-F> zVaL5|0osig3>1gp*Fqz9GHn(3H?M(`+qAc4xHrx5-3)gI-Io|NT!G;4!E8`|2N9_}n$vKC_NN+pkdt=SKWDO*vXC{^ve9j@(3fi~H$ z*tOdlXb4iVYS(HQzU^$vmc9Na?2fC2sdJXo-r4Rb_rKL(LBGDsxIfJwYxFm2GDVz2{y#PX zzCX4Zk_V=9{Y0PB_0zU` zjrzZzd@f!j{c}kFl&4!^j&ud2yz;`Uua|<~tc3F7d}qO>{Tgvca3m&GK7!?{D(l6WC78+mvuqYgmy*99`FlUjg6-E<@q8F!{eC{~a~-9cV{=)Zvrq z^PdG&zyC>!R<4+GZdA>OlN!RF({H?w{~ZU6poZQ~L&syGiZ&9=d?IVzac!kxwT93m>!DB(*< zf6mY3{4ul-%qZgjO#I1PmO{`DGmg*X_||LmSRcaQO87^@mVmvICD+IJ{3)()Ms5=} ziS)H1eY$(%!1sD@&d>B^{KMy{um!}g)N6>CFnAuUNVkL)Q&KT<=nXJp#Slz;Hq^B1 z%8Wz$ur*O?crCFH=;*A*h#!w&$@P4Qes)JX+y>Y@&F-vyjRtPkw}SAZRO)}eN8|82 zq4?-oI3k_MYA!^Ivz^rNX{jaHT4mDx$5W~yx)u7ZTMUYEk!-Gc3o(14ItFD8<@}8E z>l43c&n;pt@pmSE&63Gb;yHlh{~o{N_{Wc)6^{}A7{dP*8v;XDNVq;G*XR5Ej==Rr zlfFY^++jq_P|nZf{NC#pi^{}*rFRR_`i&3RSKEMT)OuX8`vr`!T?^A_{^aT>mdrZk zg1AAK=AZSqgLV};w1>khXkRf4zR$H`bF(|Kw@!xA!+o`|Jk1j(eaWKv9k1Ya&kSJp zmb7L+hHY>?Uq0ov23}IKr#^sedj5P(_g6C@{akO*92Co#rJuy+k_PTK@#OrB^A98b zFq+?)MEnzoKk~*{*k0?v@oD}>BmM(>OEHb`%UsTv&s*vaC6P{CACv35Jl6*ENuL(! zn{bil>Nt$&{Pg_Q$X|N4x2Q+_hllt{0(?Bcb)z5T-(G_aHTBS{;<7OIViVe%xg#q+ zt%KEKGrYMm^7s5Y`S@vZ?l1-s3Zfm2pYC2tYrmA|!jMdwKUee;T-?l{y*P+Vz=70I3q+N_UKHV7zD?6{o{DLQRA5bq8 zoQ{Ra(NV1C?FJ#c1I_Qt59Rnwj$bVuMC0a0Oq=ktl3c;}_;ij>?|&oyT^^Tj5(isD;E@fAh|fd1RLoSzlR_)Aa6iV?)$K>TfLCc$!g&kKhy zru(;JP&UY0a&+hw$!d*e?3S@7wy0CUr^ZQ8@PXzBsNRCK6QhL>w`Pf*Oxv>oR99iv z%_gY1H6FaBsZ_t=4)w1k3Zv?C=$R*!Y79HTzB4NL@V@ z^45#Ee!72b)bBs^N_h(DzfbxLJQJYaWhv*U`{)1hiyevI#BV>i8ZCm)4T)fNZVu)b zZ-rkSZkFx5+ZtZyQ!Vhs@wmv~Gu)>697+LE=-z4<%&Rkz9L}tQ`-7}mw6Ze(jQk9} z`Yq+xXZrnbygol4t_Sk#vsv{^xKR4rpUM3TGpod#XL9~kcUy}$ zh+mEP-&mwUqL>c#(LPvLx&tiJq=Lp)Ul8v_vvIwpLh!&xAW5DF9*-xW$ARrMzrsY& z)@cQ;==*;b6QR$or?Am(F`Tvyz%#+QFvu`PfFu4eDJY7~xULRHzE42%IUXLDPNVuU z`7l#IO4v@rypF1dwONs#FEm7?4g~LMUMK3{e zbS}782h#kce7cW%DU7f7f@-6AthC)gNl58axb`}n<5T^XM*KZ=eHuyl+X(;CoYk;@ zBMoI_2-!kxdZm5Xbe?{HJ^DyiWLQtfS+Tq5K1CO*7p?(mQ6&3j-m`qctXHsNxc={fb8aLTV1emw|gud6#tRmXmV{f?nfA2JWaV-Lady4JKG=P@w6J)Qmfu)ADs z#b=1t3I+q)NbFFt7plVhfo+q6&~4yM7NfPd{F?oH$ddYUe2VXX_#(&OO!x;wmO?kn z2(FLG^;s+`61hIZ7VjnNI;;d^{aKu!$@vq%9TPhc|Mz#h%S)Q3!sa6(Jbs$r-57sa z*NdVT#s5XRUTEh;^S7#FdH$F@f5#TC5s%CAcWJ;HP&hf2#_uDUA?ZI!`o}goD02M) zq`yV~42bO-0FifNFv7Q#zGqI<2TFUXU7Eq>YAh&kXZ;0|pF4w_-a;&JmO=*{2<1v5 zj9V~+)qd_Q{bczaqGNp^;$$K{zn=o5Bt7_Ga|`awn#3FpDy7juG=DuI2qgCtvA*qb zaBJlZy|fD9XtQv(AhwV6^2G+&-_4cQjx5Ak`XcqO&H#&VC2&wDjHM;03faqk!2Zc& zI6iwQ!@pv4OMF21wuJB8GZ9Yag>ZZ($2Zj~6gmD;!hf@P5e&8Ur0eri8Xv2o?{|L~ z{`!nK#EJIzZKEeL#Rc%zXabLq_D*h$uUJVGohd%}(pj2rl?)#P{CR$uJU>%?r6SJ{ zYA-17+Il(Ern__fOs?PRTZzc^ZzTP0#Y^C=qa!#PFTvDpC!z0yg|OVP00z$tWj`F+ z!k~VNI7rKu>!bP0jr#0gpMe3SFNyTM_@YSjH+^B?<7Di4_B8193;}(ez3}kUOtyJq zp2X5s360M=Qh~Wt+);i3j<#}y_klMcB#3Gh4SFt}*-`~VCV0T(%c;1m$t4)qB^Kh3 z-+}O?AU1H9CLA(vf};+Ng)SD$P*LF`)fiq5!FP{Azl@1&_^uRa7OR47wQV>)mFx{8piJp!Po>xOX{~CCl(VkKYmF2!90OH!TbY*U8S{{VAP(AFqP9TQJ-? z_EFTl6~GoOxm}hPHWT*m^5pR`d3;@T_KNo@zB?4(wSI9lKI6*s$K?4dFf0)JQT_}Z z+d}x!c#znP;rf|ezZ2Eq9ZdSWlK!3$2_ai)jZBwCSakn5>>8a8A>VI7($rvv0&|J}sj4fY0E} z%|Ldr*rr@-)>kN+I*j8pIex_VTjFBEpGWwuLl%L=co_Gm{)hkhi`>67-=_TSP8w67 z{1QLo{EEb{ZF*5OA^x&}c(B|R1<|fUA-(?$tjH(=<#-xnj=u<{Hz%_To(o?GEqZYhOE1s-pfYS-ZAcy*QfMji`OpuNCk% z$)4jgIsU2mi=ve9vj{(B_8JJHd&G$C!Fc9O9#nKUhr<1NkUVlGTe7FA_|B2mW8WJO zN+o_6A<2co4lQ7-ZX7f>o5Mym`6#{L?GfZzO@+wq!A$PIc7L9@ocuG%f78%x`hA-K z$|ZhG?q8)FCpIJhK=S{Xu?arDn-1BF-0+0?c35-ysbCcy3&&NXnXpM({>r-+u6acA zb|!CM5FIN@sr~L2X}QtjZP51d99kRfkN)>Jf)EfO$@#Ka(tEToo9Ly4*``k+zH_=Z`w>{^7frBG2&fW`;0fM!INt75I&RR zTYXtv-ih#|2>+FS4ty(E29Ksj;lr1Ez+7vP(7)qb7}jMxyJgo64rqRcp)V8QNoB(C z>qA3Bs?c7C_Ah?x&lI*WtH_qW;AQ)HP&YM-$^E-@d@I_Ke*yXT{E-TG&n9wzmOQGz=fi`nbejKn8)n?q227~|(*c2uNn4B6?VDhw$s`z9vJ|Uk zUxC&hmjs{rPhj!(7@q}90nM=fYCn+)p+(`2YGyZ10z;vdr#efzuf>jTQK4-b!h zgx}YPl-p&WDw|+ty$ftDU4_?ZFI9_~R?w@%N2s|uo|O;yCJi!I!;-G!c{`K0n|Amp zKA`quYS+-83fqkWIX}yj@voes#JUi_l=x@u3WA)`KJf9^D%@aI3(fVDA*9{+44SQC}%;Q*A0j}>c>{JPl1qkYUp{&n)@@k|AKCx#69Hi zO#YVJ0zqQt%>5bnPbL3LUbGiF`L8AaP^U>?Uq<78rm0x8;x_!+u?hNII}aTcC$Q$z zXk31cD!we2@OH-Am2x-1m}}=nO=`EN_Nw%0;F&lK6i!b;xBTtU;CNd4<#M9*#I~nk zO>?4`4fzEpw-msvkBR6upc2|vBuI_BN(Fm81sosb%Z7xj;^<==!I9+`(=Mc_CL*DnEsw5#Q(OS+4$v}RFj<7e^Q8D$(bfPu$s z+M}oH6zHd|E>D`dUF;U%OTYJ3;+TC+vD1ta`h8nW{eO=@I>vEAz z)xzyNwsL$X$7dzo!ISXS2;XRWEX>n521=)=FnN5XmlK7<6rU}{*Rf^^gp?L>e){}1 z@+Z#R4qb@*b7v*ipk@fbMT$O{D4m>pnWk%{ATAAo}X+A>qe6YwJBHN2W` z&&02qcrbbuyj{Enw+XMQe|@`<8#E9zTdshC=_YK4NWc#d&zYn)>0Glf)@UBeOr^~-SN?uU|PeQgP)yWQ+>iZ$XbvAlIx17 zFlHQ@$C=@{^@;ynKiJQ30Di5V4GGJ3pnubM;M4Uq+*YKC4Le!)bkLfV)tWH63e;k3shO zE?AV2%>9|%-}b8>TSWd9)X^c zL?PaECXb(elf_@MAVcg&@hegMmMgalm1~xAee4f?(pu72P5NqU?g%TJq{6?}cPjlD zj26jjpf;YKKRnOE8K(!Z_0tV;^mwXy^i@FH1Pk0=R>apoQvc%rzy9|kmGFCSv=_?W ztiYJrwXoviGuXAsTAY~L5;tGB$Aen^(744~xcWH*`z`zrJXRlr^<7qocRi+{!Qyq$ zsg`Qb(zt-j>O{(IJv<$B5L)`)6*rprV7qlI!6v3VZuiXR{_GEbxFhp#y8N6_RFKWz zf4YBdTtE8f`bzQ6Xu)KCJlDtM`Yvp;2CgrM^bL(m6n;o@cz)R5)^Cbt&4qbOa^P8f zB9rH5-=`bkK>1;mpW;a~1dE+}xPGd?TMv&&e@EZDkS)`{cE(xZxbH4nAM^M1*LQ{j zIxjvAo~I_#{Eu94n|%ycWa_aO9S_5esv#JA(gM|`)zokC_x06}cM7=w`E7WdHw)9& z9)L%qu7a?<3CkS)7(yNo#&$0(aAWK-nqL!+wDtn5Li6Bl@@G+qbwY!Kn?YBpJL-=u zr~VH=>i;@Qd(^Ch_f|*5K7O8^Shkl z_{>sHFPKfAeMqvT3NDXm-i`}*gf6K_e1%g=)Qsfjedr7=Ir znY2!x@^g#wb0Z~H*c@8T^;7?HqyB4FM_>TyPa*vql3oj6XI=nM*FJ4-P90j%_>Ffv}q{0y084?n6?<;b&%!_x?`&H zNl;eMgm1l+M5%uqmMmH<9oefD?sq#)>y~Lfxvag9nG%#y`yp!I6E_5sUsrH^CdaQc zs{|Xu_a*#!9eRSvqf)MqdHtV0;Q9$D-7_d;aaMFzX^>zn&25HT65R_TluN83oyIrO8KYxhB&18GVagh{+DkC!#(nk zA^*g-y3nF#J@;n@ziT|ZR>zTQ@{+tR1bXx{j9QVN0W?>j( z_(2l2(-1qUC-QbCZ@=ZZN966<)V{>JIb=2@!IHBMcwp!;@CaH4O4`YABWNn#U$7pY z<-4O_l0E)we)Q7+s4mr1J3Qs!j`ONF!}rU(VUS*e*y4=>rc7|b$u(}6cxyD>L;n5y zqf_XHK5AoVf9bz}z9qZeuv}#f=l|>cRmf7O3l`=wGi z*XucuekRxNsFwg5q<<;t@7gwB7~kmu&krk=<>$E;?Ey#mc}n>?l%onyb#GJMpTF0~ zy?NCTulwHz%kd*{%E(I4?5_$QPd31-bD=orK8T{K4jRKX_*eawV?Ahn*V*6ve|>*u zdz)fT)D0LCI)ttt`{2vz0p*sHDunrZ&QyE41ryB_@%4m@H2?1J^*zQYH^A3{kGVcJ zNv02omd3U)wGxCKkD0VS*!=k zKhSSRUecp4BsK$aK9E_ zX$7R`?1YWP?Ektyz5!Q$g}j?V_k@V^e*A*>?&H-sN$mjkK+ z6@2~2U+X6c!BPmytf1coD_YodYL8n;Z& z?TWr{L&RWfJ8acX7wc%Oynue|{`LFuEY}UcH5>EK`egSjoCMWL)JLq)+nDchK>rlU zl*p9HRAk5eToW=?GTz2t)ySHXH6v3e(;(B79rJU|$+XCL8-LX%<326OT9R=L9oaEI zr%R?s#@qO7E3(#PZOGb^wIkzL{FocZYfr}8_-h9;u2G+i;~J0|%8vOtBQj$$-o{@! zUq`Y|WSz-O$V_F&{2Y&sbMiL+%C&SM>q^G+(v7UU?3kbHLB=_G8-L|mdXn`bd*l44FOISTcT&zw+2PCvWGkL&+S-9LacI#*sP6 zj`=yx$GLbLf8|;@rZbrfnJbx_?3kZ(C*wKeZTyw}@rjSh~ z;~dk-_&JWr^Tdz2@%-_>n@+~DIQ9&(P%?gQCRv#5n4b$L<9`=HHj6BhY&O{(GJYW;|E|n}zcFfPElkvY>L6$+bl8ke#BID;c7S9tu=En2K|1Oh^V{vRXvj5k_SwLG^ zb!+(Sv-de06-BTq=};sr5Cuijpc?^62?Y@a1Vu5hu|>rq6c8j75L+zl#>7CeyF2dl ztZ#bn{l|F5JKwq1nse>-t$o;M`;T)Cn5ztP!<)MnoL3dDgKAI-t_O4Tz&?7hzw>SY z&%(3ue>Z};Qm~I+?C-oCz*^Sc9&Q42H-qP-7hjw6taS_cKYPpva|>W0%nuf!&bt+E zgT>(aF9CDbUmD)r?clswU@dF=jF-VISPpl9URHqfR>CS+4Kv|RFz55Nk6!HWJny2l ztUVC!0&{C%ZFqC*zLhJD6`hh(iQ{78**aX&X1h0iR_d2`*j;Z#06W)TiVKX!h zZ|-2Qr(>#nX#nqlb@SjI)XO4x7aUXV=e>Im-Ushv#qj2ufju2l-OCpE06qlQZ-p&j zZDZ?N^CS2eTw`nv{U`7#_}V^$&%rvzzGnRvu)cG@0OwohOEBl_H1>6W1+Hj;YdsaQ&qV(%SpPe4opqjs@4=ikjW>d8e*o8Ph}gTM{}HV76S&Sg-tnKo zoHdPo4{U&6z%}WJ5e{}Z*&U*J0Htbo74 zoHdQ_0N4Hlu2~%Ms__4!*72FU&N@8n9FlU>Oz}cIYjYaca0gO+TX>&6b#kSUhXRyA zIhZR#h4ALK0q1QC=C^~2usxXD0V;(z=X~ew2$i7<>;yZ5xn00Mda=Lrb_Hu$dpFn} z%N3vA^@q0Bc$MOqd1c&VsYUn>z=bcP`9^^Wc2A0L)zo_R)*|op%vf z%i0&iC16gS1DAs1>Sb^_Tme_YRS{o}UIX^|Z_L;|%!O;g+SkGLU~V4V5Z-ZP``rjP z!Od_B%m;G|z&?7%jor&au$HwK!L4BKHdq|q+!Ao!Qn($K!E(3*%&h?X=*9ldTM5>( z_9|En=I(^M!kb$I&NIIj)`9cy26OAdK6g8SEt^_}++xG(qj zFl+#GkHDkh%~{`hkAbzUZTvVq5qRF7yWaD0o@crdJmV+fsqm_O925IH=V^Ebo(1p6 zb70QRx8R`(WLP5l=_Azz5+SGq&G{uoXUnq3|)7 zJ09$#7yCPJ0$9u1!{8Gz_bGf9-rVQlyf5HO_zHT#*I@2gu#aBs@4OLUEo=9IZ@}EQ z@LhOw--GjhfFI!}Xb(Swx!zzOz1ZJ*{lHq*?gYPpxnJS8@aBF8=lubH!e8(=bO^87 z$1$-At)UldRtLw_8sK@<1Yhr-Pz%h}25aiYy3VTu zu6J!+s0ZdeH^=qjeCO4N2G9^1LF4e`(q~N9F_u1$@?6Z7?uB~p&fPon=1QBuJ~5_p zo~2Ep88n9$U>`lC&%2%tW9joKuRpEX7xiqYQMw=C6Z@kF#F*-9I1pMwE3nr=V9uJJ ziym_B&3UflJknb0wa#*-2cw6CCzn1)dTwo?EuM9yhr(f*H&@yY4v#U_`t6|ucvm|? z=kVryKiH44^x4rp%MoxSus-KG>LJymZW>eR=jYGTqre)TqkGoN(a;s_t-6ea} zPv`~adPAS^=K6y3%=d%-;QRq#ZXgT_Z|)dyp64+bJPT_K0dv+K8r~c~@6tTin76() zhJiWHYIt~a&UfAj7zv{y_MAos_O!R&`Ofn-9|zX*490|49d}He@0_tP4#vara6))< z6JR1Zrh0}a!X!8eCd0|$&7A^Mz%g|yOoLNlI?RC6z?^zI*wb;!1Z!FQBDfgLT>^8$o4XX8cNts`SHP8URe04t z|BV^DhpWL_);4y{HG#FP;H^ zKFi?_SOF`+HF~j@XXcpd8M@AA>00AeusZb4i1pqr=iLQsU~R&0X9Tz-ABM@@ZXs61b7rY zZ_nQzkAXSWn!e{8SA9N@gJ=E(Sbrm!Q+++2m$A>ndG7g1@SLn~?EaqupNC$2PR@B6 ztY>{=@60p7v#77ban=6r`#EsW-VfL4ReSt5W^Di2@I1T#=faEO$)(Rb$YfVNQ5+*0PRcD)ZC({uR`^W5M`TcojBH^H2GDcI9-H0@

SfM z1&)D_!Q3FQw_fbeJiqrT{RG_?{S-dSd{XN(mS_`mKF3?%^~PVom%&%eIXGhbJMU|- z<~Q&ydBauc^ZTXJU*K2b!_ZCP&3WebVJxZr zt@|5TljrF7NXe7)`=!#~V@$RG2>1h9!6^6>%>4y_hd1{RIM4jQB_;V1l==Bw*u%pw*NPl;_b-SCsz@+ zC#Hw7pF>m5dOKueNh=YvCch(8X5Ri0TbEpE6SPV;mUJiLonaT)mGMR>eUdk4z1@JZ zq`RZ8*#oKqwfy{?yg6$**D=-kuCErc^{Pj%23j+`xjn&owV*cC0ejU2bJlcRFV1(K zHS2-(JPXfDFAbn!#J)D?G={yveS039Q}X8QXD?&>JI6EL2dwL}^cm=-88ipSRQvgC z_J#ex^XEAyZ_a09PsddD;vKYRx+~nd`~i_Wkho>$&81%UHt#(<2%O&<$fY}LKfSn* z|K@qOtaS)@=6dl=+JIxKugBNj77hi^*EM>vr!^f@?cq9KyK6mby>&f{!@!(p-VS`- zuJv5)^Pi`Vzgy-HhxWww?GWBvN9Y8MCGCuMfg|8ZIEppa(?e+u^k{HQ?Mlx3+zsWv zq+Z=4hvu!(^8+%U z#s?BJC#@TVvbJ<5^q9!0gJDSIhN8^#cjx@Ez`6KcgR$Q?GNEpSu z5_B|}L;bzlGfU$tXPIgqM@&7x2g#2Cy^Mu%z*y4p=<#p@On`~h%!MbH`q|4dl|AHs zLQe$h`aMp5Qh0MG!DO(fYQK}=6qo{2S@TiRvPvEK{kFMta(pT_NF?~CAKxP*CcqH`jL`rVy9Q_g)b z&+jg+W$oOv#Fs|yGUCfKZ!UiY*z-!b3a)0}+vqh}&hIxKz0`Sd1KbEV!Og6BDLlE<&;E|7?%{d#7NBnKF?4=-a|>W0*i*INBDfW9gT<_Q zDm*#A`?Y5pQ`w8(iCZ&$k8Ru^mIMRQrC?9hena7QSO!B__ekcG((ixAjNOZCmct!j zjTPb5l@U9>3Y@bV?u5G{w$GZtdTS$IhdR&Kd^fBI&%hdbv8J!dG4)<>-F5ZFHeK>T<1M=t@XUq=Df4dg*WHDah~s?7vL_c*l)jgX!=(ya8u}we(`WH^DLWEpW}-uoIdMO4`C}t?we&oA}X3;ms!n~PG*+WxoXLcPeu=-yc_w*a-bUg+<< z+(jt0tercPxJl&pA#R#^bA@JL&*snq_GRAr=zdww{|=sd>xKT#%bkHz%i6hY{ z9L~HG(e_y`HxsqDUg+<<+;J$iteqP}+#zxui92Q9T)}&6&n|ETcrTBFqk&xRB-Gw| zp}+I||9%vxW$hGq#diz3qdl_mq&L1?R z02m1NRPE>dW59h4VU2V2kQqeE1>7W`NVnjg7D_-X-&qG+QXc8-CE4eRSHke z|8H2~B5+KlN3IIWd$({2ab?t6da>RdU@YmSsQbDME(dDls)i?*Ye0NOjHy?WtBzg; zR}f5y9_a?;URb!Hozm{(bAtIX3V(sM?8Bg{WM;O`+GFY z6&^$Bojf`FJFoCKSn~;Re;dIZ`z`$kwg6+xbQ-Zt1kj;bM2y!>tD)pg_qI(;mPH?W%CNJkQ)Mn!1b?!IqKz( z3{NgMkl1;f;5B$1-hem3+*|N=cypV?-FR;en;mxgrk>Hp*9LB;wa2)&#*3t|0%1Thil8z%@0gu6Qpk7%n za`Y)H&Ahp?e9WU}S%KL7)2oa^sm~ged#X>lCt_Ytv>b|z_dqLzH@6LJ3ydY*4y_2= z!wyi1HGRU9^YcR4jxnZIhAOZV>X7$=6v=(TgO!U`3x@x zpWh|WAiTLoU{A-?m%~7~0E&8*URSWLeU66fz})pPFTA-MzqO>i?<;}$UIYpEIDTrF^(``sJd zt2O3>xdpH=ytzf-yj$TmSPV;GDVS4lhh^Zn>T6sMcfbl*8SyG~HQX8AG2^?yx@%x9 zSjRKai?7Gm;+X1dbkFO+{dykO(aYVi9voBefqUUTxF4+Z0NC?CZ%yYu2+n^fytN*N z4O!0L#r>IB;7$~J5<#ll031D6OOoTVU+)Q{gyt%i4d44V{dmA>x zJMeDg-XnfL^J(083w!_{!dB*eg?^Of{LEJNad^j#KY>r-GuS3#>wFIC7ZK~f1n0Td zy3|kc*XTE(ejBm=J7AvQeU$kcDiHf~;fL_%+^_u^OX?on(~n@ipI9?EJUPD?@v~JL zQ!A45S^L_o`wQNCua`Xh3XZAt^Y@do-{5y*@Ax0#$@$seo{lATFQwpGYxxZRg#U6r z7hi*C=^Ezy`LgV<|CcLdJ^j5S?T`Hyyt99!0IZ)Y`vE#=6yH?J=%h^MDS;R~%=e=95a_%X1+-EQY&V=1y7jV7L zgj}k5+O;GyQI7J?fTM2Xmf*vFB9-YQmmS z3u=S8I#4&fxq9Hd`p^IxLL+Dl=JtZU!<%aY&a>`5&=g$XEWEkq&;lG&_l5mne>eaR z1Z(Q0CA0#^)Puk^t>Iv>p0TwKfi~gIwFT!K3Wq^Eu-D;WPPJb9h&!Opvqnd7eJAJ) z=DNTU;msWh&N~W@hOS_bZeY$@-NT#f0nW2VPjG!N=ndx7KF~MfeyH>M!vGiv_Anj< z);cD`&<-HT^(GMoZaU}|`C)4-mNsqW=em=4yR0jGsG=XrTn zj;Z!L9ekEP+nI0%m^%~frx*9(yjft)v*2tv2h5!dK4-ny%XzcGyXf6K56%a37l3{A zVt?md2-dRpMQ|~gy9B(adhu>KZw~mLst1?CWnk`du#aBs@4PF(TGqZ2t^#vcgYP%J z><7-X?loY|x-d7qxohD%a7?xT^)L@^fE%Gfcymp_K8~sM_uumJo6v0{z8QZDsPiM% zF97D1FN8&KYZjM%i{8dsb#WH!%a?%jmcs3@3`W3mFz3C$BfPm4;JneW5=O#USOw-* z!=2&H-383^b7T1$^hwy3*gfJC?s;uCmh?Hi`&tKg1N-%Rn&io)&yCM!W9jqctHkT! z9=I3ogZsmqdjRTyV`?pE2oFMicnBU2Z*BuT0*H0Kp2Y-sEWEkL;R$d|^^7(G zueJOscp4^!H|Lpoc8;l@(KFy{^0hw?FMzoh!J2xpm-Ai%*Sq#*cm>RP7MsGGb05xo z4PJ*g;7zc$UhMf+#BZa{*$nT%yI{@t!kc>^wuJuxbA zHQl@MXYhIG7ZL02<-9N9EBG3|0q?On`+gVR-1p!->-_*f!cXusnEM5O4R7u@aGrPM zcbE(IF!m0q*8Bq;Q?CWr{Rw};-w|8aTtm1K98<67&U(iGpgzNYOG=6*nKxI=L1~Qh zJe*U^LjlU599WP%x%7Jt&sOj69nSH6W8Kte0l5lUuDA{HwwX6q+%B6}tVp~)?0{c_ zRswRq-%>BV>1nmjqrwOBjG)H>w23)W1}%(yPp3#}iqJ&oq?{RVO@aCGpK44F^DKvxT&;s^l4RW z9(?avGrdpVCf+Y{`x76Kd2^|ky$^(z(298 zjvQJ%7!JvD#Wtut+rpu681ptq+>ZENVtYF#^iOlFc{sFZ&a-HT@a8%~Ctxh8{W?Pz zI0BAj&8G0=Qa^g7F_pde^RIXmP}k2*#{MiW9t~YHpL!bGuN!oS9?YAF_KY0r&qjNu zah1LJZ*#F1^d`Oz^)Bkg``8Bd2)U>DGrMP>EX@kndj$j?@Id2?Yh$pPZk`)7{bw_bbiw{o`wF1IF&jbCh%7+=yqR&htK;4?Zi; z{;=?>&(|@z7@Xt!OThKUbHF<*mw|W6_zG~Ickn8>8m<9r=+(Iq>#qgpxc)kDz4fjK zbMxSa@aAp==iLN1!!2O1`C!gk3&NXQ2+p&{B5?h!a2uFg3`@eBTMEv*9hSjzu*V%> z&RQ$Nn_CIa^F6c*Rzn}SGrT!_TGKJr9`5Tdu+|#rAKu(RSPPD+_E-nipelGqcY`_4 z!d`l*4$kuotZN_7cs-cA2lfnat`0cQy7z)L>%)EF&H2oIrjDuh_g>r&KFbH7VR&;j zz&?(t_V->s2nWC{u)bcJ!am@b+5{TGL(l@O@14|3D`*Lhsm-7(bb^jB6CMV08{n+) z<_-quJp$f)-v>S5Q83pXjtFnAEjVu~JO-!3<1i<@xpTlij;Z#y?h|0mYhYt|b2H!! za7?xTlQ0D)g7@<&FgFkErx*9(yqmz9-hJ=q(_roym=@lgy`1+fOn}kw96S%^7K45C zVt?n|4%V`^?|~P<+>0+lA#Yu*fR?k#v57)!bteFxr! z_uzfjxF0?E9ZqozIHrC;?nv}Q*h<_JwU%D2_Yp9b^kbAY#ZTZJB4@5cxTuJ zTqV@u56r9306fEn5jR2`gSuD5de6amdqWf02bzLss|Vkw z6`F-_jxxvdtgYbBgx(h8{c^lByG+>+<6r2TP^O1LW} z>R!N|NM7aMq<)Uq0-kXR&%K1_pOoiU!n03awIBB(dH3OYGy?8JQl4W8&p&z9ex8%# z_O~9-xrFDR^k9^Gk-X}8*~f9u&w4zk5}tq3ZYcL4d6oN+`Z>;>DB)R`@H|Vn3rYK- zJlEt^`|-?^cOUN0b%%snuT6NhEqG3j9}0&-duSJGKkMmLU*F;3JxA+xf)3CTI!COI zfi7Sl$BmDGu5ctA4ZXvgGq#^&diUXZ^nmW6{n4J`ReO3)j=K+Q_JLlZBhbF#RnN;l zj(d*Q8w3MjARH61IuZtheH=F)0>fb_41-5NFUIzBOz%EiGYUKp>x~Yto&?8*S3R$> za6F8IW5HT_)z{|v>D8m)1egfcn*b+2L;EZzh}>UL6LWpW~|iX2IEDy|dt)@an~IZg|yxv*AKG4=#X< z!mIYPzvHT}&vlo8=V84$;ni#5((tP1bvaxGSHSsTAH8Zl&rh$O0$0N|V7($#4zKP4 zbHl6ls|we{bx;ZBg;(uof5+7;;Rd)7JP-d@3VPLk_SdVvz8&Buu-^7?b9mMB^86fE z?PvY@a0__;3t)ce3Upz3brIYOOW-!Jo^|!A{g#GTZ--g146N(@Ssq?p2X};5?Y9!{ zgjL}4^ttL)``KTwE(Y)CU0}U|uqM3vAgm3q+V5_-7uLft@LuXw``KTwu7*KyKUmMW zKin5Qi9P_1tM+>c9)*V^9)Ug*3`6bjxOxv*uLnF9+6{d?y!r&#&+(1$6g&%0hxSAJ zhF9(POnCQVy?x=i(B|m#;nf$wK90W#FTtzua_GTm>+q`mUJ36$tk(!Og*HH63$MNo z_Hq0TcoR0mTcOR+rr}lly&c|tST7Ingd*v#>bODta-)CT*EfIens(0R(@C8`M*Qxi+%^80M zUxVv>_C6E6_01VO-)Ha*cptuv*c#^a-@*4_J@4tp@YXcvm}|W&Kfng~F=E%7)BglN zgY~@M-gCV*%^7b1@B1&{o&Ggq*PGM-2ET*#*1_8F)->msYuCdcup0i1*!AZ0f5G2i zy%lgrcx#$-%(biFA6N|kM(lcXdY)|#N%efz3&UHJ9%;>iivHXQ&K2!7kxd``O=dwE(-q?qI#$V2|)> z1E?BawO@7E6KaGuL2HFq?dh2Nr~=lk1GPiqT52wO>Qn8yZF265T6us{I^u zj{C4)GiVyx3T+;=L0f=*95>z<4ut)(xYRiZL{7Dzhf(K92W> zKF}ZfhK@!Dgjem?FTDG(-e5Q;bPPHqygC%@K3`WB6ObhOJRCv{XBf`6n<6sLeSnp(*5?(zAriNGTcPg9?)8RCj z8D6!Y{T){)!Wl3Ntam1y6<)mz&JM5I?_9V5X2bb#VR+Sk_IF&J0T;m~V7-gs+VJL# z=YV7SOW|_38m@q=;F^e4``Q1>$QjRt>%m&r!MyP561V{zbB^(iFduG$TVO$W)qeJN z%sIvj;a0HTBDgKQx&{`9SM9eH?tt52Ijjh;+Ry%ut2e_+SPj-&1$Ty5*TG%kRr{I0 z8`gsJ*N0c_XMe}lWpEEX0QbWE@L+h={km_*RqHW4X;}NF?a&3 zXZ$=o4(3#!ud!!uKcDZDurc&y^r^sp_IFJ6e4d8q;2H2fdPnrCwe6u-?d{!o0qk)e zyck}68(s>p+WQrF4PFiPj(gX|e)e}veHLcJ8(=--8SpxoQ{RmEE!2LS;XQZgVtQ*vE0>58-3j3Pa)e@T&dn@3{IdOn^_odc)w;@ap&Q zS$NfcU%=P!CG>)0!>jhQzvJphFao{->-B+e!>hl;ci~n0{Qy71kI)`^hga=qf5+9Y zpdb7K*6RenhDS?FiGK^P+V2ne8~zOKh;|6-&(k`3)xFh+M$jPBy!&n(9`!S5 zX~WE?&!&3E_sTTQ-#fh8gf%`7$M=Dz&;pu;+Ru7=)X$)$%`=}qoAR8}x_v{bSGphQ z)%{uH`RNaU1K}WO3HGv<9!;M;JsW%u^|NAH)0)_GqE_j_fKPffdPsQG&ys!~EIkz3 zhW14d3$M0gp8Ih8aA*&_uSz?F9)orcukxNK?U;E#N0zn%_kKjC>GP~-hfkk#9Xm3{ zsh>W7dUi(5Eu-uw~k)5{?PF1v0&X{pm)7zrB^+>;o(*1kATrIGGfom^Dw8ji`f3ow}!9# zxKPhyOfU+yj$^9x$HMV2F7$Ntgz)MF7$1HjdLm4QNue{*lf$d0z)9h!pwr+qI2C5V z-Qmp{+s`q*`>@_DI0Mdvvm#b6g|opvjvJo?=fk;h9$XM!wV(YRSEs{;a4}f#BDf^H zIveJMSM7HhTnU$l-iBTk*w6k~faAtj!!=+%W9PfxoN7JC^se)MUJG-f2YAMM)w91Y zym~!&wl}~$ms9Nm2=Dp1W;OUcjjgvTSdZQbj;lWJyI>ux ziP(PD6Q8%w-*MIZ<+^*|Zm{0H;nfXrUwGBKdOth_55QWmk6yK&cUP}^mtEu9hrxP} zM67!LK8F(`XZ$EU20n)e!9IF1wx(nH$?!OA1kc*~?prU$z9wVO%(HXPzJ@2k`cFly z`Ye1lj;WsA)9?(~$9O(?SInut2FLWirbXc0c`nrXt`qCq$Jgk%@oYF3o)4Xlz8D_O zbtHZvd^x@=@yqa1=%whK@T&DHgm<0wPK8%sEW8@A`VMRY`#Em>8oUXw!zplfcyq?~ zb4>3(#>3lSJ!9X)Zv|V?&EU9dzjt8^ych9QbV^`9`#Y|_0o~yPux4L4G`!jdJ`Atg zuQPlMAHgv&D7UnrBj;r?j0e%9{=STQCJeqph-*MIbw}r!qf5|l6mra>Z&(j{i zhPS6@>ht?8)AafL=**|@la3;G503v1Bj8W?14hAL;n92v@!#Rqf53bW{TG}+COle7 zpL}WNlTyIXZ}~DP5Vr#QBu_5&q^4sj$NkTq85C zMYJhuE#ic65w;J%1G*hpW5=wXpE-?_CoXM5Tsd-8(4EOOLU+m3eyJWlX(e>mY&^dk zx)Zo=k4&vsx_9Q2QZHXM#$D%{>QD`=RU^D=-R&+ z{VrG=e>krN^>@X5hs-DKNZdYrC$tM31xI9>ephtw_)@gA2Jw+Gel*_u+#R|Rdv~p+ z7vs*rSn@s4uE4r{udG(7ci0&9ciem*=$++^bN7+2i0_A1Lajxdv?n?sygCqEe+&%D z>iK(l^5jxHIQ$TFC^^o zWHoco5YHt>bI%iB zoB5>I5!;LL{Pl1H+zdBnntPcwFJ)e}Xa1%bXD`I?U%nT#@UD8ljoNJHPd(I_YwDxoH{TYOLLYI4+Yz0RFZ$(DIySx${Q&+)iSOa%PY(MLnQ+<8LYhfLDzP|3eL+y7*c-5Ng z!~0rY<62**YCX?GuljsEWBmg#4}5M9h1$=0di7rLb?Z04gW$SHL#^lY)T>v6&r|<6 zc<-KsjbJZp=~d1(@3YgZPlIc`$K174i+h^9%6-f~7hd%)`o4J)UI6d6ee|mJynBwB zGj`pp;Cs<}7l&8Rflc6;bBw3M+3S?e!{5$AL zFazETwV(C$>Ra%B_$}zW;JOb(tv55gdNOPc{}DPCCc`J8_OqUR0H1+l>gV8^FX4-b ztv4ld>hTeOg?{RlsRwI+mDN5N0w)t{jw42NG}JlMxr zwcc;=E0{BO-JkFWSZ^fg#kdPNrvD2D!T|Uuv?uy+c(hPLydv|396k@_z<`?X3xhJR z`tzeu7JfC}dOh&PO#M7ksF3-j+mN>pg7A( zD`lF_i}Og{bNQXvevB7(#QzPv?n32E(|H^j9<^VgO6J{1ZYA-~uoLkjbeHhzp0I0p zbvM`@s=*%2Uk>XtujW<}Qzwn9%+D=Es{{4?@4ST?;njvvGrVfQT2L2iGyfLg+2~dK zrT&h)kE-P6qV<4!{&(s^{qSltXb@htUnAHX8Z-YYSde+ueyP9X?xPO5i_j)Oz1*4T zKH=4t&@{Yizvi$Xv|#@Ea82gZe-Ec$>hHMw*o*Nq(EWjWxs%ZY!mEeEfnYD^7`K9h z;UMOp1{Y>twO{JbSenCLa{O#490JtKjYZppS35)7@T&a|gZ9vl`6t56%&YcG{T+87 zt;rpSb^z+-#-JU;tGqV~ox-d3>jFo^5pWc1PRhJ$ztrDx_i;G6!Du(2o^j6iV%Ny2 z-LtVY$M<0`=nK6w&5dTws0{n1{(WMcy;v{jx_+7F?A1T>Ne2+yhw;Kdu>TM^Ces`_ z|9>oc)qVx{?6~_F3M1fH7!D)DtE+&$rE%4@$H92;EXTp|;ngW{LU?roOa#x+vl|BX z(W}<;`Ri5hm+Pj&DPX;6;nlO?)bQ$bm;v4apZz4Tk6yK&_gAl;39dUEW`Xt239p_G z=Z05jb6y3=6Q7r<|KG8~1({Fkn)AcE2fgFmch&j1N|{%4)rhU_IPcwD6{t*nai;c5 z_3%mE^Cj7MVGhckTvxa(Q|slbW?s!TAig}tufSJ_n)s_SwO^`-PkJeObv9nO2E7tk zSGYD)>*eZaUd`1bzAp2H>+y}D5&niu?U(A|lg>qN%*G2hq4R)sg%JX43(weC_3XVj zdez>Z?J}4Jo|R{z7h`)E+tc35VI|xV>K@&zxc5=un7RsQ0NorBf*o*{h9b-U_8a{?NQ=SQP1kJ%&V!F{TX*3rQe{B!$z>C zXW<_8sC)N2XMIxo`8{yyujHOWzeU|6aZ>hPcm|%1oUwa*9-d?VkMMhVa>lu%vavMh z1!C8}M7|yREWDigqyvcihey-T?pN@y!Vq{7tf5D(ojWq~sz196o8V1&4c>sa!mA&{ z+u_yC@D6N&cj0~bAUs-DgZRVn>Q->wC-4zi&*z{=%dGWTc=dDm0=x@f!h2vJy=pz5 zkzVz@UH1cgm&K{(_ry@8}Y0NpsKY{E1%rw>fJG{CI z{t7=59Si@$KcU_Yd+F6b;JD0}m7puwXAXS~tVPY_RrX(2n)#%8#;IM#!mv+1yPoO=a2f6Z0{k%|CA@fPMAufjB7Oe=CVEatd=ZQXf_7uYR4n(h<#%kgy2UMJois^YybdqB0!Cq0a~dU&-4)Py>)C)9?z;nn6)FT7eG z8o*xA5E{eY;nhXZB)qy0xW=_j!FsbJ)*H8gW|7+$-5*-Q0niBSV=TtjJTQDKbU$!i z>rm?*5_n#o-@)LxaT{n0o{O>ltY=O=2prQN3hkf+9L||`MmuJ4(#ME9LHo!VcY&ke z2eELI3arQSMY) zcTA}DhJaoj3WLKRiw=iTFe21`*3+wlU}X5wsB3til#KyvjSH`y3gg48$HNJ5B1`~# zSxc`T2b039C&6Tx3Ma!9m=>{WJ?lEA+HX3X2G*ZZQc~`FQ4c9TJ^V~`B6vrakM~Hg`kr$S`g6c~-t%)qeGi-$UL6MZaojWX3@(84LmQzj z!>ji5Y#etV)~gE_hSo+e3a|S7?c=!5+2?l&TpZdMZ4h3ypU>5C_hG$DVNU3^=w;#6 z&Jp)O?dAQu0xl1|0lhN3YCp%^gL}CO=EBv`4%&xTt!)p-ReSrMxen~%d+GY{>Rm7| zylU?o;TE_FT<>eqtG>3H;niB;9_Pc};Q9sO)q7xJcy$rn3QOTOSi*bUyQGH{-%jk9 zxn-~%R>2*x5>`j7-VJxcipUu+2G_3%y$1EH^s29EZFpa+d-k=j3-wH_qgU+ah35@<4JTQsL#Pu;niMXZO8537oLHqLtjOo4X;*)0pZz0s`mo=JgBe3 zi{aIwU?0baz;JjOUJ88+eI>kVzfs}c$0_g{Yyy8yjSH_@+a8Xq_C5jL0DDY?nc>yb z;mzEhcZuJIci=tHqvboG?}KCJj6Z;n;6v7a1wUs#eSZ6u_~UFW%`yHIK8MdD z-hx^OQvEN89ap~u>Xv;2)K2jy=+{9-^jmOT{f_?KVIcAMnHGFDKV&|s{VIfaFV_1B ze#|s|Z!$RZ>H87ygZ&(@L{01c0=`bP!2S03AAQn1vHcw9^%uCC1@HWCnfiNC*&mr# z?N|1Dc=u5Xe}ZSX89eL%ysGyc{{q$(oLBfipYnKr?$}4-_A7V9G}CP z=r-tXFooC}_@vg~HazO*)U=l8UcMdkXTUkc-UBrKo4I><)Zcr&N98=X^6i29Th7mm zZB<|=@HuXUuQH$RANQ+#=NMOcZT@~#zAN*1fB1V-Ij=*X)cW?(tM+$) zdjNgX?@jIxpMIaBm+vQidSB5$y=Kp#Dp=3@#Qy%5a(Zi4C-)9o2Aoauy#AD9th@%) zhMG_d>V#JxfV$z;dQcx4Lj!08dxck9!rtN4Ca@=1d!JBiGz+gbho<3Mp!>mruz#pE ztfg1&aX|Q1=)T~()?lqeB33&=oA7E|I1~fa^L#N3dR(@M7hMf%V3KW9nG2-gp=nIt@KOym|uI$MFd;5l(^= zLr+B~hga=4DZKmeOs2renHH@%HN0v+&&hH3VZ9kJJ@hQ}wD78DW*^5r$J5~q@OjRJ zGsB~)m%SZV-ODUE2ds5AoEu*CdHehwSM4<$&Ij+~d2m5^)qeJOT=jlk2p5C(E`m$K ztNVfX*KyT;bKo*)2A9I+;Z^(D-*L4$Tme^s^{#}g!>die_nzab{pvwoxF+-gbZ&U{ zT5u1JUkBI2jW92?A=)6kYL6Sj)6;+N%Wr|3ve82D6Z$oJe|XjBac}rK zsOS9=tmj=a z7Gv+%U*T`$ZhOA}!atc7c|R0OGOreM5tlNTXHv{VITS*7M46a8>hCqi>31EU*;;&s zthVp};x?I2x-;>%;Z=KAgi5eIYnH&>nO9S7dpWMsyL>)c1*}^ccKUzbynYwh6{uZ) zD=hjyZ$AAjx)$a9io0d%xfb`xeA24KyN9oa)__`2Gt+eLoU1;a@Abrc#&~UVJpW=n zpk}%g9}(9Lnxgfyu{6iH0W^k&SzPYj^Ues*IQ4eSIqW0dwXMW^5u@Ja;@+80+JxAC zj2HKTX0R_b&otfTFEXF*HvNh%Vw}B{zd^hoP}BEeasTjY8#o}mYOe#~AZW>a--lZ= zui7j1cHBL%m-4sJ)<8Yq^Tqbz%^4pY{t(oDZJ`|;%KXjnZp5hlQh&yhw#sVyGpu+x zG3w8%Vu#Ep?MQ4N#*3YxGaLzBGEG0LHf28j45Mf9h!|%d>1W?#_@jtVK#$Jiq%(=T zg8djzaW}LlbZ7oVcse|}^mBP*HkRhFkM!B#I&!^;QUBde_Yt48I@&uMFZMy}KyB!k zY5I5lhRmmbzpo_jAL9e4cOG1hAC#&6QayaqzUVR8cyTZ~5Lj0nnrZqhaz*CTXOxSG zkB#wR)Z`5O>{J|)sr^zte9|H4$ZWhg3LOrtD;}3=`Yd%}=F?}avx&#V_*iP5N$k0g z&tm(fdgiPJU))i08G<_DF#acOw+(|Gg#)&*qnRPVa$u7~TuTJyrIx55qK)f?d^m=8CDy{-sG9khRVbs$*V@wKoH?uKgM`Fc)z)!O#ZtM>MFuLpa09`}S-Yrvl2ReM*3`fzV( zQ}n*@s&~dcIPM+r89o5_hc-eRhF9(3vvu5_ZNR(vV5s%1t5@xJK=^%7>skMyQ2Tio z^=d0<5xynb6&{98FcUU}SG}ueg;x)TN8nNLJ>dJNdw8`o91&h^3sd27cr4UAIw!np zkJH23)BAo6JQ3<0-56e-0q()^GvG;h3Z{Vfb6$AWUiNlebuTx;(_k&{=QH8e$uKRv zYOiPEd6)p+_r>8=``O=dbt2pjFM#!y!;9h7aWE;oYQG`yGQ1SJ6kQTtwdbht?!}tR z;FZvo=&Rw?;b1Sv$3S0L4V%E)_A(wEs(0OMa4cBQ_l@57k~!k?e&AkT&(z;Ji*IH= z>088agnt`-2i}KwGfls9x*vS{j>Z1(#rPI-M?z2hhndeui~c=cCs&F}DA)cYem>fie={uy5V3;rfwg8lZQLMUKUyzErMR9Q2P7f713>3`!CQZ{S9$)DW+!n`{B;n z9$e$vN?^Sz5vvVhC)hD^#=F3-z}n(w;Ew3kB6sJ1|AzQ(#5<7VZlu2tzB@6`+P~+W zylQW2?-9B)>i&G~)iOi1S|1uf zWAF@(+d`vYKXfl}T=g9GhNjRYl(YQbzah@qrn7de88pYggL1~{?}e+@uvUvudl>Hz z2XI%Hp)KLSP->)F)U&of3mjAZ8Ik@j`9XMo7NnRO|NA$@TM@Sg#?$vvW4Yiw!;+F6 Ur=57>sHWp5jcMAvc??GYboJrK!@%^DfAF)rckSBQaQWVPxS{yPoi%so@7j~Mxpn)uw{8EpJ_)yq-nOguxt$;U z+!t^A-E*b?&HKLOe);n|?Jw>A{B6HGaOwMQ{oH4Fe}4BD?f1372fz5a9W{Hf^>@nv zk9WMy<1KdUuRi|0FMXl*+1nbQv$qWL?aOcaX1;uIqH&vR-`4nSedm|-jor82`lX$& z-73H8+Pi#nVeRv(KfWJ%U!ML(3;G{_v<27wGsP!}`{TL?pZ?<(4F3K8fjc)ph5p>&sSMU%u-43a+)ibALLx(Dt)v;JuLrMbdN6U9fu^3spP29e*1+!> z_;&_AVc@GC9MHALpAQ`NVDd!|e)y0Fho19b`WX*qpYq^{si*Lm_q|~1DV*`X|CY`z ze|}5nOyLI%%o+IKc(7FV;Puyg@OMT%_}^~zVCA;{EvU_!G|C6;D0jp{P5p--+yT8`Qd*t-=8t?mY!RI4;yyuU6!@zGFxX(b--XjOh_k#u= zGH}6zkFGbc+rWf@A2o2)z)u)>tATqA{Dy(wHgKPT4;gsCz=H-JGH}6zKVNTPw}A-* zKWgBpfuAt&Rs;7K_zeTUZQwowA2RTOfd>sdWZ;4aA6su=w}A-*KWgBpfuAt&Rs;7K z_zeTUZQwowA2RTOfd>sdWZ;4aA75`^w}A-*KWgBpfuAt&Rs;7K_zeTUZQwowA2RTO zfd>sdWZ;4apIC2Tw}A-*KWgBpfuAt&Rs;7K_zeTUZQwowA2RTOfd>sdWZ;4apImQX zw}A-*KWgBpfuAt&Rs;7K_zeTUZQwowA2RTOfd>sdWZ;4apIUEVw}A-*KWgBpfuAt& zRs;7K_zeTUZQwowA2RTOfd>sdWZ;4apI&cZw}A-*KWgBp2SvUXzPO*O|M=>awfi`0 z*mi5&16P-?UbBz0hHbaTec#oKSFhQ}S;Mw<+^n=UroJ}yujT4nJIYt;Yg2!l`rFj6 zD`71@ZQj3jT8~n_)7E^}i1Kx{wW+^N{cFQ_mHM1Dr2IDZx2@i_qx?4YEA_SY{Z+Em`p=b}c~)-JNvUTy8wc8>Db0=6}+wx-qA zwAPOQx2^29mAw{xU)yZ+{x zmD{>z+0?oM+SK2s{xTgs3#pAWVK!I&LqittgZ2RI|du=o-rwf^YqJWR z)!EH!alK~VPUXMOKLUS$JG!RU_eJ}(;|puH;{GwLwu?wJELu9oYVU+Hf-A& zYolSEqxiO_b+IXab$e~*&%lLKo4*G%VE9_;)hu(H>V^3}3!Q~#P! z{W*VDoBA)Ff2D2po})Sg+j{?MJ^W%{xAp$E-rv^y*G~IsYd&qw=VJ5xbL}bb=hOb( zwTq|ywWDimW@|WYEBkG154FB8+NVwZZR)>x)bf0dWD?P0yx{C;(NZQkGJ{cYag=KX843fjDXH7~x{*KOXvHdKGk(rr`!#isbx z?X{`DP5r;wnhz_W9bLP49^ZC+p&ehic+}SRF|~b6CZ_DPW6Qs=8ZKH)`CPkg-rwf^ zZQj2otDtRVueN$G_I2CJZd=*E*;e-2#THb{Y3CK4^R})DTr;gl`FvaNZ&Ux8Q2jZ} zyG{LTrt`OXe_QXr*t-7e_S$-XTkrqP*86|6qH9;LeC-mEwWay1%dI}Fsn&7zqV|E0 zhmSRt|Lr+B$AQ{&@@6}ry-rj=zVK<`V@u>zx&YfT4j;uGgSAa3ScAESzg6-ORMXL^( zYk+K8b=|k>`qEX`_Nwd7Ro9oTy1snX^%Y!ed*}XiaG~AR`Zt?vfW-BBg+IV+R$WK+ z8Z3MZxa!X{U%&80tJ9D7pU5-c*DvCK{5u9dWZ>Tz_;)SX`tSU^d^`MO@BZPZ3_R+= zmpvdavolBkyll6CygX>&#|-?qfuAw(3kEg~{HB4k2JScT`v(5lz^4p6>cJx(kRxI9 z-8OL0z>gXDaRWbN;1>*R8u(2EXARtM;P(yuv4Kw+c+`WhctBnWoA0)Pg9d)gz>gdF z83VsyVAH^F8aQjA}cXJlOl!9=ztX2jBlM4g3=W|E+=FGti?q-}|31 z-@O6(-oNa9|3H_4S9$Qi`=STk7d`kt{s#|!uit}@{b39G$liNM$6g*hi>cOp__uvf~4}S80Ht??u{Er6C z8~C(=uY0iSGte?HX5bbN-gd1Azf$tx{mMfa-=7b9@c;g)fzKOw!h_!n8u%UqHyb!) zpsDYBB;CBrCu7N)^@KFN~8+git|8S{+R~mSoff)nK238Hc-N3IHc#nb8 z27brD?;7|+10OZ;uz{yM__Iq5ywbqy49plB z&cKX;Wdo}Q-frMm47|s{X#>Aw;CBuDp@EMYc-X*G9{l;G23~34bp~b(EE`xg@OA^g zV&FXnP8;|g1HWtF4-I_Oz{3Wf^5A2a8hE9F*BO{Guxwz}z}pS{ih=hSIBno}4E(Nv zKQ!=B0}mT`%7c$zYT%UyUT0v&z_Ni=18+C*D+baJ_(qQmjP~}n9&j;mthg9pw#f_ii5Dx39O^JFq=2fl=S)!@ZmJ8Ba#m4n2^mYvJelrjlIIVpzUMFo_{9=N|_pf}L5 zu4A136?=>K7x(mnAl|(SvnXxX?O@Q(2V+spwy14K%Vod4REXIVc77rz&*Wov)Q;K0 zCn)(~)OPEXDwp$lN=$5$XQQ!LFlO7qI`2wQY)RMCcBo)qVdv{quvE@tu?D05^btw~ zgHoSLN6YmYnzbphNuG;JRC@AM848N@L?x8B)1fkb60vRZ+0W*K5~XcB6sqU7ue6gF zJ33XjqcM9EC7zGv>7c$v2cz|TI+%BD2A1ZfYj}Q${>AKaJ{^jN>~bthf75k4U!I8N z6Y>JpiJebtm9g@a9ji~-WyW5PUM){@(@qsYj0i19V^jGMc;PBN6^zxRv3$QAE=xKF zTI^^r7!5_mrRjV*?~g9JbOc<aJTY;V zJi(CjGcz%U2qx1uozZrq`EuE=NAr1^%KK%d&?ASn;%M0pMHw$e!H&+IKYwf@6ryo^ zLZ(7?J-<;NQ7o3rAcz+jhR&g#&qwq2RGlKAB_FaUCel5!!~?B0U_Vc_Ock?}p0H`w z=4~(rh9tF79)%q8QScI_xZ(uF(*pCEkMTDRT4^NTD=#x|j0C*cQJt({9=xOj(Iv(m zWGq+8X>b|M`|Y#&DTwYwjDl177~>7;H#?TjUs2EJ%Y`oD_N?;By{z)uVf94_sZ$%h}FoMe$t`btOKWU^Emp4{5Ex0LLoz*gB?Vv!FAN{3w@3{Ua~w})L` z8h&uNRAZ4(`rO0Au0GQm_t!p7w;tTOw>G(#MP74D!}}-QNmpNWll!+$)+S4P_wJv3 z@IjfZ#pHB}`?bL2s~;cUOAC{ewOZc;wY?0Z#2T-Ol>C#g?WaY0RZ9*h8EEOjzCh`; zcD=?L-#a|q=a%*-OT&H1^-1ksZMe3-ws#ox@GfgSSIsqZiA2s#G?GcNlDS;cb^W=e zY9lwBb7y06*lpyJxkk?7ld#-GGB@3%RKPt$fmxP#ve8I1a=Ap4SFMEPtZK8G%T{yO z=iDam`&^%OHk(NLt4Ao2NLbCeYSL}a(`t?qEb*iyt%93#-E6|L3P~&L=BinjE{Wt= z;<;ztgd}M?m(4a^?JDiKRxUZ$%q1H+mU!;@hD-nSE&7*iy48d`onu^8adRy3+#&kc zpn+;Ona#P4B>k;6`99mA>KCZa%DGinsLq|sHJWoY;m*2AmN+*Vi_k-hmXnP+Hw#+0 zs?H@EP0IJnE3Q-_ z=KSv2*=$xz&&pgj*K}FoibU51KfGWiMQ4!jygS#Vh+-w1o1LZ3B_3$4f!y;{%SsWnj4z4GPY=jYQJTLV%52qv~GY^t&rnv%&`ptnlGfiWT19*WWkT zH{3rs%nBd2hWq*l2c^&I8y*}SzA@F;mqL#B5BvL$;+E_i93JlK8}7StxX?Gq5+6L$ zH)vVX_i<_%wE7B?`uz6PAWMAE*LP&Nqoc3S8tjrnUk7jY=><#N3iKTw=7BZH8{D>r z2e)sxZlpn$_@Hn2ur;jDw8mop$A|kK}Zqm|}3&V1I|z(Z~BY zN}%tw_Pw7qUSKf8eZ`JGOFBXwDf-uM^%wgK76{^9mE&={V#Db(QjA1IBDNiI9OQVZ zh#1V&k>i=79kGkH=tnY?7^zUoaWWZ7Aco(F6pK={ZK?3CUyj)luf*+e$-c?XRH$Id z$%up{;*X!D1O+N%@rYBY(X360O|lS?h;(PDGVGVvyCV|L*zvHVeWC1j?=%Q?PTKNNZ59Y5&9di*cqo@ z%%~ivayt{(DvQpTU961R4r6yBSIZ(d?dwalACMzF9?OJ53kBn2QmjOZ8N|3F@gi8! zS|Z_yjL>q%$@n9SBlH7QNu5RRR3ec~1ToHd7;pxRjMzo+wHS76iPW8X{VG{tbeUSM z$O!#%I&RaK0Qk)~j$MglGBTE7jhA}l4Xrog*t8ajtdr9^E4Dv#tR4>2vR#+4uwBV) zlw*o5#{oGMX9najUC(498GEck5m1r|+x2>!70v^#6B$mW^qHB7*KHcLc^hnj9l4$r z4k=``K!oCoFOW_P%w?v?-#92`2pLwmH&HZeM|7f?h>Q~tM3xvdqaS01gUCn*8J-z~ z;7$}NIF>0&Boo$eb}^p0sglV!C02MCi=^{vIUDE-te3OJ-mh*EU$jHc=C`@;m(vfW z-JXzN-U#-nw)N0N*|tOP6Tf>TR8EHodGw$i@-LJQ{efE!$k~U`f8;52g>pJwE=SSS zLg-4;gZ>zD>r-;GD+i{~;U165)RbFy%h8#MsnCbez0xzTTNb;1=buV?W=49-Q+@Jy zh_Ffs9W;-2I#mw|8cj5fDvF-u*2`0A6sxP{sbHulofbFLQ?94WQ{|qJ9V+*v4@{-Y zAzn^Tp~HnF8VUtbJJOdTCWT-*?GHW2a6@S-qmjJS%WjBWPMShVnhk@20RE%NIgD8c+(!rcJWRFHeUGd6{uT zk`4vIH1FoiA+Uk|U1rQXuaKwnTCIf9(}SU*1LgA2(2Q$OlB^shyPTAMc)h+B(wpV@Q0q4nNWIWVx}iFMc-v6 zZTHN8?`Uuc=WS?#3g~i=G`4M!pBADALSpyyL}!M2K(Sf@A-bbzK#^B8XyKqs(@}Y9 zTPV#0F==Txm`(?^e5iZ?4Ho>QZ8y43PW22i@cMhi7kZZQLjs|xI%;j6q7b0VvN_l==+gjh5GW z3!-mppDu{u8Ve%nxBTL>&bXCn>pD5Tw>n+O`sH|{fM}P!vq;;lb*=cPk7UtxvLc0q z2>-Ix?ETX&%VKX5~wQZetTLD&n2&t$E>6^H#gm!c9Zk7 zbJ;i=OLcyF8m+5&?_WrDeqIXh9P1)$@fXF-MWvf-W-au9BwAPw?P9v=&Q(!Iu97EF zathU|HJvS>QXuOK*<98wR1eQp-7Ifc=lbPwDoSRvi7HjhP1Ch%&MIUrRFq_np62F6 z?&y|fE6dWL8V3E`92yl}LL;Prm8D{IjbwFtt}572XRYa^KYOYo=z>*$_BqC!tx_G$ zxK`7hraaw60jnlI%i1VZ3cP@NSOH-PE1R_2VO zB6xND*Ip~vTB04W=BKk(HJbq42~o6w5mj6n_Uab;{3lUMYu4ipTxXSDpL0IgHk93Cva-tjYCA;d5ZHJK+BPYX7 zJdBv>4$7%;Jp5N94l808B36zgkeqnjaUzIF-h90q{Ukh68I$~o>=;8wcswFwVVW&I3V=V53c{e_Wm_U`Hr)W0L*a*Ff+tM9YfgiEs$o?^r zNyG#lJrnLml*)5sC>|pt8HcdD<48E38AEzU;v-{m*@2iCiTJ~(c3|#0aew$Z1{;o3 z8I5G5;*5l8SR7ClkKAj?Lidht89~Vj?^q|k@Um=#KJde1#RVA2VL3hH+l@hu1m6eI3$LZ5fe$2niGx34~ujy<$jCEj~g=oRLl{rjG7#m?`Crl7v|V z4EA}ch2yn)tvftM$E6mxyKA62BAxKq@B(kscDGFK*dWi8B0IujcXvl>o!wwp^~*4Q zQ4F9W`ei}KATmO`NQfO_^fH~V_=qrzT0ZRTKtBRGaeD+!?NoOs#Vag<@KFZOi6O5P$W6Tz|bbhn5ru;fihvkA-XKe2Pkt;18>W zsMJ7B#9<9^_iLB@xttyE8qdm^!1&$0DLFdcEBHGHx_X;k?)bR$en?J^2fFSam+@YI z@l>Ge{&DxF56Ow`f$^?b@95pdyT9QdUoMU(<+a{oGcXY78o0aox8oh-I3qtOua0;0 z7JEDH9_Z~F=<15yeRpyDb#iDNx9RUrHp>e;%Ti9~52Vr3kkfW~2DxjO z3+3`=dDbrD{c_V&C=V?y=)i%g7-C+vv2x*R@fDtt0(#sG-m~b3)Xj#6@j#EZU>Bz9 zcc!kELs8;Q_^5()M0V6Jqa@yep5vmX`9sULy5tHt|4p5mrM8ALHU5ThTs|AL`lY?C}u-U$Yx5FPPL%1%ld0eo zez|lHzB!4`FrLuq@(j9~*l16AccNg+Ghi)fPob2B@Q~ukJ&;FbK|jTxn4c-fatBH$YBzX=G@^KWr%)lM%BX`j z>##gUwW@s;u8||DJMre)`GR_qK^7j#P}v{#g_fnTNtUANay?(}2}F;uESM3owX`A| zU52alxl>6i{ik58%#tzQ(;K+nNqIt}R;8fXmhg7`| z7IucbMK!r~l10@w`M@xXYI0ccBbK%fKe+Wv_!Ea&RFi#MADEQMVSnvZ-`4$;U(!WY z>zmxVZFus5+5>m_CzorJEUMw!gMFpGt)&NQk4z>fx9-(NHJKdVKAe1@G`zL6b?deV z9;nq=RO+SN-40o2(5FZ=GDf9^dAJ!^z1nP1bm6Kh5u* zWKm7NGW_t?zU1WO)`#)+ZG9NOVGUpC$|Q@brrjxR-QPFaSKIb*ElCZNEGqYnTy=W7 zCG+u_t;?xziAA;B6}&iytN7#)y*YOtajot#mqmr^E18_G&Z);q)u+RU=NhO7s>!)k z7FG2bL08}v{7rFQ7JPb#3#wJ*s&mbIvn(ovDJ7}19p&(7?<`D18IlN#` zRB^YVnO0GYPyx|6@KaTrXe2IvGW08{vZ$)3g}3pj9j3r^a=L_GroJjw@9+&yv#8u> z6Uo9n3W$X^$uo4Z1m6qzAMs4(`sL}WYQ{XpGlm+8LUp)7Kk&FEvWbRRwmjkP1_$Vl zypFn=Ktn~@;ju-V$wFe*r7urr6LUDjss$WkR&t&ZWmnvJ)I2MP-sMiuR?#rPTOv1y zI+x8=Ex&v0F!-aNU?K~;SXNcBPy?w0k03t0*AuG$pp~n04gKmGIiz}Ca@tbe4~Jt? z?m}UuEU1M#lDJssP(SBXmBi_2q4UkV=!{8TJ(9f_7b=se-dpg6&oGOJ(wAMfs;sMI z)kP^Q1d>P4dYKdpM=$O~h7A7Qt3dWsIaQizB2mpTJGkhWodn~fGu3IU>awn~OneTS z$tC6sxDO$bB-);pm~(T}CDqLn)!k-YrMgl%Ih)#Iv8+;fuTrVLF6+jw-$|v!Vp*l6 zYfDN}mcRd$bQM#-qswYoQe7LY!7cq;_V`oF{VA4})qf-Iy{^73{o7L=sjh-9s}vqG zt7A)_)z#P4wPDMa{$Z9?3fEv!I;6P8+A?URwshfM>z9-a-w5JTc<#DVp-_Kc>PD+0 z^*gElE&csPnlGeSR;gF4?OoE5N_B0=z1FooW#QaoS*2K3xb(L4_jMJisei-v{*K|k zRElNgykW;jMpO%QA{D14t4b`ZTO72n%#JvkA{vA3)X)HIr{p-B<)rQ4;~9yM`Q_D? zDz;edLlqCdQB<9B+Zg#LiSiY|%DsX7eKp?C!y$BEQ4s;!k+R;AN;h}4IL!sm=cMmo{* z)Ip@LqH&-&`J87Z(p^KT5%f|ViK>)2i?l zkyXwuU?Adzc^SP`l|eLCeMpOuZmB!;Lo%8 zk>~k_Y8b`|h_iA>25kr(8K+sM=EQKL;d*mMr~+j%>~~%l)u){B2#9y$4zuziV;vFI zB606UJHkRV^;*GcXlLt65+;l`yJh$?2106m@LK z#gcstGge4z^7*>eg zoyDydkmogGS&rG|G?Boq`I$S1@;GA3F_IT2dgS1(>GF)7mu>mG?4dNbr_wWoitn^< z(~v9uiU}?l9Y*;*^3yVnL~qN-9xRt1%*P7#om0d}W4955jKzj%g{W(OYG^25ziR@W zeP=m+8(zA*?witxBcaMV<02{>y)BqVoox8?i;Xk^YjxyB<Z4wW0_SgbMe;838vT+esP-_mAY&;dUs<(uvFpXTk`hR~*L9EDfVleBEj z2Z!u(edtePv1jc1P<;a2UMi24aT(o}kL|Q2|0&#oJL?UNE_?310!>Cid93a)pPee# z{jsHTy*%^(#L_-*s;ggRs$s!|wobz3XAr3_Q|&HROS6QD#GNB-GBc>Lx7j!5syn$; znse`MzRpy;D>tv_|KloFxZk*A-p$Q2)%Ut?ko#v##AxKTDqfel`DTLv+U(rDcSx0~ zMi*#Qnd(NabjR+1ELI57Xb7(1cb8vBoUUjnCn@-up4ZS7aYMJt{~vbe?=9gNYPya4 zMP`}m?^NA+qI(thtGQB@+jG@LKdIpt`c=eT5!YcjOteEIkxyod z`y6LqrdX=nGDg6p_(@_6#bPI|5Q52!b#`VdU#~OKw>a@n;!)YKYYeHUp^FORB19AU zByNm~GwIJPPR0pdsndmt&fG#sC{xGou5BR50`sJOy4DwWZs~L;onmpazOOUjELSp2 zG;L-CS^4|oIycdiID%F>ZKu-tN5$e}cBQjY2e+(g2P6OMnc^+B zWPTst%`KHljWl__m=aA!KzXs^cg~JE6@PKbsW`R&wHRlrm4%0HA@%6~oSg3J9o^m= zl$Eb0Yff&h3;{$SR`*^W9TEtz@ z!QTOY*Qr-Sn09IVfPM|76LQEd;F5q6uP~VpC(W6OZ6N@gFs+ab3ja1i>8e-6K>-D6zZ{RJR6pu6i{NY1d|$4SULE zSmnEV6bp8JVuoa^*TFp|Gs4H7!OKApPsA8Z9cgCU6W7Q~yiw@M6UQLVLsk{bg#&PUj>~*R^7jPk8Y&*h3IW;~t zVt|WZGiWruqYC*F7y#h~i|R;saTgLODA?G1RZP&2d8Q*bN4iYT{d7UmkZaD)lSuSB z2*ol*pyrqimmZ#IFq$S3I+vS;e0ifWevzyHpXmS#>Dj0pO#fGUVG|ROV}usR8+JfqeU|)b^C7WE4{{U$qGP zQe7Q`7^%v9Q+@m`_NB<(NNwLT*tKQDFy#9?n1`fyV0_+)@rhl!C4~j*8$LoNiRN%f ze^)Bi-z6JJEJ;DW!>Nvr!G7%D4*vGRd^hkt)z@OawYbzsaOlKnK|o*~I?Hyc#e5xm z$Cy*BcVn`IBO|quh*KNGWI5!N)W8|Rmp#UlZo9q%laWY62_qBcTf#I#9T>yxz*>ph zJM?QfuFSWDw;TBxF4cBmx*;Za;Mqnr-?CYbBPg+$kb2l7-2p0EiX*c<)A>>bUHk@J5GP)qfsALm&wt9w|n;X|9GE(K4?{iHO)YVfn<#2XRQaaK^%M zIu19ZvxfI#A;N+&`RGA7ta%%%%fNdhOY}E9Hdgnm(Pf`hE4ET0%Yl?RMxOD9&tN%` zWN;kIOzmZr_I2kPeOHcZz5*5~o_-AtX+jI7of5>0l?}QXgXYKhoCQJ+AWPBa^@;vt zY>tr!VmlkU6$^HyUL!%~bx==JC<%5AtDPR6C^DD|S_k~}8hM2`O5GVE1cXn>gyDTm zISf>L+2QeXAc{%h?Mgfnp@fqeKuvvPZi;Ra$sdR{1mdaF_mlz%AQ50kZFVV!JR>_#!c~agaEBb)< zR-z#}hT)mFWhP%IA6S!vSLz)Ypom7S%axelK8^3UobRTQ%f%O?iP+Q>mN2g`)a{s1 zDQ!k&QN76YUG1<}w<5ww0jV=GIw(V$y|hx_D6gX2%+whkFWJ1xOl$8?1c!#|AcTI} zeR772sX%#&WZGD(z$+NXbO<3#b_aUr0Z_P6-T*l^wk;!)A%E-$9(wSr{%b})G*!-1 zJ*`r5Wr#+w^k2_|BQT-L0WIYNeQhYE9+JYeqAmnAw@h9D@BFUNWm z%Tq#L&5C*<7?U4&1I3O;W2hVDx;uq)fj3B5euG?N61ZpRe2fw&v2U3a;XOP7^o5H> zrZz~mLh4A1aLKYAhHy(aO+N52g!^!562hI7y%6qRAJ=CnFbUm0updnVx}E$YzWBY+ ztt-vu9O8JcG)>|G*6RYo0+TT3?r#KKpPa$CYYxb%CRUs5_cvQ+FOmp54xx~1Lbt8# z#$8x=`(6M3lh~=6D(SvYUaszP8=7W{m)5#Lw9Xq!E|}3O-CYgHHg|(XKE_HSK-}9W z$1w12$dSM!yIgm_yGd5`VUAC7ofWv@bqibC&F!D(ZI!f}W&E|dv zm$ORh0luNR5eIf-cD_lQ7WuREEw`Tm-AB?ysRRZD2Yn7QcJIs01>9%J7;WUZXGybh zpDW4aE=|P%v4`n0WUOhRh)efAcYn#>&~#|fouta#4g2vgxQ$&JL!jh~r5gn8o14^-gN^pg$6DScOUC28G2Dg_@M@*IL5(14oV z`{wp5!s+gF^oj@QV!W1Y>}MEF(iG<0{a`vuN-kdP=KQ?7i?P#aZkJMy@Zu4Mwu`>g zKb>&WAsW&&1YM9p3xe*G)Rxaf(A)b`5cHrFAn3yKAYaZ zxC-zG*D@8dIW@I&r2-em3vA;LSSczOrY9L_*nx(NR9_q$!*>BQSg6=!k!pEm5sbgIT)mKLOMGuAcKA?7v^Ft;4G02 zsVS^}c?EZddelXeCn^!y0s0_c5MyJxGa~8q7mwh32DhqkfRN5HhrC2>m69u+h6`in z(?z5|Mer5`oMU5B>C`@g1O};Gn2GVYFy8D;ClX%=n91M;(Ui`Ja$%KDi>Cwp<1aJA9Cn_65roKt(gAn_WTn$ zxrfbCd&bB24C$@WfSkgqz}F9xOCb7SK!PX}{_%x914U7X!@%f=3GOchZkJIlI6gio z$8mTfiiVJ@xIjNFSi~wuPJTqCF47eWkG_GO`4N#6QmkI~*H@-Kh@2${gnJ*M_z+R; z=*$nUL;0{tiCg%HclRzNX?giH3Wl$|EO!Ou_(vpp`w*4>V5n6OX>etqyh5zKEVpBA z{{T_jYNGyr1iasVU8QTi9KB0+68s*jzYiTvtzA`xhN5H$mdjzO2Qj);aQVwG*Adkx z>nBh05=jU)y{AK0GfC(OjL~0z2}cS3arB`&^ioEnKoU~yDtVFTv=+60P-jY`KcEs3 z{RC}a-B<1vpZ$25a6UEhDh;4B+V&5~1klR4VS~ncopR+TZ8}H$xDQlAq6t-iXpC(_ zi0E?up{dNW#4| z)FMRg=w2sT7)pO6iRwxrXe-Rltnw6Tz)<1xBeRep`*harg$(y@FKuVX%U;M3j{!yT z4)7H+oD_Xfk|4T)e{x}OX}hTBpu|_-$hyQL71A&ldi1`OK8-MR zmsijkeD1RKX(*AT*{vn2-G^72nxI7YWn`*)kGCczw~u{0twx$qV$+{{U2Wy2oBXuw zCSF`>LWyb|=PZ<)Qj&B$*NsRsi2Zy9F|L(0tn7JpJP8a)<+?8iF(#K?&3|>l8oP>o&9jt6 ztFsn0k<--~qC$5`afVp;H(x|xTe(OsPMRUZR-95>$%;UY%>POKO0EHl#X^ZKFp<{& zr+{@TqML~33^i`Y{eG4`CF=@MV*xw8kV+Mx##G-R)QGXqSEw;1`k+sO$aQ~ep|yVm zM?l{o)RRG}X^i}{CEa6KZW;`l2oW00b= zUKS|WN#Hb68-yKVTXrD3xwQd#<}7bO#QU6O*+4;mCshr0w%&&P92g;iTu1zvzJo}+ zR>c*_uhL?K+Dv4F+(Klvv!aYpO;6QCIwK^)If%qc5DOT;KXtuaL0Vp3x%_foBEoIc zXS$+{5HZcT{FRq*S`bt~9bq#FiU}c8jS5ttKAs~^BlchgHWL}75)u8t2rE9P#Rwf@ z*3`tSG=M>D+k-ZK0B&)^26dGR<(wyNI!F81@~WiJgz6wP#zqUIq?6gzVuX0~Nt5$| zffFhl5#F`SE4!dQ2U4NQbBqw&IE#$B)n|P4i;+%xh>&IQEk+nwLGlt*;Tepua+ae0 z3XD)gzr<1^TA#C|_~I>nqKt5(O{(Y^W2R=UtW!2ZdY}=B%pKh=A`6{yk|F7KixF;Q zYl|~x_CvrPzxI#lbBR39E=^&BCrN8*-7X+(17({i{`5Nb_oA@7Gluzz)%ge^V4*a- zZG&Wx>1I%y;47PA>v;@zw)C>)fxV{hB|`0!CtJ7KI~t3Uy+=lt;O(b8n>-6_`@ABL zg->idivH}+qcCXI!9tXMr~drQ)D+9-V-tub(g1lTgm}@X@+eyAg5Q3QUJ|8_h3uF; zL2#N&qP;|nZ9e2YX=6X+!QIx6Wz9S_18!W8TZevNVnEIXBj%tQ7kXcz{ShDdjMD$NFDuuCAFfCkriSi0o7 zLXeV#3f_Jj`RfddsLTY-OrTDs!=U#kF|pZxlcuvws;xc*-IGi<;Oc$lU=w;N`}3E{ z-%~j#*6kN$GQR6(bC6MBq+RlAfxNnxKYs~2W-i{m{~WbQ6`(7`pMQb~6I({? zDRwu%!;bWTeR3vB2Iqw2uaLhdsIT+EzjxiCuERy!n#kLiGcASuI(#HSzy0%AUSECd zrgfze_93Aovi%wZE5BSX_}S(Hz3EESf4XbsEnC^`G+CL7=ltdJ(>#yWsRwdNpe5s! zp1$24_t1^%D?%sBx^@`Zn{i9k^7TciL>{DKsKWOUvwnb%P;RzyTg7C>w&3-~}s(CUOI3(8Y$ z=Qeoab5@`1T(X6_2Ed(m)Faa@TZW_3R&GOdF8>R z-mH=d6JeAwvX_HFG>70D64LxBaL#o5NoLaZdF)N%!R}&*0$9hij@s)usR0U^Aav}q zhb#!fm~JM*2nh~O$iwU&3li86Pg1~V2qbH|w(cckrlob@1{y~Gv=J4@w3`y#1Orkg zX%IsVt_Rb?1w2Go2iW@z*>z=4s@W?jaHX_K~&%!4xT0p9=~zS7kxQz*z*nJT znaXn-%M4pgN#RgVLDE~mUR)(8p85qr0b+<&uwjt~p+*!pn4|22% zoE|1$xF987^P~g|PWce$lb|8JqA4M8Vm9OAuFDTritLRz-_< z$I|}j(V)sAHoErM?C(X@g}he@i8IRb{2`=n>n-~V_L0(As8m9(J3$ZiWEQ6Qf|NK; zw;)Eg{Mu79_PYG5;Z6BX&=2~PT}PV$9|8Leqe4VHskBbx@HovDNmCJFMcr#ck`Kf~ z;$a@6$CD8oIOv818ZtxjQ}r1bJF?8CJDcoHy7d~(I}drDv68q7EXvrPLuJ# zu1TC5Sn~~%7MjF27A=m4Xf$z_VFO@Y<+$v5s;5MdLNRx}>tZ6fRZN7cpPda!t(u%a4z9pqLQRB)8naZ- zrUsq~xfz%UE`}fp1kY(A0Fk3CPX1YP8o4A%kVL~AA1nm-Niq{idEiJBF7zx8A_AOL zLE{bezHl20AxTt#p5|U`Bp3;s2JoPeBTt41E|dfxzk6EP09(aEAcdYC0fF4JL{!*V zK&6yp}3C-`IBYJoS z@fa#=B<9G?Q18zi2aAxb58JO=a)M35nyo{Zwb0f-4FG zfs{xL1QJ2$^lPMKkWHbx2NI-(=4P!xZb{KV^DuqI69xi_6%>|dIp~C_$Q)ZVIm0BO z1FLdaN)?=eTzopDjBw2qV<1#Hh(%8!dHXYHUN>jZ(9CR;)-Vv9~s zF1CUD1o=DcnAP1L92E1mN7)2&C+CxMIL3rG{+>NDIunG*-t}l39Vznz8DbmER$Xj^ zM#7)_IU!13)!Z9sXw_*qN*(M60k<67f^9(BY8BgndBaJlvAcIT11DEarlCcfg zy}|<4#e++&s@X}9Fxj|Dog}W3utO^xj+33wwen)I4M0|t8W;`TVzUry^X*T|@w;b0 zlN%-xNEbWnc=~OR&N;yhvsHz58Z^Q_Xmx9nW_)_pDLOB_{V6*505J`!GD~*P>?OPj z$-)5+=icFDofEB-b!JJvC10s}QrJ8rv$HOy0Z1TINc#clzQaj7ujFRg#th=z?3@m# z$_Ygw*bqeVW8Pv-wU!RsoZso-oh)dFQQ}6$G=LGBGk6|*r!#oqUo>Ym$X((MU-BS~ z4bH@B(AD|2r}5AYkWs~n{37QHv585iN(-+(mFGn3R374

H{~EU=4T?RcIutWp=# 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 diff --git a/extra/shaders/basicShader.fs b/extra/shaders/basicShader.fs deleted file mode 100755 index 8318186..0000000 --- a/extra/shaders/basicShader.fs +++ /dev/null @@ -1,104 +0,0 @@ -#version 410 core - -out vec4 FragColor; - -in vec2 outTexCoords; -in vec3 outNormal; -in vec3 outFragPos; - -struct Material { - sampler2D diffuse; - sampler2D specular; - float shininess; -}; - -struct LightSource { - vec3 position; - vec3 direction; - float cutOff; - float outerCutOff; - - vec3 ambient; - vec3 diffuse; - vec3 specular; - - float constant; - float linear; - float quadratic; - - int type; -}; - -const int SpotLight = 0; -const int Directional = 1; -const int PointLight = 2; - -//@[skip_auto_register] -uniform Material material; -//@[skip_auto_register] -uniform LightSource light; - -uniform vec3 uViewPosition; - -//float near = 0.1; -//float far = 100.0; - -//float LinearizeDepth(float depth) -//{ -// float z = depth * 2.0 - 1.0; // back to NDC -// return (2.0 * near * far) / (far + near - z * (far - near)); -//} - -void main() -{ - //Ambient light - vec3 ambient = light.ambient * vec3(texture(material.diffuse, outTexCoords)); - vec3 norm = normalize(outNormal); - vec3 lightDir; - float intensity = 1.0; - if (light.type == PointLight) - { - lightDir = normalize(light.position - outFragPos); - } - else if (light.type == Directional) - { - lightDir = normalize(-light.position); - } - else if (light.type == SpotLight) - { - lightDir = normalize(light.position - outFragPos); - float theta = dot(lightDir, normalize(-light.direction)); - float epsilon = light.cutOff - light.outerCutOff; - intensity = clamp((theta - light.outerCutOff) / epsilon, 0.0, 0.5); - } - float diff = max(dot(norm, lightDir), 0.0); - vec3 diffuse = light.diffuse * diff * vec3(texture(material.diffuse, outTexCoords)); - - //Specular light - vec3 viewDir = normalize(uViewPosition - outFragPos); - vec3 reflectDir = reflect(-lightDir, norm); - float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess); - vec3 specular = light.specular * spec * vec3(texture(material.specular, outTexCoords)); - - //Attenuation - if (light.type != Directional) - { - float dist = length(light.position - outFragPos); - float attenuation = 1.0 / (light.constant * light.linear * dist * light.quadratic * (dist * dist)); - - if (light.type == SpotLight) - { - diffuse *= intensity; - specular *= intensity; - } - //else - // ambient *= attenuation; - diffuse *= attenuation; - specular *= attenuation; - } - //Final color - vec3 result = (ambient + diffuse + specular); - FragColor = vec4(result, 1.0); - - //FragColor = vec4(vec3(LinearizeDepth(gl_FragCoord.z) / far), 1.0); -} diff --git a/extra/shaders/basicShader.vs b/extra/shaders/basicShader.vs deleted file mode 100755 index c7e50f9..0000000 --- a/extra/shaders/basicShader.vs +++ /dev/null @@ -1,23 +0,0 @@ -#version 410 core - -layout (location = 0) in vec3 aPos; -layout (location = 1) in vec4 aCol; -layout (location = 2) in vec2 aTexCoords; -layout (location = 3) in vec3 aNormal; - -out vec2 outTexCoords; -out vec3 outNormal; -out vec3 outFragPos; - -uniform mat4 uModel; -uniform mat4 uView; -uniform mat4 uProj; -uniform mat4 uNorm; - -void main() -{ - gl_Position = uProj * uView * uModel * vec4(aPos, 1.0); - outTexCoords = aTexCoords; - outNormal = vec3(uNorm * vec4(aNormal, 1.0)); - outFragPos = vec3(uModel * vec4(aPos, 1.0)); -} diff --git a/extra/shaders/lightShader.fs b/extra/shaders/lightShader.fs deleted file mode 100755 index 1ba98ce..0000000 --- a/extra/shaders/lightShader.fs +++ /dev/null @@ -1,8 +0,0 @@ -#version 410 core - -out vec4 FragColor; - -void main() -{ - FragColor = vec4(1.0); -} diff --git a/extra/shaders/lightShader.vs b/extra/shaders/lightShader.vs deleted file mode 100755 index ae087cb..0000000 --- a/extra/shaders/lightShader.vs +++ /dev/null @@ -1,15 +0,0 @@ -#version 410 core - -layout (location = 0) in vec3 aPos; -layout (location = 1) in vec4 aCol; -layout (location = 2) in vec2 aTexCoords; -layout (location = 3) in vec3 aNormal; - -uniform mat4 uModel; -uniform mat4 uView; -uniform mat4 uProj; - -void main() -{ - gl_Position = uProj * uView * uModel * vec4(aPos, 1.0); -} diff --git a/extra/shaders/screenPlane.fs b/extra/shaders/screenPlane.fs deleted file mode 100755 index f7bcb18..0000000 --- a/extra/shaders/screenPlane.fs +++ /dev/null @@ -1,12 +0,0 @@ -#version 420 - -out vec4 FragColor; - -in vec2 TexCoords; - -uniform sampler2D screenTexture; - -void main() -{ - FragColor = texture(screenTexture, TexCoords); -} diff --git a/extra/shaders/screenPlane.vs b/extra/shaders/screenPlane.vs deleted file mode 100755 index 467e6f7..0000000 --- a/extra/shaders/screenPlane.vs +++ /dev/null @@ -1,14 +0,0 @@ -#version 420 - -layout (location = 0) in vec3 aPos; -layout (location = 1) in vec4 aCol; -layout (location = 2) in vec2 aTexCoords; -layout (location = 3) in vec3 aNormal; - -out vec2 TexCoords; - -void main() -{ - gl_Position = vec4(aPos.x, aPos.y, 0.0, 1.0); - TexCoords = aTexCoords; -} diff --git a/extra/shaders/skybox.fs b/extra/shaders/skybox.fs deleted file mode 100755 index 5a54e58..0000000 --- a/extra/shaders/skybox.fs +++ /dev/null @@ -1,12 +0,0 @@ -#version 420 - -out vec4 FragColor; - -in vec3 TexCoords; - -uniform samplerCube skybox; - -void main() -{ - FragColor = texture(skybox, TexCoords); -} diff --git a/extra/shaders/skybox.vs b/extra/shaders/skybox.vs deleted file mode 100755 index 02b013f..0000000 --- a/extra/shaders/skybox.vs +++ /dev/null @@ -1,17 +0,0 @@ -#version 420 - -layout (location = 0) in vec3 aPos; -layout (location = 1) in vec4 aCol; -layout (location = 2) in vec2 aTexCoords; -layout (location = 3) in vec3 aNormal; - -out vec3 TexCoords; - -uniform mat4 proj; -uniform mat4 view; - -void main() -{ - gl_Position = proj * view * vec4(aPos, 1.0); - TexCoords = aPos; -} diff --git a/extra/textures/awesomeface.png b/extra/textures/awesomeface.png deleted file mode 100755 index 9840caf3e7f4914ea1c6c15f688ffaf2cf44bae8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59277 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 Q0|5VhP*hj=DQ6!3fBcW&%>V!Z diff --git a/extra/textures/container.jpg b/extra/textures/container.jpg deleted file mode 100755 index d07bee4e3a679f5e2e4ad508ef3c4dc29a522492..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184939 zcmeFacU%-rvoJcl1^_fQfy)2@ z-~+@E0Kftv2=p#^g8YI>F^CfwLyL#t{=@@N5Ks9F1`9&Y{DMI)2rYnvsRuk#A#{J> zT*$@0l@-9$09*i%Qi$LQObx<4K?ndFykg2OfEOlEF3dl|gS!C0N&fpPZ|!6SXVS5A zLOY@CoSc~y^+cI28X=I@P9CUBfFQqskR-pjB)=$=fP|!on4~a2SRH`<3;^&jSAIc3 zfy7_^J3a=0MCk7}p+F+mUofT+m~bIjzvRaKd*2|)zxoDo|9jt{kl%Gc{Gfm8zTEM% zIzSD)V)}P-J^p+=O>C^LsCZLHS6fB>nleW70I}LN1kwpg4giiww5zVF0+X?cDHC2N zs3!sd7Z3mdOBl*oQ%^-7Q>VJJA`=Q^!oa^0SjYCjNh?4vkD3k>({IB6;gtgB?1~1( z)B*X0tl=ma2tNQ}2M@F}2EPu%)K>Nw7>XG$YFAJ|5I%>2ZGXbtCp{9-3<=HSl2)}&>aEy0O39mW^-_JM1b%Q5T^;t&R(tvTRSw_NFkXy8|D^ws;ScA34g9S=UQBy`bjPFwx3P3{Kr>;K3UhLBa&u)u zIa|WuOg#TOiT~FH|0dSo=zz%Q(TmcW@4sZ_$1fBrTfR{itkN~6tSwKEe3{(KMKqJrsv;$p0KQIDJ z0<*v}unuek`w$2O4?+T=f}DpiLf9c(5J8AIL>8h9xdzdNm_TkpY{8w<4RQx^AMyke z0f~krL9!r4kSa(cH_tK zK7fWoqoB#qTxdD85!w#zhfYG5p4+%LdC8%Ma@@RwPz3 zRz6lWRx4I7)+E*n)-EnpHVoSZ+YkFGb~JV-b~$!4b}#l6_B!?v z4harD4i}CjjyjGpjxCM{P9RPsPC8B*&O4lboLQW0TwL6>U4$LqnH#ruIzgwKdCh_8ZgijTw( zz>mbw#(#s~gFlbIPe4wEMkiC~sspOAu(lTe0GpYS%}J;Er$ ze8P8xql6noL_{n^5=7UD5JY#0qKFEK-V;p`?GjTGUnW*0HYau?4kgYYZXg~a-XI|% z;UKv}VoHK02_?xQc}p@*@`IF$l$TVU)SA?vG={XCw1;$!jDU=tOrGopnKxM^Sqa%E zvK4Xyat?Aua!YbQ@)+_e@WK09!BkA{Ipo(4`6Op{O3L$h;^?%b7g@Nx=hnO>LPhdzbAgMN$Q0)r}pGsA0! zw+t&6&R)23;r4|W7v5Z0WTax0WkfK(V610cVmiYl&*Z=q#njBS&P>m&#_YzN#N5fe z&%()Kz!Jbxz%s^4$STfi!}@}?iFKWgkxi5B4qFb}FgpReIJ+JDEB03Q9S%+oBaR@B z3XTQNbDZj&-kdp{qZdgo%3XB1n0&GC67D7OOZJ!IE_GdoUKY7*cRA+rCoU+LC>Me& zj;os+hg*Uh$(_tS$V1E{&*RRM!!yNumiHQO0B;5F8Xp^FVS+J&eL^HcDnkB3l|tWyxrE`u@xq@)s6;eHf<&4`4n@U8T}AUn z7sc4bZi&T;4T@8X>xe%Ue=mU}p&;QeQ7f@4DJqGUESCH##Uo`el`XX(%_$9+PL-aK zVUe+vNs^hAWs;k>s*hy zKBp_7dq=lbk4o>RUbf!0zJh+3{)oXv12=;vLo!2i!z{xcBPF8CsiA4Q>6V$Y*-Nuoa}o1E^8pJ^3r~v=H)wA-+^D-rcGL1^$t|2)Mz^wW9aw5x zCR=V0=eCP>a(0n+D+onIG~(NB zwc81|ckH$8GwhEYj2sFa@f~kDRv{^o_Q+mK9&!^6;{#FN4k>Dl3R*(=y<-dn{x%?H~D=F@bC`OdvN zQ@--PNq!JNE59axR{sb7vv*bRX5J&bXMgWw0DnM4z~+6U`_&H^9^8E}^HB9+P9SNZ zYv5pzR8Ybr>_>=4oxwuEuY->sTR(1l!v7@l$-z_D)3y+Skf@O3P@B-sFwwC1XSmOh z&j!Nf!ZRZ%BD^DJo@+iYf5G(P@r%uuH(!2;6pl=IMfl3?)nwGQsLI!Dub;g>h_;LF zk5Pyzh^3DWj@^l~j_ZlP5}%*Iknkj7FA@hX^S<_jt}Mjwxnk428tk0(!DnkbkQovfQun(CO=n;w~g%`AUG zeL0wYFh?>MInOwswIH}qyQs3*wPdz5yX?HYzY@4gu^PK}ajo?0m9HJ^#_O}+T)!QE zf4XsgBV$u|vuR6bYkb>rdw=KgkMln=cg1&G_l)-D_dO2q4x$b(9abM{9E~139v>gC z0>me8N;efX0qF4>Kzfn`tnY$P29Ve5%g@Zeo*^VeL?omn_T|l43Pt+!~q{Kzyu16Nm$^!C^il*9zFpf5#(Qq5CDqxn@A2oupwAb zY$y&ME2{d!}ZqQrUOj@9E(! zvTp^Qzn?kxS-9{^4dR0J{*J#fv+nu6b~@XIjcjs;w@AD0#$zCQG*awn?0Pc*VHpZ$ zTTHR6H}f7{MoNVpSS0N9WZWFcFK}2ZPVC|wvIq)Y8#RO#l}F%9La!~L`D1&-E%?fd zmEkd}l8R=vH9H<(hvTlVP!xD*P8e4=QtmI_Zya(ypnY{Px3neBs2k*d-y)T4Bfi9! zh*9s_{(Vzvk*)_{-=gB@s+t3jfn4_M2Cw9g0Tb_c&wNd3rO)d%@9xKb5gPQ)J^ukn z_)^VmR6yId>S+CbM3QZfo20-Qigu5C;O|W>#bwyId}ypRp=bMM1aFc$bGgoJRUgl~ zRAgJ!l=iUD|JhWTQF{jLqa*Xt^RW76NtsaR?X}wm(^XZTJ;YTV8{c>jvh?k(mmNpH z=K9*xh_Nz+=Je*R_smf)u)cEG&YmcjeExLE(MIXnygA-(+1cbRdfk4G`$PNbJPqi%eko0~1KNfp*LAKU*_ z*K1hrICd~T;h&xceE7MIZY&&Yxdq> zeI!e8mgu;vVXu*A$?GZJ0qgr+iFT0?du1h`Sar^31`$&W)a7dLf$Jq_UNaBK^z58{ zCU$mpkMDZxaum$&@QGqZ7|I7R!O$jv7Pb-b$!!bM&D7t4^wDv)F%fB|%757`u0`?<v|Inm62CVv-?pMm(eSc&$R3A|)X={THxX_ zq|sRPE@gM1uB-wT3l51`$q^5UswP#^(v*%#3Bq}dISeoIkTGpPb3h_s2S9fn14X8C zCf+E=qPzuk)yF%MV;|`rNk<;W?9_XaA6mYR>s*NX?sXwWE>uu*TP1GTLnJJ{-@^m7%PNKQ0jx<>%(EKB3 zdzWrT<_vu68f{E(c2fSEx=(ak-LhYkTYPlHM!uPI)tFswc^dSAgj7(~l1Jga$71lP zY-o7L`-Jx)eS+T#tK&6f8*gYj7N4)YdxciC-iLSZ((A3Db5JtH#Cxeh6~};D83p>{ zjYlGIvdpjM!XLVxU19UH>o?6G)=)J6R{QlX`t?YK)AoyRZ;H_ymSl_i)8_|-8I!+W{s20rOs190@na#769 z$V>JFbRPy$_x;@jmZN}G8OoH;^0tS2FS&UOf;{vZv*Iq-+Sap&ICgMHzK$CoHvYP2 z7nAo)dg8ddVOdEk*BY^zfH($HW6maVN0*l-WNhdzeeW!?PkdheexqMjK=iCkt;+>? zujIvgC7~_u1Oo^As4I8b?h;JOjs4(gOU{5*0~0qhESZ+%UNp%*4k_3k-fm=Wxbw(k zC(C^Lz&@JT(ToyXaUvEQ5Es_48hjX3=jc4xq(+>Wi&VRcT#SdepHR4D$#8_DxV zI+G2oEvjy*kdL==?~b-y(+Zfx>v39}I0h1Qhe$LuNeTlSH%BsqzlhKl4+!J|KEXm6 zPhN6X)gx+^$g#BBhr=}UAGb1|tnwsL^@;2xI7Siy%!+-XUHu(6hSyE^M2 zH!d#{-wn<}*{JK8!tZ(6_aYZNK2cuByHdIq#PK+nhbq6D^ULd&>XrP+3e=Nm$SS26 zi^XDDf8gt`Yr79Ahfs{Wjq9@OkDq&Ula;03t3i&lh1V<`1F?B}hBE9)AD<{|3CfAt z9nAal?U36e@{^}0T}eY7G>pepdk*HcyLGq3V(h47LmnioY-_SR6V>)R8tMNQg;&&zOrvd))BVr>>1bTqQ3wjVh{D_+H``EoY02=7$xO>A~aHd6{C?9g}0= zHJ6C5*|JInmL6MeHO^B(0Fq8 zEc9@bnaBhubH5m_w?v`v1a0I8O`O)ULWBBao*(pTx(%&(P%TN@ zy04uq|D2CRR8Vw@cEK@d<0{AXHQ9c^hnh_&Gv+?6oSmb?1sOZW-DAMxusXBH+?R9x z3c55z9^pPYn|uu9SXfuLmdD*&0m!!l@X7t|*VX#6*-L8czt1Y4?K|Ihd9LM|nGbBy zWbu$b((f4ff#&uwtSE^ITWhKM^7aA#Q6c9KE(7WMynZu=Vo}_hC{*-EJ+hoJef@2b zr=EpD&?ujJZ2U7ZGj& zinZ)PV+W~*Z_2CNH7b;2jFk>487?vy(Xe!8Ij7vbI)RSD7L|Q6s%vw>E_cn|L*ghA zr$H-YlwP}L_z_EB=0In#D~ZqI=OK=&VUbr9$AErn&+v`m9g#sNJI~klw9{f@M*?le zhjPMY`HtGC*d7^oK-pz=$o!DA=8y&FkV-T`^T*VV;rAQM4COY8L1hVBYA&kwni}3$ zFMKG62;nXlWxfms86Y) zbuk2^y(9KPrBz%EO=T;la<(KbNn0O8OuvfTOq=^>Cq*@_+{xhohPr|^TXU3kTPS(! z@gg;0^q9q(sIZ+{Z^B;b0Gc${%=t_qO|3-ycB|yh_L{~c5Bvf=iL!frxr2`IvQnxn zz>q#I$ieMK{5aXLS%%{k!-OvH`e6&tth7Mk@$ru%pR4d_lD4i^zaiP_>sAyrsr%^Z z9-*?Dx5H{xv5@D4EI96M+-qnJt+9iDZO;4TS==^07rA4945)7Q6ZzjZ@Okqg;W=ES zyb!;-k=K3fWB*5wnjOOg6K5Isx!Q#Ec_ad8bapE1-1cRh&}p*sNU^kEA?+MheB|tG zZvx{w1|*b7?|+CdLp`j!)$gac;cEP;hcKw%)_s$a{fXLAZ?`y)m5*+bvP)}OgN8`A z$g1H&M;FmUMpV6kYR=828EZwl8)K6KiTfI(7KNYY*G!`n_!sOfr7rQ1;gupo5q4X@$xi=;RG? zstfW3qvY&N!fSpuI^t{9D-PQl_C7o)u1f!=;tIbop87?(RfUJ*LuGEf(cJH=+s1sY z2C4^ZT*!h%I(*`Gv*&e1UeQR@IP$W8eAGQYx9YK$W^oKS2~)FA||G_c1YFN z0{>wi=lm=1NSTjp@xEem8#;o;-p`*{xP78iqR`8|72v)!wycr%xy5QsXV0EiJDq8J8unF`YOjnw27L##Tu=K<^VYadtYVq8tPTJX80>F=1$0)vT$xJ zj|z|P&*e-JZU(PR^nvc(mR6B0P^pILBCAwv;t~E5BRdJJA}r60QnsJ3I3hbf1k4eL znehA8*X?#Hvu4uIcdg_G4BW*Yv+OI&?;X#BdBX%J&?~_G&OEQ}2kvDFPP{I(Vb>=v zZpnd3+0e%s-d( z!S2V-9RuRSZz4j~;N@NG=&cLbN+4ol&Gg6D{MhKBC6RYSA_-}4)yqWwV;{9t|NZiWQPan^(vXt68Q_r3sZAHSKfVYAB{+*+_WZ7fh z&&IY2MNP@x_ZIUTq-|hNK9YE+GgxYp2>^K zL1ULlvl11bHz7t+3w!=kXX#?i^p<&eP^PBx7bd6n+s*RPwJU2SaodI@=~HZ#5bk53 zBR0)Rb*ajDZQq`5dq7yEibQCs(5^dt^~k+`6I26kEIx3%G(hVkJ(NV-Z&H0WHiTib zzT~3EaBJLT)Lo`KK6%oN*@ybggzeYbqrXp4lC7;COpI%AE`=FOc6GyUtvxRdf#;FH zZi2VIkd__8vJ!2QPSVth$d$o(F`xRvd8Cg0Ll?cna^vkv(uN>;+cLzouf_6@xnh^0 zm9WmfWtm}Wlwa=FN(_TXGWc8%yRo{b)#c}HD3wVmDRPk{ho!;qDb++xd;Q}WUX&9g zZ*(=3PSpi(>_^VEy^5^|Bei`Wy%1gpGNHQ1Kn#O(y)#_Xg%|>HVB6Ki z4e3Ts%hAq3eB`;U(3{>MbQ>1bTU=C){RkCz45;J#>Mpwt8WU$mrv?xtc=SpZvUKtw9z@dUE%S>9LFq`P!&29DIN0nI9&Y;|_s<^{^~`Tw3o5skc{{A(a}2OwN1oMj zv^KkitI`c?ex{Y6Zol=mf{Uk{)k|PQ>yu_*Q6d4hl(v|EkrL^>_%dE8mo<@BqRaA# z$st?+)muMospQhh3YWwr#f(F2y03dg&EJ5_Cl@UQ^bDR|vW>beW|xhi zzc%_RHq5kv`_40NPb%5DqMA=-*;rKEpSNR>+l}`e9|Ru_e@3

d`XyO#5L!x`fys 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[SQrQz8sg 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 diff --git a/extra/textures/container2.png b/extra/textures/container2.png deleted file mode 100755 index 596e8da31ad9bba6f5b2f9db07bff69d9363e507..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 467893 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%0DjqL311plM&@c#OG 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 z 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%0AIf!#HAL`%kCuG4N4*%J6S;CKD! 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⩔9knqL}T#M56JHXZsjC1ip)t z7+n=O>D;kOXt{-xU~2k5=g651nswycTXE8J92&p%a&LOMV_I|sVsPC6#b5bB8!>#L zU$bp-dN-mIW+K8kI;LyDV;%K#kNowF16hL@ClNBD;g!IdEGQBTtwIbVGpJZgs=z&rWN5NmMX9G*@8@b0Ai@iZ_- z=<1-1x&u5n^pYpjp$R>Ca1duRj*a_GFR~ZpoF1Ut>Ho{v1A7+;?l^eb`=kHiAJ%yn zlzuomi#@Z+5%}YHt*!MfP_51n-1yh#FX8&)i`{BKm?H>eQ<-^Ib2ZL2XIJLf6CBqP z334zzrPNl^bcQKupL8f)^2_&Uop(2_h}Yq9>GK!QUT0i2rWjonEF=>=-h_F^d>sf6 zu^Fk((Yhytw(Th(84>_kp2W~H7=12myx`S%Afi6ZZC+|`cc+!Lrx#~sP|EQ(UX9Xz z2G2lWJ%3hZK@k3mLC?LG1~ny;@11{woWRPtFn{485?+cED26h6uAdv2l`urBid|$- zAuz^3_zHRMaUVrN7%9M}q8NenBRXicX|C0k2W!Af*COUR#=_e!Pj;Q6%%XZ@uqY)3 zK9a9d^u<^D&oRQRJ>HtB4)bw}Wp1Rxa~(L{!#TnbV>&>4kA^R8@b(CFjkLb=y8@qc zm>Y9-qmLXj)-+dxLy0lyB14tc@Imw#KgDbe{mF+9RWw!Zxfh17LRZmY(~J~Ca3XT7 zGZGlg3)gU=kKe%&nxyIC*O&<^C1r@l&tQwb3DmFXkTFsO@Zk4YM(GGAEZ+k&T8Sho zyuJs=Etq=b0edUB#~#_<=%HW2YyO@iP$x089NaV7_l9He*LdYO{KId@6UON?=5s!$ zD`*r@r+IQsUxCTJcIAsIZ)R&1Npo$@Q`(oxc0Yq$Ls8`y!!q0KijmJ>95jVUK13QE zgt!=EOd(mLiZrFik&;sZKjhPYO*aPDaB3{hGrXKi@&b3}jC5`< zcwCNQWr(`#TJF{V{U>vOae$U$IHFKwM?3`zPOmHr3N6Sq-elD46z8{kk47sQFSv|h zPDlNtU7g(Y+xvPiz6c08&hev!2Y&>gX`}Lx--3Xsr7GO@c=)Q@+g|X$nEUPEXt}B& zfRV=e-q@;_B4ekyJi{1zBlrx_3I}8A0YR2!3bbA% zXxd4{dQTQ|8OKV|D_j{f#sjNiwALrEdt~yH+%FSlH@b}tmDh}{)VF1V13&uO+uJIx z!L>$Dh3^&CwjQB65w`LIY})oHQVu2}l7-=j4yPXsE;A7D!8QIM7cwMpN1t=VrKUx$ zR)%0r5j4Z7ICC+yR*xabp~JuiH*hs{LU5SzSc+-MAN@c_+N`F1l8wXzJ9ktX`t)ZU&aI;8m-y+E$J!7KS(DZVgQO zl%?p(q`Sy@oFlbPN3n-F75-ZhyzyZD$ zz#(4exQfi75GfRmQX=jS4$7320R&o0$a}}ws`Um@2AP%AVBrE_XBsS5vJm6=4_wNdM>fM5rRB5m1HP!tlJM@{UX1$b>gl5g!D)>8?dVrC|IiH1vWAQFi8qzOT+7jng9-i9 z7Ts)BJafJwUFgKYT0H38X_hoq(O}TrlaC+W)FrgFnTv;_*cs3Y?xS4uBEL^AtgufI zuASANk!#MYYXc%r$z9RWjy((fk=?`)#Sfia*SjwQLxaV@)G58t)xG0=U`}X`{|V80?7@S* z?q+$OHgpBN%jQd}ZSG>>Jki`{VWuQZX9{rmGh-URiNRX-1Pl!>@*SoA#h?6%>Z?U? zeB1VBvTk_g>_POEtvy$Wl z-Ue|PZw6yB*p1b}{$5&aByu^efS4D5@$#sB%50uIdc3ll{k>$~h{LEsNOW$z-56B{ z?{n|HQ%5N>{)~C|FzvtpNB=NaWUP$Wm7LxYNV}au+ZmnBU4pjc%9ngy?fh zzzkfV6tv~I?;L@Wh&G~kZ91PD!ZX;-d_$g)0eTrb&OdEj=U{I=$sa+ta0`9JN;XSj zEVMJ%UWG{;W=w>}u@Q7iL|`~&Mp-rhXU=7mFNz$&Fm8=P{^_?Biu?vUTDV4}HZMZM z{l>^em?&naA;49EP1LAWlx;D(`%wr_3$ltiQXS`FzRfDo7{Ace{nyPvgO3ee7&%4= zA34#-kM>&bw2Ij@2wd@X0-BL25h}q8`Br;^x+sHw7(7Np79_|aQ`(a~4pEtoLxmBt zi;T&vv6bt|={Q=PSf#y1d@;(_BIF#}D&cK}7Rc7cK{?Kt;D&UhiAT{i>Vc5J_d*rr&F?!(lg3j9E@VTduf-;Z$)YZF{f_J2x_!$;4YZ&0<$1?ZU~j3;yVq?-{!Kw^V50KxgYv^Sc2EymF#jz(#JB`fbDP zMNZ*=D?Z>}0?vbEt2b<4t`WHCkA;;iy~=oFQ&l4;z{C#;BpM4Sjpc3-8;Rv>&*L%p z$g|+kyZ#`32I19lvh9za9d>uahkH9K`>EpxIrpNo71q2eD+$(AmW-oCd6&<&2v5EI zkEZOdvuOL-&wh6G@w4X%elJ>if|&F+ROMrazR$vJ1-S*qw#BG|CZak zFClmz@9rS0R8Kx2_uZUS04i;l`D&D12 z-V7gSZO%)i)sj-$$~xRHETSZsG9P;n*AOd61XxNUdL=w{gt^xA2WP7~LZBQsc<%yO zaLvE+EDFqM)`<+HL-&j+8bosr437y*_mU6H1m^N}qSXi@JnWZmLC?&sSwt7*i$M}N z*-a}d)C>ZR1P67*5z_rAQVl{zMxQqnKQs=v8jW|G%HUGR64-nHW#9!Tm}KFq9#B$t zL~@@DzIkE6grLkVU^QInLjYjj=<%b2;d91e0Kilr^1B ze)B525qN-JM;bXkOt$MuP)lY~Ll&Ch&spS#jH2Z@bCLSUA{gLqZo0SOg@?=W(uGU~ z4bIk!T+%1T&SNKO5F_2E?d21_1#ujo71-OM(D`)8I+6G<2ZfSR6sSNke*zZTcaX=o5=Fc!#GKIWM3o4}ug~PS?eUo~l$h z;8<8({%YYje95S+zUxhb8#w~Eg<<6IX)<*CQh=ehHDj5k?JaHz1|@@J_5II0s?O6P zop0@Ij(%huRQ&x~H4ya^xs|tBAU#QlQQ$2h^OOJ0+Iir*YD@96w61^78cc>hMI6f3rF~ zI&Jk#mEy(GW$&lw%-Js0wcGDLe)J8`T7G_bSmt?4-C@d*=$uheR%+CtDTR?nWjNW`KndVBT3hadM*sR;D# ze1DnmFON?$#_8%i-~Lv|?m!|pj$*AmvSorzkQqvbVlr()#Ik(X5HoNU=JX@-5`EWr zU|L!>szc=9hj|HF&op zSQSbFmaz|#$uQo{HUdM-D!HC>oZF>h*mJDHP0}(JLkFKubEHrBh)Ox?J~$@rlwl|y z9>R?>GKBC)t8SE$^EMTsEiGHZH$rZaBgZSKu=>@rgREvZzjK`Euya9a&l54Uj5UM7 zVaP%d#W;S0t@lVrxXt;1xxt9@`P9w}hy3%J+kfzAqHxB6foT~&bRh}?sm}H5FZ3Xj zU0Iq=&<}3jG8KW8?2(dK(QYgf4i-*xF%V;HA_uwdDA_SX%>Y1RDO)zEN*l6-Mgm!M zW(Cj>T}=P@4kp(qQ!7iqe0kQ@(Ms3?Xb-8uk*In37Gif%9K*bm0LiwJwsmwnk08_YbmlS{!sfw#gCqB!*XgG5UDIs|B1|oyrA2gzsS3d8Xv09#g$A8@H&6;ZE%gST zV|F6_vKazmFo30jc1Y|xcBRj7$M?0!)UoFqpBss-J+XOH=PH8(tW9k#o3PN+o4_kT zv|x;dkWhfvc~8hA`*3e1D{s21Jz2nRG_1_7&yj&Tk;oEUyO=A->1ng_;O^ztGFiJt zXyo6X0zS=2tH9ik-P%sf<^FtnBTzA>9np?rbIFvt@X?hbp4 z9C(mGFVv_mxT}Y*p(8r573|O?ifplq1Z@+ftFDo4Rj*dC0x)|_R$R{*OqFr?BA~Fi z&1OVP0sXTT^M=uUi=K3!~3>^7#(5@-g)=k+S8+> zqqH?|&yikqEcczGBRB<;XoxNih;mHOqFTx)!e20@G65dfNa|eQ!M*aEjJKjvxl>Iw z$8Pc^xCC$Gn!mRmMgJk;>h|Z~d-{#0_!*poQL@fhVeD**u?Xc5Uu}Po$IRY>l1`N< zXWlmvP_FyJXWwl`VGi4q+N$vB$NaE?tyH!EfYITcZ8YymT^t>r*>L9G`c^u^|E+KS zvm$P+>ln%!so>lQDu`l=1wJ-waiVij8I!@yaAgWZ#fdTC%AGA;<~JqaEV}VU1Sf}E zf+K)kxRx;(k&f?oVDNb>TGFUEq4~u%tR};<=e8=#BAey(L%xFspIk$0k=_UP+<6&|bAPOM54J;H`Ns-{B z&oCi|4BoDr=?}7CFgz7u-!MRt1^w9VsPnfOOX*4pi6Xjo7D|Pt1QD=#GXieqBb-w* zMw|?tlP$+r(RwH(8%M-wt($3BUM+kBpYzN7Bv|WcLq~$%>O%}sAnHOFku*5K_bSKT zjbZMT^{>Is^`CAv3*&x`!~zDx}*yhN*uoXd}9i-!q_1ShwG_x+Fy?yliT z^r@m|F_kqXvWd&^T$W4LLelcjPZ<$@!yAk;49^xP^8&3Uz$9ye9f7rR@K!Yi4)oh^ zK~*ypdXZ}d5c5za`~9a~+FrgIIU!3vWvy=c!Y8s!7iG-Wh&01Cy%2m&OI7zA%bV>1 zOZk=G7|@DAa0yCdFVklZ71uflMkx)ef4=6Bv7AEw+NlH>-Kgl|Vzq6oG*k6sFYtlu z0Xy0Ez!I`w{%2e^1k5Tc+%KQmOA9U=xP{K1 z=x9m_4NT+pmgeXrdRM;kN%k7>qzxR|bFyV?bOYZ?z|XdKOXBp2*ZPAiyRaX>dHccM z-ZvOJ6mqdr+Xx?LnXh3Og0vi8W@0`gJc3|e%T8o_dwX48---MHrc4YW+h5jM_c{VG z1i@J4KanA0&~rE-=Pxi}U+?eMcNl0ff=Gx_ zP=+8_6hNu_D9n=yc#4yS6;?=cybRqe)FI52dFH;9ngtbbLz@i2FBhI>68X-V*ZAdH z`(?|TY+_-0!JHAijjer}1dkZ9$TA~3{lq|qQOhk!7%D?&=nO_+nla?3+XCGtWr0#1 zRFu2rZ+!&rmhnP2K>&q;i|Cg^SDgckW1>U15?a9Gww}2^);#o-JL{q%#MTIyw<8r4 zQE8uE!1dl1;j<{u9M~AS8cq12J>1sxSM{0s^D$~IxsoIF4379|PLjjNj~bSYL#X{$ zRWPOnNmjXvj=O?73}`m)x{QMlT}P1@IYVFNO;a=sj;f5TLUythML}XT3t)j|44ZWe z3`cJ{%k|_R&}mY9EMBs}22m`Cvv3X`HDGCDu9&=o$=K~X{k{#q_QPA*@;eFe9wrsL ze_JIZG)WIiqR9ZhCbqhE4#YoNL|`g}Un9HOU6kx`DANIi*B= zR^zJUU-}a(K3Sc6`5Dv#ZU*PH+1uQn zB#BH$zByISlU(Yb9M7Ukw`<8{^)Ha0Kn{#U!_k2Tw{*I)b#HYTUJE2Uy%?Iph8**} zb=0}Ws&}@7lYSLE*b?*Tk|VZX@KSq&))~k6t_!H`@B6;=xx%ZO#edzt6&zoyYTNfD z`WyN*D17s}wBk3wOb0mK(kpcHYjNc0?705e(b2om6#jS+dTHk+5S!ppf+^$+PSJ-x zsyF>LxqABW;2X+B!`LC14rZ>6qUsb~V%&q^L|Nk?rrnfW85|MySt2p_{E3cUU&}6M z!x};z)+PZ-l##xc{kjY>Zms^oKmNxhI0YF+K!h<01OWr4 z)OM;2FrwFMB@O(`ThuGK3OF@<={apC3+y~)U{aE2)EVz)z&YmK5^+Hq!y`DOgutXI z@b(_CDaT||3@5{n&q}~xhqJpFM7^9(Wy7`UXCm~_ZatRk>eO;9G#lm5b*O!HE&H5x6@p5;rwTgj(4SjVqEZ#S!^>8g z(st-Pa%7xECnjLR$H;a*!Nn*zSA&+61f3VSId6soO>0PU0e&zAelrpY6T67-CU7ce zx+k5I|W#FL|oGhmd{sya|y*~6GRC;UzjG0!*FtLRmH+tD%#1s2unD|DgjWu@@;Afn8 zf|ZUR!|awQ{aKxV85jf_Dk6tx`JL|^kj+Dm8&E{fGF}7Kyky)eYCb(9oIIINwn+(w zHWRPThyDRlwX0KS#tUqM9x&PxwiUp@%~8{}+EhpfU*BEBewiO;Z#p*pAU`?2BvNSH zicjA3^(bRl1Jj2Dk-5Cd;@D1djDBM$z(Ah6RwV7%yTTY6xVHUf)$NUb`eq;Gpzx+L+@!e$f7nGP5L@&?t zot#Pr#s=^;bet5jA7~~ptK1W%jPDvYGfi8CF|c5u!8aJe5d7Hwc?pbX-38b{mL?fT zr93(j9ne|tLw6wkR*7>o$K#M=@N{O-DqEE#uPVsAs$99&GJY@DDR(=jxq(@n-uL?U zx{gW&1%AD8@{b-qX!dKzCs)}04Uh;~M;7G%(LeboMY2SPXgWriaZqcb`>qG$N(s$aygP%vx>t>O&` zYpx|cltR;1DWi*j`%^?b^{@R1SY6v>GZ!9$ZhiO+l?<*S2XfY40ec{Nha%P$eB60A0Na=;>< ziI&rIu4#EUueToS8-s}_cx#%3j3~34&bhbgk-dUE|HlvpZ!`mg&t8+a^EF=SA4$5= zPWadC2@T=8K5xzr%=%ca0lBpojFj~WGA|h@!>!F_9EtmLJu+3l7uPeNuIlvS z;Ho&Bm9fb;Udt>ed%V?!pVouegIZ8y5g=V*w7q2K@Y1?6kn0(WMX$O*E;3c;ov{Rd z-d2lSc-iD3=Q(bB)msSFEk^U*f=#y$b|3t}?6%Ojiv&*5vGff;e`w%7V@8&d7esPm zc&5T}9vnRGl+)wrx-cv>V%PGsw7|1;S>3`@j>cz$fE?^}(AxQMD#Vu_aL{yfc!DnT zJOH;2s%mjwDvS~%LD9=I58oJBp{rp__1$W5bgKi&A$_%qmG6S@=O^w_wzHw^ooyGO zHnv^b z=ucoWLB+`V;$ZPsUj&csw8jEYDXW9$C^ zdKOSN$cns5LTmrSFw+68@~!E&B$0fP;|)f`Cp4kI-n5io0;_h`ZV144wzs>s!ZqNu zw}|83)*Im8?XP~}{clhZt6~d2Du;M>gu9!!V+4$#UguLs$~zpq>;m$Pnq6|tm(Q~M zx6Qzn%`d}90?hb(@fQfsAX=q3MlgbwpupmUhX*@T=0(lkqH%lmJOBKfMM~68fh{Z% znOhuWUXS2*V~D&dd?S_+wq>FX#(u1u2$Fb)q$PeGGh;)ba=g1*1-6L}qd38Xu#4m< zJY^h%H^!532CLt7LKq)9*#eQ16uDAbeP_rpCq^o7?cGnTeRxp%cr&n#_LCJ*8n=|? zBjYCGcYkHtG;&LKl*GHybPNcA7MZ%P)rx$ASsM!Ks%CC$fzsai=5&*6denLw z_$cJLejUp>rDUJMtinv#(c~;f-l9n*P_j@1ljD@J4jO(C$+a?A!iv9jLisGNYez*M z+@jQWp;aAgV8KICt~pc6$UwVIOrMKGhY&uXQJUxb^gX5{zk^F3N0_&0-J(vkhLirm zX$nFn<$UJ?Ikz0Ip$a`0<-+yV*>R$;NswcN`<9XOX4gkyFDD z5bE=F@MTE%4|W@b$S~c~CMaTn^o0%rL$m>lS817ZU}@DLUs~PBHRKJwL$aZh_Gw!K zmo}UVKKQPW%BKz@zl@nhWFbJaLE8XqK$E}s3i7)BbN;k1erX~w(GPplTL>A&{MJvW zG71;DCqX_37tY-@2VH}^;W#k;;@@Bu;HysqKUo&sI&4hUrP42l$VT-yvZCBu+m*54 zXR+GD$gx|2*bVjtoh|-!z4E1uj#E&^w}SdGx~H@++jfq#@**#blaa*%vv36{fr+F+ zrP9ycXx$gg>RIKA zDKQgRJpGi$c}>3)Y@x;CG$@Vsa6!*$jenf_{MNn2n4@eQBRR~$wTz%CJVebc_vbv- zFZ}tAp$+IFziH~S${E8&7Ri=OqCr>A`D~`ap=KNpHUeL#T*CW~JuE73;G?H2?b3ni zfG>RE{j?45qd#>Txt_ri(1M4PpMWWF2hL7O<@+K_vaZQ=@Wrv=4cug>@M#A4D#ru0 zHsqrS2_oY9;J0(t3)ee7Agtk9>wx2V=U>Qyi(`C04F=MOz@=3q?Q)(R+nUsV3QC=L_=f(* zrm!{mEnC)?;d1$R$4KA43-I)9{=4fI);NG!JFvOf^<*8~pmW|qYzLG6YRA@aINxv} z{Y~{Lb~Mfp&&~OZJoR@O87YJg<#W+7I$&<~G+8SryCd-l(<~Be_HShH=r6dk>FmYA z3$*jHG(wVPteFZ0>+oS2X97d?mIOq4!cz}A5r8`9Q#&?;j%a;VJ2?(a#ghCkvI!33 zkxld32xTmC)3I`q4|p#!kuLH}ax(ltFG*gHW~^3~bA7)Tp8U+U6I@1z(x)KxPWoVT z(_(PcLmDzW>^PpI+mHO<7c0lQRAAyxg|th1YkKUz0z21&2R&OE$*XdZPqdWH zS4MIyU+M?(fIiySfe#iCXyZCI(L(0UyEd%4H?os=gSi07A2tDxzrFpvpMB>WvLlL0AoPsvvLgsEXzRv84l$~Si5;y>1UCZ zr#?{%2#cT@Lwy0>0)uaU^IJ9C;YnYR`1IwXypYY#Ul>+qXCR;E?HF~AYH>0c#GqCX z5Wh+sq0DhK#%KE9sh7lNm8jRkr&gU$I0b7LJ_6@15MilzPX(vM#g*cf+F{;7zV+F(S7KjE4F z;R?pQ(ZBQSX`inX^@o2|uDn~iT8~SJieJXU4|J(BPQT?terr2;f@6(e&iUO;Zw)WH zp?ovi;OE+IU8zln8s0hwX2&_|Rt9n{!K{pB@H$1~hPT?lse^zupEF-p7M8y7FrGfi z*i|fuF*L9Rvh3>A9ud(^^lauAevln=?Sex%l5aujR3!wfDotdc+^-#+w|48cbGOIn z1N?!CFX-YwU@NCO#L7c~o)q{rCQ}Uv1OLm&bGmAPE;Eecw&YHB1&m;y((VKkoWK~d zaf(XT#;i=Ftxx??^)cdu7bAxM-r9h@T14K%i#k?#!9Cw0L?`hCeHn0alb?f627n`7 zb)K%shGo`l7`sKM?AS<#;3_adcY56bE`6aZyudDiF;~1e`IfMQZx{B31`~wkoVG5` zxSWXF{=l#}^z>X>S6|Z3r}tSLI(-0F^*1zPfAxfB&(CJw-a3s2l^KiJan9~OpvxSm zfP^f_kWKT9Jj@gdyVbxbpPhde5TIH5L_cF!l<8U82si`~GTzZAJP+M-oQzqSf0^I< zKOU{g)e$0Bd=TL0|JcS(S8eTP52X%LX}=vO(W1H78wYO3RfPbL zW&*ozbDjS5U7^U!MI?I*EnkZe zGC^`d6hr-M17GsVbk2o@gj6~v0~vyHC|>=Z_XuZL+H3T`z%hbF5Uj?e7!|H{21W?R z(4tME);P58pB^|DXTUf>M9;o6e!iolxVDO)F)$Q76~>I+&1l-PmlqxV4V)bJI1>g% z1CE6AExZ{Aom>NU?PR6;DYw(sytYd%eCz$#F>dZzU$SD;F<`L}2QT$+9tY3;Cd9eC zv{VlDGBza^K+ZgKWF*JXwLHlS-@=jNQQ9~M(7;B->I_29$@*qR>^Q0^?=!ID)EH7h zfM9OkoCiaqzbbQikboth%^cuWgCA)?i@*Yp!j%uStiuVc=vL#RfAElrytIZxBmP|5 zKq>7l#+zz^z#*-2e8vkM^LCu^!tJjm~km%h@xeYi#iZFY)t&S24%wVv8z!6qTQ!5{erc(e&rhB5T4kI_2uc+ z>ba7;GJW7cU*qei^hL}3hlY;f6CM@%wi#M4xQ?9*e*>!oN5zb8;svn;x9&Oh>BIGr z^Cn(tk2g8f6*PgTyo&6i7n$#0uF2Wbq6tlYw}_8ZLTrpiPI+ZVf#4r{0LedKFx7uOC9ci6eF|L~Vq?lE_*X%zR&*Usf_?|+p= z4xN26rGj^+eX0YY#m-LJha$G)U2Ge@ym@Q8_0TqF`8d9zx2nbl>&F@qX5U@~edYvQ za;~;A@X@&k58N&n8Mey3j756F-A>F4%&Ix(#_%OWyO>8jiag9Q+ROyWiQ4QcMzIVu z{mHO7W<>C+05cq9G2nZ6`*kx9j&JVyRi>ZE-K|#dKRsAIIoMhK=HLJSRA_MraS3|+ z34Hy_CuUFCW{h6%-A=oS$|ex0g5@YC)qv#_O!@|r>xxf)kDWQkkD)AztV^3nUi3I>U?uu4NY312l#Aq(Fiu*f$q55 zSO_4eK0^In<&+upGeR{LiS(B9IN}Sfj)ALD*4_n*NIno(kG{Y7T~93__VxgH1v~e)1u?l z5Jk3TU4ZW#1=^#Tu_*eq=Nz?h4P5c8^Wb@pdWHvqoAa&=!9#y(C!6zg9N2dk;lKfn zYXtHMdVLE{z~CavrFyhrqF-49b(oBJ49TL*&2lJ1zT-vraR+-~U|cF`Id3n5(jpzp z4m@7B20wk_2YvK=Wc~LzlDrv1{O{`f@@||dL!wm2c%Wm?r9HfA81p?BRvsD5P7{T9 z%Ie*AGT%9JE8u<3{3pyex<7*J@m~du(Pe}h{4tUltLOyY(!XO54Tf(+pUS=S`9KqJ zqMtuJAOoX+-woK%t#TJg8u;bBYo~gbJ~NK}DonL`dpz*#9M2_b7g-NaI5X78olF%nuz;Vf&>zF^60%aK9;B?C$1hJj>odSJRvlbMtL&mf24Ztm#LyF+3M-h> zFLpw`sLNbJ=;o?6FVN>SzVkR=A^2bTUGf!gBa>|tKNK>G3Xy!$fUjCxZ}R@ zjBPRD=G|M}WDE~1+EwZ5ej4x&-Bh~K&b{V7TkVWpb|1VpeG=wI-e3Rf7jGcfK|&-1 zC_zFPLd-dH;-Uz1kgf5jL-&JvF-ib-4da8+2;Cd%)6Nsu^rJuhyh%Tz5N)sDh*V_s ziG+jbdru#(wyfk!z5$Gza|Js2sjEORq825DR7<|Pm)6TQK@zP&Q_JIj*@X+41IyX)oLXP48MDS6HC|FBj_>V_v z=X@QSU%6JF_&3!B3Na1^+~1`OBNCpZKl4wVDn#JIkb{jep7Q_TskC)^ao&w!nx%zT zf>k9fMt^~cAq0pvjAZE$ye5DcJQxcy58gV69A_jeCpj-08-tBLqr7O|j4q!Uu7+Z9 z{`z#hrRj`AIR(UULkGVN_VCeu+F!2@UmoY0wSf&RyOD2vcol<$7GNoF0}qWU z-U2%g2JCoWUS)jzBfI8OeJ->{MIuDD^0SVHKFpaw9ymBNeRWMm`fu=>_wp?N1`F`d z+cjWMgTl{*yVkc1+1J8v-^c*H(FYhSIr(JZH6ge9Y?cSMjE|=JY*3#u(LgDmV_Jg6 zp$9p4J)=5&#@h^4*-(-;HX7+0etkk&{=lv$beiBTd`+-}{@UU%yJigcgM$|h1qlOj zUhvL)V9I+y>u!{8r_zsVrYb3VUA}%*8t8*vFbzfiz$z>B%m-_2nh4}g);@W8wt9AQ zzWU<34{PZ4*<>k5)>f?FWU=$JbUk`X_Jd++Yy|^r=Q}IYiGr_pfL1V%QK#mn{*Rq4O}W!+W3yvUT||44juO0 z!fF-fm(d%tPj;}}m@TpA*i`vCT0i;WCOZOnv`FLOc3{XgzWw6Q{mZ>o(|RLL{l&|Z z)#b%$~aDE_Ne-mpiw`Y_u`x4sI7}>;+t_fWLuoG8J?B${5bwH z!GgQY4*RV2yYt`|3meksgO=ZKH6eoon|*q6(nX78VdF=C@XI&zh(iu5fCqB7p<$j) zEt;J}D8~tt7voUDN~dlWq40gybhv;(GW_lPIUeLi&5r^QS4AkgiA_FbsR$`cucAfR z-t(x)^?l74_}TZ~i6Gxy{Re;LKdyif1d66@jRUv>PYq}o;9Q*pWypA41?yj&FJpm# zhz<@z_ztfnE5pD9m-CrF0^XNvGaiK?Lq-LI@osKKaPxaHmip~~`YGK;EDX>w{a6pq zD2y?lYxOa(xqcjGBh2ZpA$)5_rB0(oRp#4qStA?j6p%2>0jC? zMK!ApJlb}OpfnEN`7D0xaeV3nKNp-FV^kSkV<1^gG@ZGrj zS#C>l%{X-ZP5|cE@X?PM1C3nog{Em*<2M-+-jm}o-0cgU!Q`6sfzD)wZn|9&KM;&F za&P*wB`uk*khBbC1SLHRb<{UXkC6vJfJabOwQ-_`YrivEB$?1o$hISqN7-de! zHF!(LMy}wHj=jMYob-oQXp2OSfenxKr=M0I(r=oUZk!MZ;U$wU&iU@BuJMh%^WD)_ zHsYDwvyNByll9R*9WL#S-}dQ8U*JVwrczJf78t;L=r??T%v?8Fd8afoUY%-i@zOs$ zTlpey#(-Psq*8Z#W2SMdEBV7qZCtbP9RBRLPrd?;^jF86CfE;8(4gUBGtsPL=0feJ z@}s1vxvUaoh}|mvSLP zVLXHOS+^nV!(>8~;iKnAE{+1)v;1z2YIhxqA}}5nom?l{9VQ`gjJs$kh-JvU=P{SI zoOPXT@qXV|zZm1SwfZ}M`!~uE(H9C+rY=^?g-R9f%_Ce&!xR7^iEWJ?2IU;V0XxQE z+6Y?2Due_J!>WJ8YM?+y(^eb!F)V$!LHgEjxkhrLXZj|1g)ItIqhwBGW6Ew|a(_BO zG_Lam&}~eVrddte)i|bK!rtg^dK}}N6EzAMtMEraM(Oo6g52yc$3HE#=Xx(u-cnxH z7yfGRm=ch=LOd0fH*i@WpVie7^j2d=G2jf2F(Z^~Mrk=YV+sNf_QJ2e%- z?5<^=+t}U=%CbPHirygax=O<-?ysX!bTXXE&07_oTnm;uqrkGiw_V!7&(wfw3>?Xw zNA(JTJQrXL?#AkK?>(uap#5Tm&`kx(G0IiG1O^oVFAF!HCSw+?GLmTS0Sgct`Brf< zw%b?A#Eyq1Ln%U@v5Xr-LNBgfU96rS>=&l}9x&?FcYDC^M{m*3Zf=~Fpa_VnGZXlZyjdSZ zpHvW3pwQVEsy8xV>?Z?cW-qV_HjFC}fwz4n+=keIFzTZZtFF77V+<5Is(hxMDn_%} zj0d06ITu9)f`8!2@uivrFT8A4m+{FTIogW+p|jofF3-d7ctyB+95g%7=dcHduIGr1 zv?`P9RorAbrW!Xbgj**iH8%NYN&!Bu_vl`*$pQmX4ZJKFztIt2P9krDPYIC@I7mql zx*A8OW(=^G))|A$33$n(v2NW$>j`Gr45e7|H#Rjyfp^BG$10g%iTZRpG+Yed(nsj! zjwE=|8`prZwkYE?vyQIgDVpmGO+3X5eYBUgEotE~l{ z;7#{ydlcJ{Hv9rx8pxYKRzD&Si!HLa&oN`+rzu|j@K5^K#@je(e=4&fOLgfgaOjtj zD9pjzqlP>661{<+N`rH!XK}RbIJko+nMxPMpWgTQd=xjCd#C5p{}2Dj*K^>y)c`&0 z?cR?p9JTT*W2RTvuk5#Op<(#YMZ~La@?)n&0q$OOT_$bple5##t9uBGJG*X$J{#$O zis1Mn5dY&3zae!Arr7niFO?7b)=ENhZpU~<204(Zr?K3 zk!u<$j`JYE=nZ#@PN^sXp^}X*xB?I^#&^g#vqoW}Tc2?BVk{=A=77>WIz^cadB!$w zzrq=9&@4*MIC|VC#ji0>pEmmGLZ7r_xL(D{;HzsGLV;b!&-rCejbeh2L1W0Q>I6fL zri>xy2|7fKfd=@_nbdvcH{;ED2rS-Y+{K6#hg>K4vSQfcn{iONCZ{G?j1!6RLl1o^ zmAc+5LwEcJfjPfqVgS?!npwdguuyL3mhT-m|Kp8YR4AVnsN{!(^D0k+ce<*f#IJ=1 zHJUkQPLU4STq%ts`?Gg^x~hVcW5;E!uimO)1&09B$1>JAM@M2P88kFv%Q@O+hxaB6 zgAW~Ir0rQ?0~maP3unvNzy~!&{{k<%{47R;Gl08(=&_PuOU3vR*@Ppf(`Nvz+j)Ge z&&puh1-mYw?mC+aVH1}wLF21 z1Js=E7>CT`X=#x@-o$n_y9GyIWGYmMJh6GhQ1&NqlZoyDlIc6xCU+fGK}2d;8H`ro}mf)6_nBvSx%3n_DEY$tg0 zX^M+Y3D~uDjmauBw4vOL!kG_8(S3`=DRU^ z++SdBV4t`1wH0s1>B`vYT<84TnZ73R;2`yB+}?4N6F>12KT#Y%`sC$mJ2G^2;)R@?Ir2{|F};F!#?PS`};TTWzv7fN$1<5?#`Bjasfl15q!5 zslg14zB7W9aZy;SZwWX@p?w`^&T|+tM@}4%7@4!HtME$J6ambbV357zss0FL`J8ho z#|UzQkf7@f0wu;bwC|i9Cmw#^iUX2a&Zp8P8pN^XyGn}py<{`nJKLf0c8*7|v{P!z z*lw}Fb^+W{B>+~($T|Idy3tPfOBt8>EWb+IjBgxw3{X(JiiutsrP3!dT0@gQMD&aq zsqP$i+8;!g9vtkp3S>t;@;FrsB*3jP98d$7OoO4IWaQVewhKOFak+D$K_vp>dB%nx zBZ`LFm)C($rHHIE5N}`OMQG8zpwn0ALeF|zASZVdBO6>)Mq1^{m^PKLE&zNH^r3HH zh8tWn;5gQd?R!8e{@Mt#Jn%@cs|~t!-adGMZ+j=kDE%;EuETS9-wF+Gh30nzUTF^} z4PzAh@Hp;A8eT*0>tNWTu6;u8 z;Kq*CF6AP)vH|5oj;Tz7i!J5c*#O5>5*$~~y?YnM1gKNd;BXy5S8FA#>*$nE`~iMQ z0LKBNf%PIu0Mjp^;hJx=KrjH-HU)kgb=fjl&*?Jf0*miP3TzEBVw2c*{h$e2lLa;g zeb{`u!iUL(H}BtG9qe!QQMP={lZW%Lqq}k1_qSq0!h8ClkLqmTN1%XI8_Dt8e2Xpm z{;zy*vhMTBF&?^Y&Bij^BYf`Ny&qYSblHDjg>YT%4c;nH{G6wi(#Q4>@3aqU;onu5 zGy$SyT2kbZtei9(O4jOYBLBD32R*MG}`L;4~+Giy`uv}C>p*OAkrs; zMJQV?Qb7MG44^{#3MistvU}GEP}` zj)DK=pZ*Uc@ByBndY8>1eiv0mXtuZK78A@Oz~BKo91xTs);Z^s(>pmm@1DHZafCiS zyZyz{>FV(4WOZ_M*659rfK@gjn4skDo2S@rxue)irZ&%MztxglZ(YdSRDcNmexfhT zZ6rx>!ywMRSyev!G$h78aDlN#D6|Ck@##gcF{XP#37Hkf6edl}SV-QyolK0u!xuth z49+l2iE$a@>_G;!+*~aKy1TcV%yTD#8Kp>jxAAP=6YPwU=M+M`!iATrEDQ*E$jIEj zHqMdLu=^AT$mvdi6{U54F~-`&NW++DyQP${<>t^dm4#6T)3uVHmz<~EKfqn1*qj?B2_9 zYiG#fTNWy>U>cf-H(<&!86-JnXq3$L-7;X>%6bKmWOf(An5pYtT+WGR{Nb&ZclM>@!CaE@v!` ziM&WwqNi|;5#>;?1yJde+_mJMzG{Ti4;`^Umz<&LR-6}E4_J|h$XfVgURL!HehG-4W5iv*5KM6W7;C4ua2Vcgeem z^SX-79NlNVIbTvDVCMYad*^WjBZ*VcuJbW%D}Xj#6*0(l(e->zV3aR;$@J+%^(5cB zqo0-mn&WhLf;)HIS5Lq0M+O9@Y}I7Ysu5`vdXhckK76njer**N4%ac&NOqMIK32*n zD*=Igpbe7H$^5IXm_iX?d$5?~0xuptc@ln;OPhV2=2~|HsqpeC!70vJHtjs!_vmJ} z9*z3w;s^r!>&*vc$jUFCyCsyr^vK(L>63G|>Yfa{_0U{Ao4OJCb?1nkIq|>ppN?#O z%x~U)@?h^9q8}v@0_X9l=07R8XooOjMk6@}K5gs#b1*uXPubBdYy%KOB6D1_7DS|s z_v6qTg$FnaaB+DaV>I`%%X&C>%F(&kC_KaZD2x#W{_eNGU7~YdjK+*L28RRpw5tr$ zh>vlbf#w*=>oveF-?`))F#jux9w2cKRasWLy?0@Zh+e6HPOe0+Gr?U^He| zmxqTf*)b@LQ+N$VZAJCw00kH2S>Etx_!t)7wd?U1r^1Rkxn3a0Y`a!O&!GUAQF0v} zYT1;0<#qoa86VzHwmu8&8hplRaMFTO^ejGWo{_7I7-?0L@|Zy)7uI@2eCR0U@Tb&H zhR~j(C}&p&$W&!6dKaS$=Fv??3~e}FMnCP-DZ@s-$awjfcF-V8kltq4XU}#8= z=!x;r+5))BPWq|=E-X2p@yI(l1p{Mla582PvSi`Tp>0@jH+NvUvFF~ODtIslymC%gutT!0kPdN%Y5*m20$cqHA&koP> zd0r=Ai`G7`JCJ;O`(pT~LM0g9<>7))I+fv=Xn;qCcO06G4>okTAoI3fGe7v68F^l$yG-$-l1FfuX9q@*)2 znb#C-mz@Qil;VBh-1P_cnBgeonZX#yA9x9i1xbWZY5(*rbj^3={bswd5V9mpW@jpl8JBb7Tq&k1h|;iI6-dTK1f~K= z5Q2j?BjB7H+NYzuC})l3+9_j*h|c@s+!#ZXW`BX5L4!kSnR67htFxm-b*$-uVTS7{ zevD+!b4dE8uys~%d_G%A zNEh9g_`#4<0I5`hyo4 zMh{PeLsxK^S0)46w2~KuRTVxBeu9Vd^akH_&dzu^$ZdpaPSyr~&QkH=~ai3BZ-v?dXTTWMcyS$U*pTvn(r^ z(FN}JV`K4~qhY|k=n7tAdZ`PS{IiH_|IuE)4$kF&Xb49#LDcmRSta-OOW`WKKH6HV`oGrg`yOKmDivC&B-E_3YWp)zQgWg8K95 z^w{I;w+V9MP=DuR{1z~o-?j)dc;-(ariu$HxO&F?+1XjMZ|9FAlPXc4eSFYo4G7F$ z22TM5U3(kZ`6$7{qX!3(*WLOvN!ZEhN$7Mp^gRg7!Tamq|D_xAcjHhdBEopapYe6v z{gpF4HpgTdN;G615eV?C^ovzN%plY3D$1~Ib$9pnESd|Qs=P`~-R?05tl9;`6HJdW zK0Y}O(r;Ja|JASL*u&Ld{f~a7V<8-cCp6wxyiyR)E;hH&g>8YI0#Z&+Y+)>h666LS zdDZX;FhX4H=K=|aM(H+2vIvK%YloS>(1JiQ4A|_LXn4M_Vkjb1QECpwT#ZZXfWr)( z8Co{1&*>Je&`{YWN}coO6`REdUihLFUeqAxx8rW_(brP0A$aB;i)cDgdNlw=Z?F<& z^ID88BSdfoE#THp&_kfS?uJhUxdNSQn)w7T<1_A6bj~!#76(HK#$d##MzAd^v8B-NTY%Kc@v=I03NE=plcn;W}J2KrqhhC zHl?wJS0PNN9r9Tmb1lB1k86>QEY)^I*4AXKj90!aMsh8g&h>B?gpC%X?M%h!!x8Y( zBL-0b=KJj=5##(uZW(ZQ&bUKG@G?4Zd-dYQaf2^%Q5{WNuapV6DXnC zzWp(_*p9%NH^nm9%x>*rDzP^9$5zf;dAK_1O+dG4d?vp^hNlK4r5c$bI$2W`>valuzq=Zxq2r-9U1df!{Y>y zTRYpic4V8a`sn$~@aWCz-S`{(T5SB`ul>Lc!L*mJd&!kvdhcf#ZSD) zkY+x5oCas0e+%8vApa^Hl&hma^te-)&_VQihxr#VB4 zH<2ScH;QNc0~;ZJm1qzwRk|D_;@Zl6;MFvs5exYJM z%rlsqmE={$0Z+yvl}728Lio*TQ=p}KQ2H@&`Cht)7OpiOqi8-4jQFT> z^7P5W)x!g;l?5)09K*53D}BM4A=O76U-0+aIE(?90ccEyd-`U0=X+NaFKyO+LdmLB zLDz$W{Wy$S6nS)XTo@Qu8JldP#$RS>Oga*SfhPGG`b?>hA<+Mf6DJ?|Mde@wGvf(g zye69sr~)h5=hOrq-rzG17|E8htUjG%jG5dzkc^KWa3{}#*H$Fr_|T;E3rN}ul2r&E zKG-j8vkpL3X6omvS-=&#xYt)jV&r1%h_xCFD#xR%MW#5j%{uhyqg4%j$?s;vxt5MvSZg)-=v(9=*XkdR z)w#eUxB`Q_gFLJT-^h3!X6WQPW4Fo}nz5@Kyo_1aeu{SKi(JqVd=Z=rcqdy9-1-a- zc%H8f2v81ByfRGTLKJ;<-1J8_(V@0C3~amtgW)7SYl25I(N&@}i4j^JP|fvVyE>d*aj?cG27 z=f9h_x00zpPx7-9xWcDGl%ypvkaGLGSBBG(z!Blxxv>|A?4d>0ztA@}eJAo^>M$Lx z4iccyX?}!LfBIlAzUtQMB97)*kiUV3rlmd0;d1rj@Hn!4XZ7xb?bSBh{D1JT(S6A5vF^Zv7r6a~tyCJ^pY9dZ0fUZVnOhahKvQ9UIRr0#OIa}L3 zKRhkL>cm0{ip;pW73KcD&DHVoaZA@<{QPHE?>>F9`dh#8*F&lZbr2)OHTE1>#=v}r z(avmym2mECZgo-2W`YVUN3TLCWm`mLEPESL0uQi=_%IApF<*AIFo0m&vv=l>V)%n= zOOO%P<(4xGt0<*KF5sg81ej32eWO%0*(=AtD2rf6TenBd9A}(O-kdE1#)uPe`7P#A z<~nuGKQQ6}=hFot3{v=010V8e7Z6JGG#P`HKL)1?n@0NJBna+eAPB0L0EFS7kYMk4 zxh~z0!gAsqdT?amqK3Ur)HvVfg|@EoN#Vfv?$ZaWgT0yigQvH?jo->e@ESPLVjOa1 zjll~Y%-_|hWo&KXN)0K7-~p{TtqfaO3rF5cQvDJD$*hul*Na5C$i6;Bx$_!ldFxhW z49zn(DeW9{u19OK%-C@9)0o)KH}#;~Me+k)SHq{i|cu~3kl;KfPg zAAQhk=^O9hkfyq+j+!Q;WAv9yq62&xz2g)2$;a@8Ze&~8m^_;%LyoYx__*Dw3(azk zML_y!CKkH5=T>0sB^#n|b*{k=U%km#=dN?E4msLtj2d6El>R1Ti*XGO2q7vrp%pn;_|}DP>2C>c1p18oIP}S8;m&>-%OYU& zl4RYSFjzfz9;{yaV9b~P9IZaqhDcoEB-lC*BQzr~=F`t(uyw&fkWvf8I5O_G(=35Q zf1D2*5w7ZgY#|ufrPDe+_Az5wYjG=CQBb`W3*ysulb4XYIIshBu)%81 zk@az+csE%dS=Off$+59PQwnd}jE`3E8#xUam1Q;}*T+W~AD`fXmkkioQlH>*OX5yw zO?3|v#5rZWa0mm|+(Vc^uDK72#-{47rT&>qhh=dCnJvy zhbM99=V$zZAP$uI%XNh#|X(_`xrK;Rdkgo11YEpa@D8Kg1^Jm`&(UPS2`je)s0~ z5C9WJoL5(~DF?%7u4l>gMP+W=k@X-P@jgq$?};?#J&dut&B!awU&XOMSlwjI!vOp4 zJ5N_%{KDr~fAc^4kAhZSVH^W*Zl1v!K!`&gdXrgqX`0r;RFHx2yc3UfpgC4bQ!vSDG~$l-7*&^F@i*h znoZ}E(f+;4MA!rvw0MEf3y&xk*a^NfQ(5pWM9L>)K{&NFr?ZsCIY8t3u4Klc``)rw zu4`t#zD|FAug4tz4jhZ2Ks#k*MrSb!r~%)~%DOE>@#N8N`B&O!JQV}{f-~c&ah+@W zXz;{164Ky^CY-SOGvz*TmY%szkOl`)xXn$-BxAr(GCX5Q$6&(e`HPoz{@q$Qd=24q zTy`EDb4{&b+Amp7`JK19amV2xDD)Ea!Y3%!Ih8K?17C(JeVi*Td~r>>X;ynP!BfcA z>$W4WZUgfjeHfL}BKSmpCrO$L%=UI63r!Ammi~1mAuR{;=BuJp&0{WiIIBHW+ z$GbYGpiFOasIuF@F)&#@jqd#mUW_`PErva(FmU*hx9h>oVAt8ugN!c=Rl+sCd*QXM zOja%?Si}qV4o%RpPBzzScM<*o7|gR#)lAorIj`C!i?qO&KENgOB#*@{^g%l-%e_Xg zozH>%(=XWcNqz(g9IGIQjO$ZV?ZApY)setuiqCCjoOy$)oI@-21it`8|Ivo*`GYzX%g`0V7uA6puxkl z1m16xp?k!#C*xgSo~?v)j}8*_msXLLAO8ODjqHyzp%^;G+-6nzlr2HLCEf^OXTKMbq z2y>1vtNS@Y8*@B*xSQrO+t-E9!ZyK8qsA~@6xYQp84oVb*C@j`cvRRzBf{V_N8Ap~=BLIpxqH(aMRw&6Rkie}DrX9xEbVTCp6ZF#T<_#)aH3zk0&1754OcvdM^tcKY4M~Km?vPui-cZS&Szq?am0s=lJ-n ztMn;2*z|Rse$h{0D*IN&Q7yQ;&V0Oj7elV^bV7IyZ8TH9W(3fkoS04`bG?5yvhQUK z2HNp(A#jBjf!_WLXu+_Ku94MS$rR4Re+$n9z<1i`( zz#>_;Cu*g!Y9ARAjFJOR6^7{fU~g;iO`q&1eZvzi&;u>$9X(sCZ39$m5a>0X@Mz6G zT`uso4OXzj8q^=DlX+iT;mc}{+Jpv*N5O!KA_WZ0PGd;%+T*hRT^LIsFi zBffyF>e}ljSnX6xd2Q`R##^^jQJSU#Z~iAqQk)@LqfhVa&v|;#fGwZ=)a>;hzmop( z2u*+V5B&bs(eX*AgpZDoI|jNuNb-1ce%-qnFzxx_QRR{Fu@!uvvFyHQpLzJRFXWW$ z@e93^B)Cf)Gt_D;0o;?vJF9yE|1$8dZpF@pRvzN>_O|WT;|s3NVs8Xkufyk^)#aP` zjjzX{cSC{@f}j}0;2bOlVm5;v+H~b61L3&HRym>BF$ujHVN^nzjSvX9>o*!9e1CZ}m8aJgF;@D&*95*9G z)JFMcK@NvNjvQC|L&yBif4QWFYdP0ep_BH?RD@X@^4;u!68MZ^5(QFd^yC0T=Dx~9 z=ObXv^7?zSr8@6)F3_Nu6iaCd+-}*?hG9}-1-~r1kNyjv7*WR_h4*&%LobU$I9dG* z7-fcxk7M(a4alZ4UI@Wy&H}8FQS!Ky$nixM$-s!1@h?zCkr;%x-O$5xn>jZc2qyAN zz5;&f-i>ZTu$GF0C;D}fU&bP9=DH9UJf>T6dHR@h5y8MRMwEkm!vLpa&zbg!-Ch%V zSy&~YKzqT4%*~U#O5@oX#B` zQwhP3t-ytEVMB4!C;S*5!Ji$iJhM7s{TOJ+&f+Y?I~#y7j`STD>=$k^>XXO2by9be zt<(vH1_BWL(yuv7jtyS_(U4kyqPrHdqdvru^WHkJeTQ4rPGs3OSs>lJgYs zE+yAVI8^8EhVZ9XNgl#)B~6P%$)^B-?84ofF{Rra7#->>;IePZ!YWz}x%^ETQ~$29 zX%sr*B^ktLFPR+YAsD28?1!MVHYzY!3i`^(?JWRHyunlU-F4sxpOP*zum^LSUi!#)^40)7 zCnYbgCr?DCRfv4?Om(H>8Gpv(RI3ZQ4((KRY&PX~Q@0p*(QaVtmePe?0wN$3n8daR z9sw1&&`==f_>!3mAP}N!QUWJ^*@&F6BYcgybas3*;~m%lTR^10G%4p*iRp!)pA&Bo z8ysw5tCA&H;Ly*b12TAWgAeF1!Oh0%v)}XO=-9^UFm_wua~XRtsZb3@2jkjBt^s}E z8y}Ey@?A2*1}eErLg69MJxjK3JqDiLj)2MX$=Y80<>x>1urQv*hFrXYx9Q@@K(c&% zxq0nYx7F%d0*r%$gV>4$HDCGs`!^yW%o*aAzGad@7<&+feH9o8%Fx;%|vYSEFD@{viCq+b7j#`|g4+qU3{O}L{!0PeihpWH&pZ#jCMWEHE z^I2OM8Afkq3=W+`aUBJHxVKj(b0(a}<=dI7vV#<85dndlS%hzxPjK{QQC}BpgcfdJ zsWCJbp~*2Tz#l(+u==Op{GGO`bZ30D(2w1v&Xn7|(&zm~ToK49!sR+@t?&jejPhCI z8zGgc!wrqnycu15PhZ2DjN_A_A4Q@ag;{i|Y$uEP7_JqC;K6I2BEDa87$JI; ztTm2@F%-cc#dtVvb!+!I4=t^JFN4E)&K-X=V$1E~Mot+!cnKcJ2`2$2G*PYEkDxGM z5Ng>lNPra&(U1YQK}>_5082Jz6A%0w`Ln0A$BBB(FQ>G*wbh4A$Q;h{X}KBP`bg9` zebZh~AMZ^D9~c=^vZS=iF|!|Fz$1EP;Vt;!EQ7jth`LjUM{u)Ea2!H=5og zgLVF*bMN5F_ZaN94gK@8rp7t&qcelZzS2=+!zZWLzYAKf83*f{G-*3d7yliv{3VFg zFNbd3Pw9(yX)W7j!N~xp=sHybGU#!g=_2?~nYyp^Bk)4Eh;sV|k4kI~2gmgbjn?qO z^(_5ylx#1U$TYh-Yoi26!$*V=K;frXRJ8Kk4Rq2OHjrg1}~> z5+v~6#7F(qkNyic%F~T#MRFLOXxxqQ3@t;h3}6*CM%$2|Fay2|7R(d-9^ee*Z9@#@ zOw3zWeJV?G;1;bU{;c6L*TUd*?kNgSS(J)J$4XS6dGDQ;e}3&(ez`>L0t%E$pEC2U zFxv`2hLJHN1OX+2G-Y7S(-vbeP`3OcS%AKJ3sD>$qbu4bEAVtZhM4nrDS~kd6`C-S zAlo?!?%FXJGM&3&fHLQc!_z7-W200;87#IDh`6?M)@!HXm2NAj#wFNwu%QzLr2KWH zRibgwjrej-ggJ^mPI9vGbP8zwMhWzDC)YcV`98gC%tOauRHxp)(%${=qT{PLQ`M6< zY3H^K_dqhJ=Vzy@)1#9bI^z&Xu%MA)mC@|#1dOgfh(mB25s1cMfQt;-Tx0I2*b3j$ zMHL2r%{?(qop%dPyAfy^b!91TxLTN(43)9Bn9J^AobvI>*_2sJb+jC3X2B(cET9rJ zkVWNW^lFJb@ZY@yN;D_e=GmtFn^O%`ELMWsln>b>1}n;yw~aQMg^&?}Lb_t#Ud2Fg z68EB*xp45LdP$Kc~t8svp1&b>Tz zYneoVbKI)F;~B>;fe=6=w#uB!#y0yAIcJ(^RZRL4c z+H;)ENCSh42%_Na{ajLA%9ScDg(KgszQ^-Az>LwrGvmJh$#;mBH<3l6QWM#ed9b`){JCm3#@xrR?c>u#%@KItDl9j7_j zyY(IDgr{h(B68H#a{mCPH!pW2GZUr8ibUhSj zopz7h(jB>E7a+#3kxh1uPs8(=hSkR}&w9J%#-IE{U%#<44TtP4GU0@k9c+H!AuLZG z?1v~J{+ncw<{<$VL9#eS7HrOlFgNpK?ZY^m#Q+H6oDIgjPV^ZUp6GZp+#IDfcP-Pa z@!pB^$e(Kn$$RfTtws17f9=hN z!DVbpNccM!n_~pBbJ96S__WtggN&T7g+8xfm`z9|P)B&{Cri zVQ4^+HWaI?xkDeyV-cY;p8dv^rMd%F-aC7HU2W}_rca)|=yV8~(H{q9>ctdD6*4kG zRv2jWqymnqln}}U5aAIS!(((vCpA3juGcff;MGPxB~U}7KG-Bj8fXQ%7ssa)4F~52 zKY_nnljb*mA|N_+jGV`J2Aa>9(tYsD|22xnuT11U`K_(VC zP(cy+;1OP;!D7&JxVWMdX9NdMw1G?Icrq6>OgBBI4Y?3(nR23U+K*wx{c*kx99@^b zIVY7Q(m3*@h#6dRZ99!_u`T0B0$0W)OEY~CV;i2P!8rENPzG-GF+D=-J}{@(MY02n zO>6M00exUJy}>C|#&W)Q4`tlj8Jhip6FBg>!CByBlg8nU?b5zZEd2L)bPzM1mO=oM8=mva6~g>9T8{=(wPO?bTs}s$4tpwksi9X%j?EA-#yKaM5D?pN<|e$q zAHjc|fRJCc4oy;}GT>hJZqycN&tFLr-mborMAE{%jUWGgU%rvKdO-WKU1F{(GnB7v zzG7*;MF)gYbU>lIz$0z%Z*JAl5ZDT6m>@bgrz}b`ecpb?8=zVHDZlGgQ-p|-5$t-g!uuWye=WY~MSs$$!Zw)za@F=S? zO1ZSo$Tc!0V+DZHk8xzQWDFeeI2R5&0Zr(Yu9I1J;83^CKp!X zS9+rc`pNL+i>!_OMes{+GvoKBoe>1pqH?vzfLsJ&}iq-|lZp zcFh)Y9U-)^KuY%Bpf&fPz}ayj>XvL*f{M7XWGhO@827R;3Tz&_bAfL<#|s(J_(!b!ZC2UP{xnelQoR< zrs(aPp~?9gqO<}BCrlwkx7t&%nvLMCM9VNyfUWymol-!H21rrhtMJd1Or2N;B{wqG zE~*J#1T)*a1U<*X4|KhEkAcoP#yjJ7yj=hC@Mv{-c)TuK+5bJT$4EJs%bPvo723?) zU0}}`40!iU4qSNA3?}fS2mboxC>jXnT8rSwi+;N>D&ruBF^0FQ2b?X3HT>%wo(4BD zuu(SslvX+C1%1b+Jj+;2Ce>|`2T87v6W|}##o%!XNCuM*I;}dXopZ?$!tE{Bf30(T2a zUuz$Ap&RavwdfOlP+8V_etNq4%%lCT#I@dJGhFyHzsL~+}+LK{MR)EAAxZj(-sWVKcw>AWV8K(n;e&OGF+M9|2w{<Ar)iO8pfh~Xdp=e3mTv$81-8{2wnndzv(hMU`_GJ82BO)^1b-x zi|;@F$9^)|`0nc4AAC^zh|ZrJ#;4WB-&=k7{Ke{RX8!DWlwlqWn}+3grnh8&;yya-Z&a}&P>FO&%8vZ(X( zxsQEY#wSY2byJ?5-LPc%w#V~~X9WDwANip$?$zqA{L(MA55&bx2Cmss2qThHeqdgg zQk{$oQ|qL|98SDhU5-yVa+vMSARxT)7!mLhV5{;e5o3cM48AwTa9q@_BH*f)zoTsM zAwV@G>01TCdVu_BpH_L&BTv|JTboSQALrq-#LJ7K64a{*GdybEVzrvVhtUL-fwE#A zL7J@*upBp*zkpJ_Wo}?;sk(TMQL1B&uyE`xd!-G&0)x?q$EU!%wZ36D^PFFG(D z4D?bK^*dJ&d}&vQ7Nw3AY8K5wqa(b)<~6i_+h|tCzO2p;D1{j;jjRI?N23}-LEy`Y zaiUYoouEmEgMthaT=8zd&TN7i(-#f0(#V`0`e<(q!In&6r7A zvsQE6CT3dJ_2ltXU>92qR{G2?lW~cejG3P7MrNMuZ>4wpoKGbc4CqqZ4u>`0;i6K( zL3{Zf66TYd24X+f2LvV=ptR)lEjDdcDloVnKgqXGZ~radf96mB^y*;y?&^2G{ZVbw z_?NdyTGxv=uRQqWDnr3j5PEBM7#fgsPw-h96UdIaa#E^?{3ck@+&cYyU~*Smu?|Kv;Fl*89We?N$7Qbhy{~4d ziBy|udj|*ETmup1nDi?;Rx%aUDf8$C-uepJ-7o&b-byG&X(>Szg40V4%Sw$oeyGe$|L9&WtJP z;<@C&G1NOF$%_D%dpdZ=^`3t5WvY$F$}Vxmdiqa0RXr~ z$M7;1hkGyIIVoks{ODaKV?zYbc zalwn;T1flYecickcXOryJVX7YK_JI${Y1uy&g%~k&Xa{KPsp=pz{CB$$bAe_WWyQ_ z_-%z2WQdH{c*lMi1FgF2R*u&R3%qjP_n7(ea)Z7HL(gIup5vS#b@+jq)!}@N4_$htAMxJM;-WV5U># z#V6ba#b_0B?}fa zE9WEw>^44|GQ%^rn}1=KInHH)Dq9W&a)Cy0Z19w^nwVvLeg|knTY={UZsXL4cEkq% z90!X)a{S6dsHBqb6)@a1cMM;{|6?)$F<2S`cB{`OYo?VX3w*`4jczOnk| z2N@^AtI~wC=3$&RW^8SHD9h{UL7Z3y^E54R zeC9Ln1iAaGANql>#%LU`e(B%)_bPmi1SvU%)?cn^lostFSQGUo*a(5VFam>`U31!b zBbw;Ucg)AwmY35Gq0P~>%n`v0nyn;IPy`-hh{;p3=>i*`KkS5OBm8_)(v}7N4t$91 z?YatA{u?@`-wMkZJ2*MUh+n5)RRyq{(?Tz}>OqzSH$jO0ssQQ4_1ZWt;4sDn6S4|8 zM=|ru?G{0*e3bDO-r%cD$RN2tlw+bS9It?_f|F~}fa9I4d;$Q52;Id2a~C_ zG@UkhV?M0c;U!#+hlKgFWg_@xGsf}~wZmf^NEALWD{G5}8&n4VW-MeN{oL)ChRbov znSQrp43%lU!0ujj4^Uue;HMnTkl#u$MMh+;?JLL7DnJdqdBb1OCNQ(+fHPOYz%!XL zC&`e736)KJVL;vnpPBa~yDCTtX43yzB6{-mU~fA{Q81B9(7V=v#K8|fGS3*Im%s#VRl0h+8kr1EZ}Yp0Udd#B%Wf|c zc*s)8RTx+K3qUIy_v{D$uqo$qtsqYp5!ey2Q)rP3fnfYWWtpq%KKSXQ8~bd|igOO# z-T~;)ib~+1L+(mBOW**1`brnlymE@p^xjKw3dXJ2AwjW5LGD5Gk!vnlw{Mm<=*ul-A<4YQI=-ObB zGCA4HW#x%j4c_Km1!A(V{r&CYw7jW!#(Kh6bg5@WPh~*e?r{0FMo{R>BTx z`jdg5#gC}m)-ltM9Iu_OOpdKv9F>6Gxw+>)d|kusxC)6Ensu5ixENR8;L6vq)E!%M zOX6H77@FWuP((+_Cp;IM3`f893D>R>3QYgIzw~pflau4sZ-4Wn=-o|%v4ZL;7ZN^(oV(IZ_;Mw>iU;lv{_kg2b=k$^_%Zj`6QW$0N+F?3mxHxfh z-^%A!g?E03l7?`Y?Ip8%^zfiY)b_4!xc{AxK8a&UFc2UC?V%ivbQ6_4eDI)1D6gHK zB}? zr*ldJT;t3u-_j2!$Otb=*#YyNG0)|7YLr+XHKe(waIO_Vdrlie9RmYH-T6x;($EfwL#&Vu9?1Kz~`)&-WMJaX|G>YdVqXlO`1{niu zDR4kW=iL1SsFa9;GuoV!ts6z9dXE8Wl#!38MSs@p?>=aJml0nJJ??gYq+J&IGre)g5g++-1 zAv}{olhjCjxddFOn$+ztKFjo#Buazv-tCct#DZpKr_MJIbvwA7pN z$+M~zC(?1e$X~9pU{;`NM=^=cz^(yQ)ntb3m(9#P0m>Cp<9G|t{}!P2pFnDBxy43skHc&X5oF|%TJlH-{ft^ zQ(=j{T3;u7_9`AZKRzrMw*x`DP>^hm9d{Tm|A+tmU#S24|NeLX!|H>No`szjawdCz z{3v{4Pj0VX9-ps%_dCz)Klrq6k(&-I6tr2Ah39y1dg_Uyfh&Fy*YHMlhSbW;JB^!P z^#3}+%j(8mI;++Gj@z+~V?9~|-}L=9ks^5AX1ej?Km663h0$H~P()(9VqBCVt;`cq z9VTjIk3)!qWahK7coat|jiH;2!wx-nYdD*6rcWzdIrN7QAFcLtEri{({y4ue z-aUTzbDif4@9plbzVNwsL$KBA|M-9UcS}@C&N(dQATSdGS++Ssj+#PJ4ENf0PvXF3 z28%Eu4rQNP6=te{q17*DaNijMeS)=H zQgY13$|YKN!5gHsCphVwfMH}h8b0JVW5cM4bn9fo0}O5HJl7Fgft4(wjt~sNnc)zb zidKoI+x*P`^~pekXaryur|reak^$)4={(j%xUxk8myX*nqkEd@Q%To;0Sp|zQr_|< z?PNT4LTPUyCCB1rL_vm9w>HHHk8SBpW>kjEH>(`6psF4MXba|o zZ2K2zCtNK7CM1lOh8YVlx~?IBSDu4g%kPmB@IxH` zoF_*Cp+OhU%;MbW!98*#P{SL}J`M;A^@VV`4h=?!1ZVVW>;_w<8f03Bz%-aKTrQ^z zXwiZ5nlk)4i4Zj851%BUhn;EgyiBb~`Y zJ2w}@a1{b?Z*3RAle4oJ)q4TpDuNz|yR)^rywvZ^l{`s=L$OX1nFty@ElR2MohNhr z*M8-%wjY%B@u_eHSx6K3W+!2ufWm6`&c$&OE?7Ii1}Z_u9HwX*&N-Xkvbi+NTN^^+ z++6Fr^>GY#McTFGljH6ebk4ODlCeUNiT);A#uUb=rMJ9@4LF+JWekEQL#v}*Uk^rN zDAPcD#=&_CBD3NQy3<*%r+6HbiUS_b9Si24M5Y`%#Y4WplxsLmc#En9Vy#?6NjaR` zp(8=z{Iqqiw^9!|5a19r_veC5A7oHqBjW)BA+EQGOp8JHeaY2_gmA87OQQL`Jq4 z-r#5|h|#sq0n+pnukmRk-@)!(_yQ|AGDb7ST$__M&TiA=Jgwmo6yS->?Ls}&v3hp_lE7NRn#}@~{ie_XTVY;9+Ft|pL!x@7E8f4TM zUhwL1c&4o>6@2f;J?NqDyz4;I&H}o^kRR|bf6|p8Upum)9U41c*@_(e(Ler&0_U66 z2j7WP|KwT5imYTz=LCx6Svmjk@I2pb*?QTvG5iQ#;{h9!pA81lvFncV!f$kB2iQ~e z9f?85B$wBw4c?4=M&7yuU|P^o!BcM!&hL$%_}UNRLWQ*T{Wxd_m6E)Qk`i2Vr3=#sG3!R`h-LGf%7NfA4Sn^%4csyg5N_5Ca26SrlFAQkHJDt<}?Q9|kEWb8a=L zWtcOJVuXqiGm;pWPfpEQ(KZL&=$Jr8Fcu}GD2T3{=uvnKKE-0B!Qdq*u%L|55hZd2 zB+>Y2gsb3z7l#ig!a)!$*17~!V5UrsoLv)KnMy`%corO87l1jhPn9Qc2Pwi532Q@G z;S2FJkJ84G=k28wPt9esm*Ks~W-?~V{ zPNQ(7Z-OtXhmVSaGOy?wY!=P6!jVq#M&A@)U*tjn08aCP6Eq5fl$_IVjx!wod>Y%^ z_jzUT{9_)L1wZ5wf0Tg(O8fSSFRpby|32-D^G7SN4Nb`E^zTz9V0^f|`*3e{uszR8 zMsK{R3g*k z7NCVU`m18z&oO+f!_2?M5z<@3(Cz9W7=pZA054w!*6Od7>#2ZgSu)7_A)&k=P|RU6oS6Iza@gusO2KI8lO) zUg;YT(Q$NY7O$zK7@rLX3x3Qr>x@y$+}~kJ`eD1tF1XMFA6iMwLH^0jE3AJJ*y01h5nKvXqu73C1-@)b87e4#m>Yb;LR|k9chQ6pF zdH=m9W!~TXPkyDub1g2B2ZlmMD#9mB7(b3;WA$K*Ax}eu6lI4ggu`!4ud;;+l(vjZ ze|3y$;EadsTZ z$wtQsFHIXoDAsbu1Tr9L6#O1P-04=OqJ5UB8BzG85@&-N-@!#M1a}O_@zGh=BcNeU zb)MD0eRe_UPrn32n`{Zb?K?pH4>$akka@8c#xwRDj}6Q5%0zxI*XzRP zpZ~?5j<4HVee(Qp^@#@wCD0W-ynH#2W405V{pc?e@E8w#f|)61+3hGa{fL0ndeupG8kzLxPni9`SLmp-@p&PUHyFJmM{ z=XRXys_PAb!>dHX+a;>el;hudw7+`t(_och!T*Dlk0&e zszIb?=^2wlCqu-y58p@|0^)X%1nq^7amIg&Wnl^-K*UDJfntQ4p<`6%{(G>oDauRf z?o-E*-fJ*1eF+NuuHkhyXcD@~x;g1FYIVkGU`ilO+OK*3rBucV>fhG0oT&0Q0dTvP zC=%@28N)r_vSs}{mS%;$%9ioKLx4C=WN*})>)_28ZQYIY&0E{<3K+mt6J+hS{MX!`s zgwFXLpWEA+p))UMqm=ZO?;IAHq@s^@>`a(%p&8?D!JeSWyf1t$JQJ03ynwKw*+evjVj_l3tF?`ld2=E1N z0$@7lJj1P4hEsSh%>(#Ucb?euH6sp zQ_3FR+`J8K(vP-uJpT=Sd_|wO3qL|zI%hBci)-5t3x+mU$B`+{RYm8)X6y}}C%b`z z_+hLGp%Z8ZM>dhuqKBMO9cub%;9KV=XvC-Bw3d0(TnN?u(ZjI@BJj@d zoSF9NXUVSn3U1P1FyJ{|*tO_0fl_G^T*Pc6o!Ek!P=-G%8_vx6UfTi++IcKIzOGh zs_c0)3Sg40l3%?{Kw%Ckf!E1-vy_&T?~joeB{v{Q+u19b8l=B`cb>p?-Ya7!G*Ew~>2}f!UlOWpdxO+d|UC>RmfhMb^xj5$u^8W0WU4r=%2=7}RNozWC?WC^_(B z?cv!~432FV*UmTZkhnZRm*`19z4#B}A2L;r>QC|lJD9xC*D$gg$B-HCb|dHDCkqVW zMGOO+z}f{q00=}r=#)>_gT?U1^S#IN2RE>6-Cqoo;{%iN$e;5O&3?L$ow<%|M| zt3>~dL4uq7AS;WLF%}80aZIOlg?=)oXkjHTJWLl^x&HCdG00a>9`3CkKiDg57IV^1 z{d#fKUii-dcEMc$!)GvtBh7$2?Lr}g$Bn78Tow&3596jLFwUF4pb`C@1#>~@?d?ui z$z&N`0RZ_$o;tvMmPYA^EOhE6eZb#Vw}M7<*K}IY=kc_s7lO~#>QQ*N8Hcs;Cf6k3 z;i&1373&NLdbBc;x1GS6a0LJAJ_Z?wzT_Ge92vKO8_kvCRVgq!&Ds{?Yy|n3K7&WP z0Y6$a$jcb{TKw!iKv&p@R`tTi_a5%%lLO(H1lS|n-t0HWu77=&p377vc+#=Nr}9dd z@CG3QKUoDYJ15DKl(>*1Gq!p3vm|Ytsft)wTpyu5TLAX)9pP*Qwuw}ZnL|%c-K9|f ze1pL6Bs{Pi8rZt%c|DFWjqV8O+-hvk3+o-W^IPD;7HMm99w55!++7{;uMTqDk+0gA z1TV-A=Q?z}=$q_ptbYFI|BVDxtJU+DXXT$N&5KWxutxR;v2akql&lD}K7MgjS%3QQ zLFvM8ntEV2$-N4m2Yt0V8mDYAIK4GrZg)hsl@=?xOOjs3XPSDHMA6L`vGI7eBO#C7 zJx*Y;@yCAbYq5bc9`~y9`buAu@iLC0BAakPP6Uhr2&lZS+%3)TEonK=scj`Ye)@2~ z(T2kG%cDeD$pRlg-k()}aptylwIIS{5+6O-4}+hPVrDJvl`;&!!i$V6ak z)YJETGJ+I0*T(r)NWxTE6a{llyC%$0AaGSla?l(gWgw_tVp-11PsXJyp)&@918zda z(11P2reD{k^ZdhD%$B+MRb!s^#%e~8esVgrxlWy4 zCm7(@V|g>`Ugf{`Xc^ua8_qdYg=GX07ToEoa-|=%ca4|d{`{K&Yyvy-Mpm^2M~1EJ zv`r2=Zfy9-K%pKm3ln_6;8hu90eM!;^e0wwOKoQ zfjfAyCHO_AIABH_Z3XXw0W=udoT@|N3Y>J%<9o>gKC&y7MKVJ+GR7iP4X)R+;o%;& zM^2!1;B*{J-PTx8m2+%MZF|PBsFuA5h;?#2ESp*WRG3x7$bns0J!y^pk&z|PB0C)Lvt;;!AO3PbZRxa%Od40-d`Eg(wXXmG|MW>j zK~z6@+K|f*uIOQ5q_qHU52b5#!8(?WpZc*Mz7Y{v{3VLOd|3FP;7YL~fgxHki}9RI z)BSo^wua1GS#K-X zJb83brvBF7|2tJOK-IXU)0QP8hy(`g7Of}?Vi@9rr_q0ylP(H7<}L=j$`dAYwl(r$ zXq^bbMbF@8A(eS()c~fWD+_bp*ps;go(NH|OW$A-efu*GAmvrYkAfp+B%_8X*AYT^fnVT7Xbg(>O4G9Kqwoiw%Po8& zy3!*K+dO!kK>7oVMRuGp$jr$wE*iTvh+%SVK+GY^A~2vZZ+lL;me9QkgU7IpQ(^F1 z3Qn7FuG2KKaxZiN3tli<;J~wGYQcAWL@%W)(>reGu`Yt}7U*;^9|B5_XAA`xx=+7q zN`5;IJ_hkJh8GY024|f?a76`t%%RE{!$97^=9BTIkl284t~a)JkS$$upvFz3yceC( zZeF>jVb!W`m=-AgB4?pQSN(hF%teM*^`i5S_U^ClMaJzm*q94GK?;l> zxPj(mH#tl3Ckyc&?O!|XjhnL*yoaW=;UW$Y9)crxQ>6PEav8oLSzxownWC3UiT*f^ zu{E@0=vm(8EL`w|)Hs$dM`tlOKPso8Ll*<)dxQ5}<2+p5Z3H&K2E7J5`;PbQxS&fQ z-JmPuqc7B4&o&zmB)-|4hrIJK0s-R)Tt;8vFmhlF_P}%j{(%h)ql2>T^}^$v2a6Hd za1I^U*oZ!#KD3$zl^G}Flg%{hc$^=(;dJc~=NfdKs(~y&*XEc%2@5=s>=%CFXL9aM zo|L`6DhyLM<+lQZJT)uKI89M%@%hkpo`P%p2h=Sm25R05dH%mnB zX-pr#JS`DFC2T@k&klZ@3{sXS_ywkQ4c zc)CzIS)x*_P`7tXftZpQA)*Li7qFqnaaXO*e3dB|WxQrr zWL~yEG|$F?GJ^PoUvO7_0f+wHbPlb0RYm2nMfj8(?VMz6DG}L_rIZ1|lS5N&5y3K! zaCgk7K7C}^@~(YMZ$06-j+U(bBAplaoTIp%D^J^zgY}Ru(L?&u_e_(Rig2A^qrEri zX+{wE83Ql;MPrV+Vw+=ds(j=J(@P!&YmAAj>R{4OGwd8-+|bC_E&Z&fBXVo;M+ zr8jbwtE)G~CiJ8C4I*-k(f0O23-r~0V%Y|-j4z%5Ye1C0(=Ync5@-6qx}1PXe|AGl z4qqDrXS=p3w-eCo7&V!zm;E(lRh*GT;O3hC7-)hh{6n_#Mc;Yj7hPpf(2Y!X&;5+y zMXuNjL5Q(cJOuH0Jo++aY%lghp9IVqW0g;WWb)OXHvX0?&ImhPex zzJYOjXQ~YPsJ`VT0L!TcLA^eGFYA%emW+{evP&EV1%e=bcTPTIHJDhBt8aJ?t;q8F z+Whu527REbbdKB!Ku~I#uES-c;%V1mER!mA+Fy;?l4fSsI*5?Drd zC3we4hL=DEh}K-ZPQu)~c;aWt0AFOSgDJ$smBDKk4L(0SE*S!s($UMMG3U(lN0X{X=HSZJ(G9cF?SL9*$yR`6t(fzvsU zcwL^ifL6`0t-MDgFl(3dQXBAjpbawMi_27=I?bSiw{&;x3YwXN_SxlP{4*RIaE7+va7{jc>2)W`PJPUo6d%yONivpmXBtwzzswCkNS>9zL1 za2m_nh8Yk1`8RFS-(UP+|Akhgf9Hc|P4*;)hsnlY#<8M}TP?w8x}h6#g_fQ`DoDn5 z{ooxPZo-+q&7ZU9bl)B?78RbHp4PYU$s~+DMw+mz_Lf#C{kQBNq%36ZJbP%c@l#*_ zN}+z7OqgOmKRydGZ&y3<_z3ar=q!LK3C1x2Ca(lAvR7je`h*^bdwb9`m!`eeox#!VjM+hANHvq@`~2^uo_^j-yjcwqM(l z{wh!KM?9|_WZUYPdtN|_C&44vTL|WXC*)N>BNrTFPzp`DcR&zD6R>GVHaJ}Ens9`k zbxa|Wg=`k3&iKKbT#?26{4Pvm_s~%i!(P$B%6%HLBVP0`=!|W{$NZH)>-XR_Ho3v?bI@^a+84SIN)?t2x31W_1~y(ZH3TL)QM;^@Xk7ZXgl3y|uf%yzJ+} z&i(eop<9OpHufQzVf^xGD=l}UKL@+Jp<8q+<8J)1ANjrnI@hz6Wq?0_Wn%w49gHzL zjuP39wJQaaMO$W1xpQd*E1BEHMI(2NaXXt%tb%SCGmht0fpL4$y$XIyROxp=j@(@P z%rWbY)3T9DGKFOA78-2DU|CT2-~WT(ssTgdvLM%Yujs(h+t@HUl8aavB$Fb5n2uNx z_fG|h(L=bd83=O~LAAWFYgK@jz{@%Jn0iv5Ik{ek&J0U%G#(n@5nhx|=?e*#i~)WO z!=g+Mz|S#8!dxN;0Eg4aK^=O|jeM*U?are@1!guyaY?< zJOhKiZ0+fqW|J9%BBZ-fo=6N{lNUy_x))UbsqC-;>&-iJNew;d+g^v0s+pYz#pvT2{P8L*8Idj=D z86i*j*@|A8s({d8__+=%d_^-a4%k?d4K{{68y^DbTiZZJ=~KoTd7;a(RX~Af{--bS zs{W@v+?-wT5`dvsamjBLPOmz1eFzZYnD2010?wrxrOMU)AabmHOMm58{v#6>#R)2Z z_miX2^zh}&)$^Aps}DZ@#4wTLy=Kc27&^jkHIRxgxqLnQx?AvU&lcD7owiSA3r!RA z3m%NsvVHt4p9}>$VHPyj$({3YXKKVvsnt*ywbJ~m(t}t<7It-l7<#l@U$Vw92X;{ zd3UagVv&Y1Qez|xOsK8A>}pDVq+hhELqWHE%Bl!XBk;6u^cNZkEExY;(1P(Zj;RX9 znb7;xe-i<8P2c)NH^Oa9-*c$fagsryaBK&+*(4@(Nxv;~7j_DXNByrfMK=AYTyP!) z*Eq82W)>P{{N)8+84{;6#$)D1|INfn8 zD78wG-|#oTB@Nt~DfZTM5el5>-pkfWhzhRkaW zE@N$;70r~L>p*(#OrIFL?Q#)0aasnaW3mozY$1ziZ%pm$Pzq0AF?`wyBs-^DXt0u@ zW+)Rx+}|vY9#86+V2TqreIq~s3t63DYjy{7+iEKUYZ>Nb=?u9qoB_HU2<1ne+nO$m z?4k?(L%Gs&{asK)hOOnmPZc1E0o%bqqDAF4*Sn5kFRvowg4>EHnuZ>x*wCkkjPKf5 zdn~E*3VmhSXl7n=7NH6z;W5RovZ6q9Uk0rNZ)D9HTJf#9CyB}ve&xa zz&*z&a|~_3nf?V{oi504eBzPNi0+YDtC_(os2;n5dwHc@gNR(8)0K&-P6|A}`&q{b zn7oWbPSFEg)$@GUM%&sh4QpOAR?f4TWS>25){eI658b?$Ai=x0k>&Sx?6?yBtVEwm z9H--&`ii^?QUE7|pW5p5EvQ}IO@xA{qo`5Gy$6_?4#x8Uj0Q^raukq(o-= zNW1i-ufB6^e8$=)7JqgPzwuxKP``mW)XQh+^J72u2O>weR=@MXN2{Y`$fMUI+kB^u zg3M=M)_z%y9{fU=CV**!4i=Gm@ELmJRHv~*XTFFp#LsjX_!69^E&92JE~@?*ryC4K z_XbuAQzaE6^BX_)2fp7H*@*`1@N~OTiV~ll-3TECGhgm`wmVyM`vC{yKJB>YMuq^S zd<-_h!Z?u-0&AmOYcbJoGH?A7e79FAS$fjj;|H_9Gi`bL_(2fAzj|@_BE(2=5m^4; z|IKd&$C|1l%m^`N`nMSlgdj~YWcwUQGm`O=ywiqGfOW2! z*EY)} z3-FMiK$E|bu?bko>$Jt+-ldaqs&n~0Iw55BJ^!Oy>`ee@@WH+`(0d)&!396#r$5(8 z8t}lnBFT#m$eXrggI<9LZ(M1l;s&{Vb{$f1K$9j2Y0svE+kNQdm&}p_a@c+J!3r)u zD159OyFkBi@IBYL7ESZ7V;kE2#vl)H`8nst2E}gW-9&5sZpnWQXa1ERf9Ws%+pDAF z)75|dTmNWfCpS9H*9dma&08BbnYZL44n6#m2wTqtA9`&{S-@)Vdp^NFEAX~?n`%|J z(vEJUgEe2qum(y62Oi;OZ1_4zES@6|s>=a;wecr@?DypmXb;dwHjReyNg<+UD0$F=+2MccSs4+=DRgCrvHcp{rEZK}F z0|B1b;6DmmAg0u1z6 z0>up9O_=;_soa6IcMXbwuX+?%WU-Z{qPd>0j}EFNfYG&#C7n<%OpL*1}Hy(--I45?;o4>k@ghsl|2ZG|zO%^*NS-$_Irk z9>J96In-b$H0usz;YmMZpp;mT&yUh#cxa;yvWfn6>fwv5PjwGnJlw78J#s}e>pF+I z7q{8C%s-!QV>2fHfJM+;xec8K?$3x^51*Se5SmhY{; zCE~#EpwyQ{t#IYob>wj5i!4VU5};aWNdUkga7U+mX$~F^f07Ri)Y5Ngz^2#9<-7n9 z-pgh+^eBfbhu|lN@E%8G4nO=0KxpP1`r@sifXqAYKS_)4?5}<^WOd%_^&9Iq_><^d zWJn-USkedh1P=|2TovA$yoX=k5z54R_TnAI{cf`mzA$D z$S@2xml1(~=ADBwf%6jWy!-edf_1(6fBgIZaVc+{X5|qYPP2<=a*WU#2W-tow1Z@f zfULl#3zX{;!y>>hY|Y0ogm8pmRwu^DMkp8)j7M0RbrmPy2}O-I$;kIbs2UmfQ2xuf z+K+=CMIR#;;mB#uozYeLnvz+JPTCV^fBG3^XZ+z2XUsOHU)NGF6%>qZ#GUqn6l2^= zW=S~+kLSNPqsX{QWlEw`6>v@3=URc8C=czrxG()HRd-MJ3Uq|c=NeyG8XBVmyuqUX z^0zn)o|K6(!oxAlLBPrU=T?k`7AORF^lSUjqgigoL!0)Qc7mI6=EzGC8NC?C&`Gd{ zS5@x71Lr9#+5s&Aq{k|hA?BJ)q)phfd%gLfS!<1L4ba`mLhsIYdy|6l;`tkOb$bUZ`wq*@@jRmo-%1>7@m7rt91;hu;7_SI1asp#OYI}%SN1bLnJbZ*5lNbWlR3N z>2+-=V&;JF40Po`{YW|lH0-IMl0!#B{6QOdHTVnNy~sK_8Yh?YWG3ynyP(i9IXyB| z#}yt#?M7yDymrGlc$2Z<8tHBDlrGY4f*N|wE;cbp$Kb_xGSgd2^L>)2(Z`mX>73({ zA+YPyb%g;=WH`sjq97OjzzZg0Sg_rD;ser>lu#C+(V=u1>bpL8W&m*dlexFLm@(=M zGbUYhoxaEd+TziS6`0t{^s}@D$S?f)KfSt$6aVm&!``;`GLE}rMxW8C50Qzufy<^b zC&}goBlZ%A^(@aMwCIu1)-c*e_H6Ya8M?=gTR$>-IE!8BxMu;lMUu`)P}pMGyD4z+ zk^y(A;QPk^^pE_=%?QAq)oGMZrt>~G zfAFjA2XiUUWOMn905F`6O=)I+mmv9$DDGXwjYUAMJQO*Ky7c25rpa(?bYq+lS{5O* z2DzvngG-O#M)$l4cU)`R2Fxl1)0mG6i7yQV^1B;dgr;?1LB#wBW)Xz2q3s(;1a3+J zU-WKt8XO2W1pzw)gl=_c;7>pL8-B$B1P==`EIfhd)fJ~_+GB)D-vS)Fuc0YJML|*G^ z=-HUZy`&9p4U(>EjDqRCz^OmMU^9+f*YaLqqMYD{^Eko51+9H&thicpe1Zr@rGZ`l z#`w5S1`k%om&{mc?t_dfL0ffxc3~aD@RA`zcl!*a+m3}s;5G(IxR!kBuTCT9!3Jh8 zGURJBQS=2z3@^QT+jBV^+T7uc@^=#XkX3Uu8yVjxn%ak7wE@4o7kZ3^%0whux8Z-r zr zx|i>4abG#lDWE+EUm3|CdiG&7Y(mEH+mpP!`hcDgWa!T3EC1TS2(9uPVe*CUH5q|# z4uMyoU16V=vl1Oqk`qWM=MXkRjw={r-ok2D%Buv~Yyu&` zmN(*X0Gv9)2~s$8_em3)B^$*QFfbGtef|2?+Q`C}vS>GsOBtrPhnb>t?JH%$Z_3;Z z?kpw*17T?YgwXHOdJK&*2nyrSl5g-7m1*lY2U6o5x;Jvp_^K@o1tZWPEPb_18EIx1 zDG+9IFaid=?d?qY1nZ}G>N~Q4Pd!GNa}13+B0T8)Xj(8nj4fJZs4A2G%_*C{AYX)- zVX1MWNNEjESh%jUHWQh3vMOV`QyU9&tL#on#MBM%NdnRNLnaMth0EIVicp}rmK z+K$+!3BDs2`F%%l7NG2<1h&K~byD<(;hh~7^Uipkrl>yW9UIh5cXFI8>C?N(LypU; zVGSz!?1kNtn_+4m>h|M)1fr5)5)mj*UgP@l(}7b7EpKrHca_EU{C#UD-+xGqYwXdd;ny`frwuDtvI6gTE zAFP{6f*eN<(B%n`?(l%q?)FaaHtTdo&ht$c3&Y)WQTQ`=u)t^Ir+@0}Hycqn#{c6u zbPV!z8$x{^K#_wpN61FeIl{-gUGJk+R+@GcVfAv>?y+(vU)KC(p{!_+{Ly5AIV~)hFZe69C zR}E9(!;~s)UJO`Qzmq&K!jXQfnC5RX9-|eN?l{Kq8*?puz#vYOu-AB(`BBvTwU6{o zSdESFXokVWjzQx1Is4w5T*Y@KVbgB}IH0+f&@a(m1DK2j2C%|~L1OUHn1L`Z!D1kr znT6T-R{;v`kIt^TLfKeK^Jsz>3(V~=BbQ!DjR^dBE>UO=kz78t=D)-CefF$^#i0+-;ic>`UF4|gWVkAL- z42Mq}l!&^)BD0%2C`Qd`ge{59S#{B0=mnlTft7QYZKJu0jzCWKARuY^F*q{5rA2KrfAe8nMnC^Ky5?ORMPTx2O^hm!;Ez*rtpM%P0=URL zBch_wtylwxYDEqOkMJseb~SFU+e)TNudP`zxU5pSp4=)c$}C*SkyUQf584YRx^Ok) zb3TGT`f%Pm9L`oRj?U6Hx|VZfN>C&iKoc)`3vwh9cVqNN|9Yl)cOE)0g2!RH)${pJ zTk>(ReQ&j!0C~Yp(06z9UU!PC8<-|AYQRd?$x6mX3gh02 zP3m-8{$8<98Q1s?(9`bj_N)eHM{D5IPUSC5&KNVzLBCtY%Jq1%I7o7i?`$F6CWCa? z!$Yi|9yuSUlTM4}4H6DdKXFaf2NfQAXN=+d&Fb*n6CsndMK|cOO;)O_>o;Ck z)^o0vMR56-&m2xyk*U}a{s)fG7GQGdlaUXf$#_YUOUNU~N!EVh&;DEj%=6WUA0Ms0 z^YOFba5p+}QQ2g3+=886gWn`f&z`?*BGyHsk!=rE>Eg!7hX>Y}f-sM61^e7FGS5u6 zQzC%*qv~6DL0-VX=ZwlHz;-)l`s?kyNEKn*_}BjEkK7PWbBHgL5CVuzLTn`mIT45_ zD_LPk$tW;lDG@MCm?)EPwiqDLQ1p;X+n!-^Z}(M%;+-dtLZo>PtOat94)(egto!j^ zU7aU$-&wu)^wH{moH=Lp&f|y4=7U2tryI^9HvuY}_wu)n^St zh*U$KtVy;hYQ{TCuS0^*DJ@a&%qxL<44z}~HO}k|$0)!g=hH9c7ECPj(jr?1p-v@z z8h?~wf|$r>$8e5;(wDhOnIxE52_-EG;@W0%p)Xl#aFq8$^Wx2L299N87jWpWRh;zK z`%ObbeS-zCZ59*&`jO)TO3n*^jEgtUakiDE z9HY#}+}*if+1QLe%FvLufm=Q;?qV=KJ*j~l8keF|ooQ7f$IyXn&89pY`czX|G7anp z31AsOZ^o1GAPvK(1nj$W48a7oqdQ~>56vwqce*V|r3dnYdd`8-WqiCq*MJe8l>_o6 zvly9g_K>$Km$JR!3T?uHbje_={3LkFG4t&7Mi7r5fV>-v$Gh` zi`6GDPO9e%{n(|u9p`Qr8sXo_8d{DsE#mo*MVrd&x|NMJ4#*Ixf7dp?ZP^F74$k-c!+4x{eCQ&-EQ5KFnZhX2y{@!LR^29LH z(R&dRI%Z)a8iAc&_wmoM83N*|j;w#9aOL?bRUL-4BhHhj| zKw!TCJSBHzRN$s9IZ^7bj~sQNUk(57ufFx|PgWmt)@kTrENM`iP}oC9 z8`p5Mc92u0<;(UrW49tZ`ZZKwKTucY^F{o znSS;9sud6mdN&eSgjCg!jX(XzfB%gL`GaKVHd3jX&zXn&yHyGi4I_K|_7K*EvUf!C zK=&aUr5&dF!j&l(_~B86EqAA109rK*Df8wJ_P1A09z875n8Pt}@OST8%yxVA?$d)D zyTAI?zxJO3rOfAih=uG9qBfQ=ht5h;dh?AnL?O;HHr;%+B%e+GrkAqpO^;@TsmQ-yx`~_UxLobF!BV3@H4_3;u?(7 zQ=fh?ocblqGTIuG2(T;!HPM7|X#Z(HRhYmV!^AN(ND6Gu2@>&RZ$}1_XtvIeqQ|hM zFPVhrQ zxfaRhEGiXXe$*#|Z3VV*G}o1v7^=vX=Gx2B!9mv1jf~cKhK|?@H;zw5f>F_L4W#SR zMT5({8(;Z_@tk?cjNMz->`n`#8M^BAy`Q@dRaKKHja6L8(lxn#xu!jD&% zZk4-UeRO!TdSoh2wi-P}xQ7q-R@=#Ddb@1kF|HTKrwURBkv}W&Eh^l|wU^OX0h_ff zcfg%-r|L1cfHLZM&S^8g5}iJmJg?fmeAfBq+}_^y>YXGXs*dP_c4K?))b_o3Wvulr zv4N3?z*z_+9 zVIj#s8j$Z!8Kn)n;hW+5N`K_Y9~hidNvNH}yZn*;{L7V`)i~)o!+bXdrvG#idlUW0 zaq@y531K{t^{oKD6J8&o2 z`C)g)lb9aI@t&Vvv=Tx##z*Gjz%QFOC*C_YO2omtPZf<^d2(OvRL=2>=ND(I$Ewm9 z+yl`(<h<@wCmoeN*mJzrxpbOL@ zP!NZm!7!0Ca!!PSUl`0_h&(ZY;ZcIUh%$027F(EaxOL}Vi8l+90$7ygojCKSR*RL<@&=KP|{`3F5*AT9Jgy@8ia*cCsHWqf2PvB-SrUZ`haWL)6O2fIHR4SP?h~fNlh@yDVe2r}ICv=3J05sc8E8}$WPvG)f zRK-9mDZ5_h7Sk~L1OU8n>>Pf^_SOd{Q&{q6oGMH30B;=x0j)4j)C|4`Ji%)++?)<$ zIZnO_&QPIs@nJUy@Q zS4lG({`+ZVwsvkAAyfLWm`%yv^pJbXJTdw3l@n`1*!nN&hi8*2%aY|66?s&0Zyo1ur_X0bb;cyn*Td z)^_-|lkq12vGwa!jHL?UhcAx9Pa9p~i=7bN+B#2Z)GuDO8W4Di-F4*FtwSn{`fpI9 ztQncppZR~+xTVZ^csz?IaSDwm0O1_*8j2%-9inoka%c?^2O=OuD?6&OE#Suk$pIY| z3@)W`I9OXD&@`5S8janJf*)Hk-kZ@8kC_hO9n*cuDuO=IjFV`RmA>_P9=g(%bltI< zxCDMU(1TXl(hvC|`9U*skv2D>IUG4$@43?2}s*XGh20Qk*~bQ(t5xqEp(}#s;TlZ0Ph> z+jPnqlQ)YMUC1}!zv*C8Lsx6uBowucc{f9kbD#b~qx4g|=Qq2M@zMDge*WJqo*#bl zB6^TuDm-|8bi6uEKwN&&3o?{Xv=rE>Fm-zQzV&9)9~qRWJs>}U)2)_P$P4W84O}nJ zUah|U$x-~nR(GJ|JlxNYPB>}$S3nXL6js$mfNuQ4zx;=8%=w837&?y1iKh?ts(4*Z z7vh~?p4Blx^4-V#B|M?Md+&aL_T;t6;1T6uCq_F$m!W!%oAy_?VmzZ1ckd>9O8=q^ ztK_Yy-`kaSZIyw(pJ&XYlcUx9?>%Wm|6l%B|3wKJ76q|k?g*`DIf~H!5-bExnZ2h) zaSo~gu6mPb2GSLzTqBAmZw)pAI{~E}jI}nLrV>qsDc1=Sj4!%mAQ}WjSt)~#w0F+6 z+7cd-w-Pv98zDv-^}#T>2>f8=&so;kG)9i`o>2|@k?HUyFtIeATIMxb zxX?mSH>=VGBy4NbDA+_I~rcS4KD(Z4KwcF-(2nN-fu=G zgFxSAi@CP9#04hO&IX{S7`fP`U1SZ=$1i{(DoNw{#ttZ5?fDj+_91 zBgNyr-5AEuh+ZEiv*-Lca#_)Nj;RdTKuFdnPzq{m`jteL`6fN-m6|Qbu+u9;x2+1w zBmf-4RFu%4eA5wCOW)Z6j?)^QDzS8Q0zqvilMdPw ze1cuW{FiR}9ljtyzv50E*2l-za?Dd*vp&P;gZ6t34 zm-Ah#6+kPsXq8X2tsQip{^jjDHn0IN9GaykpbMVG3C{ThV`-jtOaJXVuV4Iy|9KPJ zlQW6Id8f<1^U3p01-i|e446v3I6Ez#C&|#+p9ir;Z==&}rL`HC7q7Zc`^MYXtNoq1 z8z_{kZN5&_Z;|=o>8sTT&rcf+JUZB}UUbT4Lr^T(x#^u29;J%5WB`9Qe)?bf@x)az zA~7)TLp~3noRZzeC^dyKzjl0f(()%_zW-#u%rIxdD0q~r+f_u%<|a9G^X7!leDQ`s z8ri zArZx32*n|g6~bQ35vE-Titvte92}l99w9@#AudD22!wG7bQm#$MerFW1{RFq=zLp0 zM~HmdD$zKzs4$Ud`nAx|xD=6~ba7vd7@e+=2Id;rO~_))fnz4|Hur@YPrEXUrJQ<}a^mV8O#EJP1!}oFdrd0Pcdl z-ocP#g(b&jDf?-w4TEXUac^&TWydZL?{Qqkgd;mSJ1P&R65zS@Gxb3jZ8W6M6N*wt z%7Tt8_$@HR(03jm)Ip(>(k_50<3;#%nQIwWfny)`5yEj+cmWP=3;V6RU4S_OQF_`4 z57QX$89KZNlg!pM16XDn=gsQlmq)9QUmQkWlTC(xV4}3LQu~pU0b{w9MYV|%U%j6D zw;2ZkgB8*Eh)>OU@hf1^yPeIzD&XYMb1*|zUedfT%8N(n(kY)PxV{b&px{}bL!R+x zok)VN7)!K1jbpo)pii);V!;yE5v46kbEV<{HvRJuuU3tp(}d04UGdOL#+^nU)OJyW+Ru8&6&b69g%Tkz;8BoS1%4vSD!q8 zvCcr(xCTJ7_b^GuW#kl%w_`h0G4Rivwh}o!4-S$ErM*%&CvG9?JWz(NM9w*M8E)`0 zO{EIOjH998P5?qLD`0ueoc-G25)~)#F6YQd9c6fgKST^{PVVlok*aO^o!2;rw{`kt z4DH-gFY^|#Sg>k3Wt{Wq*XSB&ix(p!3t-0UXa4qf?{+VbCwc30^mgpkZ~en>Hh{*v zI;Xk()9aU)pN>g5$eeeN=a{jV^FI4pf7f5}CN^`p{~<%fx%jhPcu&6s#+?|h1t0IuVc=S;!4>?;611Bw5@|M1lnXQ=VYFQ(03qdqhC_wSQ#^y z%qw3w>au=)P`0(qE5Sn}*SX$Lj%t*C`qj`maDvBmGcAJcn$(OfBpUcbhtf?8?em@S zA$-~mjS`fEH(u~Fp5S5N$UEmV;P*fE!P)5hdYR$+6^9XYM+i3*7dcyM2TAo z86Bqo$?UZgjEu2O9|d-3qMwnKaoE~2S`-DU9nUEFK^|RbEQYyo3c_9aM zrOKXG#XZbg48p(z^*|NowThDd(56N|FZh6~ePp1@b51dEV?;}wp6}F3#^K2I;}{ur zy;o_~>oaPcYQfM4xbhy^fQJ+Fe-5?Jp|L)~4*i6t+KxP@9pJP}-)-ZHdl0x@ln0_oq1fOgq1|*OU(W=KH6(_4B755zWe&~fBH{#v8u}JS=TPyUL75t z#5c~m9J;{P3*=3YkY&%P=%PK-1p>v4BT-c064>9mQSq|Y!?Y(lCoxKpd6IYHh0?|? zkTQ0`tPP&{wgU6;49y<9(KqdD$BpRzZlCOnss3(_dR>;C^# z{YkH#Yj!92ZSs&jealPUCi)14x(J1osmzixQ3<1vC=U!6C{Jou6W7>)r=Ia+7zS+E z2?K^dfJgSk1EY{-BvP3ng+fXzrBsGO5%*q_r*FtZ(*NIo?e|{QKHS`UzwgtmXZ346 z&C3)qKucMjD(_EO%-T#tu2*2DXz(x$+aI~NjKd2!6#0y4;Pc(*0;_R&`(<1TQmV$( zGWl)JkwLzT!>DY`a)c>SRPLLv#xF)2vIef9AD%@cKf8b}zaNgc4{Tj`}wd?!kf`fHYA-LtmgvMs7!*k(Hw8spjG zD!0+B1~L4?fZ_dgRoK%+zbgm?Z};)#7-$`|i@y9c#_4n^kDunZ3*^HO3r^Lj(NGV( zkq6_Y#7t|!v+T*m`Aub|hB@ua&XpGF3XcxvrVVW`-MKR`p<7DjerXBD{u?^bLugU_ zPO*V`T^81r?P9q689!Q+!&Hr~8i!Or0+h)ts4;EH__#-I#xS}wefT~+JMefd{mod1 zhfS3%FXatEjpb#C^iIKEUd#7&vC3So&1K(b40stG+^9avU9e7CTpC$)K7IB;o&k1R z(cb^0)45h$dVh5--`8zpdsNpY8J|@B@FK0X$OT^bT1Eovd};sSD_`|OQls zT*FDlul54i|K@-F-Fz2UTQ^+@GBk8UM%s%l|D<4`K(w^Ibm+ff0*PK`Q3# zN>2>pCPq((6aiv+sfT%{OupnFW^LWTP7w}MVbb~ZSH+Z1{|MK@m~doFxY%dg?jQ#S z&KVq(iPP>l90QjZT%Sd5R?YWK(b>SL*b+O~fKX2Dv z)R%c8ZQG{e+1j|daHoVhSmRa=j>`0X!Qw@ZD`=^XmV- zy;j00RE3-yi!$k5b;0l;hFF?4clx-=jL+&(XHwT#=DStErYd9&rf2Ia#-Ll&BZkuf zMc0Fa(k_FGUnmUt>%UyD_p9GEjNry2luV6%@8?#o4~~ade4l#3p{jY|yIDbPwYhmO z^L7()tp97dAZ`>;AlcpZAcwb=Fa1!FV_?08pBJ1BA5GuWlJy*s)3mn{K7t=@m#=z% zB2wc(N$qRP{S0Bv+v5~5+%rA$Un&-i0Lh+M9ZXW#An+=Y>u#j^kiNdAXghezxD-pDcg|rbu6D$2g5d zlWtp!qph%R`HoC=Ek~|X?n9$##KBK!MJ_BN#iQg}IsKL|(hhh>Hq!^f=Zky#@LFH$ z|1Fb0^sOVeE(>n`zHQ-@gP2@f93wBV^;&444RU2FU|E3YRTShu_x@p@{&%&8HT;f8 zN}JpRd&jL#zMCesMgj=sDUIg35BjJeu4w`EW$wIs%LTZ}y~+W2)&=Q5baKy&p8wzd zZ~yzQ4YS4j^74B1t1nLrBSZQ)a5!8>P+=jWwNH$_xpoHG8Zq|q?Ba3&VL+b0_4@Q| zwZ9dE9;AB%R8R0%IY}F&oWo?)c*%FNZ<^H@O<}+i-iANZV5Z474tKX-^h+2Nv_ z^4oU^wW;6fMLeJ$Vvz3@dSx+b%3`F&;Fl?Mk-jh=0>fc0weK?66zQu9LcO%n6jE+* zMhwm8;sN`uuJWzD9+Q4rKQOsJDof;qhHLoR+rZX$m2>)~r)_9o^}?N( zMbshW2u9%2-oQFzP{$`65o}`^JdNVf+p)CWj6dy`U)onLg30xKU&^|!&2A~nJ*+i6 zppEL0;zgfr)3y9|9sVLpdU_cC5DeWNLZp62>{#*ikUAQz2gXbR@_y968F z(9-aD2b6o`y!DFf-uiA|aSDScXK(b}gY*SIXxUF=THe(elf~@Xp8W1-V0BGfhHlM9 z7pT_R6ddKd3`caJYce9{P6Y}g+v=kjat3T!V7tIjyrxlY3zp2iTWqY~*%7g>o8Rp- zpI~$iT;5JHR9+j}>>O`CjcI{oisVz;2;dn#miT)-=ecG&31c4sX!`b@uYY zv)<*a{Ec&$*Bbx$CYM{!36XW!(-vOQwjDE{K0jVv#b}lW@Q@pY4UBo$p)EXq_eSa8 zapW4Fu%6g&FCSVMNcv;y1)hKTKl|sM$7kQV#wE^D4|U0X_3;gv(kD7`;Cqlwt}W}O zy3jFS&^klPXM&4-VGG)4%8_Hvz=tq19QQCImGjS3c1V+8d!7nu4Ni4k_{3}DvuDRI zAm8S8D>FR@y{W#mZi@trYO9BE<(#oAL1*|xgGj)w|IdDWd;~}sE!|+|<_4e{Z!Mv1%f1eDV7hDx@`8hnT-L)~!?|SEfLp@E2 zXlk_cW9foSEbvcXgJZ%!I5*z(or`c(rSHBzyfmDDLwjQiJyRZTsuZ=6-*CKEGkrD1 z8vKG|%4sTn2M@A6t~-6sLO6U%9`mpL=+e01Rk<44d@eBSAAc$5<-@k7jwjcR*S&FE z*2WY7%B7*fz`$DEx$bxSo_6a1WUTNrGMO*AQNA~}zzi-}`iHVlN7M+`_zoO1er*kG z+R`t$W{PLE5+e9dDb7{fzhM-XZtMjwF18DV$du1QY3tV|BOf912_JQ5R@0mf()Mi>saA+ zyq`WCt*gS&VBlpt)Zh4xZ+-g03gTRA;oTVY&O7AK_6fwd8d--u(JcdE+yUHjQTQTy zN6XT-kc*NTg9$Gp26TdtVd5&u;$q&SA7jMGoVq?3BXsVf$N*5G zRma$J4<_MM${j_e-t=kAJZ9sEagA%Cc=X+kL0`YSX1w59U{=+AeWOuvnzwt(FgByW zwLE+T7G%TM7;<0l&cFC6*46FvsN$Voj@X{O~)4)zL+H3Isl zm}X>nW*j(CWHVWS&Oh)j{e!dbv^y}TYHJT(e9PtH(QB^dm5&;Zz#Fh8#@_9MfKD6qpxW^}05Cci{KSb-aOw`k6by zSH5*b9U@rfde274I6Bo=ctwBsAp9Q%u}puGoo=g)GlsuXP3x*fdPWd*!T0ZSDqF^y@GGHpU$KM8CpyqNu(`V{@ttTS4rZd_fxCdA0 zKZnAM?xyc-KgM6i2aW}=gMaOt3%^epkA{v-N;$AAfqaR`^}+~XRzYQ zIuI$m1X!hmHjFjzjybLWvp@cWwDV~7`s||PXn>NowS`xVQL5c`@7$>#%)hRH_s}m} zE~U!R!U>FpA$`*sa8jPmHR=0id%@LLWX3djXv(J11Bhw7wwo>w8#0Bs@$u8+7d#9C zW(-HWJFD9_ROGWUdzQ`P&#&`x06yii?~ba zh(@N)(oz?N+U-&|W@Hy)|D>60@sf(A}~fujmC@BHh% z{41_nXZ`77@ffCnFA6-vnla@br)Ve21EVcz-_kgY)_GmMfhkRKNEmJXVpuq+VOjSN z4mdA;&?UHI$l<}K^q;neM(Tvd`A!h^qdulbmpX*`+X_w&wk=EtKln!Xl<9YiXE;jmYz)(m|CLJv zxeiwM;m&v!aDTE2-rC!J{A749FE0efI)uTAHyGj9eG1rX@H}`cO0=6ET*nXErtIh}_e+1{4Nhh{ zDqrxdf_WFNTz6j`?J!_Ld*Sv{ruYKi8lQFUQmBemLG5`hANho5`U>t`#?!evV^gN@ zX^*mZGNbS1pZs>LuC2P@)kde8;5Tn{vn{I!_ym@NMEuHGu&6ivFK;iOi>?7z*K`!O zYy2C;nio2spP!Y1wC&hn*#t{X^YWj17HnrSMDP})dj)Z zIQJ7YFx2Irv;n`yFIxd-a6quV`kqYIvntYVA0QQYrMf!@&R}Q!3}^W$e|;DWE1PQ^ zK5y-nmlVrOANmu((PYXn-v8{6{!#ScYW3>uGWREfmV)oPjg0r+C)}h#!7eaupM;}a zSmTk*a|UdqTOFz!kFvWmAvqwJoh>jEd_PmVL-*Cd<^QT8I zcpVUexSoaHJ;523Ic*It#zZR6lKhjD@c>G7{{Q2tX@!sm`(eCP}KmGF{f&m!AR^h?Km!#o&Gou<9=iRqmfg_tu}lX@At`<=h3(T_1qf0Kru zmvPSL)FISX`|7t|7{E6Aq*d`~%% z@si5Z9wp8RknXGJ-ZtTG`W>$~Z$`xLl%rYT3KKTFvi@#e0_W=d`mV~ocmaFfb*$3X z7_>>pduo_;A{gMCvtU1W4S9@!-*7$3(5JroC2bBKVb=XB()8hlflIG^uY(r&_tVzF z7J5+MiFo04JvNb`tb#gq*3ubTRKWASG)!BRmWbmK*>NE+iU^O`t+C8q{!a{fULAYN zjUzbGft$IM{_~j&lvc+XUa_rHA!AyetVZTI({4~~gmv1PDU7Jc;<|uA2`-8Bf}FQ zB)5$|^I0AV9-Q-_?eZi&Ax)k8jb8Jq9{Is%a8%gyrR6iG8li>X^XERE<_xGe!NOdF zC$I9QI?Cz`z0zN0EM-dv-*c}zE5Cc)?|c_IH_~mJGsfk59Uz|>6B^o01RJJ5C~@1J z7ytoQ4MFbWYm8^%vfxTP@88*f4cf`vwJ$$2Q1S`~cpLA)LG@GK@U~1F430*g{jMwk zIM>JvL&uTZ&-MN7*p0M{HlE?`G{k}u&xgQ=RW(|SIA$ypRo7kRG9R9@d<}2eAw~??7a2vY&ExV23AJ-Q3-_lf8KC3_gQk8{3?qG!yuk#jCXpZ!IZ3Ro!X5xNn$5;$!UFoIj-ryT=QGB-!S;%w+EFj6v& zT5{j_nNz0-QZDr%2?G&GhO-PFytrP+!Dq$>p2D0q^HCfwo*i7x)~{SuCWBH2E{$b@ zk&$cU9%4}F6(IdZ$!Z(3DGSbF#HmXFoPAEo=#w)52Q`@aoVM`ClpmZ0oPY!;HEg~Y z=5bok!1(LArZC|(x$<5gDOW}8Fc`S@4)QyXnEPWG;Ax%i3mjcU1b>AI&XgypdgYnA z7Gci4;w1OM0Y3M}$c$iz%pKFvfvF2Ux8f|M4uzgl#U=dV3vJ*}RH@OvmO!-BTsnhYU+v)gIrw&qq9L3+UrOseDu*gtl9E?~bwr!yW1y@?8 zuVN+tX^#TcCmO?xzVHr=EchyI!5+Eocv422>KhL@@Xvy;uN0v%J{xcZPGU7rx0`kjVnAiy)?k$e4H^o=;1L|<)%Hh+q?}J} z=WSecm$HkKD?pQ#C66+aI#l;u!b=BU}zm&Mn(-19n~K~1^&FzzIrTW-~a`^)z7~Mq>Q|E2b`fk zmpx-+EM0HE@S0lx^Z)9frQXBU>E$&<*O}pvXDDsEfly#GK6LS&4zkY7iH^D+XI1bV zm}@t@Wt$yC?OuKdC+IW5^je=*?$T;Ha>AiCYw8eQ4%cMJqf0;e=`0vGzFjWAN$!*rOC(gP^3 zrE~TOkb1^*yuTIi<$m?&fBsj+=m-rM{9NYl5n8hdXmA;Lh_1gPI$ahSDJT6ySe?cd zARE1y``L>@Z=?|HD9gKq&_?q4G>(PoI@g)+B9kiIv|r}W7w=`ko=@mmerO(V&?klrUGp1_O5=Q= zv{cIEU7=mKSKQ}KFr3h|7ueo~UYJG}J~cSrMLxu6zV+n zY53J7?UDg82G^7YJRBQmWsegU81+FpbH2FW=-Tti zS#sG6efffahHvm^GiUiM%(=F|>%_l5&B^|D-v@in*++-aD}6K6qHp>^^v;NT7!l$Q5=0rv!Rk3y&3Nn>Py4lzdKt-Z`xq~Oup zygMgiBYoj_0*f-{%}ckuh20M~W-8HIwyn_J3x3i=d2!?0pM3P<#JTMOt_C_toA-w@ zn&V>xkaHM)g6OvLHW~nh&6Ro_n6_()I)l1Mv!ZGZZZ5 zDVg#?`TPF#=y3J+&E4uR{_<}+MD0QJ5IubdMrkQRH`_bn4F=X7fENrd48zgh%Wt7;xsDeU8XK5I;lo! z(k}YL$aGbjVhp9GJai&Wc8&=yIu{gJcw#rff$Ip@`MEWdQ9Nl1=xHnP1BT!&N+Zx`rKwU0$(GB47u3-m}!GrH5T=HFLfMX zWIk$f%r?^>;V{1Pi)*2gbn=qMg%@u)nP~899QqBArg78O(01Y7%5D2y@IztvB!ERl zVB8KL=HEnoY1^2<-K{ARYW?+hVEigFOMeu24O)Ambn#!t8-5@^-k3q8??EgK8$RSv zSo|{%FJ2uU)VJ(N4Pxq|b9p$|jHmd|HSj%2)9``O>WJjGc8sUdYLN0|i^3em^Ck+? z1AyE|Z_X`c`SmfY;{Y|ioUx7Z-$-;cbD@oDg2(bwjQf;5`m-iNtrq#X-8o2 zKJ9Y$T&Jgex<2Eb$j9~0faoNj_$>piV`%K)as!Nb-Z&6rS3Q|t-la>|=ZSb9I(4|2y1U^|*AEhKoE+^{sc-Ix zx*1f_+hjQCy6xy|$H;=(15UPc|9x;;Dx@EdGoAudd(D4z0(~)=G1P*)+{_Dl6om8Q zH}@9Dia}Q&ZHezJKF$|9ISt@TJV6$ER5RKI)~?{zPZ=5S;H9C}WDnqf=*?O2ochB( z=ey5>u*1BM_qJ9i>!2LxZn1qU90!pJX~OM1u?2KBWYc&sxx zN&w=aRR_@}?&CRhCg&bDW!C|^{QggVRQ~k*a{9*e2Bgawa9P#LdcLy_FezI_Z#xD# zh1ayk`+*k@@*CdSLQ?~DHyscZhbD3Af(wBfTSu;)PDj(3A}jCa)yzuz_H1^SHoo)O zvlkALu~Lu{2wr-YH4otUaBp>Vu)n&vafbJ8y(_1Li6|);9&Y-o(P=&(0|v>6U%3}l@VwAzu2rlwONaYa)^4-IDzK_8si22A^h(?7P z!=_$E0#j~owT&`sD)anPGkv6dep4__Tjf5S$VB+mFxYyHGS09UZ<(@?ZbN7f^9cBD z6VWJl<<(opRHL8rou3V4jrvjv45c;r`g@(K2WNhRiR0j5A~#`LH1Je3Z6C+m?E^2~ z%7UOp;7xf#jp+bPuqk!CL0M8Tx!Vi_{Al013LsY~a1l-&CS=al;vi+JnA2~KOm4W( z*?=kv??d=jmZeH5b(EDTb|lU-su3C#RyakUAI*&CrXYma(xL#4Tmj zvDbRRp+4J3uGitn1$YHYo!;=6DYd5f(LLqx!^nXC5zaV9se%%m`Ps-{A4W)__Oz=E zOk0hHJFJ0+^2P%nKYO}5J3FsIuY*8|2Up;SH*zvOGV+2+GOEHqIwL$1ybXV(e&|4< zD?8;zh8Nz}oVu>}sOH?WII5$_*c<7q69_85d0UVOphYQi8k=cI!{nei$ZrP4cer7^ zJuQ$UNd8<~aoZW(rX-AtR!$OIRho!spXCFhi@`!38uPJ8NM%A`s^OFMWZpTWK6 z(STEBhYcsnIxN}M{U=+^5cYhM;NaWe{pRY2-~Ptx^vhRm2S3!2Vvtjh<5h-Qh->nLF!cC-%}f~VALKoCd4`Z6*}Ze%R3ZuGs@p((4MMIO*e ze;dE?&5vJ*npL9Q7sP0|QCm7igy6i_I`9mTvc$k0bO0h82!|PTX@NrEs!&?upW&5( zC>sxLU-zFrAI52L#{0|z*!E_S9-MG;a#VnS_OqX-FKTm?#7-0-0oV4@PE%=tkxA_- zV1b2Umab*!ZZd|>lSE+zWfcN#YP23*g_H-)Q+(Kmm@uA;u@l9W(ef5C=@=3rwrSgZ zr>uham1RzFRbg63st(!^g?nDJPQi^p;}jS}JXyk-et2DrH!byUrMVUR-G-O`%N+Ua z7}Gbr6NVID?T6uga&+L70zGnn%!D}Ww`--xbwL#vE8eb-Y?Sq44+=j!s(12K$$ zqYs&pIp`|Pyf7F1^3*wPUY+a7`0>O{uTYw^a?>^R>Xbu1@lap+!Pt2gz+sfYk};^_ z&vkuw|7eQZ0)j3_yysYso%|+A97iwXXQ=1Vt+F^1?WD87Mi8RF@|$9>LhJQbO&R|| z%m}s1?!nDWrJ&<7WuY7)o=@Y>zv53i)coZ{tzf52AFMvwH?KL-hYSdL>we@YL7#o} zW9r}&kq+K~19D=_XigH;GY0*Emr@3{m9re@`@BU5BJ|uW4b%gxYvujC$U>(hyz`qX z_F9xhjYHr#w3{IK4+x!pJa(VYh+A<1Msh)aP1|^NRyq&8 zIIt8wIf~4b-#Bc;$LK}}^m;xSX*lI{Xi*TP?PcnU%!5TgGJw4vI0PqXLQWU}JmfSt z%6Yc)&I5CHgHMqn1E8$-IeQ+g(>>Q$SF5*adrO3tesMc}2Z!1q%danQBCoeA`<(Y; z2&IPwTaZ0)4efiRaq1fv1H*8j3x|Y$_aYnU&@4}W<2`(9P@E8s93(P|n-AYd_gJ*G ziVWN4%<)Tvo#@wtrXI$??sck@7zWnRk^@+slYYSQ4~I!vKxF`Pt|FyysN{EGjQWS8A-2^ zgM10j{>dNyes#umB4wIEmb$ClLoelP=YlAX7g*lCn}v8X-<%w}5dAp;)U?iEa2w9XQj5ei3Bjx4--83xm)QZ-r8ir>%fyX>hJ;xyK z+n+tJk+aIZ58e;4^i}Ve1g8vS5H23snp+wjKn}$-1k3NVISM64DN09#hER*)D?`T- zn0d;4FY@2jcr~pN?lT@y3;A#!G=cRpW`l#^rs|9AVHQGCuRgA;KB^?rU)xVP+b)`} zOF657rK1?88n7yzv=QcUo(l<6kv?mYW=dx8XmI2BuKCcozEVV#rF!r#8XEos zH$3ARa%Qer#D$Miuy8XNfo3ue1bi`Cgqd~9cwj;M+ORMP{ic5U>nQrOa26MlE%J

?a&`uu^a1BkIgZibVl#c!HUutuhkd&B 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

B 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�WMH^r#yXrLJ<@>39v+;EDIm#Aqjf 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 diff --git a/extra/textures/container2_specular.png b/extra/textures/container2_specular.png deleted file mode 100755 index 681bf6ef32f8ad13a151bc80d63fd2ce6810bb8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 144081 zcmX6_2RxST+kVI(%q}xS#vJuJb(3<2=seD#FM>doL9S6@ft5ds0Wkgg_wrwfi3h8NSo;aXb=# zQM&1z^B@ptn|A*rN)V&nPasekUQt&!GIG4;dCkM|nj7~?b#-nx_iOf7oG%jy-k(xV zJD8rHXFak0`Inkr`0WRJ*GyO_xJ}feZZpRTit

>xT2B53?B8GiYj(>~DPQ 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

hTfIrF2r6}ZS_F3WYa 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ພLS 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 M07*qoM6N<$f+qf$@c;k- diff --git a/extra/textures/skybox/back.jpg b/extra/textures/skybox/back.jpg deleted file mode 100755 index 470a67973f10e14c590332d744761527f964442a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 740068 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�EMwjqdsZW$-&npZXZ?@tc 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�~U@) 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�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
7xrr8@6jiYSsO_ry6; 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%0DAnvFmo9W>iIxNZ8ugBlFEo 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 k)&5`P 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%0DOyZ-Na$m^u)CAY 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

mMfy#lbFy6W%+w?kyiDY?rbJVqz85bZpJqs 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¨L-{)-SpX5PSElF-|AONW~0j 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Μ&T6TSk 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%0D_A44tK9cX;$pw$L8zg!Myh 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 diff --git a/extra/textures/skybox/front.jpg b/extra/textures/skybox/front.jpg deleted file mode 100755 index 4e17b77999ac0cea47d75a9dfee2022c1b5d112e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 473329 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 z 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ΝdzFzP;&>PL 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
bg25-2rL$v7^0? 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 uSEy>)vL>887cF*IUw?Wf`?@63j2}$xI35o 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®d`{4q<&@)b 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 z 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

7}y6m|Jk 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

96bU4;9R3nh=do(kvh8d88q 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¨8#)~f(!hUa0Eug|v;>~2_1tY)Rxrwu%c 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 z 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 ?T$WDLTu%YY!z3iH2Q<7h=AJ%2?FEfR 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 diff --git a/extra/textures/skybox/left.jpg b/extra/textures/skybox/left.jpg deleted file mode 100755 index 5750b91a1c2c55358b276822990a52b766057bad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 601885 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�<8Q{beL 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

gLxre#p?rt2-4H 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 p19{|z*mpz3%b1>%&s(f$SS#H9xNtbX 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 z +ac%f~>v~a{2oU)Yv09p0L4ckHL^|qtt@deDDTf}GiaFS&8`k(QuH@f6+8p8}s zdNC&(sk|PQ0u$rWN7BMob%`+~mRip=p#Y_he(hgI7e%Dgc4K9!v-q&D*;&z1)$ zVjv@o`W|ZS?6%hmv82}xxcrJ@8@cQ~YM{5ZxP+MZG_jm*n+kF00I8DdTwg&&)G}Mf zAxS|zw(J%;^u=Agx3XxEA-Xam{K(@C_#aA+()Jjn+clEO6fu(CTNNyRwFZlBbsN?n zyN_~ZLpT6^NvY~K$t<+V8dEa{SP=g6dBOGLKGgYA*Um1nOp%qy$r;T*OO#rqv0X;D z8DEzS27N&|T@KsC zmiAsEwwh~Oi$d1c`gY-%8+Rsb5T`wP&NEDd!Z!`zc{MFU_f(E}K>f;0s{v*ucSX1; zJYqjTqna^{ZFRqY zz}K+wt+mDT>i2ROwJ9W9Qt;*jCQjd+BXB_-bJDZ5{SMzq@XXpx=879iis|kHq(R(} z2@kjoa-2$yZl zE^Tc{7|OI@tDb=S_o;MSlvR88({u&AwoUMEc1D?3sTo0)0lD|CZ&}bU{5feXT3zL? zn{J3&(tCo@!d+MbjB|!_gOSs%LucUOd#ufOtJqI8`l6Uc;VUJqEEJdh+Pi$cx_=F8 z?9+|hwETSx`JL^`L#=93c%M^Q4YMq38N8kaonvVf^O68N!uA5WohQXQ4~=y(tHq=0 z5^A=Qvs%qA$f2E-;Hn^RnBeyAYohp>rd-%+Ha7aL)KTfSs04R9Tw*kdLB>kH;sDP@ z>(8Zg7rq_Qd_my}Y*SlJR^A3#A{Ono>Lw@VA#s7hz{Pe^icwEheyaO*xzAIX%G!E6 ze81t!PvYBe0bI{-bK!fNcX>s{*}O#G97VI3)w7;`_^l5Rd{bRx!>vA>f27%I+H$D| z2}!tOTwuC@Iq8x;IIcGHO46>hx#qK7Zrb`7vFEur3IO}cdvyJ4O501)G(8gD^5es@ z-q<|fXIU;5J5A^mbF_Wt_pd@!;iI!|{{YtR#~f-;RGPQ-*<8c;kMV9zO39#x-p)(Q z*A8ytXOKvqm}8ul>zZZ%0K^?9Q1JKJRWBsDh9*gE&ACXUP@J*a-+OoAirVn5uWI%a zN&f%{=AW-xS(hx0DTnM4Dadlb0_OvFGDXmnlBO{IveroB`E_LZHZ!JgJ zEs7|GLTn7`GFO6e&#zi$yKiT!>sEJKjn$yHoe>qSrYFh@a2?d-^z16d$B1;@9{XDR z1;i{awyXp$RR==DfsTOm&2&mvdM#hwzQz%bmXlUrdcFg$XboDgb2Yq(d1jieWdeql?@}NvBC|ZF#9YQlBvuK!qTFhXGF+9+a9N zjn0!`lBLDixrKpdX#+IJ2d+rU)-sJ&u8kuqYepKKy7*B%y-M9)=4bf@oxoO)*F8b& z(yQsFMxN@~AdW~6$q|I(zaP+>!uE^&KT;OZBh)nry!mE`JSBYi zPwvr|KX~IKr*WFiODOe{uq0n+dsI0;Gc@Pdr(fw?T5bNZWu-saZKM!QhjQx0COIc@ zJvbd{`hScsbj?;oX0^CU*f*UCQ0xB5VbMtHDwRgBZEfaDrk$^%ene-%ZL-$hOPH>a zNllO@A0!jBHaYdl6|esQ2r5}hw=wy*b43t|h1wMg_y7d{@f|Q|@K=gPnc^F#wSvp- zb4biY%efT;auJBg1ZSoVTfV=#)cj3%aV^_jTgfJEw{K9-)a@Yd0eyX|mQ^ZqTcy79 zsx;wirK!sJ+rvwz`Ey&taUYq)fuahy1Cj_>8q~EQvTAPD zti&SuYLb#M+y?x+nwv)PCFYlZJ4baKqU}b~a}=a{C>;snr|}<&b?tk?)^ks1a}l$h zL`7t5GJMI_@m1S!wIT9(7% zt>=g>sIkbCE zv)-+cpXGBYxDLyZPYMr8t$%BCeWzKKQmE1x(Q=`PJqQ2;k5YK5*M1q*EuuEDv;shX zc*!9SN1;6kImh8vq}ofE&7`HV0%)FQlQXKvC_#|kW--`|9;fM7?YtwU%i$|~iSHtc z@xfGG>i+;Xcnypc$9}aM{4&*Kw$s|$DWs0|eoff}J@R^BdeuEk!M8$LZR1;cn!_dK zwkKu}Iow7#^{Z7A(MX9!tz1OA@a3dRW|H$wlWU0G5=_1`g4j6E;aIxG&7H-_wX{gg zO50LL9$w+=T@&~U>eXhM?oc6#Wsq?&BaU||$LClU9uu2b)Dj>_61D>joDMn1Tw=N@ z%~`iA*utb9i6Wd zrLj(30^LMDP1>^s{pJvjpm#j-dUO?Xun z$ZXL60BC*Kp`URqf4nd-e;<0a;!lMK;r-K{S$w;N{o?F@Fb;&DMqadA0mX z_HyOswuVNN;u{NIFJWd#T&!`%h{^#tJhv_EYWVRLpwrt=w$k+b+cP4MHSJ1WI+8z# z91lwAydB`%PZisX-|Txi#>3`AB*j@l1cn)4031~tZv*O6-r7VFjkV4dcS{$Q7!AQ7 zoVGm&HH52Ea%t|o{{YC^H0Nb)pY_yibJ|O2Acstz#^M=1&2VB;OsmN|n>=tvcp0rv z1?V<FqS~#b zS{;}6c9|m0x=3SHX>OTDFvpeW)SBASAeT(hQ%i@)wn-yqX-w+sE0&Q@3l#w)bFjWZ?COXyaM5*w+)g3Q^5?t@&F)Wxy=hf zh7Dfo`|Oa5%M<$%MDr=hD_u6fw2(}hT9pamY zo#Jf$!6@TDfb_14*GiAW?O`qT!bJE~9(2Jtd?>=8`HoLk8LS&2VW7uzd8fz{+Wq!L zZz4DeA;Dv{$RwPeKUgeo4D!($aaN&oi zN=prM?V2=Z{{U>y2w5GZLQG>lcK}Hzs33IfQR`kcxVY12i%-+!y1WR^u8Xk(6NMp; zMoHt=vWy+?ZGPljrKPW-Hik8+J(?@#$9eo5>@y{pwrj z@!TMgyhY31Ww1(<(2#l#yw@+`n>ns^$fTKNwIxE#Q~)>RWmqpH402DUbe2Tw+S*B} z%WrjWX68s<;zJjf%5Vlq-~Jn`Z%$ZQd?W)jyE!r%IXK0S35uq zHv$J*sp3Iq(0!9lw}D}n=gPRc7CU5;-IN!Ph2V^1HCt7SOosrtKu5pF*G(n$wcIh? z{iUI~I~FOKM$_gKjkxr!BdV>8{{U<;JIKW26B%u#amxh&z`s`KPZ7XPH zL*Si01eeci<*66SqI*d@$x8?dZDcF7=CI8vk>a1S8WpA_rUX&xS$ z#w$DPt4kLV3xt~!$15<#0NhvGHC)Q;MDP7x;*4~9*u~VfTU|?Bw6d3xg^p{{Qm%}ld5`>>o%St z*4F85R$C(t(#(kvFB8Sof_dkI#~o_}#Cm$_8uW2$5Zk@f%v?%iM3AWOxMPmpE2`8r z!D*-6S=mD^{nXKsx;fPpFym_#B=OH$ucJ#1uAOXd5<_!fxsG(UXI64ZDo%Or`1GY3 zjcSmkPWoK6@cYBQ9yS+orO<%PJh+wl`#uLdTR9-sW|!hQb<5bJw7ap2(#s^sBvl6o zA9X-&#P&4(OHhMY*A^M9<&Z?JD7cD7g~2^D*?ykY8zV>IM~*92^CTn9xskTZk;q_s zkAD5@K3BWd`I;t{oji%O?PB9v@z}Dr)$L@wh9`D}p%MFm&Ug3bxr?1JUig-MGDt6> zyt|!J3+^S3BZ6Bk)pAEp;MSjl@9b_~d+UZtJ!OjGhZo{p`93`I<_!y3C2H*fn8UN7URT`ul8hc+JbVoQw{OC z$0w7M*T3ae{6(xoKD{20@#&XF2tf?FTbq&>1s5Ktk@TXRv`HoA65Y1gYPO4Iq&3Z+ zon?Ibf|=Se5P!0%VYyLTmQ#*{ny+cC++Jx6Be&Ee)FyY1BOR%U6e{GLux>gHy=so7 z;fW5N50iDSSkDBXzTA>9jAw;)I0_F!N2N_7U-)j=>4MT<5G~cahjo83EekJvwnlId zZ>ExofsUZowz=XBC*kgt9$R&| zl*PEmB$z7Q-#O1cag$YSw3~?Rt@OP<`%JQVW6lxD+W30+AERLaXC@TQMD=vDr4Kq{Hf_RcNf?Y!8 z;~9!L1Nj8-c?4qz2e(>pjy@mXYWkLusYxu>utgye#S0U0DIGz^IQoj#D$ib~a(6~o ziu5(q>@3n-=qwAa=;N4;tTWUy@Oj4uv1Zr2KX$KYBy4pgJ0{w@B0G9ENhIgnitXgJ z9viZV&13tylVeXSGpt*QB%V0>`qp-fpjzslA#F`Xz3Ta1P?F+4V=8)*csUicdNyY# zx<@zR3urEErIO%j(}rge$T17Xr=|c>bH!Bf=AouvFO#Wh`it;pL=aO{$BsOgOSyfp));w(+dvn}VZ2U61KA#weRe}qFx<#0f%B)W@;Gb^3)wZ2F znP0gNhqY<%d~NnS%{Jf8wo@Inms0?^Cy+)uJ0Vkm@!6;sX+ zJk~PTR%sm_jvH4?ix!sR*1~I|w*}d}@CXWiU@^sR_#<71TGKTdquU+C(=?G0j%gWtvb%#?;^i_E+BXLs|u@38;0&q z2XA_pu8g?5YK)tk17~S@b28Y)s9s6sH0vQd7mS9-Zk@YU#2THahb(PoyS&qt*a8`lhmpI00{(7;(J+AJNRv6h)iXGvo*RL;GNwG>U!0!ej9%dTdnj` z{{U(20c2@}#hG)Q?o|pu1A$kxof=6Kb7Vjsr{xMI^H!xGGcwwNxL{>>(6@CwA6Gh zPWtCC5m`0E#X{wiWSKiDM zMnK6Rk@{5knv^$rme1`9r{@p5)YC~+S2ao_7=C5ZR~>*@vsg~dW;Tx{*`k6 z&K(US5k(v=8R97yD&Y6QJQ~MNYol+oW=yx!+|2~Hw-MVFkg9r|4uc%y6zk1VZK9o~ zft>-$Y$q+~Hu7;*Ev8HB_*45nP^2@kBZVigIpcv&zMkIFHrWKJ8+@WwlYg0v@$KnG z?!euU;zi`?Br;sb3ZN|u$&H7v3)~)h(Q$2SeyUNF+**;Cjzh+MvF%BwT3g)6(I)1R zWAhd{UzTDzXFO9E8db2JNgV&#WHh~&*xSq)K<{TN*Ny#K~+nI6$9!BZ2Ktm(2SH8C1E( z7%9S!=UBFHYYw*(i$zJHRA|mvq1(Ls{#8=u_i^$iYiN;)0x>27XP~POGTRg8MJ$Ve zr)EiFe@cpJWQx}&6hpt}T!+Bz&VQv;Oyyy^d{23$7n&&L@(=D~ws6eL=)~|l)~f0^ zPalyC5Wu+4?^rk^t}roJwvfd=!pI~cK4Z0FG4%B#uj5wqy&h}CS!BCeM0qU|APPb6 zp0zT!+6eg-EaaAH5^WR`wPVE+J~DrK;?`)_@5UIHom)x>&rH%^6_Db~wZ2cI#B_?4`J#Czb-TWD%0e zTpq*{c&c2xx3Mz5$ajIQt?XT4ifB)pkjpaeA&)p556-8*xAN|ccQHIxsD5HXsAJCq zy;+M)5jpc(Rh}`yjRxe;L7sm)fou@nM{#wAlpziT-e%+2AMTucQOumViRH9;Sqyr# zI(3`hY(pKm0sd2Y`P{T@Qt6MK5oMaf0p zzi5!MY<EU7l5+r1qGwF;QV<=y~wJ*vzPJGM45@B*-I2=`vp+s_j%jO}eaZM+Puh^3buGn`_w zQkC=^xjA)3eHPZ*IAwsSh^XAF6oi!?gpLJjTxoXtj++^{kM6GZ$=X5wS@){{0NO1A zqsI!%ZM%aP2S3)PR&8$I{UR%?aM@6ucQ2`;PEGSLk1AG3Tl)YaS&}drMnppd0DJHc zH4U_PHi;a}(F9O(3Vg>o!O#ByTA8Z6`fx>p*tAdg%wuZ-?~0yV==9q(IXjz@3FUt} z(md8(Zeu4F@3n}mZ5B%u{o2dsIcXmtZ63qDS6Em=@hh=H#JUv#k=v8SYo*FHubP|G zZUva&1sLsFI_0F-_G{$NECI(Z2nD&U0ft*T!u!*>eC4g_J4iLuuNf`2Nfb-5|0t&3M_ zac3he5_wTL1R{<%b|Jkgye4f!c$(@sFbUve^&iTmx0ZOWo@WUpY668E`CxPy>S|qA z#R|5uD#iY=?EzCPJ&znzJEx!~rK8xGO!8Qm^AoIOF=-Gee1p*X)iBZ9w0>2)7H^e6 z>&H0Y(Wp)5+#=>p!2<1-RI7Sm=BnHgBx;hUmoowj0>I?->ClQJEefAu*KMdzF^w8K zSne1sftM|`az=Xo6kX2O5=n0qvc-}P2pe(kdi1H4iiJsb$1GUm^I6`&qjh54j1o<9!P+-y$1)G~U=MEGcf}#rBFSl1-s0N^ zINB*d4BpMxtw8T3y}}2cJD3R=SlBPfeRKUPOPd(2^x+gyG-}VdakOCf#ZNW&HM3g| zy0(h?Lfay1#UCNw!^`i<6<+c~1Bj$#Wf6fSr{+_iex{_nb7Mc6#b;Scpg_Q`N7KDQ zcXA$QVnk*kg-yRMdX9bRsaw!aH(C=k(9NeMtdO5BIRuC!1TY`rpTeR0L`|pMM6ef? zh#UYmsNiCyeL+T@=C7~0AkuT0bn z9FfT$C5_{V0p%9Tu_M%X@69OA+ZV|6Z(zUD+fT7)DQ>yOOJuHd!5)Crlj-rzZx~|6 z6jAfL5rgb~DYHb=N>$iQ#g4>wJ9CbeANG_{hF5VBiMft7JFq>yD!r>(wk1tA(nNPl z9kiJMkOnfW2>g4RiIrowQW-5@cJwGdRvxsiszs>@T?;6UxDOF7PrtXnwH9{|X>QAQ z(agZ)D)L-=_02zP*@v_4gt4%W?%A)dB$-P5rOD~kbL~>V&{)Q|0!K*H5tchg;(dO# zUtH8@k;6$Y%UE#D7R~?|;|H9a)P~wSs2bf@YRI`P21qBSLG`HilCh$MQz!cct=-I5 zL9PS!fC)ZQNaqCisVBE&)K++{*gR?h3zPW)(z7(%=p=$TR9jmMHrRKar_-mUS+;AF zudLCd&k#loVSTCx)4zI-XBT5mRV_=JuAw&M5R)5Ykl?WC+#0K5gHOC|rZq`aw26_h z403(Ar%Nrs5;on;!{iK@J9>=gy-<$MJxbN&y4!0c;{cWEU#5*5f_#2T4xB5gFY zNeYs`c|cYGaZ}9ga_q06mlepjEhEDW>fnN_DOOSH3FD_`MvmT;-S>9WPLHEv9Pz^q%*QVAoR`$TAq8C%WcR4t&HWQ zl}LmTi6kXVK=;o>%{5U(aJjfgjd^DTsO$H73b}IES0NSAKx73~%K}*S%~HL+)U2K; zQV8aR@&`XJzHyG-Df>rz73|fn7nlR*iB`xNJjkn_`o|)#V?%D@iGS;6g*Ox{`xPnVpUn)J#^DBLEim4P1!sty3#?eWD zBAb_7?a%)JTAyjFEtp$tk1iEbBu6qcuwrrFkIJsgGu|@px!VcnD!V~Gg!Sg7PopcB zsv(O;TRY<<0b*B1QnwjmF|n0LxEbcHUg_7dToDb!gCWcL ztGFmVag)d4O_u)F1!Y;Mib%h8x<0Mz#yVA|th6T1?#z4=2<+yPNY*QKkUmyc%QvUj zHFJHooRM5gT~_BTQAj0;`hm?GV~yb%p;?`HehCv#PJd46H?Z>54 zm9`~D`mrPuZCM4uOvnQx02~h3AnVkq^v@Fd0DWj^?xGTe8$%#f$A;-VoO-3>#x0d5pji4;@Bv zPM+Oiw`AV0Z#duc#$4yN4{X+CvY}Xnk)(3Zg02wk{Cj4!wHb}t6ZWN$rVh>c`FoLy zT-uk*p#3jev%d1-m0d~YV<-YC?~D$#>)|8YG--6u#10UE3uDk@r>1KP6c+|V14xms z2bj`uJ%Hk_*g*4Gi6vHs+>)Me@eiOiYH4*NlH`%FwbMgQ9DZ81-<3{Iagg7gMR6>e zb>J58D=gsr%;XV)@5MsiUA!|zX3|Z+D=E(Co2RM3H0Z8Kw}d1pIoeB{l>YzCV3pnWRZv=dWxR@-^(%igCjeOWBQJ@PNGXuDtBa7trnLvOEGeyB4mB!vmV^k zacc2f-^o0%GnNVzyoU%e#sQ}4Y|;?WnBj>?1tnbX9r^23^`j-ttWv`)X5haCQ+W&Y z?@85MwnJ2#mDzhrv`Mezl?+d8&4HhkpLI1_8;g5mBbIh_kgS43xl_~Y^%Tp$J7Mz! zO@;m+mp+*QcBK%pfFC9qS%_d%>?k|qH9Xf>D%N%@+UmBlT*>A~YR?cR89rtwobsop zYQ@oO_|43JW=Ni0vJ$yt_)~1H)ok60vu?;z{m1uyzVxs`7xqkz1ZwK|J0&L}hia(Q zih7Drlh}&lQ+YYMNo}wf3W2yd_4lU3eoYK8AD z89(+F#8&AvQmw_(@>QIu#yXyPqA0>x#;qEq)b2sr*$PLg6(!D-Eyes235~QWxnxqf z$FI_&pHf(FM4x4j?IQ%CM>sUpQ+tb=$b2{QfH%h!Ya13jatoiWM|Y@Nyy}rF!5^2p zL{rP3L)xrdY748n7Pqw#6On*P&!z=a{?cfpomJ!C&+d^4Eyqmy)v7C@KGC}|_C6s? z*%sm9i54Z=6^2>Pcppkg^=KzqAZ$cShC$C$$IZtAsp$`Os6r$VO77=r-+{DasP9qC z5=}{oV-Q5cF*}uq)QYu5UvP5J-i}*_Z?d$Iova%uyTdLy^wX6?I-C`Dlel5)LS!cuFu*`k=dD# za>pQybZV;$g}O1OBa(BKj4;6GIN)@w*{%V*Zz#NM1{yH=1bfpCsOrRRebP1rh&B$L zbL~^?o6(P++M1>dm%Ej(VYQAE$XL$u-sEwLYs6Am{?8n81JsebceQ6-+|3-X9B#5p zfL20AP#;QJr29N?BraM-ATg1NUVViTrq}rm$uix~h@zWPSR~Wl2DKR{1Q2uBdQod{ zB)hKVmP@VKA!V5g0DA$7%DZ`I(~O4js8-2RJ9D3Us+VxjbsSOLq}V?@b^{e&$9p|V z_MP@L?{74_W3`lt5TBTQsC`C#s&w%Uw3f20bJ|Ka1&oqR*!MqL&W>AgYHcLjG-gAz zgy??`wU-U3ywn~jVum!GJ_smE(9XESISg;L6uDRA^~Xbsv8b-4p~W5C^Gd8_D5Yi_ zK_k<>M=HCsFQPh?xQ^FHj@B6Am0$&(UR~p+Ju{zb$FyHE+Tr5a94J6=r|zj7;B@Qj zS=vX4=CRZzc_EVH%uyR{>+jn&6^^|nma8?q#HGCX*pjjN8?fiE=R<{wiKl&`$rO^^ z+MrlS3LTknew<))SM>X9Jx1LjmfGEKW{BoMcPeA9a4;(d<6oH~Hf=4tG%tk8vmsx| z)rqbOUcizvPIeRs=gW*|p1nUxpJ%3wu4eZ}f@#`@mmq{g70;O&;Z9;W^f=GqRkt;7afPA#qoxipIrXM$mlryO{{UyVD`jIY z0RI3;2j)MhrO7tz!cvM_9WDLkzKv-u#ng}yJY`knCmTob@s4XJOp?~?M!1q_L=ePx z2%^h*z>b5|RJczmtAkbR&DJfdY|B7^vhRDrAfc;&mF*0i*X z8$E6pxs*qEvJ3+e;v?99_48Se_8n7LXjI-u_ISgTW@IVb91cY-uVL@IG_Q3lYyBml z)S+1}K;__27YCz#YbM{qHa8aP@-*tOsb(Z$Q#~+7b5?C^Q&U#*<+!mC;08ExCOFzj z?bnK@sd!G{PHnBP-ZjW}W&|i6fC`y^D=Hdli8Rd)%X`NYt=8^ZOyDU#;;l*G#DdgK z0z+^Ee(<{PF^^n<&*MzdbO(ZMmko3!Ey<7Wk=W_zw_uYbV9y%ilr{>F<(?@n<83l{;Jc3D zrd9bF#!Gr&bQHRcoYwQIu?9%650|(Doj{dZt@P%B3!v|6UAG{wSKF6gUZB|N7N0>;t{z=nVvfn)P8j~O%=^0)Wkj=yx1d-J;R<6xo^U& zKZhDzGckmbkQupeKsc_3>sOC9vO;H*Co;;|+`RPmsVBK<^%*8u;d#0#l&YL{%H!q7 z){Ax;o9biUcvj-Z#b&#A~7LivBs_&VL0cndb?`yT70m+=;S+HoUY|> z@aal1KIkM^ zYHNLTH@c{9Fo*#Bg>=zsCh6u)*oFRfkf=Bv)DmklOPHQtw4W$P8|+79#?jlL>r?E? zRUNi6B929M%0A4Hr1uqW7_N%V<&DdX%f?6_(zNX_p*Hec4=z`iE`DYW`TqcgKTV1~ zHqv2oBxOG|ijRiIIuS|3svorOeuQg&1$5G^lf+uKY&0-_%K%0zcA#ZSlQ!_F&lwo`gB~;1wlwVPcmwjY4&KIXOqjjUHcj3Zg~Kc z$*#ih!B#p8U0rIoHe&J^$%R6^aafGwXxiC1{`da?s=6hLae6)VwYvWRk(6kuZno=x z>r>9P4~Mp~Xj*Nww=uzWraZD-+D1g_Fl9SiJM+Li=e={6e+Z_&(Cp^Ysp$9<7t<=kZluX z<>aMSZ#XN+sxy{cfCf8(oSM=&sl!#iAJqQpK1?lrXVpGqxq#kK3(qPmVA+b zatN&LUcl>2?P00g-8Y;}2`rvP#F+ypJY#D01P=AnM;TT!ag*uyewQ(+g{IZwzu=q< zKL{=SIpM483p0JGUFuT(oh~AeG6fu!3a!9B^Tl1(J`d}0d_J~Yn;2FcHZ5cW?I3}c zVoy0Iusn0ccb*Ti)Zmid@=a#W7%dP!$nF+TGE9(0OJ}FB{Hvb$hz^P3dp%O~Qd<<6 zWh-na-r-3jqLa@|w^5qbILW!$J$LVSV<}7SB(IPq<~A z-CSH3^GXK$%BV)|-2VUx$mS7QWTX4H>va1~e|ob#Mub6pe0 zN!_;hF^(1~B$C+k&kkt13JBVGZf>lu=X4TDZengY0Z2GGK9#4hX_^*?WIo5?*k-tz z5*b{``wM3bBqXRHWAU!XS@^G_J@jzPZf$ z%RJISr)oD$;?77+j~X6ZXl#ELdY`2p+HI*y{+D|F!R+Fbifh)(LmJNUZBorF?5uo< z;oUWan=S*Y{{SBtJGnU(k>WoJXhCMXx3ik?UZ@c?Q8W=+KHveyNnzHsJYA?*Ub_n| zGg@2qkzeh;TQf|HfwwA1Rp+H@{{X@%YA>g{(e)WG5F)hp#@xKt=Zvdm0){5GjYk_z zU0?dt%2d<$UZ)o}mv`s6w}K0aHte{QVN$J}V;#l^KT5ITsjaPUq?20FE;T9C<}?ao zTx10-0nRhnb*`4i-YsJC6x16~Yv#!EpoeUbxF@JnwBsEJ=QU#L=1Z%HpHaWKYqWfA zp4o)pD`888IRl-y|nv$N4OJC)P){{Rj{ezy^dH&IGix4|^6Tc*>CmdA1E3mtpM~)3ZY1VMu1_pRv z&3-v2f*bMa?OCZN?BA{3{{XL%qK%^5SLjmG^{q3+I(4qCt3WOdu`t51F-MaPl?@mG zHZ#<5ip|olX4QN^liXU%Yo?jyUnTaUX9Fbg2p-0)cv{*U9~5c&g|l7DrrpRPWu86J zE(hHY@9V+lw>A4cAX&JUDOXa0as|9@%#twqvyYgO+c~ExD9Xt_e-DtO7bUA&em^lh zEvQ)DTTdCdv5y{RV=*y!!26|kjPO12#d0xdFvX}{PicL9J4OV=zEjIZ&Q3WbgqOIxd1r4U^S5_pzIjV(GJg>b;<81}1);cH!T&`W!!Y7Ju?zwzepNCf;d`hkO!D37JlMj1zz{)9Y3*d`GYAZ*yvG z=S@>qC(N1$F-G8h{loab3emptZjq>Ji>Ka89i4@=L`5VPrJp46xq&2;^~E#AviNW9 zQCvf(YWh8kD+r5nWpD;a8@S0nwb21K9MUH5;2r4ph>LZJ655i>gDf zK`vI}TdPu1-p%6>+h7czycak>oi;rheP6?uPyMj^bg&d@VpvqiAu0g`t6+i$rFS+r z_LKNEtuOpJacV>gEpI0g#Hw-B9>DSWRxFmV_(3jayp2;d|*?EHbH-rRHOT8STkQv)APZJoOm#8L6y%H{w4IYjR&rCB6Qg zKG*^o13X-Cpm5xBdy!G<{wj$tBMWD$TiDwG%NxZIo+WSw;l^-C{b~y<`R(-G6 z6|s;NghE}ST=Wcbr-R=$qLk&UwxqbmIxFaJX7YKw3C2E-(bCpOp)3 z0Y(mUyFS&Q;%z!l6WPrS&1-mLP@-rZ!TDcq0nQH@#%hi4i#Ngci*Gn-$#P8ag-GWi zKqM;qA5)4=GgvzBh^LMjHO)HGYjDx4MuRS-u+JS2s65i;l6Q*H28~(0S+l5k2I|95 z(k`KR^iLuYC!aKo7G1|7Ji(E>k52U;i8RL7byKNZ%W16KTF2zduojV`IQf`{PndVA z5%`jSD%KU6`fGc8cAQ(V0b_04mIrCu+c`A8ADdT8D@%xVAt&~NNJL37h13p+4^|z$ zX(c7AVJkOeYH6Ac_P1ownP9fx2#Ulu=tC;@!N&(Dr+Rjm;fXYzL+$Gn+9RFtg;Yr+ z-M}YnXE`Kvu3txz%UQl+`jy0U*^P~DG@fFzl5(qs1buT|rjcu=_>)3tcHBWNp#~{D z#wr-#(6SLUN^tw5%;ZQPhNX_e+Amw>vynRYLY7}!H<&TIUA24DaY$qyeHyo zJC6&v*z@K>L&!I7E^tXW>%pY( z!dYng+Q)Hu0G&%ZPq#6~yFO4@j&jGa&lSrku1hU?oe{g0-kk^CPpf}rN+FRZ5zHcI zx|E+Ua{b-B?FX^0m&4ZfR4Ovcqf4U*%IGEQ;cv8^xZ9Ta2p^(y#s zB=J_HE*9ZYiEk~`A21Sfa4=4BgPz=1L2EG6F4p=hqB10k5TmI6=uybWd{!>C z_38aHPh)RUjj7pLX-|D+<>;69YG#5+oXCtfbsz#c$4_cots>*ZOBKeisGGRNo_eja z`A~7d2X|H@KTd00cvt&$z^qU9O|c0KcJ}V_Dz7}A02%u9s}TG?w((V{lkKJpCM8}N z_r)|@bJVdUWOL1D^@uHA@5^s4=D$~|rM5 z{5gGZZ4%-TAepxqrhURu*{}f_sk}p^Y1TTFH!;~od39o_k=w^PEcxrm$ zTf6(sHr=gmE;>OhGDn8MIYvBn_U5PBMXsava=o-D>$>Ec?ztQ``n9{XP^p=1@$#T2 zY-%{eAFWkwZ0o)uHeX~_u(g-YmEJ~HfQ8A7wn)xKc=oP~#n$>}wG<}m;jHGF1nwc3 z5_WN)l(O|1Jq0g^EUc`2BqWjM#qzW_D|dU#fN{ZYLwnS!$wf4^DbsFNzJ?cuykR6h z7`U~up55B~Ni;d#E07!RH#rPOdYZA}{{V*4YWf?tuK-)Sc}Xxx>nh;%J$YZHCxvt< zwCn48#IU!rv{#TV%G`uu*b&Dh;>)MG_ zvvzjBU%)+$(!RFo_?)H85>ICvTxt45&I?4)!a_2z>(`Tkj2!V>GR>t$V`Hc-^~xk_ z5lpHj#EckxgB?amJt}!%xYe&(h=6Wa{l`)>oQs<&L0| z+sX;^CLVtT9m=DCI`rq-p0a6wRuf7p{{Yp>LR~ONcVQNzd8*x9JIlFW4+??IfN&HO z+nU_*jrIMP!}X3?fRg$s%uze=>Nq(AByrAtx>gs1yexEkeM3;O)Z~-QTriU@A_gR# z%0SKrD#}>Tt=h?R4y7iuWnzA1aH0u-#!%#NLC*k;Vy;n6X{WPWkrw%N>)4}b;hFUt z>rrt$x_#(EBaq4FMA6{z3jxM?$6DReA=PelrnHM$v}Zcp-*Dj>Hf_c)vQ`H3i4`JI&Pw4D6!2LAd+&br;gsas+^?VpXL2% zOk$F{{Kz$%tF2afnrP!1g^Z|>#8Aj2elsBh1(zA;G|Sy;>`7u7BY|E*@I>*2SK2Yl zWDuvXHLav;&jFSlMYTtgH6C2M3M_z+;R}*QQ5x)iDZ7tOl4}cCY}h7la*}`uI9&2` zj=d=6Z|vy5tqbK{^<_^5TgMKwH~KZ4cM>s3!m^-QNy#cp5ZoHAt!dh(qp02`&GXqt ztPuiCgc3mnHyFo$mD5;XS=k$fvl1Acc5ID2)J!%v2P2I7=CbXqZ8Vz*;7Hp40PU*I z&lp89XF1$`a5y=sjPBlplr3#ceFH?g@ZOg;Bv@AAfQ)1uUhB4Nv)3zBih3ajCQj)cT0?wjOT<^QI0X6rByjCpiM>AM7qYd z0^MFLlFBaCX1P@o5IH=Raf6fB6)l##6Gd~W*+(bYZy;7!Nks-l11BKvTzZ4XDGsR? zi)^;;*7~p7_sCw#)CS2I3G*JDlbVY`hTlN4xiA}{42il(FO@?^03@h60OWvikH)R) zmoompG8Or~)=|H?wb%S%4aJy`OnXw&PjeY-h{})$%*6fd`%+JG{t~*LM!mROiK5JM zlwU1K# ?lo6c$D%XZQIb(fqZ>wrDT&2=T*OA5MG!aW4ctyh%VbAAW-;Q++Cspwz zHeY9w&&hYV;aTI59zv_B#&Um3Bdg`z6)mr`HZQeFJWQ!)4zn)ncy~%(+}t9r?EI~R zo;`Zhek1Ws&w_OrZSE#(tDQn65&12#LiF8$yc~8sR60zzI?Qp~Eydl8l0~v2%AvK@>RjtOM1-_`(aOyGq@!a`jO>vF~-aS7GB;y(KiZO0CFz!a5soMRzJH1IF zkd;XT3^bhx4aRZnT+P0NZK&JD4Em$oFqo=+p%>3p^#qRO4o?ERi_vdysZSN0MdY+y zvSgO~I+L93!Q_toS2;8{$6WGmW3^R@O0CRnp_peNV;TPd6GUn@H%%imQMZl!MQtoe zdq4Jajn{VagbJV>D*=vAuS&I{{6mXYj!1vAVZ4&+M`0szacS6YW1f|%;*A<@FHN?) zv=Pm5Xrd>F%M4^@?7(9@epQvG+UXjwiDuL8G`&Hx6u?Yx(BzzDNGGv9t8QfDV>K3? z%x@Fk7%ov#biST(xTf8a?BEjJ3FvC2&aZWCebDoR_GCG>Gs`yF`Ls)B*sB*TQN{l+0 zPkIN4B)GaT&v7^IqHi!5gJT2b&JQ&x(eoJla3G14c0i-~MXZuWw7Z5VYl7Ij|D+lUxQ0Dp<%NuHB+-MiKHgZde zrM8*RnQw8xUi<<^2dAx7veO2$49#loCG;z_NY=#+f9!_o`Bzh8}~ z47()&70(#sspmAeUuu_q)58wlRXRvp(~b!I>#8wNbaF~fXho;oLjG;5#<8D(0a3c(@xZ7dn9C7gGY-S48Q5y(p2cO7DJ4*Z3`nRmn$@Ic znRedZ-)ga06{BC1YjO{KZmahZ z7m<TKjm1so9_Dim2g zjr_As3;D_ilzJ1zHs%v{6VDNY7tG%_@5~Q+p5jSnwGq6Vk~6u=Db9Ys(y9$ftm0&Z zFh)N)>d#XdHoV5-krthI=K{vjN+8>W7~7tPufcjP^5#d9AftE<$v^#S%==*4&E_C@ z@ME?twDT(+#9J$cn0(v z!)`u@ipX20U{KAHiWCsN2=7a!MIFrFXu6Xxzvoc9Lk~)cB=;&Ut&Qfln&K%g4DpGd z1S=I>AHt_e{M%*6nG$WoVYp+T)~UiRZDijVxLwRXR^(!=sFBDqZutNtxe9aaFB;3j@iho(MND}{{Y=(OkMPZvP`z}AVH1W z&KP&%r%Tgtk|4R*6)?bt+&T5C#_HAxqiNmla>r{aV5{weT1HQ68Odl$)(v=k$ehH| z^5cI49mPm)5h5N$rg_U_b4`T{>x}bDWeK*qeUWTd8BhQlM_!dJw2)ohFlju=56iS; z3V#ljJn!Tjip3eVnIOH}G)Z>D0HVdgA6`vfmiBg(O4g9ZElxrL8QBlEMN=}|Y1iMs zH%`(F0Hs}1-#Fr~+^ly1u#(>5WCNCMy?YX)HBMG(*v>I+YRcNLi2luMnJpQXc}OT% z9#|h~%UV7E2qDkR4^Qe&^ zJWI}0WbT0pI0FE5?@YOjYFbOIHnSII+*Oz^!|hr|Pe*epMQh|j(8~sv#(3jv za7H#h{{Sx^&Z3qd?AhUc(Ek9Xk;9Sl@t!fy=T`0Qe${SbS4X#nNGeavj6HG58K|u- zO|%NI+e82*n{QV9O=zXMxjuF!5E!nQysQUQU_&c|`j5t^w6tqA3BA|OIZdm?e$^Gs zHw9IqnFd?tU7(zLb^U5}d99;JjKV^Im(DUjE-NWFZ5eU3^+agRZ9IxZ@@^O*@Bkgp z6?z1c$4w{9Cm%9KtAgK;^{A3~)?&=+4mr<5pHOO8Uk~OJ2~u|8lbVT1y~~Z3!y?t? zSKe7|Ae3&zhj=ZXM*^9uUyD1)CAGKvNMzlFAxHO^dxeQ(xiPYm3uA-*YFle)9uWaoX%ivchaZPLQtNgdESY9Vl_YlDOEADY zfdmg>=~R|dL(avVMwwB`Q}49Wn5474MYrA&S8iYUzxwp(Y_Fi5+(_O_3_2;v_Q9)* zvelW(d!ie?U1hY2C|5G=-c>SDGxb zT%D#>4n}!i+eT_TO+MNkITj46?c5Rg$G&?LRld$H<|_7$x+lqE$L0sxty$T$Ozav~ zjUORN8>98=D@kd)Gg4Q&L*coQ#VZAoqAXAaeED^cROM6m|`VLdl>~x85t6do&ON875phqAU_XqW> zOKUT-s}(Y^%SXuv9nD3lN_7y46!!Mypd4j!>+FGm~?bG6^il5gPvoxF7G>s0P;tyKI^WbJU(tJ=jIeKzjJo>OrV$qH015l6LLHqpJg#QW8< z9b2&;f~mo(T--tBvmQK> z?q!u3fWT!NMmlp)&XZj_DVBMbLU*c=Iqlk~wIcS=#fjQjo94u1WcR^8&ZC-m;*p)a zxfMI9<~}+fdY)w6kog){Y>rD+u(z0`6BLkuQO4#6)P7Wrdu*YUq>#pT?M7aW-y@%D zxAyd!)mmm?B>wQJKiX2RL0UrPW zd7xZF71)c;&B0Rb5GNpKuhyiz)@|dv3nDQRA$O25Xww6y9VsmAn%3$kkh3lehK+V) zdz!9m$5Cx938lXlld~V1B_G7uz$3Szq`4w}L(P>Hxz2O*42qIS)_K}Tw`Ld_+uY}a z$2h2&R_=KN%^ka<94KPDhq$cL=xKG(t#@M-LFRXziXK%6#~!%rQw?q;(|ow0RA}6& zl2yYWq4cUVY7)zC(A&IlvK%wToRED0sz6o02^jj+aoat@`E!lo#?7w7D~@{8<>=6p z^DR%U!5mUFfrda*<8c|PwoyqX%9$cK53G zkqLEKnV1})SB)P79`thWsM9A+E<2gzmPwpU2j0Nip!N5r>6S*)2_hFoS@IRIK$EF^5k$1 zdk;#LZl$}G*G!ofDJGI<2La5Fy;u>@eGM(HnzrM~SYR8UBpyRAaaUu4IU##I$c(=+ z-PezLt#YxIlg$0gHweQS_a};e?TYuV8s)kxEsT~in6MakK;FZpQ=3nFQTA9>pi&1B z{J9y%Q}m^4?lTvHZc<_xB&xhrJi}KQTfP zh(`^UbDo1eI@HQ4`$|zW0%#RroFx)UlQ;NB=%!m2nNo6E5tKc78nuaJF-A}dKGTQo!s`#1ZF#+{{UqnLoAz=4%@Su zttFyFMe@cs&GImcLA#%7eZA}&*uq@ch~qe9Prs4))K>aOlX}z6WdQ+QiT59mPUfvN zOH7*C+Uj0Da=ALO0F@_rAn5UE0I(9pwA|WQ`sE=Uz~pLlWv}eD}hQr4$@6>w}-^TJv0#tXa|~`!%dG zvpo4<-bs)$I%EOZ)YfIZs`YnU#jWpWZ|&IdS3m3t3MmSUW=0%4V8<+8si^~XHcd&%~~ zRu;Clj$EvSoEARZ@%5?9!J=3IS1Lc%?=6h+lk54_Gi)Y+z{?(HlY}dh*z5u1QOes* z2Q{=G1+S2)^2n!lH*Od{r<2naX5g*Pq!AfWf?1V-3jQDr2(( zYIyBofg0h|LL27XyyMVuRMSioO$%={npwL?X>OfHQAB5BbN%f5{*`6kcx)W`O0yoN z-;wmiHs0Uua-^ZdBqM7Om;)m?Z+clZI9BJ$MfqjV&ZBlcu~p5{6U)@I1?$D9qL@}j zkc9?5aJ~8U`qUTA7M(uGEu2D`-s(#h2iJ@e4w~nvQP9w=+lW13Gk zX>KNmYMiPCE#;1w8LM}ilO#c8xE@Br*eXF{dTk@8(wdakkrU;5vYt{F25V(9zbA8y zDfIU>Vr8|G)px{FMdd=^fO-xpH;}EQ1-!=H^GaEVPQ(NKDYmzwV(`Mn)G)&~0mtRi zmE@K0pzRjyLiVw{EU&R+3QBHJ3H2u&<2739NK)O|h9LenP|TS?f2FU!! zVnUTdN7FgLs&|VrUNVJ_8&W~fnn@?ncKoYlEi8<>-HR2^_Iyhd$rQ1$`;4DAuj5sr zw1Y{Bq%cJonC{=sNY8LMtG{hcIgVB*!VEf`?jOv4RRx9QX8E?pV%(v&?%b!G=O&3t zd)OkQwZ>a+iuIZqh(zUIZbuyBBaz;qU3P2LEoQK?7A8U$DhII~^Y2V&(VzHWKj_F{4WU|IGBXs^(8t9JbJ#RG!M#7?N9P)<-J9MIKvu9nA`+ z=G;dmlnRnDB~IP!p!3(7H5*%Ni%0X|nF@eW<7_ZI9OU-)sA033;u5Vqazx_*Jf)Z( z#N(!GJ0{0=kQ?g}sri-`@}WWjD8DGrP7LbA=Sf{2)&!d6M*jerK*m)5IHsWQX2j&Ja@dwL0E$P3)s{dv ztRx2=4s%v-d?RIa(WE|fus6$eRuhJ9VdL+*e!Ju_uSqO|dXq+{RhQ&ctrpgXnsX!jBC2Z~HPineL^4-DQ}0 zXm|erw4e-CJDpN{t!@T^ZeAF77eK6|{oEeET9)U>_! zGUpt5Y+16iYdCzrEnX{@C?gdW+&9`btZJsQ(;IW1dI(%wjgyk^~l z$gv%WgR#e2(TNvQwrOO%NmW5mL}iH{y!WcoYe@x{+2DXAtl;j81mpXoB8?LLH5oUw zHx{x+O5xWjp8YB{+^4W<_DZ*MMuzE;7j$Ip;ky0aqndGw`o~s*ZX*&FPnqMu^3QIa zX>|_}G=;5Eq>ZE{T={&TPI1za^%)X)jF$+oTY^g!Jx5B3b8g2DU4vK<++B%H;umrA zMo@#hpvm{Cmc~1aQtxhKxVAjZA1HC@>-5DMflX?`nP$j#QIez#`};)62bF7 zXWR)L$E{~3*`!iPZ`yBcx5+#yda?j=@oaeb;{*(MG)t)5UBHY|-XQ+~d02)$c;I!d zEg#OB{gi}g<0J%ghhdMrLG4-hR>h}T%deatA1@#e!jhLlt<-L|E?&|mdsm5K`GT~g zWQY6M9X^#E(QR8zZKA>#QRb1mB|z!`?oB~)Wpfs%6u0_-mKhJ+Xu{*uk~)4hW!}qD zh2%yyb42?Umn5+VlZ@h{(4#&nBfVyp;@Sx|rokc-frqKj9@N<`Wwe?&?fyt7$~-}g zkAvSG#c1BjnnVdIP3A1QQe_+`uG2`8O>tuzM>J=uh9~Ax->-TUdOgbK>b59PH<=Qm z2O!J?6OGvEjDL+j^2cPM?O|zPbMuEekPtfzbgc{PxvV35by!*F0a1(Os688jkyWiU z=F_AJD=cVN4A8kHkA69$aONSq*DiD$HY%4mWmbqf4W#<|_s3d*>$b^>=eDy+WL>Pt zpC~7~-sJ7It#!?`qcGWQ+#)j%sodiK725eZI|~g^8%wAyL*MD9fr~i^_u2;cw>QW(InrA8xm)@&Upk>SDJ&q znKTxb(m8);<(u_AJVKTL62S1J9ar!)fPp6Saxj3fXs z^bPn@*HGqKSjM;WwTGK}0diCjHh`^;!yW3)rL0>3SY#oHkIKjfH_m#KntSOsnnk+x zY@luB)rubY`Wh@Hx72QY%S*y$NYBjCgah1@-`r6hGzTl{wkoP=$$Kee@>N)-#m3`` zzWS}Dt%b_kq?Y^36_CD5j1D>EpJ7$oNs`9m3rReQxduW)uq65(wOLU#xbBstiT-o3 zi7ccaPjOSW8_e}-N zdQX_FB{03j^DYTf#zs_}4&uBTZg1j$*Y)If%av?1;vB=p`Yf(o#Rqd3At;at|o4W zDsWWhx%7)uZyQ37Z#|8b)PXJ}U8XB>w2^{Xoa3H^S43@VcGQb&e&KzsYdXH040>xr z_E?n}BZAg8yHy8_WsXS4ZpW@_9a}(-#v93XEm9p?`^*;>x_r`c<{yo$hfcX@%$iP?ZV`mDJMEU_DJMDT zags$;Wp(asOqcTpqXYP^HGdI94UN5{E06618%DUs(1kKW4i>JC%| zmfDJ4NQP@>Asmbij>-qh%Z>oXFszaLX~n)$Q;c)CD@M5_j^~eB z@AN+&MdA+(wxA=my}PlKbC_d&pbj}0$mi=^kBt0X_KzDz%Vj;AN_K}!e?B{sz~yib zMld=KJJ!^6m87*^b~CB)-964uUkT~H9k~9~vbk$(Xdf~8j9Y8%`>mGFdFU6lSHHf0 z9ofnDojt8J6EtzbJ;Du>0^GSIWqn8-W18yiHJka_t(xCPns{a1`{>MD^TGL#80WuQ zyQ+LZ@mGgrOIwD~f3o*^W@tW5nNgfzOtm?X@ z-kWiGq)M@dg`!d|vWMl$xk3m&=QS+)y|0AK+I8*FjynccHt426>JK0Q03?&t@x@TQ z@oPb@Ufjd>IMV1M%XX0y=1MwlPf|S(YITHmca~|XYcajddZdxV34-{j0Z+}iWw`b} z^-`6!lCpNucmA$Sdnb0g_6bt!P@cn4Ivl1O)+=jmZ!h{uAQD~w0EB1zqdXd-H7^kO zj(9C>EX~yVY~?RjSX3e@>ZB9f)OD%;C+ia3YBN|zr-&l7SfqwnB!4_E2*DBX3CB`6 z%~$ZJh1Mu!nh9>SpEvX!8vB)q!*y@+wVxnurDbUOY20EeFH z3z@~Pn{^zDvVE8_Q=X)U8*|S+MMdFn6x)5WS#&)f@h)H`t}oGA;tBnnvtVQ&d>-|s z;y(^SW3PX0+oq#(u*g>7?PoFzoDZ2dGK>SAieo_Z>)~e~rX{*`GVSB3n@J=JQw6={(q>4I{ zyr}GJw6OS1ZKdfb*Aqt9nK3P_mW?-@Sn}JpWMK13rAWhl`e^nhoi{H}Rk_3KciO^R z;_~*zMAJnB#Mgz~k;p7VWP_Y$wJh%KE-o)D*HMp6icoF-%=W7y$s-PSI3<@pnXZFY z@a>0#FE1a&S9(3mTrh<}gDeK#TX8rT?Zt5a0Pv37SzOtdxr#k0ZvN6t6B$|16SRT+ zIR_q;Mxfv#bw9NWm$lOL@-c5~ zZ9B;!UP}ZZamH!hCej|pC@*X;<890S)GVNbOlaMqaU`~o#3S+; z@JKnwKzQe^a+aDzI!=qEeV*>*&uwyJ-Fs$LBi>F)B$PccGf&jKUml+mm$I)UHc zwR3(Tp2ldRj#;iIo&*E<+9hIokWb1F)1_S3ygBEsv_&-7twqpToJ?*!%=KpgAD14Z zsWpBpr|`l(o{B8)gwA1}XrkUqpOk#eI2q_gT{$@0tNV=Q9%lL@l}igtD;BzsS+cvD z6TaR#qIWU;+^Nq1ao>zqw}`FnCGhozqi1n#c`^eiir9rn9jD)u|hIV7K2zGm8PBh}Tqz&MfXFE9Go|lmn51c^ItyGfA=4<+{1ltzwj<;V&Vzy8Y?g zI4XA#K_qnKVwnVST-eEHJ*?*bW#*yId4&FOhb;vGfl1;G; zsF_1>LXna?^XXKtw^sUg^|?B4(SClGC%lVEv5w|NeMd|ZmW~9HcYX10+IKNI0eaKC ztp`Gu))8~5-z>5cE}_46fDWHFcG-9co!nKD2mB?Y@qBbC`O$6^FH1XH{<;(NO_Xms)}8d4^j zWVIi?ZM#AMM=Or_#Xb)d+vz?d({+PqX18#JSz~lT3FL#(zW01$j*b?;=kpF*wJZMs zksbBTzlgNk>y&tW?>I*G^IEeRJM4BU0u1nZ=dD5E<-WRkFC(|oZ1+f}IMZST~)nGv~Rur16S3pw40qy(!g1{zQ>x-F5;4Bo=CAT1XUMHR8%PI*Lo;2fNe6GeH!lOR;M^DspkP zcK}9xyJo#F;q~5`9iN*7un{a$N?^G8&pE)s2Wea$y=$8AyrOGq6a5>>e6mRDnHb@T z$OG4}PSo8aOS9DPwwW#EhDDJD!ZZ0dGJsA10|bHXTzHOI=&r5vIxzgvcY2*hlc6{K zA?0-IOPFtN2cGi7dxa{UMsddzdZY9fN;_m6*+U7Zsw6ZWEv4GuA zt_B5gsI@1~zpwaXwoNpY87`CK8LxHWrs{farlS(XC-WmN@*=+kFbCxzjsYDi=sVUqA{kN1qLI0Kd-^SkR<)RZSHB<*jPt&M5(L2C8>v^pOTc&&7cZ?Upn zH`*jKTZ?e>dBlCvFfa$UdFxQ>=^mNlJIlM>-wpwM@q_aZTlR%78 z5ca`fAYKq^TukXgW`=#NFUly36X7+ zYDXe(Tc#%)g7pWzRH?ToC_k0|0IkXAN-8q@{{XJXUuS7E__7;&+e>?UILGc|S4hHe z2`m(6>4RCf!)~j2YkNFG&N=f5^Bm5Z>%;Wp9R@K~JVEg$J#N|rLoOjC{jNlHHoN2#`T50`#<$Fc6UCyUc)*;n& zSrdKgt+(zYi*#xw0E}gT;1UKgSlV8g+O?FA904yOFPS{>%B&9x7uV~}P||!|VSg0R z$|Ff5Vq=yi+DE4DK4LSEN}Iykls+7^KrU@$dxqhnVpwu*= z9oYBBdY)9CisRMp>~fY7>Hh!^?ELLNO-swz^E*o=)5{!^oPmHi#w)3@Z8PF6ymL=# z65&WPB;P3j4mRPq8SW}eZ7$C45iXk%lICr!g~2eNWjPq&6N;s+!Fy*6@L3yMnG84u zw#O`8dv_e1bKa|&P3fcV-}Rv!t_xjJp{ZTLY|z1Czh~M4Zx<}WWhVzLdhmPFr-ZaS z2#l7nH1l9Av;CkGjPeFfF`g?LEmr$a@Rhx`;dOBe{K*n#K$+(}0q8h1>y1LwR<-{C zPQJ2&NYiJPut*8(+nvLu4x8HV@dYKjLY)UQ%LbOP+1WFOyMk-4ocrJ$0s7R^*HTg@YDMgA=<&nhJ#@TwbKE4Lq*AH#ROEFT zBL|McpQY+@LE?y^)&!F*vF?dBNx3t}LfG}qW9fc9Y4o`4;I_N4Sy&=JGDznfl0g7; zt0PZcCs2}U2H8U{+F#SLWT77M-oo>(=bq>hdA8d5}2T&|K{# z^z*=uR%BNfH#&8^dV~3s*s_r{#HzFB z9Wru19&2}1xSH=x3~V&^^W*a8^5S7CwsE^Tz#fM^>t0r*nHn_Flc0DfO404@uQekC zPdVLf1d)YvlhKD|9@wMBo&nLkNp%I?(_f_VOR*No_M}h#(H(fm8SPYVuWkH4tLe~O zM+DPLDB9Of(l$C{?_&UpUl3~zbtV3b6IfYC68Y~SB0xT4^J71yY0Eb&-Twf*dZ=_x99INHw5H$9CJ}L7M>%rxU;ltSW^C1c$FeyBmglk za(ici+PSX_X_j6c)@`M>x-&q$Tp5bQry%12dF1nsm9K4N*Gz4#CzW*~-fFyi)SxHj z8?lYObJ~ehj9rrm&9!!j$A;`}B~X*x!FOc-Tv3>tECx3oc+VYi-nuPsM7gxEGsF}b z)lZ)Bk1=@UFZX>o?_AY|&ZBFn-tWA%m&%i5vLFGaf8sgMAal)0Z9FOAX-U=Qb3CSG ziJZ2;58MaP{{UK5Da%bq2}fIveLd~qkm@?O+2?qax`guQV}deqjo=Q)>q%$g`0n&8 zh(wmRR~E`6fsp|+CNsE$$RnvEy;V&{Ek<;{a{|p2Y@$1c0TlP>OE=?K*LrT9t!nG3 zPb_vU!)nE1g%#8QGlR*`deSuYyuYu&mpgnV>9uGzYl&Sh7S{V>tV)2Yl^GG;Dx}J|^WvM077$a*H*%R#81_wgl)C!<&pq?nM zQe+#;hRb}Ydx8c7eNAr^pTcD;uZYW=S{HsEv38CaE?aihc4tMyaBu<&qr0~JeBoo=nfcCTk~V)zm% zB{13P$LCtcDXSwVCY{-bCx`8>F55PVbnA!D%&P1T1 z%?SCraC?3yn&@Zn`HJ!w?dD(`C8J3{c2tgfp0z%g;kk5nGG5#=#SuGENFi6(Bzlgb zx;awSvmR^dV|PYvN?W*XZrEF(K%t{uo72=ETGrI99%p8rONk*QEK$ODGXeeM{uR&N z>T_y#kwqIDdv+LSjYAR-Kz$Fmtyv!HMbqK`07_UP97a#~hg^}#KY*-d7kl+IjFqj> zg7s~6D@nkWph$V%P6;2~=fBdb_=iWfpFxQ&W@5ZF!0mF`Jf7zwuFnOX{4u~9c3G54 zCC<{#lb$Oc`ovntFWD_+hFpBlynsD(gUvYVDK?6;X%`Xc(nA!_C6L+`$N`D^XD6QZ zKZkUcv|lN0Ay^a;WpEGgJxB+VDf(`s2BYLhA%n<7Vp#@DH_-I@)}E#2Pi9x{#}bbz zxk5*A$5W1#SJ#!3(&)sz(c29ZUT=-%26GHzHY^VW5!)SU(m@@oOLym8H0#k&mv8t8 z9jQ`9arQP6x=c$(WgNR6#PQOg5dEIvfqM&8^Ki`|!);;*JajcA>jJ!zOMxFhG04F^G1sL-X$6G3Su1yRE;Gn+ zxfl-o4l3g>EeMo+$|+#$YD7cq@*YEgbDa0}siTMN&_xWAD>6Rf3pQN-btJY^-C3z$ zHC8+jz-?Cd&w4`MTC9%1joS{^`KxP0%Iz8uq+mAbU002ua7W|btVW|sw%U>wl#iEl z2F`w!PBCjUr`g^_C;3PKc8n;*l@Prej2j`hNM0fHs2B`?6Hzv+a*EdRtYwP) zn@1%5eXAYb#?jNMYfRL|B63}qX!=w(x6-|~e6gL`7$k$wKb1=pTSp9ua*|uh zN62FzD>wVKRWByCk*8OZ+~W>Bp@Z+~%?e9fAnkTplT&s(0RTyj-LX+eb0B?^6%CxI z1DdS2X+7)=Wgh(eGH*zjJz4FX_tDGHwdnhZsEZTGsKEDnZ&;u{qtI^^I=~@lLY& zCuVs7b*;#o_dj=FTox`ptA?kM*91Lo3+@cxARTeeX&NH&?}V98auR0OMNmF$U>-eb3oMh$p!teV z%;4h(911O(Rf94!qV`uCvscXRsRZ`($#HOZNEoNf@}5+C)X2VCd5RO{2Oti-`qg_` z%yBb-3Elh{1l5SGrI#)w^3;D12Q@Ci=tpmBEv46(rHGf8-60?kZfbk!io%;213O|q zPfx<9h~_PiI!Xx63W5|>F?9^A(S)^Ijr^*1s^l1X%j9S9ip_o`8nyEAi( z&|8<3Oswe)ib?ycyFUGR#Xj2Z+E)rAD(rV}Er34`wFLUHOL-NcjyP8;7@dsAzZk6F zwKVro{{W;%5~th@cy2o8wv9ezu7(vWS^K)1Gt9QFw8?BHagwSDY<+4WZF8vt8Imoz zA$FF}zZISRxgfYz^CL~nQMV`uj`d|Gcbj81ykUj`+(FuZ#-A*rPqa*$SfPqB6tbZt z?k&9h$IuETW)}c?fI_E$%n3f?tK696j0n~CKz6e%VasBnw7U|-Bb2rnpS-(pGt)HV z8=*?2nWnc%5J3YKkd1PMM9>9IryBs{(wl8}GDOM> zj2s3jkOfb(zNzd#X>A`$;MO)uBMQNY$T;Dvm%O-`h?~xhUA|yS z<3CaKs}?$}lY-9a41?|fGsnFWqMExUVj6s?=q&HU$MS%nk{E%_NiEEF#4sCsoDTJn z?=15x`N*iuK|BTnv8uB)mNU6G4#?x2;~<`x#Y(4lph~5drt_F(i*qb-sXK{g{b(~J zwypcfb{ze~*0B;+W(hUPA+Q5CbLdA(hJ8jE3M{7BvJ;S_B;v2xJJ`wAR=KopB6ZwW z-NKEz&m-%af<;JSUWYu5jmvuhT=mwa2)Wp(PnCw)69K!^Ur>9?gESF&N;;up0-x}$ zqeYlXvc8&{H8O^rA;SGTv3yvFk+C33M~ zgWnX`q!$)xAxRyMFy*)>+as-3w|kiHaVpF*a(-Sw^~md1?r!|ROmfS*BgW)ARQ_~J zeF8f^Zi7w0hR*>Ejh~%?-N(Pusoz?KwP|-r91cJjA2ScHYMLv?R+ZV-G;x!;h;}&o zbf+$$^TdWY#G6OYf-;{>(oL;VTj_C@(}YGMGb~Y$l?#BpKOnAl!$r$c>)qA^DlHji5e5`%JjD9sFf;(Ny9?+wzoSvsAlU1U! z3%98PYBQ8yvpjxb8E-K$ob~r6u7Jx7#fvktf@262WYv8}E*>|zD#Q$ugl+m#Bv3^W ziaUpGpn^a-Vf8gK)nD{4Tif*`n^KGHVJ;Xd1M+7(v*-b(hTg6QtSc_OD<&k2Lh8tI6e28j=GJ6ywQECDEVYpI~;&j zfo^}#O0A|zCY^68Ozz4YnAaPC9fut$MZQq7xpoU^@5?f=#xc4ONGGoJahTf%KKc_ zDHnH4(n@(`$>cV+UbxTE7_%$chl!jh0C)7Ln@Ec8$(DO{^C$U>84GM9r!*J1j`gHe zf<4KAJiJLGk5ilxQITwL53{oMDLX-0C$F^!1AQoDKNG=v=wVakAeXJG0y&`nOh)`T|dC%fHm8ytYUh)=8rT?R5e?(;Ba z(#v@YNgMfbt0HY}*<;^4@lu_Nvm2%~TC6ZQoLif6a=bZge>$}G&-R7ebQH=mj?c8? zwnb62wbSganrp!dx{@1sAiMLA@+!o7FqU?i6?cR#$VPFI#yzNV=s2#Vq97!a1!E&N z9h5l&LOb*RHBwzUwH=EbjUSTRpBN`O?~qMgw2~bv%!wnBSRXK#V14)+gWkM(|ob>NRN2xn`tMf-AGQ_(>wkfr@p5v{agQ~hfze9qmu2mb)AP@6cQ zCFDn#qh}^UMtTr=s4eugxw%#-@waAN;kfBj-XWR|o?7iz+E=LuwL92*lHN>ajH;=L zkPsL9zVyY`CGwlikOYN!Bp!NDuIO1=mSK!x*8``mMQw0pSpbAb7#%vU1rfWtLY0-9 zC%3seg8u*ts9nUy#Xkd@PqCszix-&0MoS!?IrTm22#ww3iqW)xXHW|U<7o$=re8sG zE&d=|SYT`t4tYKBL89FXUB_KP1*y0F`k=rK>z}W^O7Q;xXg<-jAoU+$Rb`>jtK9T@6w}(R*qSWQ9z|}kfWgY8KtmT%aw-RqlFGi%A*APVDzP> z?pC`4glG#(GeWWe+f|5Ce;&M2TfARra}?q?i{*|*9S5Q8YIt$2#fK6D9!oCGgV!GQ z440TiMTut4NdZ7_sm)f6X!Rn_`s_^halFwwNMn^g@h68riTczDa`Q<$Gf24rKO5Hr z(A2U@(pnwcBiz6M>cel~Drh0vl1b(xDdAC<0DI6o6{EHhSRq$*0fCQWVg85EQK(;~ z<=R{P&hWxKz`t~7rb*zMifL{xuU<0@PYKC+Ng#lD092R4I~zugpl04fE*SIp^`{xO z?h=Yh#FqDpsDsLyS&D7m5W3)Ys3L2%vQg!t+Xo?&konIXaZXj1=Sx;tTt)n7P6+y( z=9_7%wXCtjCA;kaADb>y>DH8_uW(7)#ow7siRA$N50SaYVNge7aLUPLnAuuV2W|TJ#+qjYO-m=LejR)aU`*WxL1Awq8mgmRNT{H;t+Z zWx?a~rrqi*a_nJH8~u3140Jw;fxx``xs?4*t5 zkoE+5ex&C#{iAvdku5~CzBabE4I9YtOhH);xkK%f%GG7Qms3)(z+;hyRb%AnS80YO#?oxY=iz@^Qt?iNXGMQLMb)5&pf7n+i;*I7uAW2xwAE*1;xLH2lU zgpr&oY$!+2a(^1RZv~6kqbvyuMlj+qQHFcxsXoS%OLEsC;zf~ED9Hyh0qfg7^m}b? z9?L@;QH^7@f(wXdNrPl6hhhotNdBUPGF#n9uN%eX;CYb~g5LN8B-Wk%yml8V#4Am4 z^Z9wf^*s80DhaP|WV@Q-9^Mp*0d!Nm9DAI8m0s0a#QQgUlr3!{)US@{tW?0+!3^&( z^(2vkD%)POJnX{Be5M&i8$n#-X*oRoDfd$(ae0>wBecM6NOQe&--DiNN7WsCSwI5#2aXRz;D9HS3h2Ps}jA$_Nyhkc@nD+oH;o-&Ri3LOqOMN z@hnR$%!6r?GlQQ~ikkA&S?xmK4FkJ z^y!XxrmmvW#TX9rn}*?;M?uao4nO^MaK{7|Ge-rv#L2gN5WIKJN9j@8UE3wP*|ac9 z(czJk7(@Qi=ku)nqp@6wji*byxspgM{EeI{FFE>ls`nwD3v@`JiaS%Cjxn@$Do0aR z*23aO@)#-wK5i00ljt)}aRM$bCIljbi2*)Y>%s4e&qcYfp)bnDx*Yp8ic%K(kBsZi*B+uo{M zYcs%QXcAaZ0949_iw^h#mdeN*&DRmjD-n<&L{*>>ix)jREZEGdOcE;vs1~z9KKt9=~#%;A78Q5al<`>*loB`?wHFD`%a;#S3 zV9SMK10wr+=kV=W-)a|AOtU|e9Ahl3a$BMKeJO4-O)mEnCB&BSp>gs%z6lt|Cp>yo zntafvp!32vwhU!U23W`Uv(LRm-XFZUVCrqv5jX8WDUf=fTC<|Z9H7e3?6<)aF(Yw4 zfKk5VdTcQ0mvN-bEt(kivhETuPf`!HRb5{CDY79V` zUy{2BWj{`pMih}XHMn^+9{fqo7lqgUBMCVfPz8e zpc(I0?qf@vnM{ocg>a36R53krGuEQlAc7`}SYnn$jRK;xGjr?osB57~>VAt$KAmBu zSiw9Z;#-AL6mm)Ah@(6ZyN@Rv59d{*@NSc-!kU3Pm9#L*O2W59Lm>oh3<=K!bDk=u zx2%@XuOibS`(3LLkYC+fqr~{mRXYGN>sr1YivI1;YB4%nTiS;6Aw>y}Hv+qf-H>{8 zuL@kzk1}@oozb&)x8Ol0n%ah;s7rGM@&4f&84~erq79#wLB>gAfs>I{yc48px7s$V zJ=Lk2;LRdW{+?XIR33go!R^5Qb$;H`-Yp6_p4(HJ)G=uc<&eg?>H#DX(DkO->9*F_ zY;5L%>~5m-HnjWUjC#1;>JLywPd~cV#^b7HE%(GYblW4g+F31OayLw8X4=4HWPy+| z&u}UmO&-N!bXg#}zSKg=43SMFQNRc!02rOb3excxi@)IIg(3`9(!5m%sK za&i9v)~eSd{t|r_`t}`CaTU1%5-ASdyk&*}B}mV6TSh5GHKO^Mb6vFcIZqyFpJcqX zoBKf9MjOgMW>CTN$Yu;aQ<2nk^{e_ysR`4|`kw;VTdiqh7E z7awS|j%bqZ=GaXNPK?4+vjM{H!t!|iYd6E*FS#}_==V)&ai|zPxT1(g%aA#Z%CILs zhqqLC3H1Dqn{A6n^7xpQ@-t)RATB3Nbe{Hu|hcO6IpcOKnySl%e{p0BC+a@shq zEp*7PB{8s;)vgvrT>OA+$<7G}^{$F_9KI_ze((MX&r&KY-Pq0l0E9&wTDFo)-D>f4 z^(Yw0Jh2%F=L8Q^T?M`TiK@IeFx;)=Yaq60pa_mQD!(zwKc#awF>AJ(ir8BCg4!8n z`CV07qf)|yqH+imq$p5tegAh?jp3|+E{rz5B9T2!-2?){05 z`YRY(g4*i$(nEa(%-4uaqS7W9M+ZEd^XZ&%R>OE?uC(Ek-zfV$r)sda2Y7v(S20Cby(q>2H8Pw&H14D~~SN+9Y|$maOdA z3Ni`rS{7a@)ioayeT{7)mKL`rGi!9r5>^22b}zSp4LaY$xA$^9(AsIYH*v$}zWa5a zIbFEjoVGycw-r#lG`e4RUp>NJ{=$F4xR=AathZhr)+9rye(L8>iIzbd<0os8li!?- zdenNK#C><+)}MIu#Vf752;eRl5T}kDwKh{N z?TV;HbKUKwf>M0GXF=eLCf9sDaQd>?#b)Y_mz1>ECYMt!OcQ^xk59@O83g92%J&rMq)vJ9P9}1(i2#*@e z=0B1In-nO)`Hv^9T(k|T=@%N7u|0*>pK}h?4!%^u0U;5#X9GB+nmoVD2dGOg`y!8i>T8i}rcqB4csJ2pfWq{Y^t8jdQI-qU)2~*uiaqZ5!G%xf#JM0mnGWAC*aM<;!;3 zO{_a(YkZRM29Oo%BVo|=!9KKHSSFiuX=y&0dw3!N-g!Rx!Q2tuPBIr66{lM-mw#PM z{QmyL9~5t`{0pqWD_pybQKF=A7G&$tDwlR`=bgUP))x1lq2fV(X5KBCX1-|oS znPX*uUx}x6P>e{HY4VPhSzEVa& zZMYzgI+5PF^KE;t_^RR~d3`0F+-BkDxy8D=AnAn|=M}Gg;mu21)1)T(Be_;7zIO_< zDvX8wIOesFhcwZpSli96Tj`pzsEf*LgFUREj(>;cC-kdT99wPcw%Zx%>9J^t}L4B#I0xuVxK zzZcwglF`4&sbio|ddFpjrk87LgDkS$t4PcTJChkcm3sF2=HkkG;KZQDG2 ze-KbX#~$@GZ++mad#hRG(OP+*5=K$ZPw{meb5787ORYmmTL|C7%LSP?O&M8MX%&CJ zksmf0zJpmv?jW(ew{;ne+FKZ!QaYm+<~9iig6Q;nXf} zW4X7Q3pbIZ5=&?#mNT~i78uALfC0r%Hk`?A{d~*i*Ok4@%N=s-OVgK5(>#M_Nr)Dl z7nP6AoCwdiV8p`E zg(P(x@W6HEsCeac{{Rqbi4CmCBe<1}?$S7D*bZ2AJ8o$PdQ+{58}D@Yn!W?OQq%Ck0GBd#(}IqWlv&+$c_rmb`&i%z+=y^L@BN?d;O zbz(>WaKv$rIjm_ertsX8O=)dAUR~`&u?wP*Gq{oo0|&9K-wtZgL`vSwWR~|586q1< zz`#&Q+)Z=x^1gKL{{XIr+}B*ML|oJ+xra!$xq@4LJ#Hlm>A03wBLTCX4trxYn=gp< zJtE>*FRv_a=W~fCmMH@Q$ETp+W3j7VD~=xxSPOWrOj4|o$f1E^6^;WpeEll8y0pCT zYOU4v)~|I9$P$>)kthcsF&O6_r?pHZt#+=P{<;+|WukU}*O_<2`nI2Nmp1oSaRH@ zU>s#fOp{nwJ}okpTW_+gUoynYxXZZqP(T1@)`+QVWw=U8%I{(Nj8^Y znp=RWAp?+CwtZ^d)bHXI2)3lG62V2Qz7Iy!6$!J=bn8laO)Qk+rn&FF4@?hECpcd4miolADv<%L8QTOx|NQh zHO#IWC{|2{d}9EP2OYZAm~<^mQ@V;9J1DK~ZR0DME&=k}A8?qWP;lL14{#Cs-kom8Tp4^YJGM%tSk@qWUq0$*f#i4RwN+u4hJA) za7aAS7^v;9Tk6QA$q7IOqmAIOm$tLN8fu{d$qk*4vuaJ}5WZ9@~|f?vYfFDiB$Qa2t-_PHPv& z+VuLZg{|gpEI!d9#SObAJm3ipk_P1m9qLrGmenJk-b+{(0?YQ#H*AUzJ@`JE6nL9Y zpG}hAP?J%%yNQ(&6m{wtWwVU?9Mr}zQqXdgoJlWq%bgD18_A=B+S!yZkf5{7Nf;yp z$<0^Pd^IYuYe4Gk+k>hgDE)T~4_{ttd);2*`ZT}xJ zY2dk7B%DYjjn+ayiH9KIcBCS{{X8FQg{Bp6JqYl)!?1u(^h6@2=O{)-4Ad#V*;^luH@6T z8KI6z{E+7n#HpCdjFl(z>}uwZuBNR6lX*Ra*0Ly9nNSu3s`1nwXw!UK7l|JB-qtjR zYevlSS_LvX6M>9^LG{f~D_Sx0C#od=$+3Ne#a0GIjh&M$D0B{FRo&Bobk9TQrVLRJuV(R^v zINcbJcmtvCN4TR#l$l)5V=Cq)(LzEk;9K$g(9IcXST`qX^-<0$%V-u_o{c5^cFCn) z*oG0PU}U(!<9eRN^s1T$wHCdtPYkyI0A`rv25FhYW3WBB^r$>dqAT0A-Qop_pK67< zEMurTD|^cXw=P+e+qY4%TMR_g8&2bj$6 zuLqm~^ACQwqEXScq7H4ZsUq25YIhfKhqsT)c1a9iA~?=>0CSEiPqErvn?}2m(Gu1s zAQH>SVSsjmGwt4|y1H8v739|~Gfxp$+Cqbla-~4W9=^3#MG%m;Xj&*Qh%mz<5J){q zY~%A3x@n;OMDa9mi+eV*K{e3Md=3 zjC-AMYBEN%%um{+0njAU)+pVqILT{3xHnlUvm2mPou)sjHQ z+XdieRuU7@a7g;`>sDInZ8W)N5^4VcYTu79<_{V43Oe&vMWj~}O7liUD!y4HIc3HO zV}p@Kw_yi|?BYhfFZTBza?p}6IRKN9^{siG>}Kt2l_VO4tkE+ha9lKd;vny4><3IQ zZV#ZL+`|anJckQ1q1v9r`~51#j1OmQR{A)9 zaT=^~#UW!MCzi<{&acI-wWX-Eoiz1^LFJ({Zr{%;0OxV4FbU$F<XEV<{>nYnDn{8lc^AQZe6z)|b`lBWzcrkfRvKheTSX;=lFm2zQ!!~t2Y|Ra0++Prj-kra(U9C& zhLRGu+IGlP0V7C(*dIVW^HbgFg8WA%rO|ldU94P&!S(==R3V9{ww62OwJ3}M+6!$t z&NJM86zhv?4I1K9wze``$@3k*Dn!Gaf;s2V)$7n#T}d@dFE$le*;PO>=gbUz%w!YJ zFl#qYg7K0_4ADn*8|^5}59CI8{A+ht((M~bibiIL$QDSHsW}7Jo=3l>W|Xy9r}K<# z^N^_PjmO^up{k7ZB2mBU!T zNZ9#p0DzVXvlb`IJ@dyot9LpSV@@Q+8>~d_m0f{j*b!TEIN3I1q^{B^!F4p6Q5(UC zG2oCk{vB#zVl5&`npoU}^G2#pbKlaZO$zSj$V(=faRgumcRVgQ0D?~yJ@h2O3N@R2 zz~!TGHihne>b;_SF>*8nK`f0j6ATQyV^bhINcA0YpK7d%6Hr-ZVda6A0Bz5xsdW20 zS9FtPzEX_KhXgUlV^*foEiSK5klTks1_2)Yo<(QQmWqR#+Rh6sS?JIBg2kM1Xf>QYNofQ3u4nKRgoAfeCol;@6)fX zW9=6;k*_PaF`s((v)ThRCPs%03k}Kv?hbLVKNVjAzM{BVxZDiACieQfMx6HB( zU~&0%sFK$1d#U4ZFKmRd-gCe4sdYU`pG;Osq%3ij82NsK9DWo>3&$)HO9aw9%jJa( z4*vkctC`yDNh{e9N@SANM3VU>I9U3zAK_A3&mfa+s@upT7%t26Hy!HdnGTydj^j>` z&n!t2?#hAKcKj-9ZAq>*9k5$N6mpDgWn=^Ej^d%uO@oz`BD%A(Z{NlxXF_+QGVO0( zm1n}bIJpwsynndbLMt9~k4m|F0k#V71(W4Ulnacmdi2RP3fnR&c>Bk(H#76vtN_A503VrbR3^(KneT z#^Or}cvkviv|!e)()0J4c=JczA%8AMdd5xqn?WL7G9Bx*y8uoY9^E}_UMqdkZEO|? z8OQ*wXW85>)3K6C6$=8X*b28}2|^2RVYrap2jN_`8PN-tVI7E#M?08|ij{4IQLD#? z>M$38X(GBZsd(}@#tUckrzGss<%+V700*z@Sh+N4wG!58c7d1M(`jG`KD8@CQdC!0 z+Iuqt&%P_HuW`t&JXSWQ{#GCeXod!IA+(ii!5?mKZ$yR&F+ zJm^B8Tn17G8}X+JQ6mfqWjP@96q2M@D86eeBIE_#)~YghS2LE@Bavf7GF(RFk%Fo7 z2K*{3DB9X%_I7xcxyyCOu=S~;xsGW7g`&b^zH?2ID4yVXlFY16@HPc%pGIRV?uleq zzksZ$`%^EGjDzpZHduV^Jp?-di1E80H|0^yBpQ1#jbz#n&AEs5HCA0r-fl55NYwD4 zsmP}ox3yeJeY$zzlB;L&w;3^vQp#9 zSkw|Z$ldx>a$U!Ij?R%FP8ek8`Bh0m8;rcbKpi3rfni8o6##F4x$n}6t|knje3OBeDnTZ*q|~Igk7P|79-TOEew3Ee zGhAQ`SY*aa2#Znd`iHgI6Z!F5IVK~xoUwfL_U%%^GTb8`(vHRzF;5%2JOCs1B#A0S~BBeD-4XP zZ9kP!N#T}25J-o<+<}@W@?vFHl0r$zUBu_#HBpY1WXewWRxPCKBM;ul6^9s%9lo_E zpSBfLfo2W-QUzRAed|XR+D6h9Rp%M!^QcYhPT2}ozUtut{OPD)Q$BYamL@^vBq;(b zhB+#8_|$2A3@PNXWh~z|*nubWs_zkI^5SA!_<J(Y344ziW6cM2hnO;0=YCu|I&RCcSrv7?l~u3r4_zKdAI z9&!E@*j-@;SkR1~f!^N~bjh(sVdYYs5_EEPXWRbZngn{_tq75WWW)YE|1_&AaYIMDhSmZ`_^55oQ z4*YRTXM0?6_m!Kqi6WBac0})&W5IF3ACGF5H(A&!IOLHqM$YekDx*rN63uQVnPVS# zS|@Fv~H1h>7tp@4ZPCC`2j?k$DyiPiVIKOmsrWb4Zo&O zT=%Hf+G*!49tlD77Gcxd2AOdFUC;`tAQ;>ka(@aV6rSNKjjd54-n?+es%5)y`TO82 z4ExjWlWc^A+b8gb>bdPvT-~xv6L*aF}WHrg>Y1;!RD)Kk{M!&qWKag z3_%zKR2G?HI376KMUrGlSnXa;@Oph~D^a+fIatFbx}y!wlPNEsZ^Et5uSIQe7FhO% z8`amT{3$L-)E&0kyDV#*xAPRaZMj?Q340aIke_l0W5Du?bSJ+Y(=|(@rk~u$B+<+V z?v(T%xIHRy0)3ekLm1PjUNQCWOL`2l$23d()m&jlS%=s9RJ&ZL-Rf7G`r_X2&5dAn zWE)hm3{ScCsAus*+gvTR>75;k!?KOM4spjKrJCXkE5YU~d4Pe#3=!%_YMSn2F~qUV zW5H3C=M+oOrDQkC65E4o9Ly#Ahaj%g+*5D$C1&!%z|sM=$X}dbbvf-)#4|dWm`84d z2&u+CwG1=cokgQ9xwdU%1*Nd8o2NRv6ib zmd%iGeTQFKTjoeVaHV{g!DVGEbJIT6RkYc3^pA3q@57aga4Vn8RKI&uMWeGbmt31q zo=b_8tWf>!$94(mK?9{rZL7z36q89Im&{@1;fUH#zZ_K8x_yP_<(l4AE<)`fs9-u1 z&ov$XjS4d2M@uvSgjj|F0OvX8fuvQ`t{~PQb6wqA`Db<#Kb8Lg9^#`GuzAfi1k55| zEkn5leSfW6`$fI9k*tsAnFiGoNEH49rB{%ww)aVJ*64~tE&yLI-#yPgsi)8_*rh94 zT1K)u&kTsc*%#*kXB{eA?QRIxHFda^BYc--B&f$;KDAQH*`&RYrPNy@0bJmtHh3KW z0G^b`SZ*%v;#PSiZK)x5ARan~&IseBPukSBt}_1sRk05m!F6WSMU)Y@2R{C_924p{ zS2oAXh8Y;`Y;GX+6Uq|VcQ=xFV^JE8W`Mm!Chd%XJ zzNBrT8NQoJ)FOuRSkWYQ+vcbR^Yp2w*JQbxK)!Slr^~rWAaTY9d8j3hElM~fxOJFr zI~qg0G4}2VsIPRG=hQ~+`{P~98f5XFyzx(%BN9n9OPfm>3^x*7EbEps5E?P*x89}j zezdJAwK53hRNfJovk~jm@M?wrr+03KIPJsC&4|yNg35awRs9Oi=2=4AMIF0FgcB5l zGM`^iD00wztgs&5^H7jI%!q*DRms}psb8*YwZt~CUr8h);H-qInAp0ZBcH>qN~-eA zj3N`Yv!9TTkB)gB$E`(iZ@L2%IuFjKftt%pb{8U8qc|I}xcZaLX2m15(&lTHR|E_%Tp#eE zO8o~Y*t;IE*Vp1HT6<6;;1nYxp8e`gHDi|KvGSX2m{#t`(C58mtedS2lS$=?9Q=>L zJ-;t%ba4H;`Zt2rB8D_4ag!`P@k8_)(9pWpX18PILmKWS6gW6zp4Cd~#7Aix2~}=G zmQ|3P6X;v8sjcl_?F+Scq-P+pVw{E%X@#qTW{6L}9X9Y0iCW%#!bzZ4sEj!m5*yeQ{N+<+q)SZ;hR@bBy5n zQ>`Jz)Sg|;&mqGFQZTrqnUl&}5{YI=+3<>YB8>htkgFS=(i|vmB|--sffX80B0%f5 zHrmH_!`mHw%|$f9qT~&L0p*N*-t@VedKJrcsV1tXc*IdY*3bO3yN|uWjFrOY zt}AvO7nkLWk1@G#n*;(mt9Lgx(!?h$s>*h$bm~1TJ`2w}a};PGn{gy#KQHpBq=I{k z5O=G}&5*qnMtjnhwi=DKLY+WIvPotI-2A&cdQ^UBw1`Z`Nh6Vt_799N&9i4*e=oRD#OVV#HKyS{dO=U5$#c;Wh=3U<||VyYWrqx za85z?0;)|b+cR7uwZ=dNazA#Y;I}9FRkwv9)k8|mOAX2iBX8kRT1N!eQb#0+N|NfO zupD}GSKag>Scu3F-Up(&UclC=VtEe|P{3&ln(ZY1*yo5~s{<{$i@9@Pq6JIQrA2yqL)(N<%8B z#>OWH-_o_$LOHA@lpkb_viWi{zuaZZFFi6b$Kh5cxBl3PjEJR18{{0PY?^hmTgHvQ zA1)hiKJyb$M|{!CvMAo%P6%LBHc!^2S!{=9_ZAxoSVwOj8WGpc7&sjdttf;@C0P8p z-=-x41CMUB*SwP3d&@j>NbirAow)i|V#METl6SX(j^GQ0AoTSA01A~SaFRu>FHD{{ znmaEhOL<&K?Y}4JeFkZ5W{ytK3Bxar?*RT#mQ^=kcW0)+#Ss5?Wlux`O$vvCj&K?Z6;asRrzr*zZ02)e5s5Nbh=j|67 zT#`dDf@oL-M`5*xuNlaxBQfd`#kyBn@wM0z2_yTb(zLGblJm?d<|wyZ3`dp5KT}kv zn&Vfql0QB_v<l&%(i2<{`gxxQcCJ6kZv1x$(g_NBgv+1(>V{{SpVLpy`W z_aok^L8r{ur^_~vC>UJ3um|v~rqU~fVYV}HfCpAMR`vpyUgbBTEzQlvwX_WGh8{$x zJFpLMJN`9I?2^M%7Z6O!lW;O{t)7CG8%Kh7%t)?40EXPGG1!0gsWmC)mTiiekB%ZN zrAB(>bf>Uyv2rsobz9^>vmj=5e4LK{y=nKYZzLvJQ)_|Do@VX9bR6+e-(Rh*tZOyA z!gAhHymDuErhTd(>|1y&nfJ*g@{_qvTWX(9*w3v`Ghxb+ZLT4C7Fa?m5HMd1A02T{ z)En)HfXEgx{4s){`=4r|YosENHErZ%kL3tw+CI3>+L2|to)}PBMHogqfs=DE2f3lX z;bn3gd6_jIEuv^)Ku?;bfpO{Ar953SU8M0V!18>hS;KC}PkuS5wOgw_PU0(hlV;L# zxW_%Q*!~r8`8L)8HzVMH0{#C0&$cMKz0mdQJ5!e7EycTr%>Mv3QF6*V=QUc+;Az(J zk!=bm-NxCZ}{A~0KpWP(v*6i?t{K1xYI>s3NJ&X!6N(1Zi&^SQ2u>=Jf-)Gy>7;J|J!)2h3%j z6TLz?!wx#}Rdrh>Ga01bCSowfv(V@8sO{|B+z9R&RydUN8nWXZy*)b9&Zlm~GhAH< zlZ~pw<{p4!tt7|SL4nclRKa^{fMtQhWaM={h7Aibn#Ley+$C%fB*N#{IpU-qOc6x@ zfmN;>E4+tozNV*@o*TX+jzb;_rS zkAA|kSHwCsz_y93FJQ|SRyp$af_FLEFnw`T-@|#~yZG%SFR0pEmPD7!OIuj-Mgcg> z9@)<|UsAEwbZf|_YnCcpKEU2&QN_;S7bB0Ze+uv;80_BuXMNr8V*QoK)bz!Y3%l!E zDGt*txsE9lITC!sI47VViLQ5EGRo_F3)t$bZ77VTvT&m(t~eRz+OF$YR+rJlFD7+^ z1+1(jUFJ;W{J;V+p84%k_&Vm-M6uK)hgGq+Hwt1F=y&a99gf_L^VsyJz14Ju@o3pb z?s)uGi27`La!dvDMY3u$zAeKOlky}7bq-esJKR~txH*faD#l}dYy zyNf5an@P8^OJ+&!uMmX~h36*#@_(If=-R%QtLc`~3)i@cs?4j-(xV5bP7Qf~ zi9B1bTlj-gvx81c&kxHna3umZ3`p9+w`Gq6?fojK#m-GF8ty8RQAxdT*w>rIdasHg zyNPiGW>ths_CkUqju{T@vB^2=KRUp;_@&}M1Ia$0G}>+b#K6R|No2xB`!g)Cs}JH}*cs=KdcnQDn?}@a zWS-+kibF2zdnm9_;FSu;d0yb)8q%@WG|v>?T`YQf%^WiXFT~{?_pY*N83d$Jorw$^>@k zfnkiFm=m}jPri8RSMUBC#C7JH+WyWvg<@VSi;T<*jNwCPVf5Qv&xABsR`*hCnZC-o z9#IyC-bI)bfDUkR(p=KDz0ZD9*FgtasmAUN~Z95Yi z+U;NFa{eXI7sUP`)GT4tbZe)$WM>jvpR@wM!?{4?{{XL9M?jCldfd@!Q_F7la$+AY z#z}44Bjy0-48#(7#w)(iG_5vmYU&GHtrqBC03?=q^C{;9?jJA!X9E>gJSudr5nfqY z$)l#9Z77jrnPztc4p;`^>uA}9czD@(I9H_?*mY{Ch*0zf%t z0b3a3JmRD9{{V&0hGS*Au+%K>o;D%g<~+P?FiFF4(>*)Xcis$=dF8mXj?(_r+%cMT zv0pI?oSmg{j(Fs8SG9dk&TUS8Qs+w4A^SWi*DB8uj!<}S;Ur@N>&07oa>eNW@Uy+z zIm4{$9vYcjQ-_C=$~6)uX{1RR zV>s#nBb@q4~GM7leFmC5B@{Pq6;GI+it$ExVpddvq_ynA^9$i~?Uuv}wt>OY3#~5e?YA1s_>WDnkx?z9xnVqj^x;PxyWON=LqaVih9yQgi?5)vOOCutzVo2kTcgV=d&f(M2tZ8~Dh;Ov$-uB>LJorg% zE+r2imyv_D7!W}RlUp|)Ig;|^#|DaY){z-ue={?OUP}oG>Gc&#&Sir^R=Tm&H0g}R zC!HlF-vc3zPXzm8Iji=PaZ%+M<^>qe*e7LuRt9o^_m7V{8));IY^;r#00>eWmHX8S^ZlYvC+G3{vfs zmOXN#k^$$F$E|VxB=Fnl)(@y?_c~-(ig$SzE)b~dLgk6cIjpJFlX~cBC@8Mwi#>Nk z@V=Wqn{lD*5zl*_-fFWZK<8wPM_ii5@ipzcX>lUx{{ZL{pjgA<);Ip}1@pLPw+6Zm zF7i!(ONU9me+tJ85{YC|5=lrSIpwjO_2;#6{vo(~KNi{9PcnUmDZ?bTNH(!26M3X(}a+~Tt|{e85b4axnknlwvt z>_AJ_TaCo@Bes2dRnxO-X5^M!?n&#`uPl}x zDznq=udXhlhBsspt*k`GS3=jFyS2RW{XE@!6y0C9?qx7gCtd^M#`v-$H&VW`Qz zHj3g>7D%JxB$8C*0nk@3uXuM*i&2UQ=F+6Foy3vN45;b=Y~h?>gU&JRD^l}9hr`-S zz1%u>wwFg^Ik_^hZkbNw2dJzqA`L>+rjO+5pJnqmNP!qjaHMeKaK|3rlv8$YN#ED{ z=oLCeqf5k^RnuQv%V~H~bo*yb@gfw6lgJI6{$n+LZX?zFKMmx^#8%Q+V8eM2l8==< z7d?9Ps5L8HR?AVgc(k28^uh!rq+&F47;l`Mb>QcUui`u1PWIkATb(>zKpkU9qL<5w zfgRriDoNus;_i}m{=crIwQJauQhEGbB9`Vm%Zu&hJn1A-bJ2I?;O8Xq-n1rj;muUR ziLPX8aH1u+GAv4ZmMBkg(2q)e_kr$*hiu(e%SOGAGR5aIx;u2(I^+}F=cQ=ccwbQQ z6cg%3dpmtg%1Gur*+@(c#0A3b>&ISeHzmFFDlvVvGCUb`{ht)F$8NBQ%VqrOWqFvM z076Db_*X%%YKtY?UdLlRo=h(Cutv?xV}#lX3PwJ)L3N8;i`2Zk)GajuW*QrISY+Gi zM<=^C7n*-p1S zn@D3QLlSezZlk%YchTw|Cyx3VE&j(1scFA=Bw+K(mLalvx^(+cJk{NfC~6#CINos!3Y^0C(Of-uCtdzkKG@`9|eAdtBv0t%CYLC#w>)UwNar^dJXmDIxKP>S$w+b-?^BL@lq`c{3e zo^I3Zx7Hd;HKAb`Mk>zOIXF1T#yB+&pzmcf+0T5dV{qzi<6qsVWx>M*%XIuJ346&W zzxA=KC1%>#>vbDzeQ{*8wvtPy(;-<4t8EeUfI%B_eMLuozSLW3>m+_uu@s%-W&PV9 z;~<^hnC7u%4@aHO1OscBv^ zj`HN)NY-KrfJs1@pD6S4#sJSJ8RCz5>a|~=+$GAlc7NA$wTd<0i7hUzL@>=8{hno% zaUjM|-RC2Y2(>5l>Ls++w-`;4lBBS} z&N)-Zd{JkomAXPU&r8!7TF&ch za7$d@Io%+3VTjdxk;h)uqb%1KF_zOUttM+wJozP*0VzFlzMVPkT>k)zV!zQWW1CVB zb!gYcR!4D(6V#4AYOyW;pL=T+{+5?5b3BP`0>!YtI=9c)1M{kJyi>jZ0IsB|T5Vdy zdZo^7CBA!$J5+K>wK92$8{-)qbvPKor%A3_Y5D{JG(T;3U8t;2mU40qa@~98t;wf( z7S}C2P^?i-7;m;!Y%#!5z#jSQRbbU$O4Dv;wi;w!T%tH;W0xtBxRcwQ@!pm0mY38e zqt)24sOfNO(XmZJJDZslNh+B*>Cl`LkH?JDO^miMIyRh_(8|JffL@+}edER#Bz-Ej zp&jfu7GlxtrD>eW8^r>~^K-~2kXIh`mpVqTZ*sq6@@>I#97iZcE1vo8e!qoPu9es; zE7=mmav<>7nptCt?&ZLW)wbm$-P8`{dF$4nr0LV$qMedjBAF$MO_>)QVD!c~^{PH1 zwrjaWGih%;kh+$*AH0xcWsX;m&Yu*sYPWABI>pph_R(!fCWtqf7qB3E8ajG|m7c`5 zQw>VeJvvC>jN2AMl12o~Nf>449V**s3#40^<(hVa-;6fZV5fj^M?RcaI~R)HE3 zSYk^*v#>s6DwYg-ox>df{HqVdFtzNlwT-mP3%FIBNH*;xju$yUPfFFf@dVe21kzch z#DtymGKCI>cI0ixCp6tgGM2HWoq&$sc}R>wpD-U@nEwC@BHUX405EAwMfn$CxqSyu zjV`~`M;XJ*_l9~94}AXs4QA<Dbb;ZM|Onu}0ttGl<;wE=js zN5Kp;<}e-Db@k0sw6@gJI5(JJg;0R4fbtK1IOr;)9UD(pDLrk`8&)j#8sf!p@LCYN zf%?HS$Hvo%dZEjz@EKFP$B1&$*o-K>}&DuI>UeZ@0Q)lR8$ z@~k(J#IlrunN*$p@VFUH`NbBN=vG@5A=EzKs#{w##XZ%z4&H34te;-|3enWGZ94w| zP-Tfw+@tS&F>;H>SZ4rd=}W0-_BwX23AfPYTiF*5tphgg!{$5t_34^!v!&e2r@;o9 zA!(rA$pB0{w?@yf9<_eaHkx)Pm88>GF6$buouEC$&{}_JO(KPI(l0B4)pLw;e=4tO zbq%~xHM|zdBT0k~ima=SQF+gL%)8R1(sXr>>N!oy44ljvf{u9OBc9o(SjBNNDNQ!! z@ubI>C}8LhUPlB{_I6iJ;m>_6Oz!t^`9c=Dnt2&kAuC39uT#gd9@S?`wYV2kO*&ee zHTgtt%o#fj0x;iERSY`BQihJp%C}SH`b&a6Yfk3&O9!_C8-W4&Bux2^hmX25_~cYn zzur`Qx*Yk?t-jTFEw#0(M+qshEs1r0s@WZCKM;$56Gv+u<3|4gX86wh*YG~e5&}X3sKZQZ6X~#@vYnyk8c4K@;e$$_GoRRI#ILli- z`UJFBUow^Dyb|8DYj3t05IRkg!ZLUn$?1>En|zFx5!=AtUBp>2v#>-BfzC#FJ*wuR z4Ys3acq?S#O?3EejHku|9E<-!Y zaTIbz3fyJmd7~0JUOw(l0Tlg4{{Tg`jbn}|X6M-zOukMN4I_-AG<3V~trD8DM;csO@gTy$R54=RK7>p zyylW7FAykDTjy`72A->9Y}ZmjJc8qCRfS)1QU3OSl|!S&ZFeaUU*0_1OStnu9Xbs6 zr|liDVMZ%!j?%Rha?u%lxToB~m=W`Ot~te5)0O0ut6Z6FLuO5dN`0q z%m4&I%C0(f9ca^axn56VX;=G38Rn7g(&k*pwSg$7{hW8I-W}2;y3(cvVDn-hykjX` z5PKZ;#WUwvhAr802*jA*qR$T+VIKt z%rkJRv+p?WdQ;wUZo(h6+RUzb+~kz@_cc74y}VGmG^(+M3PdvoC_9cuYK4ZOYGM%E zPkA6xM%0OT{Anw-sPw*@maaVT%d~x|kYJUJvmqXt?M_sh^=4VF%pOvOZ#3=BMsa~s z$9s2g7&AKc_X%J$>YD9X-}dW`!nw^M}B}3WpV;ZHW*gNF8zp2L`k45R$69URH0HbYx&w zlE%=?fmr}i(DR@0tY@nRE#T5P`|}6~vD-6TIc>>ZhNyEUSwo3Wgx(z&M|r5(%+v5e>L{JlR4hHXL%NKWiDn|^FBC-AD) zmj-wh(UnOV6s}{f zyBEClK4Wc|jB>F@hR>*~YkER}EpD1dZ084YTFtP(1WlWn1V9tC$AkHbnKYP0N+Fu( ze1n$5Wl8j{lvH>9Ol2o67wBJmxSYG)+1w~jR7P;v^)$Ac)K^oJ99ooXj&e=_tou}Z zOV&h^>TQa5GbTYJ>rt-1C7s6RoTPl^Hf{VUuwA*cBd7sI+v@$b%rNWR$;3||F zS7dXh?fCRG;gtQM%x?gUoJMc~&*FHf(iq)jiJ7OGM!?%IPf$8lCDc+gkz*(;!Q6gQ zdk{M2q5E4-uPeri0oo2aA6|Ra#WOuEb5v>3B<4A-rd_;oCgvyDRe0{8L?kun*mkn# zh4-iixgE19kVPr!vmB}SsU*BxnbZqKW@RAlQO`a4QkOC+F@?)^nv_oyMGW%-oRya# z;*n)nGb&58?)hAN*!JS6GTYp^-)}m956XuF^`Rcp8Ma3}(MYENvJwyUsEb|AB^hkh zk$&P|va+@(mE<3IYRwYuqxu&zoq>r;k3FCRr;5~UYPf>ZAIQ)sDjaw!_-!Wn6G0@aD zx32R@9b}RfU*e4J2AY>KT51kkE1WhCN&R@Hq}vZ-qOa7y%xa}vh2sFTa6NicgsjTQ zjI0OofJkp@too6;bs~4%q+k(}2lA&2%YYtIh^k2#W4C|dRq)4CJ2}flSQhO)&~||A z#sTQL9^SP)j4dN7RR-go%6bfRswIV~9%P8pI_D@!3+;?mJFxF+SwW1k0UehJeMhZl z&Y7pNaWO?&{cAoXRCE$HKp7<9kHVJTOJdEq z0>!Wn8|EK@sBi8x_G`YTgHIaD!C8vGDnotKOnpt@Tr+u!r*76$fmL9)l4K?zV^Y{4 zjP1w0E#1orl*u$oILKAwH1tDU&qm8)<~ev^*ioF|l{u)Ql1bor;dqn|TLT#tUfx!c z27E?wkP48!z57%!M=6O1l-s21fx83h4P_}UjbTmhUGtg;iZDcA@^*~#*S!(mtCo#n z0H4CAx7HmIzjre^;I1*x=R?r~P3}%?VT}OWKqS9W{{VI+Q-J$(pU$l%^pPZN+g*Xj z18*Nn%WL~$p%sE7a>&^sPu8Hln%>#VG|_pu%C_u+J?lAnn#M1oxpMMC0gr1lo=Xgx zB$`jN2+%6NHv(4!HH!uPnNosvGh+iXlahU?jZrU_PqawNtMjG~39RjNO|~uEz013U z8Op9s#RL=U?NW_JpiS%~E=SCpH{!GP9YtV&^kot>gcFtIk7|}XxaPRnRNKe5aa^ug zp8oYuR8m$i%{0a(^0S6gbB()m(~k8<)67)!6V70q5%+^1P$~&l)$`Ban%A7C=mA z1ZVyQ&osH7#d594?`F2t8bxrim0ZU1V3W>sipYr(brW*yVnX#kV{RkZc0Sc|eGbb_ z%xoHInY_m=+1sALb{@i|+HSP4mbQ$$+zgPTIPX<`0V|XxVArK>q>Uq!=9hbnx2I83 z7!uAH?iH3xcOhOfnK`POmYX6-vuY`oUzhh_?;|{C9Ad3%I=ojA#IVIAg)pU8pzog5 zQF`bmv?*WeF&pWmPb9$VGLl9>&$UY=FREIVmPlMoGqyJ%dtlM4YI02i1E<3qV=D77 z#&OSnwA(F3bl72GZowlSSrLGuJoDeJE^8u`bsgc2Cf`j>pSp1rg}-=7$8MvFyw+>J z;RVD>(w~vT=cgmRWlt=3H!@qu?P#*MAb?A!ucj)srja#+vPe|MTzO$v%ze1y( z>$pm>nol}L0Wg^f_3iy?jQVI7k%qZTb_;?-4hDJvI2`^oL2Yvtyq3n|-at6~Jq(p~=mv{~8)D&N9(uEUJ}HA?%UbT6BEWb#W%Zc^Oi%YIm#@In5S8*jMP zURPp4U4#VMSJ&&BYBjLAkrK(6mieE|0YUG_rCE$b*6)zrKrS2(eFiE@myt%+=1YSj zM3N+9Bj$ajzJj8W_g?!vz9qv~q)!3&d^rB?Y-a#Wh7VQnlk%?x4}^FM`; zuca4AIawrbi(=@^&p6~ZM_%KKa!MqQJ=?eNa;Kl6stav%4cw!05T^vL2vbtqMiv*| zHb{CNgYuwjuR9j=0kn%93XA4p_%vP45%OGKlvFTBR{h@Xx z{o?{S1P!P0rkmJJEylxs&HJIfSNK?t2R#Y(t4RXKXne#H1(PwHfDJ|`NM~Q}useni z%4uBrk~R^HZokKaoO@D|=!X}j#1Z0YOlV4N$px}Ll;*#fn8U*(dt?KMyhZX zIsAF1C919SV6&D#b&1>cr|QGe3`t!?lH5lV2v5j6tyqTGMu=WqZyS_}I#qEDmgY^# z8I8DA$6s1}ahH-c*s=Lzdka zXvRhg!)AU*Czj{ap{bG^l(AKpou`IZ`LI2yC7TYiFomOIxGN5azbCam8!xx4g?`S_ zf%26g{(hBiO>Qn!_8ShF8PVQZ6sG1Z9J^$nUV2q~FD>KWBbGz*mMk;+R-{uH?ONVQ zP;DP7Cjl<#Bm&%7qO5<=C%z!ib z?56<+0qfSAB&`+l$M%(2z&uD)u05(XflD;j@+`%&3Y-w5+dSfhwz>(f#PaQub$!bd zDJ4M}$J4a~RB7X48+7h=hbe)#=~bhONg^SV5b4Lt!#MTktXau)vLG?87a$yik?Z*S zRLk-jS1QM;I!w}tjmt6e!3c5=ag(0ZqTpLx77-VcW5dQ3LXSi5S8pyJc|K-n#AJNj z4c^sW9ciOR^5KnuI3iKW_VlX0gxgWKS5U)Z1hP!OHcrEmtyKoIExIIYEYAtf10e+D zanEYI4cV20m4%@SUQB$1A3>Tgm-MKx>czadL)1oNfR?XkEdjJYA0 z9i!XVHD20D?stGAX&)GEy$4>O)YgsbjZWPoaUALfLGpbmHH5rvA$KU_cTT@bmRs1>ZBuN~$`r8A13BnVtt=KFXkxHR zsUt2xkv9H(^HKR4gsu`hsEbFP0Q3VY*VX z1SqZYDOW-X$8(yH*_m#hWxA7o0A|ORw09UhQrtmhEdFPkbX{-|ZQKiIzB5(q?XoA@ zT#rzJZZ-80ILWXpXQMKg5d2UWI>%jhX zB#r0E<^77@U8{)6af9^FH5zPRH&Z%Tr#A4-9JZ}+a5#%NA4A%ZTNXL{IT9Dlt{9L$ zoYk2jZ|wM`8f&wEv$y5;?NZuXW@%NeF%}N|k=OZ}Id1O5n#gPc50{y0RWKq67yNPJ9G4=JL z%S3@+a=bc~w#HSB(pJXRbO7faK+j5iQr$=(pU#XEx-bMp@#=Wv>r%?LdUVSx#SE7c zF2n;Y6@7DxbZ)R&F4#nN{HOSjemd1>5nV))Fpako z$iYZFae``jS|2hi8P`rI%On2ug^Xa~N8?s39DvCu6#?Q*BRycm+G}B@rzSEKP^>~@u<9HiHfMs*ZITYPa z(%)=}6}8C`Hs)Z%1CE_(658D-!H|Z)^AsSDu{<#r79806N4?W7u&miaCG zv*qjoK|8tW&rhvTvbJxSJeKlcZhQcnMtbKRDang#U$o5f7|fXc+lSAlDYbGhZJGD) ziKNnRZ0-ZIpITd zjP=2++3c>h?Ly|@$gxTgNU}?97~DX{Mh1I#>r!cImby%m&$8m>0e4xggM8<@gZG#Y znD5@cZp)Wb)VsNBRM51!H5HnBmCSH$^J3IYN~KPAg$ImtRD4&W_-^+=GJk1lOC(R` zn~4tgMJJrF@6=|rbi1o(TjzIOQz9E^Xx4ni97VhPx zg*=;kf#k!q@r>sj4t;4xQo7aXIVEDIqS|+cZ*<%HOQLl7W8H4{*6Q#~Ks&b_XB^}K z)YcZY<2i5dVRpLH08_d+r(8R!0F@*Tq;@#PbeH$~*N1ft9V}+k;j(C#&w@wg&8eKPXJNWFy{GGUwwlGhmo}j? zMy(Vcd5`RzkX!E@{uO89*MQ^kb*l?GO`LE#%wY4@D5r2kY<@G(BDu{Y!oO_Nw#jua zkh2x@ZY5BB1O7}h+wv4@%)5$f(v5l1_@|N#t0F?@-2S3WDI`{Sl zjehL9rLE2KDOl&7UvAJaIUHx(KJ|LHx9CRQe^QL!5Ol3>W|scySak^EDkCV63xYp{ z?p%LfYahfHxBe>8?3YfueKBvOSkPXC4GRH`aK7AsI@e3xLg!D@=X)n(G|q@x<|mE7 z`G_2Gk@(i9h`dK7#)P-8;q4;U`ZKq5^P>pykG$-2)6%w#xn#Lg`_r)!O~tnV00wXq zSZdcZMRjvMv=-3D(Mlm<6sS<(F$WA(<2+W3dL%w6(w2Qg#Cl@eSf>kp8S#9 zrD}MuOw|R+pZjM@Ei6IW8Ez5$r8qbl<7gSj0=dSOXGksYHC+bk+Bq9>iY6qWIr*@p zXTKG{H#$#ib}?~Lb~g1ph;-X|W3bj5e=PZe3uw%dx(sl`?_(J`>rmb3dS8kyCA+iK z^jXs3gmV|%e4;bMs^E{tl{`zKT0s8**xG{m%QpFl{{TlS4+CMqC+K}DuC=RZcGjz? z+rcHwcT#P*xbjSIo!pW^JDVLi6_VywwbS(c{{TZx9{U+z4}2qUZw=Mu(^%gUSb2*K zpxbRcGT?v!#%lC>gLtN9TkS^H=E_@85P446VfZuI<%ZnbE+L`@vL`p1gO(M}KkP z+pS0YH8n?u>QlSSX&5k-eqWezhAWZ5q=QV*{1(0Q5xeS>$2gT0CD@q+g2fNN7!{vu@e18E;iBJJYFlHK zW?1d*{&xfT8IA!S`0ZVb=vsG;baOVBYpX)a7Gve4cJdq^LW0}B{Z&Iw@cQ_+CYo&; z`Mjng5HCnz2mJJ4JCJ+vn$k5Q)8^^&Xo*5f+`sVUTOA5JSfdhXcQ!VY0?BcID<3Jt zWgGwq+;h{W1tyz4$HYB9Q4`$Rz_BW<@~kL^QiNdg-SOB~wv}PxeQk9MXPVACTXH71 zGD@!;V;rx{4oDTv=>9o^(^z!0^CGv{Ae|wIN^Zh}2EbHp>%}f-E48}qt%oZscKeMR zPX$`OuX#1OwY9pkDzeKh$H?qd5%T8%V~m5xHO<|4zfZf0eKK7WOPX0^4=uz%$R7>L zmmHIidbusuvEtoc2rePNYe;T5wRS7LdH{Ln92{b*eVa`1&Xp5Mrd{1fCG3Jo1cjX|{5! z2;!RAApun5);4T4 z7%eS{w`uL=lIZ!e9>9^xk)Ot@PD!-Y{{XL2W6IKNPwUWTv8LE~e&Psj+ADeH*v!aX z#417gHtyt-JwF=db;~^y#M<@x+dagx516rBZ8#s_B=UXu#cAk%9kaW(ZAV=5A=5$# z?PN@|sBGk6bDvzbYg#Ugq(J(7cQ+el=Q8ecjP*!~lb znD(ldwl{iDh%Y8FT#I-cIb6i2rzCQJ4|=nIr)r)io)WWoh6t49B}Dz)ag+7kgTUw3 zx_s}y%)?&We2$A&@J_8VAzRDKhEnExc+7*#*m&GP!sDsunxSK6mwI*ZzPhyY2@C)w zL~1_r;JD~IdexmP;hwFht<}@(iE5<^5hcuxw0g3EgPe5D7J33{fo*jiT?0TEsPYx# zkaaDO;y5@2ipDZlX*>Ll9qyY(eU-+Y;kcxL>pFBd8-qYht2WhOMmA)gdVmdCO*{Kf zPM*&5#SkTw5i9Swnn>C4jNu45`cilwP?pIiTQMEuJZ!N@)-lNOE^Rk*;cYa#iz~Rp zDlEUfF@Q0UpzvEGr837}y4H0yNc7p8?B!96tsd=-+b52htNNb3phF#<<=l4{Q$`vW z5FjQ;7|QNZo=>eof8uDh$f26cOVu?ULfav&=R&Cv9XAH+j-4u1uX}yvJM!xO;!SVF z`u_lo8|-mKrdwLtDKICKx>YzmPH;!i)Y>S!wXw5{QG&{85ragD8phGE?hfPB_U5eV z9wOBBILb+(OQ$qpV`(imu#8|}u;{tZZg{Ne^cy`xRF2x>*5gpOvy=kH;He-J$pql% zr_!^GpTli~m1!%NL zgN{fz#z(KE9wB?!qPAgYZywu&9lw^!;X&+9bJMRi(Jqq)o{`B7<+RsRs>vEcq=?P{ zIURAIK~qvmEq7*-S9)xQ=yrNurKzOHW2L2&8)gh!0Z#`2VCSA`WY%=uR%w(nM%N0e z^TLt^+n<;cxaXm)`{}ih4#@T~vhCmZe68}z8>tMVfISHHta*GleWR>b15;CJa9Mn% zwBH&WL_%b9@_O< z>T9{9@`y~M%#mP_t+KsI#8l z7xQP5Wmb|xMsP?O1L;@Hm-S*)TQ&6C+pR}Qf+*5Oieg%OmVKd)PEZVUk4nwfbmmKI zxzbx}h+~l>RaFZtIqE?4?@?rBI@OI&QJ&^VCAYJT zKr+)r6;#Wd^25+}Am*c6-7Oh%?B1*T>}RsuX?AWcQboKDPo0g7MlrQW{OZn`Xu76> zY?s=k_c!-aWg$>Dvi|@UPB}e2>cxyP+??M?%@ogw$$y_7-e-;EEYJ} zfB{k5=RK-DUrSl{GC9;@!nsDsSLw(Du5f=U%<&nvd%I&9wz>OE%L(%K;RyT0Dd*cY z(Mu${W~6}JM)2G2bXa5i;9~%{3Qy99qf(1(sO@HwGULCu)Fml!-{`h6gZ5ArLX**R z&T;9VN_L5-$7s<-BHr7WiIz7>UGP|*orXKpZYOz@BsmTk)ly{eFe;}tnSHgtQSr35t01T7CueXpCpIWXE`|LvM*&G zA-hW0IUr(q8gl&Z}un%I#gY8od64YwT9E*If zr$dm)KuFj0&;I~gsxyj7z3u&O5>ED86?6+@;fwg7nk~^dEM#Zep*<$UtNxp!DmW2jf;?F-Z7;JKMmepK}!S z<35!WeA=?36&(pAzSHitTaxxayp0ExK4k!O$XpHBsPyj+O>KFpO?@0!R?45d+WP|*E z=}W3<5;muAJ?8DUY!ozS%L|j&c1C|1xc6q}^ei(;Jh10r10X5RL2=jr0IyG)+TQmk z%VL$LqjI(~?3(>?pV}X z=BV&qtkIW=B#1|dqzfBow@ja|DaYP=eq_BBiwUX3=Hq|bnkH<8j4st&{o+scsio5N z=edSuyu1ZLM*ZT1kG@FHU!`Op65c)cm-g#0jsgXj_kljV43Y0pYBRe_ZyZV9afCk2v7z#Nf)3-e-Z3g`eCB1}D+sZ%XqwbNj&kfkq=CZJI z-Q2G{kZJ-ZlT;81jwBnl?B~#RAB|`Dn%Ok_=;e7XF4uO%bom1()Ev}$-i((L*tAwN zT1}FS=4HwtJL8Tq>srS~tjwONrih}7E16j!npB$I zOGLX#IPHQ@>rz--O(ncB$tT%dxg!U5^PK$L)2*zd)vxW`#*#!iGWo~MsPMzSuN*<4xx2%HVc5!CdCAC&}Z|fT|{*#+U4bDTXG)@wH>$sfPH(_ zb3Rnqy0l_y5KR`=5xu<8Hwz!itDj;!)`iBas;ns;z2uh7GUbGuPH=k>$MWk^yt}VA zr}l))BIC=Q!e{b4(E45F#i5nn!){J9aQOnNT)H+)d9_G!7dKXRu}gg+kyw>h!iE6% z!RwlAx3>Ca>?t+m?>x>otWo5yf6uK;r0Lf2OXj`0NWpm|XLq>GMK+%Wyq;`N9`|oB zuD~4!^!(~BuVJmONp)z@D|u`7iLzKbE_|W-R08&ENmCwf=V2tfvm%upIL%7!Z>m5p zI9Dta3VNyQpYf%-wzrBC1W9n=BRzow9^`i&scoYj+tmgC0EYg@sW#hy^W3kQgp43j zjzI_8r9*8cn7NG_`gaUVgpHST5I>7Q<3j6;1&nAQmT9E`r=1o^#~AkFq_w@1%V|Z5 z%W)sc5rtF)_svq~Yf@y@^c#C;9GafUZe(Y5+)>#GjC$u&e|$04{oxv43gX3M^CzG^F0$MmrJb-U$oBJ zb8a)i9PDz&PB}F#OZZvW)W+sop)v9+d^7SrmB| z=Js(Mdv>aY2d`65Y2sT;#*PbB{qVrr%17o!S+TNxB6o%4xbsNevNc_syA07KWv=AL zSKDG}Y@@!hi)61ERXY{r^7no{YG~{(bl{U+Ll2fvq8~q(&mDTzc6lvi^CpAsLO>AV zxs3a$?^?$ATUy(g?qQg#;s~csK=024)-@$9mZ_RSM)z*UVA3xmw`lE+wYtc}`H3d- zy*LA|Y4S~XY65+t?)F)88s$R$PJ4>6ty@p0N4>8;c{0)%#&(?a#a6mEDk4~JZrV%+ z*ntCJ^*R2Ow?DiOzcQ-fY7mmwQ*@`n}V~y3d*W?bI|%6Q6(z`WgF;LhF1{3lc!rW z0mvbV1o{(!*0d69duupECB?+qAs}^9t>{6fKCy8flKCnv+a!jOhS$e#`85^9@;$6x zd`ylGvbeQ>!YrCIbYDuP^cvM4X z^D6Qgf`-BCin&J4+Y=ckueq;pe>Bh*`$Q#1N8JFQ$eMxVDF$&4?xc)-# zF@<&Hu^1p@`Bpu}lK{NS7!0Tss6M#oin0Bb9gs)B z`Nn*lACuhTw7hL(Wy>qwm&Uklw@dbB2u2Ai6_4vlZ>~dg9IkET8$Y}^0DU+=rDW;W zk{h!mo8S0Towy%ER&K4DSfa|v1dLV3niWa>Dz6ozBbHB9_ZI&EwBWt8Xob8hymCV0 z82Xy7>e`e3?ro}oWmJSBsA@996lu5jNXvl|N=toBByxS8(`XYW?hD70k?B>UT+t_$ zxg`Gp14es4u>^LK^-=SjOs=ip*QHUo*Ooh}B88zVD}Nk0Ir`OIF81b00?i!a6=vDy z91ISGo0ln(1ivn4b98jdPdkw?zHB{ZF+1+Hi+cw|;P<28|CIkh(o(>fM7Y-2CjRh!9dEv*Na z1k%dgS)8ste+rpfuA`0L!>51g4@jak#TmB$1W9k0m(pv&~sAiUvouGtrz54XE7Dcp3ua6%2?pj zP2+jtdPI%$yDKmi9nPt1`^b!v`HD6NT#=u|)Jbr#Bk{xGcak~$4NPp1vAac3BV2@9j(%g7?Y8ENB5%0!)$h%{bGxk_lA0yhdBd_O}5tcDG&2 zoK%-`$QhMpxKM-~nE20L1ww9oxfc%#i2m;z^XzI!Z|@n#$s$kTCq0PtH00CRP>h!0 z{ixSc?0IBKNWgN3KZbkMvu!HaktQ+VupnQ&KX(;4laIf1)bliJ%NOVJHHo~rcx8B2Pc!CUn+?aU7R3uZl3SE+>K7n>b(pugxdmjoga#uU z2>eA_dz48CnnNbu2zD7Xb3L05MZ8feTtx-5IgBH-e(Wml2cBszt|Vx858Q$CWA5Pl z=Bf!mnU!J-0)RsY+(0e5lrKD6ZRutqoBn)*p@trg``6T9$pQa!Af zkOWyCD5N3O90fS&0Pk3@r`g+$&;FD0j6}rt_N%Z&?jvo>5=HYWE`CpJ)N?zQ;*!w2 zbEnDVg%jGMoc!Ac;rP@y(yM9gyP;N5pEMAsH4Ku*(C!5!`LVTuqHtIKFKbEg54WOP$^}(s;xVSf&UD3qK4*lch^%%`0hInOVU6PF8 z1_UaPUMW*jHoFu=v#RGCMh8EwR_?;-a$h#!M$wk%sVsAWL5^c6XY$WDC0uMgbTw7A zl#=MAo=PBGXAB86`)S~oHj$x>L{1AcoytCxx@f^~sxCu6_GG-;+cboAQlOFi^HE82 z6t>KlFP7crD(?A|dUmEsExo+rGVirRB@`BlYPWWHiaw>D<}RYNhal8=)|_sZ_4{;y=q;p zz9W;(WmDTY-Jjy?QO&MHr?Q5)S$Zkn!jyCqS2EiB`)ci?@|Gu${cLg$RQ~{Zcr|Y3 z6cZ$-7{if)mB#Z$;aj^*#Tuzs;P1}gerlpIPu|EbkIn*@a6&QcKgODUhSzdM+?M9z z<7VbLDpxrf>FxBVMSX8#+m;v_S0slxQI4Xe(=8rbcJq$G<`yML82a_*piMFh``d

(Z{xrrjmE4|yU+pn~CYO4THi-sVpx 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%0D77(hLLg&cH#lK?fmG#KY2G72e++PN$qYI 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ⅅFCZ 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 diff --git a/extra/textures/skybox/right.jpg b/extra/textures/skybox/right.jpg deleted file mode 100755 index 89630371d981ab8aa5458844798061ad917d85c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 538038 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�AHQOGtCo61 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 diff --git a/extra/textures/skybox/top.jpg b/extra/textures/skybox/top.jpg deleted file mode 100755 index 4db3c2a3fa76758a3d3dda933e88e35084f68767..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 346139 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ȋ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

x7cSn1<+}Wt2$zis{qGyUy_lylTfw7vgU!a{ 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�oj>vtN|F%w50TKSked{F8Z;w6|3Tb7 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

jL@E$%UAzxkPPoTf9!6zV>KA}LC=|9L zrN$ev+e@;XV`PlC&5Yympj@K}!(x)8Y4=F1sdcsV|MQ5 zpDfREslDCy0IQbWfIAOrOwz}pj z0hFP0Puq{el@~4VLtr#6Dd@YD;4#OiY85?c*vI#WADu&GMF=DHr2`bbIiXkEibLf= zoa5S+Q`Vdp6k`WIwJnTIzb+|g12pmhZUZm$sVkI4k&##fjl&1rQU%RBXr-Whs6e=- z12mz2YH(e&3_>OfQSnu1 z%nwj;OXVG`a=$J=i>`esw55wE8OR+yseqKE?&gw;013?$Q(e1I0v63IQ><*;qgeq` z04#Vtj~Xd&@*IIZfWwPLxAebxB@c0L8zGEW~`ZRHQTjEo!RFYADt^U z1xC$`@!G8`2uFRx*i#)(mK*pqDVdE6{>-_)(7isSoK^0@QToIR5}^KcyjDE`4YLHNklKO&zkne|audMhAMY(u?!}qKY$*#(*WWnV`4~r4-{Cb=(F;Fo{Mr>V-&1H`3r2H*(6_Y~SFJtzTARk`HSt7Ot= z<)bGUpuNdtiK103xZVLC;+st^^3;VHRd*{c;gO!=f_%WPRY({e57vaH)8cQN?&M@~ zS(Yd{H2I?P*>F_u0lrr0nkRL6oW_iZTYy`3(eUQ|bew8ESqunqqaQhQg7KwKCkOfE%eOqLD+Dery_(%l`mpwtotZ zM?xv&vwwKwiU3Lh!J?OMy#PLn2MdZRbpWR43;5Evr&?tZ*aC_urU6J>uQ=oLrOij2 z&;dnB4WyS4%ILXRKxaF;0&!8$OJPHC-j1Dm(iX)8l0hoQl5UM$y5UK0xO3K-NEC?aX-91Ir*sGZ*`a%M1^@s6 diff --git a/extra/textures/sub_win_shadow.png b/extra/textures/sub_win_shadow.png deleted file mode 100644 index 1a7edc3829e07b1b96c6a186b17a7e6bd188e8a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15442 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 y<=z95*^?SaQTA?!N&eU;YjN diff --git a/extra/textures/tetris.png b/extra/textures/tetris.png deleted file mode 100644 index 92fc21baaf8af106caa612277b1a2ad7e74ddc7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 906 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

xRBi=MELxJt1Y0^ZUm=a(vj;<_Zg~taMkWp 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࣮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

&shoeJMBBztTS9`;l|qbF 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

~DU&+q6r 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

E+m)_}JJdwsog%%AOO9eCYc*w7Is-5Z$7nDKdHi zn4!9=84%^VIO*p8vk0n;*p$%-DPX9H0Fnt-pze>%L+&zxt+WGy#?p-nDu4;uQX|i- zI?_@Kl@T~codvkvesIF^EFvlD;iSVSr>Ba$52&CuWHgbyQcEpO+kKkkc4KmTX~RYt zY__EVB=Ml_{l(IrZMBe;jiZ6{>Yz6l&oE)#K*q9a#X9&TS#-`Q-gA1kVaUnxxLDtGvlceK9eictyCK&;f3963~qawG$cd#QU&ke+??tDh*9j++ySn-8s~O1Ua) zaQZnz(!#nz%CUg*#=_Cq`@_Gph28qpW^to0%EkadrA}VUv^BLDB_1z^R%3BuRIyEn zJG^qy&ow+xQ0+9q!=N_zY*%p?wY%!^OK@ohAoCQd8d98gbkn^=^bbXZ)74Xo?6Vte z#iy^DI!Bo)f!i2%h{&%RF;rkS>O4jGp4BQ)FkxIeE6xod7$rPurnd~Bq{68ys_T?g zEnG|Ig!GLvylk;dtq_q=0~llur|l948(qO!gzPoskd#T=6@sbgqNm2|B%(#d zyu0BTq^i55tKa8M^9-R+-0ohwCN|Xq|o^hyjGgX?lsK)C~ z8-y~$6OcEGE6CvBXkmPAf@eNaCPHX06F%EBaaGYcpnxc-%S|As2_G7Dsbv( zCG#Z8^~}>=K^v;dvo6Bo=EN}yy}k!fASqi<8c5{Mk?1I?RpQN6jP)-q(o0W6O7)m( zRN?JUx~^(bOgD(xM%7n+0XExf_agqx*WIEAnV}};G+eqsR}%xyjW$k(Oxc#O8knlq zikh++s`2a^0RCMiZ4;QFX(w-Xz!4&;ECB#8JSKYKEIda^_kI;2Smak1=qgzwi1X+j zaZxC+iYiP}In5p|M2fFbfL3Nv43zRWm}T=MT4^0XD#Vpizz^N#uI@_GpkoulXy+lz zJC_@DYcc&O`EjV3hcHypiD}L$MIZA?MO`im@RF{}F!Jgtq(Bw-$lFUUqSw%I1*1f# z6v-S%N39ueE^*ws9pC|9YE0sKL=Q|&MvFURczrt3S0zWzIo`E&swA4NKq{~qBd{_i z!t8Bg7Qm5yJc~5qcBXHB>f5n zja2~J0cO;baq;6q)CVEGy;M%ksqU7y)DoSz@%C`{%?GDB($hMOLky1>!Vj5S{JCPN zr?mAknBsrXg5T)OH#BT^Fwl*3HbWy(2XDkteYj9;DZdsN5yFyi$B$8BbvTYMm#MP` z6CV1{k*P?nSVb`_D0&8mRndU3wX8`zNR_mgMxL4&C5z`R6s4IxKZomI|J4XEQq4&n zRU|`yfufcg^X_g9rp3Q&j{J+Bc_>z-4nWjFToQG??Wy(8pBrNYf}jOmQmgMK%R*e+_g-6ckE{+wY@N z(whlFQ?Tv+h>f2L zsDey6XNsyBBMBVvBgVz{u`1hlEx0XB^KKxaDx4-oW9DoYKv7I%6gkO-S5rfWr6v>& zM2HO?O$^~{A}qo|E67SKg2h7ISPsWbsfM8;j*1gcGdiGU1X%*eZ)<`{akn*TPac87mZsTSN`b?iqz-h%!AB?o}Rby4n1bgb%l4+`BRbAEy$d+YgxnZCOvySRzr6`jMHGUVj6vM=n6%`m{sWlB+SV<*H34GOA znNG4DSa;NF>&OafL6S$ZnJI916bui22l>PO{$_j{pDN&|7oeHviw2>gSdc>uU`Z;p zc2TueFMkUbxi{jQR@9crI2uHg`%SY)-y(W{>K+y8>m&8I9Kz_+r+Mm{vWFwnL0L;C zA#qt9GS@6|vb$5Xki0RH4ysEV5y18JtipiAVmzv2$}<@Kiq#-|dMgDUU7*2mnJTGp z*z*9zV)_37H!;N0!CdmWr4?0F&wY((+9kLE6$CSP<8CQp36z1%QiKMUvfF9aRkZZ= z@bahh%ymCEEiFzKYcVWhijxJPjK>AuN@erz@=3BakObQf(Yrz1o>eUcBmsm`UDeBt zDC-)5!^(vWwDhy$wGmKME*2`0W2~jdK3r7GG)%0?a^^eBa;qV+Rs!5{w+d4#=gzLS z*mRJd2NU>G6CKC%MG?X2FsuTGzYecjQ7n0eN|nT7RSi_@EjR)KfkNIzy906s?ZrSM zB}W~-R7C1lf&)MlfgOIlJ(WKQnu{;w?6*TlSBq3UHB{KV{%d*WG@tay7&tO{aE9{i z_H%okEoARp1*t~~G<|7gw%S0FQa!`)ruun{F+jQ+;@u)w&ZW5`EOAt27WoRi!Bt)_Uoi7kon#t%8!X7oo1Ep`@q7@p@Xy ze<~bNCI!iYo}Ej-m2qHB)h7Dw<862WP#bZ>g&3te)Pxm8U{3?b4mHCOqBwPSAwaki zL5GQkCoD)BIa#Wy)|ro%!BQC+!3k>{c;3T|_vEHd1P*;D-C0@?=Yk4Vj0xs_(OmOR zBQ0y=Q4DC}_)TKRhEdhwY>47Tr4LZ-4#{D317IY3#0@pS7*J7hDkBk$*4ecsg(Fxx zj6m9+HC~+$$)>8WIc7A*FpL$te@TfYOjwOfG`N*P{VycK$W7AJpH_u`&l8~`NVr8d!S&WMyyTs@1 zcDDwrEX6!KLqCO1u3ursuhM%zm)O2*-kfDCp% zI`?YT<0=b?KI&QAOa$%d>7f1$QmxH)7l;~+IO1@+(92%X?x>iCAd@1-@rPRiky_q5 zX~&;zHw5AVrvuU?2t9QN4H4AQEp0{}3_^4BRXAkx6^`WWB~yLcA~!Pt&2w(Yh}~^v zW(fnQsH=a;A;Icv|<> zRf}Y!Ss=x2;7Ngm`>IACgkw=vSG;hF`S9>!7?q+kidsttkoj(|Rg3P6-8;v<;B5P; zPK6CP^RknItw4nz$IgrvOM1C7_8}B;%Y}?h<)@A+b7|KPE9cE5a-oQaX7`D9Hvp)y z(}Am$DNh9v*X!3>aE&Ab2d|=?Dl}4ZKBA(grP4^*q!W_z zK)VYSET9qyz4&S@%EFef;^Wmt*mMdk-k>U)pCjT`iLr55%rjPC(bLqVa#TrNk}9vb ziV&r)pdWbabHf0bRCG~73iYI@VtzG?D&V)TmHa6S5+g)HzQY!{V-_mjaHw;_51z zV>}O89YsNBE@qA1HMDPSpxgpQwBi@8n^}!ecyu1B7}{kIG=(@3DJD$q9eot3#49j_ z!zi&l%ZJGMVyA6%Ll=pmrBaAMk_lQQD^40ebz>yn{wDm>Ei5HSpBKuI-RAboS{*;! z!GZ@&arEe}@a#(g!LZtdqswt)uZYTV92XR*MQTZiET1s(Oj1uPatlZ*0YKK^srbU%k zbgZEjn(5)i7Kl@;Q9L%s5k(uu>vl{w6Ny&9t$_MtNF2jeng%-b7?u}DgW=T^(&Lo) zkCIX3k>Qm*nvJZYqLLR%(~mnk=oe)D(7Fgw2}nH8SCuKF#ZF_* z`0gYq>8LOh1UQBji&99>1w~A(vE0Vu_P@WhZel>Y0e%-evdcIoN!vpET{pLc%+1h!j&m9;W7c}rwnHU!XCDe z;=eloMre{sc;1qxqBh*3l_M_f&X>0Jxg?F+aU#(BYAG;4*|*NE;T0uJkon%g0*tQd7fWvM80p1f77g?O`9=xwjXzm`)17WBSu-SR>3*WKmVY z1TazJabdF5R($n#8HK`-&m3x=Wi!PcZ=LV&Rbo_Ji{H3Bc>`MT6B`fA(@OB86Ssvr zQO8+^*QC|>50(1_&yaegBlH0g-Bb%q04GkA+Umy+Mx=$?q-;D6GdR9O3m9^;FE?BwjHLj|`uq zA);pTwz>gpkPm)4ZInd-gbWX|gQqgMl`i4KhB3$Cwz6gX z*@98OX6)rlUsF?t;VoTPT~wK5R>vhiB|n|8Jb@aWwhI*{Y^UoyLiK_U znN$d)tgAnLw%4Jl3OjfVJn3hIW^ApDVdDkM*z{GIu8$Y1s>3VlscNL%O(c71)YJl7 z^rr3P7`?;xjqSu2Ie2V|#Bu4NMn#?eV^R`ykUSv$r2K3D)(dfJi0R;(Rh=sQ=*>-a zbsw0tl^$i83mpQ0#0It4*no88Qr)R>!#*B?(OEjI*_N$>gsky6VtW4oN>kKTW;{dBsIVR-5Uh|tdwjz2IM%t6l;WmfN5mzz>ROki=wp)CIKH>|Yi zQJLAt@QN{XNl+1Zey8J0SVbgQ2LNg5Ul8^B5P+ss#BzVH$S2eGxd{i)VUq=Gts zN+bZJ%0~)t%UDGm6%~~k=QKsr+zyk?iwmoSO;)uShn8fgf(2DFC6@7lCG1Y5TIGG( zlIo!%eE$GSP|7rrRkEOBa$>c3jT+Zr{{YF@B|R<~J`FLbsT7fKsHu38_c!vGw53=e z7E|NKSW+ANMD)>%O~{oP1Z<*()l8*CDXApGYugQqf?8^vS{zcKG|rM#c>+`-E6fj? zNgFnkpz%CgcENd-B#G;zJgW3szLlqjKPu&r=$?WYg?$_23rjUbn6SePsVmV%DuWz* zo;|ea%Bgi*pAgsLn{`WIlNez|cS+LWOnK0$UqxK>*p!tRP!WlaAxDbRnd7EN>Sk#h z%LOALS!D$K-r-)%Z_1_Q_mduDs-JW(OnWON5k-te923J3conhNp1N9iQgl@-=hYY( ztc8|8bIk{F+H5a=Q3_IUNQF~RHWZmBhaNSOp{eQH6o(C@6-Jd)537~dA-!T{X{!XZ z@`hJ!z->lVBTaQ2s@EkT;%T;mv51MF?-+tyUaGGNj}Dfqs~(+atV*_~rgT11CjeTAJxq3h1cea3ZIl?RV>h9Q9%rm(?dYfM;uX* zV^VE!tWAx9()@h997H6^6rRdE$s-OFICL7f8mP#W)qmEyiaK*iQ&)w5ThP4{OEmix zVn~^zgojp5@4$G-4YJak94x@1#qe}%Ob@~clc%aLGf>iYT+KCXTK-WvG4V0g?Uhm?+8q=&x&$aemx&wJE|nt5DNO zTnN{I{VFXKxUMG+JXyRP<4p}kMloHRagQRhkR^PL0EI+t6ULFNfTc><9e&QQsnjV% zqYkPnZ7N}DOT$pxH06QSQ4B}qS{i6*vw(wM@51n1ZAwhaPcujBHn%823B^1Q!{=F~r>>5kwk)qj@{y4> zbt|Z-tCpgY7z48kNAsj-2n>v+wkX_576X-Gq&ny(Ndsjnb=PfL(`nKR{tP-)aA z%k)uW0-_;alcQJE&X}1{?rGIlo+n2IrE9E_1R9Hu;Eq{_OL{=yXa9FAd8Xey^nvWY~=zOJ!-X3XEE2Ggekq)?(91R3uu)P==TvEkclcp7-GL-oXx} zYXY&$J6e$W5OC?+6f3SJmFw$p>?R7qM^g+bMTOB}#SvDiqboFwvOShTw4J1lN&3q! z?ccX5DaAC^vXZ3{#<;ywywygEfdxG@sb5!72`;imU0`6v?m`A;*KLD%c=0K@kTp@w zvm|Wc#-nDOW_YKrt)rabG?KExMwPU&{kR*?+M+$m!~zA01HTkoXqb#Q&u+4~5rA{T~6swY?!gqYb7u)KmltF(l8($-rYE&8q!I?Qw#4RCTZs-QBq^I zScFt`H5kqV1cTG=A zB`pRS4Ir(r#OZ0`!my~GN^~)aeAZ%;KI^j}2F<;`H{voD+DfMmG|Po5;3wrvOkm(~ zQ^f@>SjOw+5#usrG#@VwUL{P3SIUUC!xM)d@NfvV&5v}}%6KG_bjHEZX)VeUOvVO) zA5r)nRwb7zlDuLVZXo!E5m8d`OC-3JWihXY0R=ylU(I)tT~r%{_m1Ac;@wJnS(y>c z(K1!tsW2(~sQ5(|8Jn{=^?xs7I88I*)Ri&AS0P%It7(lahs&Bs)tstseagLw0G&u} z#mazI1~IAEbCmG5Q3H<;F1p7onS&3KJWiV!{;<^7Q^kqXONa!5SRgT&BPD5l=`S2= zSdqHK?)Gs5ZKZD=VhHHz^`Y(E-NP&)Os;48TVtvzQ%G^#YYxI!7sRB7h(frfB$V#e z7Fhe$p*(4%a+cVqJM9z^Uu#>l918 zM$W<1+9|LkObv(6A6i~JWDMz*Dsal|UMyEO*VbX!Z3Z*u&GQs^bv&(8BA6-VMV*w7 zFVAH*1e;#Rjj?k5y2`XbiLYi^b(Ut7j`%2*Mx1cMaKgD)LrFu4(ox})MUEy~p05YN zssxkNEW1^1OFrj#%MII@9{{G{@giR#B{Shx-_ne%tXc&s2_5Q2kWSyig7|Q(#a#tO zY!q=NJh4=_%fVFCvV%~*Q~}}-xXQpWYuKOS`>VGu1jL@c6jyJTW}VB6NeKWEhaRIf zKOs~@hCzm6_*OV7G5i{;7^vo`4_!u*$2hEUA*e)+<&A-|$gHQv{I&Yjm6%L%{cBsZ zV%5d6K{Las9*;PoR}#lF1}{^MR97*o#pbA*VM`1#K~AQuwM6ev8W_+sZYOG$+PVM+ zoDC2O3pj)EsdCK<4XLD)D8VBLj<42(tl^1b-fc8d;8j$Zbz4VE9d;xm`DLVE(ZpbA zjE>2;?d}*cz0ZCuwqXS-GcmKzu8T7(*Mq2SErcOkdI;$l%ui1mOT$Y`nR=6n;P{?j zqsFN)91>Zu++P=~l9%~aKg&;9QBfq8V>lZK2z6;04uBKGoQRO%SrBSD?J(#GNK}K- z^Q>J8ixtf|R}7yJ#0+$}bQj0!Xu}C8<(<5U#DN|)1=#(R_kae#jd(7(Xcd3}#-L^s zAd-JdGHrzBB*E)n2h5b1Mqk1#@YALvB}u9RMUASaH8GN7ZN(LJCG-k7S#-!s;X@id zvT8se-~}e=(x2tATw%s5j|5Rp9gmYE%jd8&QSDVE;%yZghGhXRHe z3SN~Uw=^YXTn`Y%Gn-;KHC!2>(9q3~t}oQLnmR#ODx?iPa!^KZzIOEk%f`mD$WD$p5CTlQXClgu>6wy{D4qm$tlP@hrZD6H&nSALD`Kfut@M4yk9V4SoHB!RZBSexUnHk6bn&Fuufo%g_a>D z&@7Bb_bgAunP^t9QV&;^Jmb7h+J}onGkoPv4~E3GRJ8NZ)Y8=?EhAQGB)cY15FahJ zf>~9Hoo%61+M82)LZnX(l*28OutZp$Lo9_i zKbc_a?1tK)+iSeVo3p7Zrk`;kM-80CVwQT$dZL}=s}NIQ_r+Hbq{Hc;q^hVialo+B z8mLtg?Q;tlWkM$me-rSkglib>;rLKVQZRaaJ{oFhAj|U1jZ0ZoH7wiZ z6FY~VCW&^+9qhXlXrkbb8L%Bu)jJN(B8zUy8dP-gpdzag&RLr&XDo`l z!Xl)aS~-@Pgm{X|vH&h4sgS!zD{XPPY{V|oJnap(vblrtp+4wAdA^-rDvyrh`P!Q< z;W!$+xV;VpD`2Ok@-XOO6*ck-xno&kSmbBjV$AQNiwh{@xoyi!aL*BkRY)7blH6J~ zsS-x75HSkFtB10L{HuUsSRP)hrp2%sAgQ2^EJrfpGe@u`=^a#^s>->7n*qb9u^F&=>9F~pYAjMJ za+K+YM|N_v%WdxL#SQLm2HOFCJd5+* zHP}q>*4K)BRtRwj;))s?S)=_Com8<#Wz~-6zK!F+_1<7+2GNJDNqJU8G!;OFVm81X zd}qp@XmHH2gWx!}DJ5iho+4UGo2*EXEeuC&W)_W9li&1*_kDzpBvr!Ra3F;bWe9C8 z8ML=sp-E94698BL*9>u5Lqk&(boKF7Qq?kI6}VMn85JpGhF6;DqZ z)4;Vc1zR;9*NXb?lVdN7?eE1*GFw2Ik|6b(4QKa->y<60^&uz14@7Xsrl#~Cr5I;T zx`4HZGE-&jFB!uh5W}+S8N<~{B;n$Xq}wmdDs4wu$nw}Ss-4<#Mdobd=u%P&vBzaY zm#Je?bd53bqoGOs+a0SIh95L|b}NTTQC(dXO!CF$)->rost}|^5Z1Mg_JMKS7oAd2 zAZ+{#+L_< zGTK&I;Wrq!h^cW15ao)45Q+(&o|OKTi3qVOvN$`9 zi!cNm-<3cJNFgLouu_$S9xP+pYn)itDq@=qjj-bxuN8_ISm zYmzph8hG*a1QJ2xUQ)Pj?bT{h+jCZ{a563}7OL?WoHr-G(RgHC0bM6fij3YM`X zh`2UlJtMJNtoEowXvx(#Redak5t<@GqASqyW+dv5y z;CbMK1WApxFWS2HqJ!WI7#^OpwwCo-LOBBNGGh3iVrr~g1;TReNJ*%wDWbgS%OMJn z4$$a`SRKP~H{-27uL%djI%x~Jax^bdC2Kr9xcezm`7(nUmb#{Fe-(_Zk;jy#qr;vG znBkR^V@Bn6JELw{SwOo2Yz4XJuT+(Ugovaz`59YETGmRZ3RzUrVDaO)eAM`4G_YZg z$%#y1c&DhU7fG@mdxEU`Q~ zs-aT4gMKq|f?E-=QRSnmOX}8f+7DjOYc(6%*RiOImaGFcbgGdq=OHoq?)UI zY|AuhvTL2D#4&Ql_S1=Pm)<04AFUeX>h2x^N|f~Q6$cQ+F}#aR(&aou$j6!{$oY>p zP}fUHY3QmYYH1;*Sc}G0m3BEHk=4G?*N$5_B!v#J2hM4{%sA$iH}=kwPSeK-!`n>Q zmO{oe)i!m-R~4tK!#ZI{9(>GISj?34Dzp>N9vvGjQnB;r6HGj{r&evZHqh}2mswhq z(et5(Tv}@7t9Ldja6i(MjTelsSAgP~&DNtI!|E#VOe$58@k~!(x3dM5^ zuIBS$C+L1a=&?)|nA(E5%Wn>c3)GEgw5Vb2giJqrqbIBoj%8Co>(h1C-jKXupN}@ zHEAyaiP|<&D}V{WZRn#@pIa*C41X$N-72rfFubXmDX@quzs^C!A+4UL3x!0bTAX`{ zyaQ=KXD4;Y7U5ceNF{if!arUV=4j&!clII@Ff-Fdf7ArAV0eBj6u8Yr24JPEpv3Cs zMute}qJt5RCa7OB1os z^9&OY%o&pu!{}AOX{xHIjH^v3P}(Y;>KfK7ao7~*2o0;nfg@*KWDeroxZ_JpK$Hb- z;sg&$W2gRQmmpQZvf0Ej$&l7!)%1`ck_ss%5Y$u3)0^*fZ!yzoJ8o9piDM-P##RWJ z0MO?(vRY1rvO>U_9D0sExKxTXt-~Uye6fT{Tx+75t_&`f{#q&`t+kTy4}U-!Byvjo zKo;dM9ZHP2K+; z!|Cws4unZH5-w-NXK1%cQ7jSKFtQ08CZNbr`=Z-PB=IHKaP2&BqYRu{G@VHT2*e$; zQ89X4!-&H+DS+lGN(%Yu)_Tl7rCx~{=9^&=`-5?1xB)_dEIh8~K~!dqS#RF_ z_E^$auUUe2RX3XE=Fu%U(bNFNJOKP@k1W$mPa3^u2=z2IG*DvGY>rq7l4Io%p#)y) zn*ypV-qzQRT__=1i2#mprMW_YKtVxL6ea|1*^MmV!e?sC6B34o2x$@+=(9Uv%TrA~ zG;et&kbc-;#Ks)%}Yyqhlv`_k(7jz)?UDkOP|!BI(@>GvneJ9-+e#DfmY@jU`kwdu{<*X zjMLWR!b131i>MGZY zvkcu4siCZcbu`rymv%&{5r>6#lB!UP5ELH#Yb;^3kf`vUo{GDQQA`7mRV!$qifnf) zRb$wNA*{w@sg|D>n65P~9vm5Iyt1&g#+>`Cc90kr02>iy*CZTMheadA7&Mm0@fE;v z8uZDSl|Cm!g?U&~QB={@Z>mNTe9deLDi|E>bW&N=t?i+?;xhA zwDghHy>HIrwbj*d)J-%s%ps|!X#%1~izHhkWj^XXirCm{4>Zf<;~)=xdiKyX(m)DQ z_MMP?xWzPLb!}4hSZdVFGL)2JI{G|D727nGQilk#I4iKkK#Zvj4aq!RXxb7r0VaKd zgL#$1?taXurMQSY37^89aLPPm6q=5$s3fG53!`dUr>dGp62uu%6{L-}$ucI*6x>{n zRm~_8oIy3Kad7gG4~I%%`*u>70-}liCDNOeaOyX! zTDa+;HHyg{IvDR6vhFu4_K5~JmMK6kBuaLkx`=ZZgd~3vI8e})aAA?xW=cU0HBTh6 zLth?0PgPM*=gI=K&_t1;W-KgsTi(*f_v0x+S`d;5J86UJ*sc*8RpI!qALmODjtBXeV}dEi z?7^HUCa%Tbxtd6b1TN#X&$>;)xZ<$ZkWZlu}|hEl9agI8tQ%9i|RSHWqt|M(rH7h(2}4DJp!KV zuvu%<8LPt?D!k;Us;;ENj?wZE$sYJ6c}=(8KyGXRJ?w4DHi01^;liC;go2}n7}Fc! zIL%fiT~if3MHFdM9c?WIJkdo=Y9gIz{J$*$*uhvLowoP8+g@#Mq(>97lPRENaQJmr zdbz3bTK@o+0-FxRC-zFX$3lm33NCDBb!X%o#xhjR!SiTS+Bfb!&MP^Q#C( z4X1}0rLJ6#zKaO{tW*4yEO6Oj!Xn0^D)CA|5!9b5RSF|*gh&D3y2rN@F7v!0WK5cF z-p9KAiVl*IFgW{ZAudwO7)=%>iBw|n;dt&fY6?76r>d5khOg#WJEU=|Srya-2pYhR ztTnQ*^43T6Q;c=dO6=Q06r3XfY#-vmunc zkV)jp41zuMuA7-O1bA^ncaWd~#am*F-^$9Fl?)S%ah|>ur^B#Zx0$mJ75v70PAoq# zRKthInpT>jrNb*CjUia0rKb_Hub5Cs7j?4Pl!;Y70rlc6qt4r^mH#muuWYpPn4ArR7xGBrfO$sgrE(emA1=^ zUtTqC!;4I+L7zyaH@S_YN>Wjzh`@=|O#3Mdny}yIc$=*VriPykfAlP9e=$nBSmagn z)+pds^IVBsZnc10iye97FjSQk{mS-HwXR?oaRp)!gNfrY!-uwtK2*Z-jIGvu!BbgR zJq`t#uydSgD(YD=1bM0PKPsXGP>9iaAjAs2$YOho@K=*-45d`6<_Q0noCSIdHJhssbHpls zd`A;vG1S8Xg`<%vnkw3ai4__+)ov~duz23)+W6?3T0oekjkutC=Wktd%lK)YSjB!X z78yrGYH<30nMP^C2)<@Q$j4PKYK*;1 zWr~qy#c7hfM@=idQH7APW-*yA*KaL>U;r1f=G${xj2S17MR+Jc=pOn;VAZ(Hl@n}g zyhf%_kWCgpGRwMHU0p2+RlI7(<7<1}@9cTRl+0r|AJ&>K5OI)Zmw0_#`FjqagEM(; z7G#cDvaI-Q>E===%rproqxp@n$>u_BeNDj^2aJYs4ihm+-%f*}KdmkDMrDI4%-MyZ z{(G4*+GfKr+PcpsNRkR@{JB@j2XaZYkQ_K6dtC7gmLHjMC@O@CM)UewCt>Gh27aKV z-;o}+L`u4bo-9VOD5Qx}3OTEyo@#y7B(i993__A_3E`c(JFru;NcQ#7Q&!#e!T^|2 z9`jGxj+;GUxzRAn8B+K@1%hDsehnl$XeXvg<(4?sX;_0COxsB$f^Nl0;4yb-d9YS- z_tsYA*$w7ZcIzz(6M+61fr;bnp$3B&riytgC3L5fs-mA1&A1&p3TdeE2dCQ9>n%;< zsG2gj^O0Fu7z+Xoh;D#M0Qi6yc~9d~K1TEE)CdStl?Sa+v~A%|RP@-kEk%mrG`OWQ zRtmz^HS{YCGrj_LPoVYB|7rym32Kv|=a7Sc?G9^O;vZAd0^j`Q|Q41S- zjWNwcu?ji`p_>V%!m7S*3aOr=DyNJid6ki3&3p{OQctQ-;W<+?RK6VzO->boR3j}-ENqoHl^ZVBo?2?b z9NS};xso+&+vzSa%E}BXO1AmYW_z63w(%FD<}Kj3WWmDnZ>#(x+iWOk+Gv z2D!?zhQ6+%NpU(V$_c6)36iQ;nwplHXk}p(@=0ZI$PbuN1+1Z1j@&oO+EaKaOyWGc zXg9tYi&sNZSBfw`eI9fqdUnKXC^P3;Fbt!CP}S0A%#B<#1~WV&s)C34Z8c4%EXQ}3 zB(i;*me*Fb#{@PH1u6-c6%ud0S_23=qIt)zgZzONhW;z4C-XR@hQ-)pyK(#5AznNmj$pRFHTI8uPnGxf#dzi>n0c=Lz=G;v30R+wlmA192AYv)^G0HK_W(r^B)Yz4NHzh4l zr^J{VsvJH-t1NZ15)~Rag^XaiMLI3UiP=#?6i&hM>8G71Qcq6W%bc^02KBRHP*PUU zhvASs7+uyr);Zt@hP?ATB2IBJp$kWbWh6|BY%31A<4ttUCPD+u~Y;X0ZG)8a<2dj!{bdjuMjE5 zc=UDCi)IR%m?&@@$kY6Q70oOdOvZ|aN$UtO%=b;OQ?R!9+Q5~v{C3s8hKj+%<@Iko-O!~K9C6!5nX@`l5{L+h_sn@v zb((7F@d|kHYD{iCGb_rn(onV{jw&kR^9y;>MoN>h(U@;GVW)G$I~!*MhH>MEO#!pp zn`hcdLC`h{;x^6`#<=C2%K2!@n56Jj)5PN!!~-_vo-p3@sDs{CBnKBJ#2&5Okj!A{d0dhw<_!;D2;H3lbx;gwahR!U~3$ErdaD58Oo@At%kZ3~sy z5o~q2CdFNyyfvj{bqsb;S2)aj%fRy~I!ThF736?#R-QlKsk0=<1LQ^s0W znV1D=>0~5su?SQP+uqY&T-jj?ox3Q!?-Ihon@A^2m2o)4^iu8&c8@aRkz;V+vtYO$ zH);s*TG0%(H07e*JVC7<=%iv^`&0$f!sM#u9o(Tffrz1gQvU$vNOi-YtU->Av&O&w z(F&fU2725wDtef)J+$eEVbxT>Hj+^!Ui-0TQW@5q5cDM3jX)=)I+yTmCg z1qX*myJx;?4n2rfMTb>l7=0S%DvD_b@(gx&aSSN3Zz%NSljZ_XmJ}Zma5-Bp?n+!b zXK3rA4d8L++e?fmyi#!r8)L6vpG}kv=6cLfACp+3ljW-DXT;=sdJ1`bx~U>F!{^7j zU6e!$UgcPlNZ^P(l}pqB5m+TlHO%a4c^DY_C^<;1u|} zSA5hhQCM*XFs*wvJ5)^Zx-GzBSeuX(a7NUGDg@0(8G?Zcle4CbCr#`Fv_z zy@A5=wI*z;@?}^n;)P&o=aEf8Yb>Dyd3I7kus5CKM6fl;5Sp>N1ppJ`s6Qcv zd6UsWjZaw{2@QL}EP`l$Sg0aLdx0QkQy?GkE%Y-pXPi=}G)stOd{J<( zmY!Ld)i2A>ip4SWib)H{=R{;{JT^Nr%Z$Xe^YF29H+m;fNBmp3FiZj?PO-t0p zJhV~JW;`-?r^cmeh8m1x#wvld(XKpq<7Tn`cM`CnZ_oOzUSrEr37gJOmy(1 zgjpjhV)!(bvc(lmOG7NidT1VeGO;3cD#l6W^Pchh*3kAAv9}qxxp6A$no*SG)~>g} zEQ!aBG2*#jAm+(&cucMQ;)0r@Ma1zcs)3Bx)yAtKgfcrkw{QZ!?{Pp<185t0+kgUs zplv^;J7;5HscX6lP{3{5x2B7hG1EL&mcEBG*XBBy>1*eyp{&Z3b!{zn7cD(3(s|c1 z(;00nYDHQ+aXUDVt5B%2{ zn-##3)w;kVgzHnJ$93z~E>JyiWH+xKx!S;C@1fd`mE6 znC>@Ih~g9@63w-+tzu?aFC|k$96@%pP^w)@pjA+Sf^JD1QTcHL4@3G;aV`*jcG6ZH zR<+&d#A?$nN+hQ-KwNzDQZ&I9D8Od@Bxd%IYhrJ4dt16I#sT=!^0Xv^0T_BsN5$&W zj#{Xqh(U&6&>Fa?u>|wHhp1BQLrZ;|w-dMm#P$Gk#6n;hlaEbNNFUI1Y zDe8jL%MwMGaY+=^#Z>C014y$4C6+d8Uc}f9dxjMD5(dhAl!Xv!QHIQLv6nE~nt47; z6oMZ$@#4n|mW)U|_h+YZCA{dY2#;_i-06NW<0>GkH52Wts$o0;_;eb16?i^9R{)+j z`ADut88b}FB&JtL<`ZmUz!EOVqR0q3>&8-rph^!PXH{u#Ab=tSa%m4$mZ!pT=qT!_ zWx=GQfpJ_;XQ-AphKgaf@oz!BCshGatzdiD=w))Ul#C?wQ*607lRp^fto0Pau7Z+k z38%!FYYh_BR7bg{q=AdVL5Pr&KyJW0Ft>dTxPfn}D@fC~;a*uQNrOBpeg}-JQb3r# zBUv3rI89bJQG>%9t}PL$`CuZEB53^NSoBre8@7Xnc8b!!0n(#~l@;7KsBDq8k=_z!-+LNqoAY({_>F-cL zkvLGjo1n|tH>lM4K8Fdc%UNp`!l_p)$C#-FJ#9rSm9rX~Q$uw_6DzQhhzw7PNK$%FPe}CXr~2%6s)B4j8mE8>)*3v@_+>`d zt%0`5GAjgYR5K)Hf(tjaT=A`Ktz_em0nW;;<5w2#CAmomIFmCSQODg*^v{Q;FN)1I zDQqtlm1!8^^vg=nBf&1iAy*q@c_jTPLEsLePeVOwVspmRJy?<_U$-UXd1AWxiWjls%WTFxNhM3!A}}3v z1kWwj8Boxc+S);#MC`&OdumKLG}YAAI8`|7ygJJ~j^q|8uVD;75)&hLi!XFQkvW~u)ClHFKnN`}I zgly{3sY?RnFuCkUHmmI{tuZEN(!G6_19r=WSVRzdapthQlU!)afu9d>0MI zYcnP>BRo|SR6`~cEOe7gQBUqMH+Rq*E~8r?9wSoqCt zlT(VNPF8Q^<*``a48cuZMFL3To}hzH(+M{#tjwW(;bI4F_oiCX0*a)B@R~Ev^9LPE zO~7%%fhnJS#Rwjsse`i-B)|+C*$Ubr)~5E;C}D^_Uyc2giapt&+8ZFiA1#P=&LO9awFlGYiD1aN0(ODWR*%HO{rNQsUII zL}#diLr@l?+vJ{2QPiV_1nRx6-POFUS}=ow>Z2x15kAhkSs1XoxiK6^DbTJFQ#`AP z;8-;UX_4ZinPY-WnU*XMuNHU^wX%+qNGMOo~n9WQW}bUb?YRq zq!HmC%;2OEwMHNtWIlL?P039!n9hbZV{v1*xnZ^n4gf@K;45WHJ2unI)KTE{Tas#M zGbJkgtT=l^Aa=vnR!E4cid#Fn7a@Y?8386SBhs4=IVA9?`D-&`SY|JY z*Gmmf3qCBuENY(y@@Qd-7V^<$0i@mT1$P3??KaeLGpqub!Ub%(fgNiVTn(qVxgy0vfLhb1Z_BUNits5lpS631dW8g)&u)fP<2nin9pjYKC z?p+}$DsbSbh||-zrjfMtSd~js_sgt3Ndff=3}~V^s)|rsHA=EI!xA zh0i{N3QiHijqGe6NbZ~xJHcM>mr|Cr%PiB0 zz*zjcnD&*8JVTJg5pmmyT4_q1U=lIHgjW}K4L6xCQ`R8>L} zqFcr1iIB2{eV~?7II!ELw4@-&J53j(F;(w+TpCuM1IvX89dpX`y(#qtgkUupn+nW$ znqU-|*|7tIR@5Rup1Of^1gcZ3jVti%(T&T5 z;k5O*DZ;SCS(c437-dOTsFeaK8lhPnGJtl5I&1CYNo@!R95&<8(e0`yT8_@FI)8OM z<($P)l`;Cs>#9Vs#~}I2nhHrk-p{e8XzCP^wm)%q6+z%_+_L?&Eh!1$Xv*D08f(lM zo~1vP;aFj+sLJy_PA&eGACpQ@NWi+p<7BeVcG)elih-rMuq7DAxQg0WE9#_Weq^G> z4K#H)bv&5%Aruf{G13-uEM%ye<)@H@DPj~YtO&5U99Fw^Asb*#c{c}Mk%{1GIYo=s zV3iF(m~!CIRbLLqsi^5`VrqdK2}kJOO-5W!?4MX@Vx_P;i(O%WIW%S#uDr!*iZ# z#4%`gQ%h9U7^tqQr3+C5;vRSd%ShA~(n!6~2(T^tyd=JA6Q*F)kCI%#BsZu=-c1dV z*JTV&zASqM#AU{yj`Wyz502E&PgPGd$YV85A%q8w7T_o^VhJ_?9uyR*y;_b2gqF$= zl&QQ_o*aL5DGqI(l3MCqcMuX&#Z^mJgSBHkvlOS4$s{#0ETqa2(!l=!gbQD{7)80% z6p<5!DShwRmR)jF_jQgP6phb)c*U?RuP$WDG&GpaN=ZFM93D`rYKM+*m#Boxt48sM z9_y`~5CGgS!!|N$S=4ZvCcEDPgaF@0-kL<`-lpXmtV0LG`fZf+N>MfsN1D2ai00ZF zSC&frLK!LiyHcq^1a4Y5S?=d;%7zh||e68Lp&>V4FeCQ#~nZG1c*5ZORml4Bd65zFX zdq^Xxr>d$ReC{S)fxu!JAx%IxZaBq~h)kU$r1bh#vkR7z;>Ip4kF`5Uo--dB4|Ba{ z6D<`kAvFwjamh^t)mUv5aMenQQXUqnjfF}wwZLyJtVh~mW*0`ALff*FMz7`xaiH4J z0zlX}9cg^v2DebP>sZtf(B-QB_?@hfMf%vaL0BOTkG^S>-H=<|JNb;>cyylxecz zP4A)MVuH}r;W6ySlxoCz$fnq87LNnPqr+mTYD{J)%z)NYLsc8aNl=4OqyR(TbAfLQ zb_I{TfN|1s=$ds&1BN7g>8lN>l8&m64TfsEoEn|gT7*oYXsRTA^9{^d#e$J=0+FVs z{92S8XK%inQiP^9Q|$E>QDazTY?TI*r!MZP{##NWSt_ECnHD&NEXWumBL#a~Umhb- zOyP(;e;RjM@F#65v8>}oUtfx05*m6s3`#n0<@BbV=BZIig~~M2s}#BRf-Oi3s`6mH06*92_qdp zJ%{5-O~5OW)9vdO69}xuXs9Ug_joey4TytN4Sp1@S5}d@4Y`_9BS6v(#fS~BhzF0i z0Yg$m`@b4Y@qyu*Ve3UKnR5ookka8&R!LKg;rNu5Si(gc;y7(BTr#AHNDCI@6K`wT zm#`Xw?US0BTY?E3KlV(`GaHlzF)^yvN4&XLxxq=)?!q(lVQyjr7*OZ zddnQ}D=|fKtL}hwH@G!+ic3aJkZ~0;ZY!l1)IX=jD$ zAZbN3J0NuuM<`U@J^QO0XbI4S&Y_~2APg#2Rn5YXrqd;Jw+I+iyjQDuE)zg0veivQ zvD2}kq{H(B6l;kEk`1I;_EQ$63dP{8 zNAM3n;`UV0nJV)%6K5?BCtmAtSo zYa3eQg#n~Cj0~Vs_g-=L6qSt*0kCoN+wP=P81qknRf;5)F;=ZyM-`@|HL^`t87&W! z9_z}?rFR)YQME|91BSt!O4LNo&Z-2XFjFA5oH6kZkmvBhQ$wYk4kQ-#^%QIZUa+I97kn4@QJ+DEIzYz(`qDF`IihKD4o|9v zm}8XE#pk_L5G6zh$xk>sq{=p^Hzhz;axOHr#MeoHqH*izjY5s21BTijg+k%AIeHqw z79~nSS*WLp=;pkeB$=K%<#2%&f`yZQ_+?E;IP0Op@eE5t+!QpbKpVhW4;Ko62TxZ|O(W3-GGzRy zI?lMgP9KU?V*Yd(mz`Mh%-4nr8iBA!=a`aK3|W}%+;)c5j~6i3qofQYXUeX!5Scqi z8VNH#V3L|_!%r48lF&+mwl`xHG*MOgn!r*f+9ccoSmR9zu{Jz3wYHRr!-rKOyL5>s zWp&g16Fy{4mQ9al-i>A)zlrD8#Ic-PFynD3q{8TY&*kepPg&-qa_?muBn3iTmE6}* zc6Lzn@Du<~4m2p;>tLr46lCgx4;q~r#V}fW8aSz%s}95Dk{RpiB8jW(B-TR;i7W(d zaBjBkrLW39>RnfhY+=wUVY6j+Nd*#84kHOyS44a0R26mEmj}l&98wCFT)#CP6;>RP z(#KOIEliPxgUo-@CD3gG{^&Ys!lqe$8g!W(dc4gDpMKD^ps(5E0C6~M8*uZf^!Qc< zir3QojWtdcheah(YI$LXrk0)==V_PRs6VBdtW>aFK)4!Piv{b51wk@Tx6`VFYsg!5 z#I~mjXC5B>Hv6KLc%CbjV~r;jRf~yYH0CJjnx;u(f}3b~;vj7*p->GD?iO4AaZVDb zf_+6AIhSPCtwJQ7JR%95oiu`z6T)$ddU^z(%*Jp4)R5yDa@cb$VZe@bNeOn_9m6}2 z+T7nxD}B=1%F3{u1r%D@CH7LvQai+nS5fMu-Xnw@zR<_=^G!KHiX~Nai&~`CqsQ`+ z?AWqyX!k2dG`-2wh8D|8nwcZZqw%1&WEREJTGOuy$ERdr7;)*E5b{P*%o*n#uE4PQ zaQr_RtEGZ0jY%PnfK}JT{$kQX(U(Z-Dn7_**hk{;ZWSp3O942Nar2>V%A9F}w=f78 zY2nw6fB)038ti`eZxf38|=_+xW+NxSQ#Hgo|iLhsm zsbe*@2Czm{#ks=`!Gl|Jj|ZJwY_lsc6UK_~bCj^tgs2p#aGWXs0Ix$e^us>kbK*2` z=FB2fh+)y@%s!01Gh2vHP_flh%Jgzn-i|30H91ubL-%Ww!#s}hDw$O49K}a@qdMV9 z6G%KW)J78?8BI$*V3L;#qT5v#9hjiSY35i<7@k;J;XdP=uHx1L-vPrXf4YzX$Bzn1 z8HT}-Pe&R_N9wO8P~w=qT@E%Opu~srT3LLVsp$<-{TWnA*WXrVU(zWf+iTmKTWBB* z6&)X~Z2@h`#AC^&P9f@BCFPvGlX1MzxP=xUnG$)j9xsexmGI%Yikb&#D&(Q5nLb*k z6`1VvBX`F;A$kho!jo~=mF8n45s&M)0Y9tUg8fIja z1`+w2Qc?qWgQkSsY5R2)kWStmC-JA-Ai)5b_fjsO)fY_htWELi{8Em)6|a(NEFo$B zW=QbX`FpKG2nObrK|bY*TT|`gCAQX}Hb+e>ZP!wWB1cci(6f{}n?sqas%OGk>afXh zN}Sz`=X$oRhYgDlhE|8nnx@hZ(-;CGZ7k&6*+C=DW{ftE66Op?9h8Aig*ss{35le} zV)Z|har{RV#HGj8YVkCIYM`o)SVVEdOe2k8D6b>UU@h)|NC00$!#xQwQgE*oOodVx z5$m=CRY4tA5gsDTnP!rgE>KcZ;#1W5wB*KI#((b zEUnX}DaWFO4xH6uac2B0AI#MA;aGMR1XcK51w{=&N~f-zq^^%5Du`jVjDU}O-PD_N z&t@zsT2OK0UbnP$w*gRrM&BI5D&xbm%^f~$sLEJA5$5Amo<%%0br?%R;o+yGsFFc3 z6(XbkCMg&ZpLz0t2cZJR0wXyHZf=Z+Q>l!#HrdPhY` z%1xN*I$4HcxV|}*f2-7()EMkIHXU5cRVF4PdN!7Ifs&}e3X6*^o8Js{JY4$*VK@pa zuze|5TGiqdQ#y&9C(FOjFfoNmn=t&r6Dq`JUz$rq= zX))UDqAFx+YFAfyqlH0lJ)Bz7!q*F-J;yfniWGGe$)y(C$od)xK?y12(@$77OX{9Y z#Ug6VX9uIFsivefd7i4Z>Zqxq^Fo#?%F=Eu+Z~rhCfcYZP*`hBl1Q&Jo||_GN&r_> z`?06I<YFQ9Ev>?<-@;2EO?%OvZvX(1uZr0UE zP{#vK=2`M?T8Pr2$E%~~LFZ5XKjS&2BdEvvn}gwaaid7_{5Fb8xoTQzXE3}ZmxaNN z5H|0!7WX&PidKZ9V8)2mdgdoyt`uZ?<)c`A@FiURW{5$a@6^!gckcG%q6kxmoS3QV7iQsOmLr6&{39G@aj$+|U1yd??^ zirCwlmJ&4&T6*6ub;-scQt7%0>Z+cmzDiz=($`YcK)9|egFa-Uf~KB7F(H%96(CC- z?rcV^t=JHBNE&dOMa7jpOkjqeF~iXM(STJ?7G0AW!s>A9%0W?6 zBSf%F)PPAGRD;$=a<}k}Jx=PnZDrwAySh!ULKVu;Fbc0oF4q%whn; z+gG`;Q2>$wowN+ozF*5(&lj)iR1J{wgb`BU4~Jz~>7}WsFg%|vS4~K}iZeqb64gi~ zyEf(lyK!h^Qz?VUchiJ|(MfP)Bd&%k-qze;w&F?^$4?(QCZt8vZo1Xe z32M4ch}PlQeJxa(hc(q=6fi>n0LzFZUmB(5jbtb&Wc6- zvtcE&v*Ga*7@6Ve6#oDQ8P?37lg1%g(@NYk0hWPtJ`Y`kV)RS?mrw-B8Y(cA;lvKO-NT+3I(E{`w|H8%w=I<^CM0aY%|2k+zdp`lo=;AB!jBT6N|@!waP@`D zVnx?+Nbz@(_NvUFAS2!(lzc4{~)W{Nc;b0h|B_o*PNt8HRcw%I}ArdUE0WS)>ZI_uYYvo9e!NSK8l zk+%=lqvCnzK1VhgL6~|=UyRnNN$~6*f?6qsB{T}C#O!-<@!oI&0~(HfG$))bV099XXFF)wwA_T@uw)idT{f zfdtPHM+%@2Sy*e!A*B(baM}$!nLTFWJI!7_ns^?+DubW0$6NBdW;!mV`hCv5G|l<4 zx?IbJWa|8=lqOhe1d|Eqsj1$=F!B|SG-cQdsTbz&VGBt(^wW6`VQw2*RQ7!BQqz?ltjf_0bAQ{*fN>$PN8+Tb0#ud0P41j$g8(x1q^A`)?> zOZ8tm(PNpOw-f00WI1MQi$x3+4it@|>pU2R4QBqEW{hN|Kg>QIHXUCHit(&WWOhVQ$P;ne zq-pOH!(hRC#j9@`LbMQ=h!ouiRkP(pG+2I8$+-R>RUwi^`HUh;`C27mJWwE~zV6|+ zi+3OaYX@DkKr^;$Ww$iIOaV#U!-n-IE@SlXn)+#+@XW=EPZ2ZY*kqKjFU&@Z3WtrI zSynBS!T? zIi?j<)dE$5);pAY%q*lW_|9W|fo#1#69x|&do9WxanKdh81z-lb)OH#vF?gzw!!f1 zOEuGB7*#eMk*RWAl(?=PTO881B2#5LZ&_)@(Ia5YuX~oZnCFo`>MxX+45>#SDmu$; z(`lH=PONdNy39G%Yq5H%ah$1|=_(>xY3rK50mR`HMOB(nE5MDhBad~#`mf1#pp>>j z6H<0zoiT9oN?rm_JSkO!=A6BRODaBE#%k&-5}y#uIF)W+ua;WK6&6zKOB`NwkgOyX zZ2-48K_qxiID4sWLDdYIj#A@OYPAIfE_P#%%tqXJQ&e3_!eyz)F;&ZW?ju!*8d~&?a{WXT6=_zN-x5N*JkoX} zGl72-pyk}LQo>T10C{bri%saWZN)m`(zPoSw`aQ<^r$#qKbo=pQl|~W`gf0F)sxE> zA|Oly5r(4BC6W)7RnjbnuB_G-5LuR*6K5 zE|3X%)*fiSHgQcO_wH&`BviREf;N(~gm{C~@ltUk+l$`e3;WFeW93;uvivaF)I$ zNV6>tV2H-%SDj%~PatP$nIh1rLTq(l7EhH1E*zO2FG>>SX;OjK44OqxlkpnNCl|#f z#H#ViSuspHhOZ99>S<=7sAC7X5*G;~0U8bV8+5rK_cDFqAOVdES7y=`Bpfg_sjKN8 zIiG2=%|z2Jb`O_UYP_X_(^28nl<~ZbWplA(3gtJK*2J5TEO^SZp6yx^1pFvW*5jh# zfcBzNc5H%rzgmC5eH`@urmqmD&vMN{fMd$^_?}~|r*~`$6sZ1XEoCh(7{)ln@A?qP zwglZ(Kpay3dPszyS|x9D5ZZ`XI)?)vDnepDgz~#(TtflLHT5;!G{y}jMjw|jnW+#< zUry4^9L1wwHbsr+c4B1Pxb7fWSpd%*Q=haxIm4=zIl1Uj*3coP4jU(`vgMyb-6PA@ z()l=@ajc2yo*H`RD^Cqn2v_BSfov3Re{@+`j`kysJDa44bsck^vdETcSR73$rj^rq`d^Ao6i1||DtI^z5 z*tJF(mMZJ9>{6YCW1QJ_=BOD=eL%=Op=4FhTFZDz1+6V9CK2L@a^iQ_n8xR z+DCbb;lvMQQb#>>*Ef22s>HGR@fwbx$C+VFO{J`+qj>11qM{V>Egdo08Wd>6a>jOt z`&PeoGTW*IVy><A%?L`sbm za!Da}+)egrabaPv8-2hG5mxRs<20enT_dQ%u{xZ8FGUqNmZ;Vr=5tX?Bhyo%gUD5p zOC)kJu|uE$Uqi|`=^_#!8q#gVZIV6}D-P+6eg|A|S#WGJDi4_1eG|&@CKV6Je>B6qsYV%sVd)+gPoCxeW=;E* zQ3xTnk^s{~**m#_?(~!U>wl61#5NI3nYX5yU^P&~)!LF;rGVj>w237+bp0?@DAB3f z7%;eEN4&lGy_=O5<7uR>G6IC)DJ6<@k0{kk{MH(QhSOHk`Os6OA>s1|=JNdbl~^;u1Dc6H(IoR_Y#6!XFKKN(}3a(o)k?9nniA z4l7sYf}#!4tbmbtjg{^Kk$Z!7@2~)XVwg6iL_vX96ZoO}a;4~oR`j`oWXc$F_E4J( zsmQspvgRFAOsez{wMHK;VkC~~P|%5DTd58~@wp*4UDTdhB3S{urZ>W5nw&t4-mV2R_F#qU`-3M%V5h2 zUXW)H4^GS|Wx)D-h2Z&ODx7YE7NerXXshY4vw>8{M)6`ka|&elgz~gdNTH=hL@cdz zK0HFz>P9Lu54M$NY~2|MzyZf+qF&#pilc4<~l7|w^k>M~? z0VGw!52KPrtE;MdaQ2K%wbDQ2J-s~zwVntf+#R&xH8m9xsdVQ6K zPLE|QcQ3h`zZJnT%v3`L8Har1%~Z7XsPn{|Y1pAgHhXQ-Jpnrsuemi4whg=%hf!pUtIgRDbuu>ar6ZWKVk8LIM4^J?>3Va6`q{AyGqRa6< zDN5Cq5LeU0u+yr`PSL9}vX)PJ>cUG9_YH0u+2$(NKszWmo7gqof}s*N^bU#*s&Y$X zSbTVX3zbCC3TCRS$60As5l;wrbqgbTQAw~c@``C~EvFPB=&3}n2s=2{ZgP|*2}=i2 zB4>deCXhH4Ur}!<_ero5fqed8LEQ~Q{4*K2!fIbPN?`$RA&X2j+E+FuU(X)#^^CgYjTwNk2FnPL5b6hNibNRvY9Zc;b~qt z5v5=inUz8^oq#ue4>Vjs8$77FryWzWqChm^g=dbYVH7JaADFRfF)Gv3EOa%Kv%Azt z(yT%J#*_~+$N>Njb+wy~xo*~pNB$>Ay%?pC#mD8GQ zVpSEA(_!gK%*`!YLbFICT9C2^H}dRsDoEm0=mkLyi5T@7qguj*t8U(^os9KUt~rYj z%vBY=OvZ7Trt-0BYRIPvP365*Yhw~^yiW0{h^PQCI%o$R7R?Zqlz>e>r zcLxXY&xmGuKbKBgL5M+oH7nt2>PIadR8YK5rf8&bv;ntWEG&45_85uL5wr27 zjpi34!>a;utIy~s;`h^@l5}-&n!c9iZlGt=fysyFT*tF5;kb@x#w3Yr9Y31V%+kS1 zgq8AA4{#~A_rD8KY~XN!0#bTEUKC)f#*1?#udnpuRcY6sSbb#cj&ID}L(X_jE=xkO zj5iCTHF%vy0ArlZO%)XNk~09#;boT0=eZq#P5C7@p@f5vJ#^Z$1-J@HqSJzPtE$v5 zSh(ILTCmdBPm1DLsPgNo=R*u7BC8dvGtCOfk(fe|+L3D;3+5ZSX1kQW(ICbfFzOVV z!R0neRzWEocy)?CzKgnziuF$$#4#NEnQ+LPBf(FIRpHo-)N}_Jh^*pB<76pmV1f_P zqFVb1I)TMkEq-0B1smnhs^P$uD;gOyZ%?sYdmvTyy9vy6(?_13Ebmd4YK28o$4OYm zIz8o@H(I#jiCSIlxHg)p942oud%T5xv?pDoY#|{j8qzV_)3$;dUr${<#c`$0)zoyf z-fAXa$1@%y3&~ekTA!wlDu|;*`(-`U3Rc=)*F5*;$(T6O_Z~`6l3NK881X*Z8Z(v? ziDpW;F}BTE?;k0o&=j|{Og1LeS3SjdHvj!|=S%Rh00m6sp5<2&(Z~*>=O{M6%G- z&dn>zC2*uDL%l_SAYYHRtzG0cy2^~4DW9jk5b3^B%rsc; zAC5_fVOc%aw+Cq9str!=rbbaLk;Uc}E_RutKItoPYhhs470Ve6Wo%mougC3ICRpNd4T}xJ#ET1A3KZg< z)uu7PaHFer+lze&P*CaP6kD^OMsV8tI+_fZnsE%%QH049m~IzUP_xuQ1u1IC(v{ko zV5x}iSMRvkgMJx{hdZ#9jl6l|L8k0j{K|u5o)9+s_*ANIQPrI`!7@&0=w)6Bl1_fa znv*u+IJF#@ZVwbOV6_x@gfTrpnmLTM^q-;zAj<3llW;)|u0n5LPv?*g@ zeFY;Sx3_g_NK%YOF%(MG;*g@Gr~;#pohI@4I;WL!>{7A}{?cL+&T}pgGtt9RW0hoS z7L*5O3kx)_XqDLrup+|2Riife5FpZ(=2rz8RB$_g4=UwJ>VMP?J`;sy>NLZq#xNOt z^DPD(uzaG`Fpa6Bq&pFw>KL(Ob-j+Z6uZc6?$P^G;jcNF6!>%lJoMCfy0z*LF~c<$ zE1EF8q?mg77)}vEg~1jTJjkrRTyd~?)CFyKU75UiS9g`!v{Iy`sH=_`3T?ElP7*+o zO!#+Ey2+KX3a^>M>GA2S@YTxl;x$z3ipNbxjHV`l1}MfcAPTG*5Q}MR@qhC6h$R!( zPp19NV+?*&?U;JQoQ_t!jWZ)h?>wG2(SNSthQl5vQp+n>IvhDvWSIU02VMWvK?&xO^RI+id^x)R_? zv1L+>#SKx$rh4hpa6+ByEfh7ChFK6yN~cMq)hEkLB#+>AM)q^)k^6tAtBI zhvpm_o{FBKOmuNjnI)^NA?k$dyvFJsLY1+)kR!ag)8D)&#teZ&b~6h_JlhH)3=B4b zLxwBUgNxM9hvCMKry3h1teX@g4~;1&j8%t?;z?QKkPxl3>8Ls$6Wiv8M~eV@I39yF zIcGTwYF4)4WNj*)ogyNIO1u$r=32yZ&I5*3j9yims*;WxC2D$zX4?!+OI0kp7;X$* zmtX{20>l`a>mR5;b3^eyZq-_LfKsP*jse%k)g%!Bs#5u4=-aBct z6T)!js*W5+scEa?xAM6rK;nw2Z7M8_8dKdQRXcXEJ%@YqZ772t-nwbW%YsP&@aPod zgi&F2nNtzWm9-MpW&AZ_f;uW@5DZMcN4oJPQF3EhA9a@6k9Owco_v;^2nvNOVLU0@ zOSD{DscJx45ws1b%Nos*YiTnTel*yf9b~l_B|*cn3OeejCZ?j9K|e4OAc6e97>46> z*zpbZr*{BGBX3O>+1)zp>QjO=><5JjR2kZ*DCK-(7F;qJ=w`$q%XyNU46CZ7IGkx! z49QJU^2(0>`AZF?Hh^k4w#<^0q)y4mIGD;E88&SZp?OjUx@V8tu6x0mRRvNWoG~ zJE*A17z&qFgy0x4j)xXWB(G_~sHri$v~b~aiDM3ioy2BGnf>J;53)w$PYX+PjN?ig z03r_9rVLLBYOj^Xt5NWbQyi{(Wz1D>-b~cgXkduAhDKyjv?*q@0zlMj#fWHNc7P|! zlDVi87#XDnPExCCntHkFVU{X2`I@O-NhPPMR)|QkD=6~hWiniZB>wG*zbFc#06Qw3 z+^7<1`ksa?BEGGceSCEAPb)!#qd|x}1lsiJO;Jw7SiRkuKwIA6i}Ovb#Y%MX!>YXV zK_YRdtnkrR;2B*gk_hp+#vg)3M4n`|)jJtXvCRQx+OEFvW&|+p-&IYvmPso(d?_pD zQZ(&8`U84}RY{1?iok)g%($c#azj-WI};T|6Ff;9Ew{^ekK9$*%GN#{(+Sc7$kmR@ zZP_!xbyBY)dVsCYewDJ`RL|A;r&D^RopUZBiPZH!G1b=98|J=d_D)xm}PrMieW814jqG;P*zDx zh|`!EVyC{0zE<|ww=H0FJPkDJ%fS&TJbLKgGPqMtPLdKf50}n{8d|(37XCqp!HrLt zlO4lbFy}l+5-k9Q;%QJU5($j52-+y*Y3vQyrH0;J`(!qmA8_GDxqfE5w3d_vMkgJV z@0amxWh!Z~d^)P2eBC@aWg5}ROe%hEIOCGJrI8b4kO(i8{saPrS@df0njiaYB!5dtfprmaK;FEnumMIdo zh}p9m6ui?(Oede#nsMmTTHx_uuQfeYElID(Dk!h;g|v(D;GJ=pn@rbg@DE6 zD1EOas>>a;wb_q0^KF&)P-OgT)>lsihY1=1f_kaL1*)TlOhKiMF>{De&w~E|G^DFy z)lg20G=4=4iX`(w!mb@aZMP%?ams#NwjxYV3SIf2@=CDx$v?W0xTp1#7|Jo6I}4E~ z!PXi`98$AL$b>~E)R{%WYwiZ&h1hYn+ijPy*-zg0w|0@ofa4VH9$Pqm9+5xYdNh>VfOHpRG|st1S%j|;^u!>GVN8gnbl5SGePC1B&%RsGZ~zfqXF zt&%W!>zZMjv5A*3Ejf~sc|!>qNCwF57#o;{+i_wpbQ#+C08X4m0JAof;8K*h2N>h! zvZwT)D$&n&oGl5UU1xjHnNEWX=`@` z9$en5NkRbwrk`%jTU12x6q7wY#^%Fg#AM6vf?BLXj*haLt~XN@GC6QQX68jDUhDu2 zMX&8nr8-juL>_UgIckt6P87lYL$9Psv3d+q@cKL=MOoU3nfI9;qz&6^(m< zZDLOh8wEIn;uy_PsU(0#3c|Pyy@>qGG__TeMZP$xDMyiy^qSW)JBo$_qjLf>VD ztUk`1aZgG~nr#;2P)to?T)sthJ|#3#QqfUWLx$1e3ZFJ+m8pE~geZyjjn_T)u{Jk6 zY=oH{O*-;UshI%OS#sShH8fN>1w-Sw-CUv!Vmv*}_gZ$CuIdjA`*aYq8Q(~gHMMjkh zk}F1sYwvBuHsA@?+(~pH0LBO5M;S^Irv#r6_|@OkPl{4>>!4WnD>7o)PZgwTDZi^} z64om{0<4s)2I#DS0AxP%6+6K<;Wl5VQ;7oz_RxnnxGm{e!9dbqIeKW$(b8g>!w}5$ zxl0Y9sKGHTr;X>%1-SpcFG~ z^mS6FEM$88OA4=}&3`+9Wo*M#DX{!9o(flLzm)T-kWEg70=$v?%EHQyEJ@Raq4tum z4kS>ejJ@9I1(*aM{Cw@O(Jc($rGde9|#Sd1iRR zBxwnIXl?$n=GF_QNbsj^BWdKJ0tBr?1M~S(rwF3U)OmXhI8|O5h||>?9CIB^X5|_f zqHVLlU&}8TW(Xa->wesF;Z9;_0kV`cZrT6<4;S52@OoUCic(?|#g{88AeE)7!)fTL zQmzRloGu_@K%1g;ln~(*n}!2IED@&J-Ed-Q#@x4cGLUFRsLQxkDU`hY2P;dND`#qa zKOe#*3~Sbccq1~#u~!JuUNGw0LDVg~^TFk%=vSeo7gmVwWQ{^`q?R$#94eNh1IBW7 z7#V57hM-a{bwx@L$q$mz$O49081J(^*5`8T$6LKw3IyVK(~M=zwk4F{C^60u%UCL_ zvP^SDMD;?7jdH~}mcAtNJc(kCL9oRe%9b8bH(g+vvt#283BdN8Ve zhdSbT%{NQ3XoOYGNsre`1M$%Xtl1Ssux+lXM zeF3Yq(EyW=&ZK6@=~gHyFsvp@8VMC}e79I-S!j=wx<`?GwNgc;ZORtFjR^wWPTsJs zMPfWkO>q zw*8IIvzlIzRCR6k{uJP4N`&d-w!i<@ZK%YmBZCvDjygOUGdvMc&xT>}&l1wX1mab9 z60x&_fj7z++>ky2wwI*@eZqaTY_=sqTMR`9(Y!dFZ53@iut!@XFlEOkek>QMxPg*~k&7{{DwlXZgzd^a4-8BQsptgok$RvGCF)Kg6yW6MH~ zq>_2A09~q7i)y{NCATCsfZ>mo5?sJOGqdAIXCGWTESb@~Z#F|w)E=i{&|&G7GM+mw zA6HF7Pb>ulM6)wAP)8Dz8vCm#+WK1YE>7Yb%$`aJ)BH!GjqF8^;`ePIOsk+zzNR}&=Fw@= zsS;v1Y~w-|9Ta(c2&2a_TxxnThS9bgO@iU_M_WrnhfgN<* zcIUoGLHGP=YiMfM_Ki%Pql|UZdnikaV%2MyabrP3ah0sg6X2M14)yGj-l8gqnszX* z($;rftfO~uHCJe@F^1cS>3Zf&&g3&l4UAfRd+eV$ZFmS#@(iW4z`>GSzg%Mh$w zZy2o1_=PE~%aX>pJTpqF)6`YGtRX~I^JLhvN4RVoMXcN{{JCrtrb#sBZJ90i#F+5u z^TuMhVV^5qg{2lLjmwMTxLj4(Jgaz}TA%?0aHJukRG$wS1C0?+SJ{qua(d$;rdn(_ z5~IW_@jA>+;jEIV2a+d<+^4z%Zw2Ju4vIh=U6m;!-~wdPw(x3IqO>GwB7C~4vU(+y zscJFz#4^-rGGi?!7lvVRNAnZw3QDFpquk}yU$|d*-oV=Y9*`7(V-Znyg4&3XMIJ1b zm?FYxF-$8o(ZgF5wB|YtGQHEvya=-wh1sJiCZNO{-6QQ>@r2u;4M`AdT9!_eh@s>9 zy0Oqrm@o{t0L$>!6s=m?+G=r8RZmYHe1aGZsZ$bpPO~v&3U?8>--(6B9eX^fLT#kX z(|pwl^7v&=Gmb?bCy7NpZeD4U8g_<)BIyuGC%Z=*jlm;fVmw>J%elk>u+!|?s7$B# zR9s&Zj~j-nDqKpcf|Q1*HBBTB6N#ppStRt2 zjdz3Az_eI)3ndY&#_8)?j|qX0M$Y;qf_kXm&DjsTx5`y1Yc;{YHu{??Q3t>UFcP4U z4%!B~pw-n?)KzPT3{MS=%Y{>n2Bt{rs-(lgR*htYt4kDSP5x%`&0}+IIIiC3N_)BS z9BGudB1XzBT|Ld1v^i&_I87aD;hAp)%-Qm{2*dF;+cqC8n2d4E3qS##i3=oZ%G*wW zkVpyheL9qt3Ks66aH3o2_G4BHN;3XAh1X(O;>Uot5DX|W2#g|jtzR-ZmUyEUc4c84 zYD<;ZuwnrXrNpaJB&5`ln0HPwp+E;ZdVgA#i(^<;S&ptgoGoQEX@t_rg1sWr;uKWk zShlc@3rGvhLorwPjqWX|CJftmfh%?i2M~DBTa4dO zAyX7@h~Zdm4j^FpM{0ruM7@k-&EU?T& zHql{~QDT@~c4frsYvZPxZ#t4HN0C}75UNh`d21ma`2ysNc=5Ka+HugGLjg2XnBF|Y zV^BDlC*SO+dcW&V8#Xs4DFachNw2}^BB=BH#raBQsu8s#5VFM}x0fofV%HW^b=S5m zg&>a%RdT%9OKo6y%txg+;JDAr;MiUqlwd=L$sQj0ivg&3p!unh>fVy2rA0@x6;fkT zx3E@I!tl^8sYJ=!j^2qBVQ+ABcWD|zaO&xUT}MHe=xT8|Y3k*`r>~l(lNiJ?N{MS; zGGI!%W=}n1i4_`4DMqligzI(}t5S7rPRcm4Luo>SLDZv(KN@g)nv5y1_oS&&gS1UY ziqO~lzAsH<_f`!<5Uns zSw0<3^|aV6XP%K^l>((zmZ!{#UMj>Hpg{1!Zfs!RjtP>PH!oJ5`!IAx5-1}{xbMJ;_cD-80(Lr0kETB-{87_QML znl^++53sfMCfb316FAb^RG>i{1uP0m(m~_4g-NngZIZH+1)6%Oq>~T9qXE=R@k) zi#fLKKt08P;-35ghzG8yw!t8QAB{c7hb$>kikvs-=RSteipGt)nUDBVCb2 z)PZFuvADkwm4G(kTT^FY7@Eb8Q&HhjGeL?xbK+E|7OBHStd$Ww)`$w0ncX%n?W*9C z2qQvI6QxSg;D{%frqt@e0D=zz8p}=@RZ5qcVlG)g(FA+x-xSZdmTAgQOIug{S(gsPV8yFr zuB2f>1syEm7NVTfM=Qisu-?7|n}Rjs)TwG%3OG@3<=APXr5-uN@u;|kE+?BK!s;li zp{LK0R#)PY%}HBF8~n8uIhAT5X(TORq0FQxvTa~*#%)^C>`i+1<6CJ`lfsars90Wd zrp2&qx6`~kE#qrR1|ggztEPe~EJB70Gs*KV(n~AK&E_wX`x@JYh-(|IA+nVzP<8>= zL59@b&{zYko`KO$nQIxv+XYNEhZ>^lMLs8o$BX6c)0f3W&`bQ|%w|Q3sv2^VKvctc z{ezrC3B%}c@AHX4 zU!39j3{(2ElH?Q6)8UOIkxL8}3X%B;k|^^Ll#Tokc{In7t)EOqKPr)YN>`@u=CqbwMP=!U47PR$^@0 zo;z^T-`W8-DiM`+U0vZ*+V181vc#y|rUtJ#HF zCK*qM;Tdl({{X)zD{%VXms1zo+bZW1u}ezgLVGq#Ad z2GR{Fr^9RMvYrneB@wAyPM)PEWPnIYp#gtHL2HHz7z+}0<6oFcj(~95 zKN@*S8l+-&QeLp*n2j4fH<)L`B!zKFsc9tgrU<8DW%72l!tT)bzq5)8S`Y%IM}=)E zUmO4%Y0$?sa$)$kGYr)Dv(~L{BS!?1(Nk79gs5$|1gdalI(^EV`gk)n6VU6TEa>#9`J_CKThy}$eY{eI8$y#CMgdY;euIG=Og=bZOB=ly=4_i~zk zjQ@BpBJbvmcNP%^4^k8Y%raET!(&`5*$nW*+h%f z2{|0hpvHhc5nYV^Nez&g-5u? zGiW~XyGWGygA{8j)Xr9B$1$5@hoTPAVuN*#9im6Z*c{slT|;gI%0jRy)K*4%2ZI`F zLv(Wfs}HE{g#NXdqeqXTj+&zmGr~;K*4EahW*Acp#su^*i8&6od(0#jOsp zOZD-iw!(nvV-%tu@4vq+m+$kg(;0sg-NIR8c zLjmV2_AtYCO{RTl(LW3H2-|}P4%34V?l2X~C8+)^taUK`=P*#F{)ZI*9PL1l{TCV` z-)!i?kzqTb$4scS(BL?FEY$Y@zJB;m>t0)taNYl0tIQ6eu-SO55%<3#!P=3G3TDL6 zNXMgSJN1dQpQP2d{r7>pi5|8>dHf&oa7{-3=3&^O|Bwlj|8qX>F#Wep2-otT_WqM+ z|JG|w0j+WN9~wxg*w$b`vjN#K{aY1+%HPVA76~-yQK72*@rOvG_rDaBjycLqWE&Rm zDK5Td0P-}&yhS8`ijbz*F_Dn}`yAI4ixh$Uk4~t_k0&CIA~NgOORblbk&=?yAS1Iu z4k9nNaig4;imC!cPa6({YD0Aq##>Dhh8BjpP%{U#h4pq@TU$8F3GcYWb?Z*s?Ls7? zG8;C?ZIsiLm)G2G05#bD|NHsTA)+89`dy5=PEadTvg<@e#N^k>1Hfm^ohm5n2~~vH?7R`BJfj@moKy0L zv5C8CNbPHri~%dWWv0`-31l|R7?bJNHCp8-!&G5hfVCCi#|~aNT;YFKjJ|<`d=XMiiaf)F&EhR%FCz7FG2Ox3Bi_ zmd^F{WX6?M${X;AK1SmHr>7eGlB^`*=#;WeyW++I*vKxnNU#Fu0AV+DFs>-0zG=3V zUWoD#!?8Teo89tp4q_2mP=1n;Ki^kLDxXqb(njGl>tt~+RJKVk+*=^E`9Joz9+%c( zx3q?K$&#)G@5>*^Y;q@~tzw!C?D0z6QGY^4V>zPw-ce*N8t0ag$syva5N#}^y;z&5 zio*U~vC@oGX<~}MJ={%+V#K)GREuw#tx+*iGjY#S0Xs(ddwM6i-+Sp1FqO%bSFF9x zCfT3W850pnr9j$ra3$>8kd)?<^a$OwqB)PNPKz6iBWnn}?KM(~-z z>mcINZsd^DJ)&qG9fTONEj7HyG6<#wSxs229T?enL|MKN&mG#3|pv6`611)at0L zBi0J5G=p?a5UXzj@e!fQ1~p2bmPM?C7&|xFw+FeF>oq=vuu{&5DXW;cH+Ulk5x%$x zCnrf20W%~5(!tZm+c!%k$t6m21Ig7zH4P$5TdI~B8hkborGrAvM5pmSQ0n~MgfKg z6l=4bhOtKNL6pXaZg7JF>bdJBV)S180a6+JPs`KwbGHx!oN&1HILk8&kYbOFn20Bn z2E6ndNH&UmHMN|^qPNDom9(@O>+VsGWh3r2br^9Kh=m@?TF~OMV8ckva*Es$+F7y6 zCO25weIlt|gv1^12(lg_AW)bIF<1Z7v!Q6l1Y?rNjJYcIkm*@Yla@D$g83+uZ{tzq z7Nv58y;zkJw>l(zodnC(w}8}RcFDo72h!n5I({>|xTvJQ-@jNznmC2F=m=JV@O+9& z+&Ro(iyPMs3jMleRiKj4L5c_huwfh`E;8DES-eo$wdDHy*P>9E#OY#`SdI}z+6{rZ zkhME8f`VPcT!U`NJWTR;Lg3-h;@}nLMYg{GcnyI_Gi~Y?0LstTi~t4OJ(k7 zCBp|8_aU-yNH6}lf3JV*0e?QH&4bk7iO%x3zn*-L)h%t@0LE@hJX$lrTrb%7b; zZ7@wOyGEQcgV@U*5tD?rwMOFxrhiA=V=b4p=_&cuyEb_o<=8uQ+=LWD44JsBOvc^J zu?TxvW5!30k10OV`xV2#Ft^!++9El)-e}%rfcXCM9&79S-sc*D@Q{DoUWdF!;$`jC z;1hC>;EIew=&#Eu63lCo=9kc{uPFHITm7M4LD1nlNloJRsu>ZF7=i-QQyJet=Pj$I@kd4On#X-OPaJ zxC3Za(ls&CZP59Ou`Z$?MGiPpTx3YNz;m~r6cllgu88gfgbhZRG^E$g!G{C=ZPSfu z(5~0z`6%k%am^S#|K!h%|++lDDJW;HqnCfu*m5cRa^l!1kV?9 zZRWPrlqV5i%+`pev>x(%ZFx{Sg_V-e=OAZebayL-qW1e99XqI|$Y{zUlPTpzCgm}_ zCYC$Q%eM0PVw{9a!n|cv>sjjw5znN|tFW_>(f$k;Sp|Xe-qkeu2p=xTx+^7}>FEu{ z8kPKEGQhaYlG=m!tIb9m9wa>3?qfu5W)#F|42fEd`p>cPm#w0kb{+9_^GsrNv#2CA z#T1J>PEK`q@-8;@k0h47wqRd})Us>bGD^B&#JE%j)ty71B~s^+PpY%w<@8!LLyD;p z$H&;z#P#ZqTYW(auvzK^k?T+7U_Nj-N}3MsJliOMOd`JU+7~-;@Ghb) zTh#DGXtMFhKGqbP_}s(>;-l$Xl%l5V;N1`m>k;oYv9I=q)*^1XJMW6CJqwH^ZLTH7 zjnwUKkH2^CsBL2C?A)&-vuB}gZDig7*?lW@jaVM8?wk$9x;o9Y>g!K`%953 zDG(B#=QMAb4?{{{KB`lMLZ|#uPRwZJ`t8|V;_hz-uZO#{4AJmQSn`cVibALnF`0m< zLi7;(iyxN9n_u+xYa-GM8(WZFN_*6U5#2szo=Kk%@M zTZ(z#TvTf4qZo4)V}wvSE4tHqRIyxR-ZbIKPQ~}z{O<`Ga#`IW@=dd{##ZENysD(7 zS=Mt5o>~k}1%{Swv^O-Bc)%MfKn#kBPu#U6@qhzo-At@@)U_ zs;WV*&BhS7eZE+V2G{;o%xO0cvzj=qrlO_l+Jqe81aq>B%TuNA^=&|(?y9oyFe*mY zn)Kq`rm6m8 z?jH;mV+NsBap6uL;`fuR$n^tEeV}}J1oXXozTS}Ku)VaJoFb&3gqwI-8+*VhwWPbB zd8-!YhGu-cS9JEg6{T?uZBSBHFH2Df+rAERy%Peoax915re_!;;Z_)Gre;LG)41r9 z)=a$XrmO>Z&uo%zmd-RtsjX$>4j|j`r`<&%9dYQv0)rki2rCmaWr)t)EjCafk@bo; zaJr>gN^{J>KoN<25$6jlD?le%k9h>|V@-?Bm9^3kS6Nx3qJBI^T-mN8ZoqB2C)9Gu_zl=|-$|cTSCBV?N{-`WaOtUD3FKQ0rQh znNpCeMy;Ve?f@{V-Oey%A@H%_qS8E0ZqpUnYAmQ1AA0XdjQ#a_142eqt*mDWkKRg1=63lh609Uu`b09iF9Szk zj#ZSelMU_T7oTq$NCCc}G~+(AnKm#MAQqlOL2VG*NR=kOpjV2`c9#^E7o!wsuL~qa znvk^Xg8sISri{xN7^J04`l@>Ly}RT{%#>M2i-$gWj?YQi4UrAvdEj}>SZ{W1P@@|# zx}Mb64!{7Oc0tWJ^^$H8+A}~(NSZ@tZXmEDA)|*K`{zP(mX(a z1z0;4Q4HykuQDPIin&TbkmBMrq->C)5@e5Za1lZP+*D$bSsBSA7>!VpW{MdzrL&3< zO{A*RW0ImG3L^3wER3MdK_QunPTl=V)aq&@b~T1Os=xjGd!mGjVUSy}N(V);)CbZH zx!(|y7J$CjC0+>WF_So58e4YSOiBuYnF1k%n{kSaj+1oNc276AkRo*g>|xqEXp56b zo300ZfEhyHoxvAFvZjcA9>ys&H${&S*QOL%5eh`SM~tpy0y(39Qwy4sZC2801WN_3 zClk-4NS%hbvH1a~k%bCWc5o)o!#JChWl>ww<%>6yPRYkMkUdKZ#95C-4PW1T+2hYI zmbM~Q`lk`w+7M=^nKVB8D&nrpeI*JCo!KnQ4@yNa5oBnPlBg=FvZOUca248)CN@A@ zT$>-}BnMfR?F}u04uS}z17X2qsxVLYm$U~ctb^b!-Nb^#+dYh}#3+g-yCDYR(#%Bg6>RglPwLGm68C?wF=&&RTQ1s7@W*MEns^X z!BOk3RSu*8XPLcQyxoBr40!Gq$eC>q3KC;t4{TtY`9awBZ3r3JAhRUqX$^j5mDxop zsmq90CeEUm4DT$ysvE6R)XaY*f~hQRn7uE&*pMpi4EQXRp7u~9@|p|F7=qls#y zL#%<)CLX^WFT_XSEOO3iHcKvK0wi>||+~!Hv^CMLko}O`1t?uY}`na#LmvGQFgU3NXARL5NK{t5N z@&o$9h7anb1vp65axw1N!^aK09ynVg>-jfnxFXfjooe2Dy$A%A&3czAoG?;WK;xe1H*A2zx z(4%nhYX$g2^7S59ujjA2$G@H_^D20ZT~t?5@K;eK1riS78n5Rce)RRj_%F#F^7GEO z_kVO)g$=)h<;d{I1Rq%b?nW0!JT)xbY`s{I-Cb#oNq-JkRogt{vhWgIJ*N|RQ=a~p zA0kiVEPB#MKhpl!Le`N7Yz_Eg4V44weB7C_=Z+ta&N`Y>a))ik9*DN=by(eV!va*6TcI| z7vz5@AAR&u!+)hyf0cHmPNq(B-xV{~(!1idqy}*@#o(aJ0;HOBY~JF{xw&Th;i&^judN?7%! z)(b$vWDRa)T0hDSu^H?smp|*o8VVjdSe%8{%uOsGzNDe6fLE?q zFHkPPzn`pL!1-Gg6Y*b6OmsIoAXlvtl?co9RolFpxz(*>ch6cKezdP(QbSq0`NRC` zqM@z~p=lv)K_kQji9~8iaF15ocW%&=M>e=RDZG|VmeOlY z3{RE{?LE3jriN0_?(-QnPlQ?4?z-cO#qM`&etG8R*$=BbnSXU?&A20{Co?><72mG%;8s3rePO1Nt?(%;BMB0Z! zLeplG`e*xH#)~}C&H6$Dze%&QOJit*w^^%E4pk0U4iA4(JE};321Hn{fH-{6go=6e zc&`f=V>9vH)8!Etqka%c#n>co-&;EwC-oUx`0a;?)&-$@%O83aXypzoq{?j6Mx+(E zUC`P=`;~T%##SA{!H76<;z4dNtXNIyo5H*S+YRN!I(+GaL8}@RM}T(~D$G)_xRnGuY zp>TZwsW5{pW;%^{!fHS!cJ)Xxbiu7Pf=hlf!-8R-wtZZwy(U(Tj|-NSgkY+K*n z5&Yb2DK9&vyDQ`cIvUc#Ou(I^opVN^qd~=awZNB5_Tt7Hn3(+OeCyk0o!sZCW8F8k z+;F26&98Y*S@9Fmamde`x$HoEh>@>)eclAUw%a3+a8S#lec3p(p5cfr;AR4Khi!?h zncGzzVL1v6oGzwAp~lfQ_Xf`Ca+L;k^K0h}6RLd5jg|W?_jxl;@72bN^O@J07Vzh5 zdX`LRV%o?M<%3?>OhdGc#O)>qXl_1rlr}Hl-2NGSpUA!HZM_MZ+maCV20_v~J4;-~rA~bdF#)-Xn5fK$FlLEiF)3%Tj zr-t#5!#z~|GJcWvE-~}nCJy(RiAPyFytBTKd974|<&pXl`<~&bo8@(X0&(}OZO(^k z!aKm(LVO&2xp;(}+Q($)6=2?y1cwm4{Y>^IR&rf0(H9*sNYgx$Zxey-8Zbm}$|}@A zWBOBj{h55oF!Mm6bB+Sky?*3cfnYZ#z=3OXZr?yDY`KBf1ywu9TiBi~uKOXxMDJqB z#roStyB}Kg#Ua+CIM@?4D!~1RHb9o-ge#2Yx0ZsPLi_5!khrF=yA<1RW_wU+R>-to=l=+a~ zkXir5%BH)odJ5y;OmRFj^VulsG7nsP&fud-%QMfeEw8rhMvqQ3+3dA@Rz0r^wG^kH zs@3`-Qj@%X^g}aE1v`EgA+7sC++y*MI7E(00NlgD&W_@lzgm9j!#b9cZo%k@xn!H< zQHLt{+S%2`#7D2&_gj+`(!>O*Ly}?XUCd-@$BYeCa~=`(_1`pyW;n@tR#eAHSS;wA zFtTvavgNi++*x+589q`sEX}e>`I6kRfgmj(II60e#cJ>xHgLXm?b;32sDnh~^)B;o zs!^*SA`Lop7Vhc(Yy0+5ogH=a`)QaO!*lyt$Mspq4c>Xd z-fc2?mxp{eWbuBJ*}EZx7xdb3%PqTIiU_l$^p8$h>vVT~8h7MyoMhR*KD z^%2Y%e!Y-q@Q$~mtaQ&-W6ZnKR@uRKvZLAW)(;^ZjesYX<}fya_pEqmy!%d~7{zavwWi=)qeYVcDkeT|s{$5)>~a@ogX_GaQL+1j5DTmY{THv=huvLOqbU?N3~o9YB3|RHXo)2%l*Vy*qTm%6;p@`!q)$ zu+Iw{aBe2t$G%p61L_+U^lDW(O`RGR;3_f086<9&)HF0%K?_yKb7`w=iSypuwYOt` z7j;@CytSg~u`Bnp1$o~<1FA8yYB#}BfpDjCVmVRUWmxuFgo4Yi%aiWmY-9I&+^WBN zdVUkv#u$2i?+4f^FXA(w+DdYK93P>sr7WE>q-Y zY<)HygQz)~!*Z=;hbLVDvSITqegXI3(Ir8Fqn3rX`Q_S*=Dm+?T!BM%2u2LVR|DfM zP|oGR1c`9??UO^pP^LJPO$Ig%_@@O&>eeBRpk!z$sCY|E4VO zAOYec?WUb%+kzMFOL+=g(9_^Ok36sb;=JzEdBq(t)35PiUsqjLENVJkQc9n15f#4Y zMW?n%Pi;{E@AI0r9qZb6tZP&IZtL~A{)b3O-sifn?>o6mn?#npe-kzT9{odP+YgcR z$JS>IsR)s7)}9)*>$(K-`%UAnV|!NY1of84YrvLDzAo{{9#Sb`?B+D5_c+EC7M&w2pjbX zVWc1rn^>nHE~iFxvz!!&$MFjuBzv+FwVg&io$qp*9%uVg^jc`l8#RfCc_<%GlIN(p zq1smUGS)j6aj2nF^W69o+rGxE?xTdUTWJnb-_&exJ^*ym-m`J2S|`bMpz5-d+dTj5 zR`Gm?NM2pE>+~g=1}~OEO?X*eRYT6F4VN;~&kF3@ z#T%;$47g$*Yr%zx!gY<1Gd&(#(I*`am^kSgt!J*l60s;(R z91sm#&MRkSd4%6|+w{Wpxju6kzGUmXmw-B%Q6D>+xLNH|S25S>F#-2W*gK^@FT)+&cWR7{VMF7=Hp)f2;Z> z@OKvy;ViOIcKSgJjP!zM-lr>jx)MV$8NDaD;$5R`|_O!W4(Cs;w@<}Fv34Xs`1$HsPN%; z!0!!Dod+rqUW~rst`es}>nFGOtfRM2dmCWksK8!Y|@K z4A<2b6LrE%G_%QFKI02C29zj7XEvNPTn`e z`5H$O0=A>nHj!ZInhiVP1JVo3+)TN`w7M(C)g=Ka_~qF@K|tfer;)KEyjGr!@Gwki`8;I znDT%xfGmFcMhFF7PYjAS2#Wql4p=J~1ag6}2e<=7fZsd`F9E?7;J<#-q#&xOD<-c) zFbh_)hk7Rkt&3i}0R$cFMESvaXP+_?%rKph9>1$=chdu^NHmj{ExUHZ$PekxRzs0n z!ABL+gXtdNybEeSBWV@2b8O;8R+0R#jZxbmUoW2hat!?oxXtdH5fls+FtDr0gp!r2 z-`ppzyCGp|DCuwo_Xg#8imp^3wXd#+OQhbLc#F;}!x)<1S-Ia~F?Pv3U>is{d{yhL7czkOO`|v+!{;L9LD5Nc3NKQay z3es{*x8d*9nYb>)eqRUda~ee-OgT|HJl zbr!3}cl>40R~yTX%cg^OLgQK76>JVxTM|Att1A$@eo$ z=%o{2ech{L~#Yn$v9F%kQ z{e2ranx%GipTe3o4;A#y#55NO&ik2dQ{Lcut!QKqelI+>Xv75i^G&k9w!Bt;a32)l zvCDhBaG-gQ7j~^(|Ah$@v}EJ=u6@?ph%(9sL>Y&-?Qh#%4JC9gvu?S~8*>{~lJfx+ zK!QN=s;^ADAJ~XQ5NJMz&iiwlCjFz3@=I7&A}47XLAp0S(Ko{YqQp5u(M~;P-pwG( zGb;*yh}2d_ZF?$(1q-XlT*J16DVi`RT@mEWV~BXx757-&5WRMJ2hq%KApMco^w#t z&e8&Af_am|naybCiJ_vrd#TIS3Gc4~Du^w$V#4m->6cG!dj7dtuV5+AWa7|F-}f&s zQcQ})b(OYwO`X3XDAXH0>8L4tg2W@po%}^Tn4>NfO>p4ffm8om_4n*mTQ8UXg!I0I z)Pdr{85H^RhT`S@!>4fH)WGMs3H*a9>)k%D!r^ynws@2JYaCWL&>xsJ@qW`QR0+b} zgMYK=vDV}u1Kd^BL!Jb+Rknw8u1zF_ApQ6eNWZHeX+jON*7aXwKIUzHXNx?6E`5SH zx)1l^+16RgTRt;kiIM=(l(XiyJ&)R^UBpo@++HPPg;kvc=lz&jP;a`J>bRZKTRWxA z2Feh0Gr+lGKCs!=Pg7O1qTsXoMD7OrmCGAwuiA6{6bccioO?U%TKDPSQjUrW0vLfJ z{B+6_f_~n|B^oMc>~pr`3Kyk)27!YX0F{y|x#LX~`cJ@wAuIG}`QJ#D-jue~c6!Us zM{n{|pb6OnZ@<{uh4sFvYdYV5!thO9^Yq7rll>>wU@PA$)ZbQUuYrd0CjROPp#KXH zCcP&?i1II72HsWJ)Sc{)J`-NFoorUETan?LD@}L$*@kbbh@fWR4JJRPz4ZkJ(hK%) zu2%pU@QL#3{K411Nv`SD0@pguaSUSpx}>&gs;rW7g94%R8S8CPD;d)xY=_ao%%@o$djA?T^z zJUe{ea_da$_jR_&3@=XL+bvSLbt1cgdXSp zuhPU%85FJ(V&>%JT2PshfmKlO1||6vD9i~Ep|ajcCRtvXRo3fDIXUSHYr0Y-VfG(X z3;6AoipTq~)QIx^uK{;HfXg10lPBZuWyj10=3kEwYR}0_M|doPi6k5#=uR+Sc#2UJ zrQk%~N*G}@PRrwU`Rh-6-kA746cpO%Dpx7O4mf3M6z~*bI7hK64Fzbbg96lT@zpy=%ygfZ?QLD2hPRm7z&1J1}RBmeYsN&x+AHAPN0G`~Q z9&J>}Gh%_arKsyNJla@@;wYsB^#51gjoaW>13J_LPJ&5na=91zCuOcEKJKUH#Bo|5 zNm?ejr!G;-neE@5oOY}Bta)SeTK-0xLS+x6=th98I%-s%C^4gARVTxHiM!#1x4MV0 z55!bQg_OG;Yc!XlyMbhsRjd9(#DaG4f(MhDhQ1#Q4moZ^$ny9{-AHOW*bRnC*;3z& zvU51pmwMR(JG+nd)o9g1%Vm{G*^)Ps;P-V;Tkk?pPX>0Fd9q(9w}5$2`%E#IRKD(V z`pA0b+w&N4seB##Br$O*1tAC)?wlfgu_;pWx>ySpsr&yDdXww}0K*2-8f&32*8&Aa zsQfj+bRnyqguM!&PJeOz+JA5#`zin0e$LG+G%4(}@(GorHPHGL6iGKSo}cHt6Y?3j zOLB37LTLTPjuZ;+?s?6OwmBQfL(*=w>xDKAkOwx;dp`WB>*H~1Q@Qu`-CzMH)TclX zxigT@^0#5axm%(rdukxPKDIY3dzN)i-f{8SVVZg1hY0w2gyEaPcSQMy-Z*io@bzfJW8RC zLV{2;<6q|-0@R=!c$~V*Jh5M_zQL%V{vyBh2~g;dY(6aokyIouc$BIn8toYl+yeME zSo#={FZH%mz~%Lz;Yq=xq`b3wTUzag%QN<|9!g;q3iWuvxi2-pAXJ=fylT~l3sn*4 z)fQ&%Wruvb-te5Vr4(b7Rs9vWQjeAY?aI)ff1Q9e0d8=6vF9Ix{C`$S7ak5b;h7Ph zs%rQM4Gwp+H{Oyh;blno=-J zs$NHk<|{%i?30JzI(olQ3T|pItXcZ&#~PA$V!>$;@Un}foiQGeLWb+*7tZv?d)UQ&dQ}csTHeEeOJMV50}b!Z27{rrepj#n>TJu zOQEVq#*EiBX!QqmyG^}V85!S`#E)S|n&vP3)>Zt*{g&e58TeAHwR1|5mBmL#uMiv` zI!@zTb=@y?Y{mGMx@65p`hxcrjK(ADV@JUe_1>h9cxofLzQh>wL|Je~MEVE4gI=%S6XmfYUnw3+*bSkH}us+KQ#cjUIs zJW-<46xE%ItrPJ+^@TB>CtpS=#;ag2UQ@MBW+@me1su!(0d@WUbF7(u0 zt9b0Cu%9r}nX@r7cpmPqthL^eJ=^NeEZ!W=rhUtiAy*MbOI@^w=rkbH?#eed<*Xl% z?wzK>-4#1S{OI_NnfRkb;@NP4kkjC(?|28=RsMCKxsc90MV>sxN)mon2qT{Bwn*SA+Q0n`y| zFaZ9?TM~11I(OSNAgu0aTs!+x&m^rCwX*Gt9BpOKD6OUI7k2A6&8K=O<@U76OF{-1 zGj4X=+`e?jLVM^?&tz@?ezozJSNpe)U%Iz)L_7UfQR}{{+g-op+{)QF8on!#S?(Aa zmj4xHs}9=>EAV57M`GfXTgwVh;Juda4!Smjl=!Cd7x^aKWX*FUQqGo*ZFNLqCcYQf?JJATA=I=_~r!dkVEN0M=82@vQ&Bs;jY3rdUA%}&tTh9 zBEvql_X63>+L(Pf&CR#l8B5+SR~J(2;`3GWhBe*7%6gX%d)C@5P<4BGzh*5uF>B); z^G(@7ONDY<^QxfBEK@wvSAEya0E5;VSk$sWibHIXuzR2-onN{>byuKrr|#ge+QJ!s zd^Pq^TIQ)tnBzWZIDVvSsqD^!-Sh)4{2ifnUHU62!*BM4kmel?bej})FGN(aQRu^6Y z=ENJd&|CCu#gI!X=j?JjPh|Rp6dR7#qUuaW>xen6hR{XKB(;6C6rVNu`5WH5ND}fA z5x9we&MoDM+#N@qJ_egVo|ryf61zDBh~&0LyqfD1WdpNun_Q1G7i6to?*D8sAE$-1 zyLOhoo!tVQ7SF4*2{$$~_KuznIdt`q;3#o#&vqu}iH7zoHS_G?(Mvr~ok8-L+E=S# zTT@a0YC%2HEhT@PwL#G_#7SN9MPhE}AG6!0U-V;uG0L^u@O*`|X!h*(-D7h;a???^ zzwe1@eU@CZZ8~peX4{H~hsQP`>np-+K6+%jw%0wkSPNx4BZx6zP3IQdo~(&X0Ow}u zE@9I^s}Z?O>J&?ZiSIl;rMonjiIQwb+VSS~X-JC47QU7RGq3CC~Vr zop*QMHMzS}uoX60$nX?wwfF?mx1RGai(5t}AN(VM*1MJqpcfeF8R>cxHu)g1Y~Qrk zWWZMENO&bHMY_=3glp0W=b?xPV`2(^nAw|kQl?6iGwo_5jtEnwI| zA-t~j!c7<`|AnnsI6EwmWg=Y4TIKy@^n;{c!x>upGtH{q7BBeF=K~>rjqcf%bK9m1 zSK^QE2zi^ga$dcz>NDYFM{ls`LJ#rs1) zaFhJ&RF{roI4rBHzz@V7ftuZsq?cQa&poofeCmJ?Z`btVQGK6R3mDernP2i$23hbA z@O?F{K=BKzG1&`o^X-yh5GA zg$w7L3N)hq9%PI#S;mT&GDEI@ci-6arQ*xC06L?`~0cNQTN9^b{5OTWUKSlx4H5_X;M?2W0Yf7!}Dx!83- zzM-^tQ(dOj)7~w{b;~j2m&WPKZrn52^JfYT+0o?lxgn8VbvWBVz^y8D8iS$nvG9cFC7 zR_jHJBi4=Eri-o)=e$L3?V7h6<=ZS5e!=I*YRULJ?_MUsJ}K7T^I=nOEdgU=qoh>$ z`MPn(SKDDDo%-uS zzN)`kuv$PHsUu!xB`)!ZA%|9kj><7StLsVBEx8gBFHqKMHqvVPMBeA)c{4YaDyRQA zQ%JWNzm)a-32QMuhV#l~Deifk5%5Jm@}SG-o&?P=*u-P^a9;xR^(s<-{LPW6N&(QN zw)-lsMao3K_j_r36uwsgRGpQEXr&(V~@UckibQrO)dPA*Y8>U8AVb2{tv((Sc!YizW&p(6cE_Vf_(A$gXiU3;o!VL>f z4{IFQa6I^Nqw>HMa0Rm>%BWd*txPDe@j{!=9`SM0^XQkr?oE5U3^PCd030s($I@fV z<>`Uy-=Tir@T3Pm2FedI00I_N_**>~(KQna2X#`B5ainE%FS|Xxnc1u~_s;m@xrOGJh*2cEZjaLVNl;cL+ z)$kX%XA*M{mL4m5UOCg%$$Ddjs#)|XHu?=)Z^K$yRXnk)v$pq{q=zB!H@D4sY#a6~ zat;i}rpgpS7Pn28Vryh;-q?rNXZb@ykDU zFM3-0h2JX;JqzZ*+l>lH$KZb8d>3MO!1}!Sm^_6^fmv|YUA= zjXT3r*&(>)!F!Ox2eQ>E{RVDiYHJ@ulVgqarm7=PxmflyZ#op$7f-q`!Y1>JV>d^$ zW~EtO1C+9vdbe^IkFFVKo(lc0cPvr4-*St>?Oq^S6(Nb~Mx?muE1RExY)^BS?w>dpwbu z{PPS5nbJBP*Ob8`qbh$cwBb(r%4V6os{)}VvKVC-*`%dScX&!;{LY3XX5P?pD{8Oi z8!=n9&29TCccyZ>3XL;5!#2<8SMix$2$P>KT=dvB)Ac0R+ToL-@Fe!8%o=#4%zRNY zcuNLuXJH)N&d71@OzAekf=9Yh5jOb#P{*ufJEx29$3n6E8u2PQ+khAYhty%@RdlaM zAULPnl?>U=$4h1JI7V8%n%xCd>_>!VZTj{g0r2kK|JuO|;F2(?`VJqp=zH#$B=Qr} zJrZ`vvmd~)4!JA0l$7W;MOwQ;YGkbztX5uCj2_-p#adxqy1IC@_vYrjGv7b2XsbE4 zK2y_7%7iwg56C=)Sq{Z-%yMW{<0ZfGphgd`0c8A!17#O@jR(tmgs=;( zt7ph#mYm-7Z!zRCJMZ*`jWOhJ4r{=i7{7-pXM2G?^DBcU-XD5V)>CC|U4KBS5IkjR z(Pb$=L|W<>wtb}w{ZYkkU?=b@nR-nuT&tn*?1_%_GZuHKncq^C8-4 zm*7mt4mE^(A-rF%*xF6DTu}^LA0cmLJgvT)PW%aka#ABCZ$bzk! zjBpo+UhSCQzoQv)a%xhU8#c4|tZ)l+lkgi91w;k0`JfX6kRaM-%i{&&2A1^|p z154S@7msd#F&}-O5fa?1C0!`FnQs1ei*ZqFV0k}z*4o7ZSf$yPC#8tlM6bD_Z2mKu z=bcg3@8Q^+`Wd5HJ={R`u8Uu@$OBUiPd)A^>Q}3GSm>v}a4$TOznJn%<(yDMz%y^x zd;!ine;2D zQU7ZBrL=R3|Kixp1vlP;?H2I{u-NIPtK)VX3Y83rL_a!loJ89WRts1PoMd+Kq8m4x zVxYz?!dqDgBt5g}Hp(CZLH;G_q#H`$k+Vg4Bz*h-$a)W`rkbd26pp?3&`(0i}a zJ4o*cp;sw_bfgnHp%#lWAvU2vCnRAkL zGBbPjGkZUqeD8V>j-``I9G?z}fE9*K)sf@i8d*v;R{j~w)2FvB1+U`# z+|oQ_=2#r4@gH!-no(-mHl?2D3bR1IV#frabVe6~=hDn(*n0S%g2958B~T4x7|~Ys zI6cl>!*!u~jS|k_KWriHd>ZZ@*DjmSu~o!;Y}H7EB(7U!uoP!8rExN@$9TKT9{#tE#92Q%IK`<9;YU8K z(L@Ma|F_IuhbsXmU272zR7tr>(DCXoK`{d3pK(M2xZfj;>#7~&z*j)DEL{i66+Y3Z zC%*Z7+99V7huZ*R>l-C)i-Zl58~^t$Nq6=rDAlfINa7;PRoFwi;+_ivs&)Z+p*4y78iBGt6mIRdqtPuo`8B|iLicOks z{lAfE_lW;z3+sR4(s1}E4Y!24nQL%De$C<@hI;fDf=m4WMy9E8mj_jHytOzts2VMk z%_1GmuPDy+<42JMI?@ix)2`ey+3qTJ6xe5$ExwH9O#ghI3L_H)(9i1%rL|@*=BMmA zz)JM!oqlzH<(9GT4^>}&Yj#c-ke5oSXZ1pFfv+D~6v?r~|F@hiR}9`#d6TTsfJEKW zky9Nnv$RXp&849?ww@X`F$Sf0<>y--MhD;0-ZFfKzV*uQKa<&@NQzN}9ZjODTJ}w^ z=$;?2{8S-tYV6U_o~Q8jN*&-UvG+rkbgWip#*eNhIud@{qH+)NP zEqY2J)Ylv203dW$%v!liaaOOlzsfq=Gp0pm!3G1vGioUwW!dndhB_6|TNT$TY4Oj# z-(_|zE(cbJpSwNflvzJ-zwdi{40-Pa`)%X;rmHL*2tAg6`d1*-zw?wl4TEH+<>GTd z3Keo^NJ`o&aE{}fkF@mfIgpMrv~kNKmv6X_6&*lCbr9I2XXIyu=n3)cG?`k7-V-{A zUVxhWXAQkf{rlYpti-yxQ*3s9VDG+V4|V|G6X$ZK6z8uRlncwSFxHBSCQ{$*WV^I= zFM)$$b?cfx;$+Wk(v{`agVknJ;<+H#eH7hSwL${~T5b zXbYZxa9hN9t>193JIAn;6(nG5U(ESBbv9hgB`@fUo`5GurQ*&?{WVv4Z-9hi8#RF8 z#>^A%T$djqeC;mt@QX73?i8U4QCN@+qo!a+plJsh5wGRp)5R}cv^6wlKepP#4|739 zNcLrTE>ze^8#1CQ4}D}9I%y+n$;^sKni*(>%~1`$DH9phApWU0dICfT^(@}j|M0X- zL|;#K7+n9Mb~*%O+eiK8gc7?+t@758mK29`6xBZ**vEPfu%iF)@O*4$h8*in=0nB= z_Yg@~Kr=h&vzh1AH|Cr%x(!iQ;u;YopWTx8K5B3BQk*3a9d(DgJ4D7j&$YZ%0bjB{ zybTxH5Mwm${b?NNPa`Y0T_PaD>He0DFm&YmvD?Gp5S^0yh6C`QvH1z}=)k=|)S$*9 zMY|g_t17X4FWvqge7w;ZTc(!2c@C0E!-pg!fPm}%yP5&I?&-~A#)?vU%58?$8V<&f zTtRPZwcNfpagz0JZ~hT^m~+2&Iu&wDtTezR{Z81UJ3T(7+^-t zbw7xSw4bv}Qp6joX-5NPCD{*3x5HtO!7#SmMG~5VL=OI}NAm}%+YpQIe2bYON$xF9 z$bn2xfu=3O#qtq_#ew?6@{S9%6-RnMpjgSp_bylR#dYuca3)ZPVbksqFiI0lckN3rOk&S80JMq zmV#wpo3-7nL20^oiZmSdz`$MTcfBk2-~Ro8kUr?|vFJ#`=Eh}%pE{#G(V*T?Njhtm zEb3!=F-JrMxjDL@N(qgY6;u_Sj9ppx$B<+{IPRer;7cFRZS*-@0URl8n(;+Ty8b*a z-&u9@8xny1=0;#x#N@L&O#I;Hx4cDQ(w;jOScRYoQ4|XY{$bUK>8=X3!VT#i!EB== zw-|$XlYO1Oz)U~zCQB6PuHd!XpS>0-A&a~OJUVgKDvG#;#j1^Ro(4BR=tw==N}p*Z zG;IiG?2n{u?sA9eHwG=B?sH9Sc5}r)7&v}k;Oc>lYe6f=Jw_Cv)*pw*7+Ks}^nH7M zkX+QNb8MvJYJ7Mk8Ol1!!(P8MW{gUSW8-L^`EkP3P{2FvM&14pNmJ=9Q>K_Vl2t;` z?Lo9@a8SMR1*wM|r&pXxJ0$c$B_w)ZWCMXq{9ND&A zlFR58sC5|36SUV56?Dn79)ejM!*+J_(`M7Y?U$Hhw%&A0jJgicMr3 z*RI-|TZy0~-O)1^x&gq8dXEtywp~rFWt_Y^1LZgc$SN<8v71hsWWW2w(HDZa6|s`g z7}KVlL%EwJFw#`pQ4oj`S#XF>DvxF1F9q#Sm@34o|=g5}y8~$`~_3tMfA@VS% zJB%jdheS;#BZBMqW54$gsy}Qq4b;f!KA7HB!@JRmyRQbQD*Z6$b=Y;bA$2u*1$yLv z^YNGItk-VW?+@c%d$?k(|4mPn==3YJ82;3siwL!QRjD6PxcXoEBKw#)y{)=ear)TS zpjce9xM($%%;_%723Gh+HckO+bTbu4%i3>rBP&KX@p_TUrz&Ua^ds(zlYRj(R3mC^ zHwV9S=UJn5+c?gn7k_A$-4gyyQ6{wzB@&Bao(KF4Qt*6q|0XdtK2azIW~k+nT42lg z>^YRa?ypL^DMp3lPu)VUhKk>p$5ATCbDnja%zs|@DHr2>&5rP$Q*TkAcJx0qEX-E{Cn+xdG2xMWl{3F?DCM9_I$9ul<9GMXnpCMe^2dMXhcd3 z-6UBIQE4Frzt$!t=&II;OQbe-p|$JuD zMuq2E1whwpNN@gzV1R{$-G&bI18@5=wT<8>nLbvfyrrz3r;y!0EJ9ATb@1j99D(j*l*4KlMw-yazrR#;t{) zRbIvBg!;=xPPdxXJud*xnYigU2pd$nSXwJEbCyXBo7Dw`7zT|La5vXmtu#!J1scn3 zy^9WKFA%6RJZ_6<0l&X4ote=LF73Q1fdqRV@uXXy?y|LM7<@qqM-Gj}e?*(T(RSL+ z7!2YqO4lfVg9N4eRtzGgFpM&HQ=!Gu1QB1*{A$L2pMCg@wQT;q8caI}vug)*J}wNVM~Abt(@40ie6n11(2r&RLhsNT zNA>t&%gkFfz2Msk(gY>LYR&b0`@GeZzM8UAop>mvN&d37y)Spc2Dq*-WFeBiX-K-c z2_Jb}p=PU_HZ`Hl5($eIR8v2Xe8;bAMK`pv{^}oI+*nLz$7JAO((%0krU_5P$*yWQPe-k4FW8ZE`Ex|(>OVXhk;bKHDxx21r1ZsuugF5WPtUDZa;)kZvCm4zFTj=>=jhs|C0Lj zGgR`{Mfotm*~1;{=r{SstqEJTXIOPlie3FM^HDA1ma=%jz#sa;3ZKmmo__Z9a2n$s z+ZT%Q1m)-35_Y#4fin}vvH;NI;Yj#%@NV+^wfvTc8U})~1q=@Z7>Xoc`iv|^Ameih zgDDJmUX=_Qt3?$bS5n+&ZXhi-xiB$y`hPMG>=CDRz{aeDIS?s5|SkKN`T{Y?dENucoED;~MW=V&-0yPepZtFP_Z zs$7$II1>_Zn6M5RB7tVXmW#eec!Z^y4Z~m+;CfP_x90Kc9wCa-A1yWM9HI^lr6mwx z^AO94-vR@TrdhP%J+^{$fDO=-Ats`=E#tCeL=(?P+Q2b3e0Z9Shx#nmMCBoBeZgk{ zg36hx%ol>V3OgvU(OcNpFvQ6vyArO3$;Oa8$oMm=k@=2e$uHzo?jqNURl#jR+1!!# z8*4pZJ)}RO^3cMbZP<2;v^PkTEmyqp)!wUi5mdBoX#9hUgqn8>l5E*M4LsV5({2S^ z%EWxOIlG8_jcGoc0wGk%p>3R2|NF#%M|e%=#CybjBqIByg6;SwANq(FGj0_aGwHtA z+!HioAQIQD0fgU>+1K~PgGzWF8W8U}NQ6H&MDaI9tK2EFNg>&08MwwKRv6bm7QbhJ z-k;GB^B$TEfqmt79ZG?Hs0oRZVtw2g?=C+WPx$x*w!cK(pv#L^1M6+O4is!`(>lKB z7NZSdt_9HzB6WSTfK{E3P#PKU%O1V4h_}tNygQ2--aI!oRIC-l3C;^NcQYUgO?YlafMSC{!NV8}7)r z{gz^zo0b$({NmsxH+PE%@1AS$UbOyGH7FRngua=KU`XR!2yr;{j0CKhA}0bh4SzB} zZq1zyhgg+kbH2EmRUXDwjvZ2j|0c{h^i-g&mj!HO&rd#hH)fa_mAh5dfhBspUl>NH z@kRhElJEU>D&i=cDuHx0MMypCM|Fl#X9y%og80lcNM2;5c^|Y-Lt;nbaw7lk_t2QW zD@xO>RpW;2K5*vLpxv=<<>4ZEmoy!Hke~weeXEWMDRL#hZqaZl25_>7=WF$erOwjH zR$zUb?Uw)OXe)sJ`NMqsrEQvf^0BD^0G{>nQ3k5h*_W=<71OvvKp-z<+d3VUxC=|r~Enwruyk= z48$=62+_fG_ACjNa`y@9q4h)8A2&e8H&|@rV1yPMxw|HRq^}CE9~i&7-Q%lg zskqA)!`6iIOP?}K!=7BOhwq3Tzq}<-9(Q<60h=^|pw1Fc@MSKYOu;gV+Rmn8u8)V} z#++P_2lR#J4zzwGd`~LgNn-EUlFM38jkhh@EyYiy9z0HM*`*ua>YtDJbj<@_;~lW$ ziFx4th&WHjgr;-1`S3wrx^0+SP^FY0*-IxxuT9;SpNK=V77o;CDGKEWMpNpMv2FXx_aWKx8Ny{ zGs#*dyRdyDSktOmt1~Ch;HREh|7TRSn$~TP*fJYeM5Y($jmIF#Hc{@@n;hmO(*Y+8 zowZ`R14iL{+XSl6xmMjZDS=<1Hk=LZ__A~%{6+j2CDE(7l%IzlEY;@m8;lFhb*={4 zvN@Q~NL{bmQPO@69TpuGP3Gbp@^cE>AK}!&%4@EC!*H}&LZ0-%nPW+q+G0DknFTsZ z2w}zLjdr{*Sg^t^*~2j=;YB=dtK{*8U}LPR3kg1UGdMMB_?9=`!k~p< zSWKKZ|B8eOXCLZyMgjw3k}ZPjtAggk!$GgZ3!`I!3$DKbU8Xx+W+Ky2&r=}pm_Kis zHF1H1lNQd?nEOF@YkK^OLA51ttt(286=ARa4Mx#9<22D?oCF0qztG|9>arTMShVDs}E0s z7A_HHXPRUdT6~Xc`2Idz_SFvHPxnHuNeEI5i7zDcU8go}BHIk$5$7UUV6oKl}8GcYr^i(@h3Ztw-eTi+aATBczQV z=@IafJzprTj~n!Hy=uh3dG|$)^~?pwgBb>iT8HvP)AO_YbgUku!f*<(yJ%_R2J%hJNTJ|t<0 z+W;AJM+)H#I#!5!nJ`j6OBamOhwnUJ+j&=B2e+5T-7(ECOzC*tzm!x1CR7K*kF-Y z-U@ApXrC?dPvH{5y3|5*Zp+6Z^YOd z!?gP|fI()0b~T{jn6Ysr=p4dlk{F)Rk(O z;F}fQm!}|%W9qlh6SQ>g{L6naa!euMNg&a0qTd7;pum`#`dgq-iEvXWw7^>cKTrs7 zc_O@%g#Hz}^~S=NR+d|oojgHqRESRBYW9g@;I1JCSu5Caq$QU?*IZd7C`wQO%LWJu zYmbc?eP_#i+3xzP|Dy&UoK;Tr3HjbjXP?_#;6d-FUs1z^k2&thv_hcW{SIjBF&U0B za8wU{;}+-o2Pifcw)?3{BQ0b&l~Mgtdh=wtNT=57R>Uk6=;p6`m}sm>ri}&jx8!_j z{Zj4(>%B!kOvd_m>6$(M#xVo5A*qTTqO>~a7zE70dd~|z!)PaS?1XKE-;|ax3=!-Z zol7Y)5Ow011BzAQB?}rRJXDpdTEEe%&gMMZ5O;n{*L*-7ZG&EnOtyg_th;Qoa$E2c6 z*Z%RXKkcQkD>#dDU$WmDgclKP(NmOo_`VkfG=0Wz#@Z)9#FB@Ziel^k47x#%4K;hBti zu$zoceMg&$WsvyWzv5QtlpB5-tWrkBoND0S=+P&sqpeEwYzdicu3O`K@bDM`AAG_` zY`*YID&6c?)CgjU2Ap-p0iR9*@Sb^cHw{+@4bP|?8;>0(STcGg2rqQf+YOTVT4kIM zG@oe)#ZW_lo@vebmKId!AJa=pZ9WLbj?QX8gE}St-17d&$Cftz_ zvL))MoC9bYX`OAMkp-``7ZnG_rD_0Ko}A_Ji;2iU)Fr2 zop2VLMkNMy-C;#6xyRLE_@J_*#4}{r$7TX{H3imzyDev$N|q8?JTjN0n4SQ5*mH9F ze%?tD#n#T9iT=x>$zOY>Xa&$~8KZ=Fb*c{TpRwB+aux&`GX1b3OrIJ-HUVxMsB(m}cq) z3;m^2FwNWe^#1(;7TMz3nnzt2aL$9~SW32tRG-qcy`Ua+dqqJY^Zo?cQpuKc4-p$| z=5&Abue`DIxVxc=Vf(k+x(=XBy{_oYDCNepo+z|KV5 zh_uL2(sI%N2Asx8w9}&kl=96ThtMYWVNCdHWYI!LtdzGTw&x7|K+Iu-pjncKWq!pY zj}HzAvf?vy!TCQL&XZ1$LWHaPnP9elroh0k> z4bMVS&WC%O1Cip4t96e8zYN1coAP#8^2@)}UHt9*UP!;EYp!ojgZfDZ@R_d^>8^&8 zGikM{hghFS67-m}3#>yAhq8UtWnOwWbnF}xZWYyj-_?i8jT%h3vq%3VK_nKTQuqLgZN~1npoLWUcXAp zTmO`!B7}(VdU0p{Oh+=g(|XCF-1z8m7flq*Sx@3+^)V#sMP0Et4jotg+9tP~Iys`$ zRqz1CJ~dKxX?SUJ-}@&M{ZDl2y#^q=v^uy>%w#-p;r9MT)_nZ^l3m-+uJm_fjuym) zDJy@;7Gg_DS8X$S)Fq$Fc7aykSQ@uD*U~*%|LwO9mSGKXSL*w-sb|{1YIGv--5doM zJ(o_=+h+WS$1UZ>>u|M~2e&o@5l)*?e@px%J867VdW>VEAM^1InRbX|8cUFTk|+fB zW~Lq;WH;**67iqmMCt7Z&_Jwi=@`Pa85Up+@=-;R{aN5YPgz@QOaR<7t2hTQ4Ohv- z_aVX$CIuXK-_KggE}@xC0Q;%)L`uKv<)E6AH2VyW@3_5}8E#%w)r?JFG+BA^ifN(^ zF~Cp5-zCMz><5ce&h;CcTo%^Vbk~;x|FnRLU?`L-h~24qz^ors0W^~95kcjGSI@|+u@Q51ka(Z(DO*+}FbryWJ4AYbrva=OB%zNMEkp40(t(GFc zG>zDtnB%T}X*1RVuVt;M_S=gD+i6?$`eXR#F3c*`*y``#@RdmTKdy6qS|qMgPAU$(SiB&6TXw)14ZkwAu-14yOU>o(En39nQL0f01@%D=P* zughy%6{Vic5-8yV9Ci%`M}EJDipvm2jOj&$2q12^5PamQ_*_VLq_Eck3hiu)cP8`b z06F;LYeVb##f!VH&#N-d{n_+`99ly+FNTIOt+A0RRrT?zdUr8-H<8>J3va%y1LWe< zTu6JX_p{2wrlV>-G!2cscifR=a7MUuu?PX2sPfY3&s`oXo zHf)|4&OlD}D=*v!&bSPI9P*C0mdL)8YyBNA!nuYB1zq%J-h7IsTjh+T(oa_e^K45d zk1?Q6Ql}V>^uL*z{IW^vW3ttZZ3Y=S2b2E15Z9+4&S$(L{zANxfWPt~X;s(JT#_ll zs_sF`#4I(!K`TlIYQ9qgs@lz`0-@uyqJ9BXxfX&@1{k|QK0eEL+bDNlw1%0^9zwuZ z@F_EQ4|Nx}@C9oyAYIl-Fwr7fy&w$umZ6O$V13xM;{|8_hn_hOuThKkABS;Jfx#KH zW`87><>@cUz*#k!GF2_H!uIyyD=~tU@B|7+4&4*usXOk zyVl!Y^MA**l10cn>jboc!vzEQD_o$^1t-<6Zlc3FxT4HuO@9{Y#rzt^AAHr~F0r zB%}BAy^Dd6#-%ZX4C9_1Q%g1NOP1s?_A~!4nEtY% z*!>Wf$Sn#JV^g?92zMO5-4*r4HfKh?eaEt#q%EM|uZ6ukp@pZ5-dd*m!bc$YkXzlS zz3idhdPe~0aF|%cH(zc=`c+G}`pw?JxpG`nxvMgP@2ow>o zI~+nr^>aP1?+1I}j`j)Mc;0iK%Dy}bp6Fw17|!tgSChU<;}^=EcTE1e_!xDF^RvQ} z=dUyap`piI&kx_@Cnl>hErKZE!h!hUi+IEGk{^+bZa>mDbn;36;RUyBn?I=N`)=MF zdtzvl;rVH}UX!}gVPqN1K!Mq{X(!3e;*JLhHMp|AfxjD4NtUg%MEY-h=b%B$fzP#B z$#hPYtS8m&iw^=-FF1x%-Lk*u)fAU`nY|rxl_v*F`p{5S>+b^vDDg+w5^iR6nC7W# z@%Hs!W{-DfvqsTiMm45(T~@ii=N&c;YNR~kz}IVyNj*79{^p|qKpITE;{D27l$G*r z^w?e0KTDCoTsT&VV@uu5dxAVGP08MHWi}*8&fi*8fDlznQRG8J#0<)O(@$5yqTcZW zAm>suJlnepdF55pWgFeF`%bN1H!fWa!$X@$ImY#dIUfw4!;*i?mgwoeYJvo6I85{Z z!vlj_bw72bHH!@G{s$V z-<~{!WIKI@&&+zB09%nW>*53DA-+e~$e?aSC{8zGanG% z4OA*SZ^LfH;dUS1jQ;FKQy!7?b*(zZ;p=Y3b(!GMocd!L{Lw$@^+OV6tpYa%S3Ht& z!D0l4lFbH7qhR_A1S9L=lfi7yrG93#(Qr*&bjK=70I%d5Iyztz0kw8K3a~pw+Xrjs zn%MWvCQEcbNU#h@8%@y*+~+bh%WvFr`c?k4pjtlJ>lABnn9 zJ1?fHk&=9-hrTD8;(gyioZKgfDmAFmUrB;^op^Z4YwdU>#G+9{VmXOIOaaAltYW7? zScjI0&xEEx|Io85x^*V4s2&7-9v|trh~{{uFo+hmH`)c4GmGXX+NzR7s1gjh=3%sy zVNuAqPUp^uFzy;YCrq^%CLQaVx8jn&oM>`J5KSOv#xY9h=jZzFV|DR%y|86=t!t!^ zYZ&nTMBzU?qUvSu39-O~ERpp?c}hKZMoJx}E0)ykA;B6?g4Ty!Kyc7@P%y#~6^YSz z8>xi#H-Si(_>L}lBszYu64vW!(!3p5`Bgb_WH9j_Q}9>{5WQHQyhT%*m7p;yPteK+ zM}VOw8rJ-g+1doHT7JEsUn%zMAuVVQY4sg=3}F>^3KammGuygTO~w^c3JJ%;$q<9- zCL^P92>>{Xhnty%LRin1hCo8=>z#1E5U{imE2FQmpiC`G>{M?%L(J1Or;sN9mF@S7 z(E0f3(0QNt3Juanl^;t(DP3_j;zw-bIMHj~Oa5!+&&v7Wd4*|Q>x0U8_y45-t#$qH zny;1r-6HaX!dGQneQD@a#0TbD%-^!FN~N_7elKu0B=glO8pYVCl71cS$`^^$@*AaM z;Qort`mjO@703ib_0^>R;T2N}u{pM29z_qpS;`d1*lZ#4aF?|8t-Hz7Ke<$W~r zA=0O`ZdhdZO|HJyu-@geV%0)um5!ZnFevCp3{iZz^_ zET!!D2Fo0k4GtBVZ{&9S9=b%~y|#jhR;SrDJ^kRr{dqw;k~=*mk)=;`!gCuY(AC02 zY#u9_#TwDeeWx#!luuz_Ap3-+!ki7_k}sZ@darez=h=CJTn6}AF@7kI^p9(7Q(X)67F;kvu~5i!-m1ks7JNFHVBX?)5+FO`~MgDc`ml z5{$GZJS3ohu7rNT5s-83NQ*j?!@;$VP&K59UeRH?$Zs_IVP|WWR?PWGTCxa z&!_S~#AxE;?bw$TvPX}g7VFml<;xHW*6C{;kx+tn-p%5E>H)qWJd6L-=sJyQesUG- z&L~>H+n~k&XeU{|nV7kUHDw@sck+h9vkK%~Asyx+exk1!WVIMX8-=uUHg@G83C5+q zRODt%x0n)m_6i>mMkx-?iAz)n)T9Kd(oiv_4z2&uFZ+^z4Y)kKR@0`hJg%e-T6D`M zj=L#eWYapllqM9H(NcEBzgZfdnoGI9-+MxVUmCu`=0j!>e&y0<$SifC4P&iNugNEy3546^s) zkxx%wIL(QS>1to7K(Zd1e2^*r-2~~PKnm|<9oOu=NKNL1epfcezU1;8uWtXr--#Z6Rktq zE#~3-8q$O^Q&mVX$mXl?qP;%Fe!v09_JZEpq~V>`S;o}FA@pNd}bS9k~)0)7-< zrR2$6#Zs@F9;mejBFit9et#dQG!~>O?&~c{XY)KL*2<Iq=s`u|DW8i z|C2?9I^c)(=CA<~unk#c$$I8cC@=zBG;zMyJtgE8_BhYMW?si~sAJzsJ7d*%=_S~m zP)0wXptN|(FvA?J&eIs6pjA$UG|?{ z!_F5L+qmV2usJl)6HwkQ8b18}fuV$=AEC15CY#LK#@Af0*M{Xq)@jONc|a32Mi;u&9cAo+ z_2nm5%Lt!YaQ-bWwV zaxZhBF(jbVOz9sUZ{R02S2jFzXjtX9;>k{wKfG|vqx}w@_B9zVZgqRcis)m83)-OR z{;GCg@XsNOTwk6aqb3^xg;QvgHaysD0mk>EVqwMaADcTut^$&qHj6?=_5O%iHgm-= zMUR0l8|jt4$NQO#T|@d1>BF|(?N9H!p=&~I%TkBz`9GwjmsEgHv-FZgP2imi?$XKj zvM)Vex%o5}mz&|G2m5@L%Kh~B?pJHqPh#>EwVph{L9_Hk{@^?N?23>PyVu+ayE2sj z@b-8EpM!5O2G{8Y&f-yT-G+Ty0?c~$-cd^tjE%59ZeH>;y}xswz*T81!~PagD)TLs zcgw(i3rO`3FSDBr^ldXHpy$x6|HV-eHpRHl<-j4 z>iJfeF|t=`B4S}`4By#;lnl%*7a|nhEr~olZ3{U{JaZdXdqZoKP+*}td#n1f(~s6f zC5B#8{jLRCj3ZsXIz9+8QO#*PDplaXQ1}H*ZHi0RXQ&8Mj=buv(o$dHxZill=fKJ?3_koI@&$E1lowhEEW$^rC*8$#w3+CP|ZL|1xIx(TG?;0ec|TS71Hm}d`Xwa6ksP#|W`zNX_YoL76G%IEsUGU76sr6C* zl{kK+jv4q15H{;-z`O9{2jRixl7V`ZT|ex}O^uNUC|iqtX?fZ6)6>- zkHJ%`s^kRpe%}cOvEBE25J=I6t$)nFk_$-M+={!PBI=f3Rdp6iDdRQ7>Kq;_=xNWU)*(7)2Eh&N? z69os!72xaeY-=9+aK4n3e4)`^(`tfP%P< z&d&kT`MfOt!_33nQrw!Js;k&Djm-R@bgeBD*2zIuMQQE5yx zmp|WbLbW-he3-HPUBjTv`CaYBOZT?T#A|zdk+<%}{J@X4+i-2RZaxPe1z~O_4_Q{8 zl=q(B#~wN)z!snB;lZQ>H-$^yY%kG}1ulQ5wSr90c5uYM^>@LW-YajiV@g{@5LC23 zcd*xK$mJ*lwcaCG zeq_2;S4S#8vRAj0{5UIHf^QBhUNQsG)EiA4tn!p~^CXS^&6W%x&B!n>Y#fGj=Oqd5 zJ)$$suyo}d?xRJgYeFbFd4)EdXD-e1MzaAV5@WdJL}Rpm`K?a9k~%t?Lh0%0!)A;p z5N+DZV0%st5gPC0OAVT`Bg~q}%dw1EY-1!u1L$u{;*#a(4tcc5k$y36RJL{=H$+vZ zsMpxgp;_igel!xm}TU!h5_EYouykpe-SS|-oU#z-c?@?&NF6pHcc1vG$JfHO)3;D*h zhS9F2dssK>oQb{`ouo%ajGntE@6%?5veGi8n%Dj+;N>qpo-lz;J@L|fCv;o;f)<;i zc<9%~D$yCP+o_WO^Vdr;>DHG5+Kd^_tO5}zJ3G4qz6d)=J`Dtbfs@YV_GovK z@IZ%CWjEHNnKz!7ZD8C|h;j+MGqYZ#)ex(5WF5~ZmodK(QW<+=7M=|br1oE#NbEj!rCT8c$N#4whIx-W0k9+*VpGk( zt^VQB;c_pv&1t2$h z>7oEL?s(403D(9@4$3A|J$rYDdx{w|=hhZKv8t#IC5XG0mc1fnqO?i!8X<`aIqm54 zA)yQU<2L%^c5RO+p~WYnDW381$FH7v;d)`6;sF{rzSKxeKgHerO3*y)`jreq zC)!JODM?CC>X~U%WC5@yk9F4+R7e)ecAwKQZLqOx8IGQt|9VcH3~_gWxbtxTnQ)KR zLMI=;6xxT>Mge)GYIgWjSeU$!DN=QO%B0x!adea2*y5=`6>;3_%(B@$BeM3GA4SdnkKW3}wZXy;#{ z_(hv!Yh29lJLW|@Z4VDmEl>S5-dl6EPr6sg$xq_^T6|_b)-!W7-p`p98kjfox63x3 zSKUYUz7!}>lypyacaLTTNF5KdJJKAa7?`NeVRBK-26JWqF{Sgm<7#;}05cE(Eo?$d zi)`b0HV7mV?BR+;pYZB);=B0|P`7^A zd*Ma*Qd?V#o^HS^b&-J1s6FLSy@B-H=C$BnumRRgvhbyVf%#bB0PT$zxlOW}lyH)= zB{+xYhCAW4K*URdcouUEwo=E0g84{RXQoF7$(2}J!%gTQxM4lhW0}FYwd_~ax=6};yZ7~-7S0OWn z%$&)pk9VK26YHL-aH6E|wCfTU!q|yVz09u5mgFKh)8SgRYgpgE&X5NcySl4k&msCt zPo6{UR#hPStN$Z}JqIm>F=mKri%FI8Yv2aQo=a;o3pYuwj#djxs)Aq+vPBCnn*2Rc zgQ@xxE7}JU!PKToF1~pf6Et;+o3%o#{t9B=<1alamW-x5lTn5hW_=*|#OmEfvh1P- z0*PyV=zya~ug|9Pl@64+8gUt%L}(JBkTzz85nvSi9%=ojjm_>AU zGHad)X&<+-=YN~EdqkGrH=6Tkk4QK#nQM_m|Mx9TF;mNzJYL#egS&^TB^cd3Zsr9e zv2l?b#Ow7+k+hB$6pYA1_(?5JbNrsy8keg*f3Vz6D98i{9GpbK^_k(gF1Gk<_wj4y zMbkP(sk#j_vnU#G3vK!U_R3^HOgSuG_>z_$A<1F#>y-H>L%ay<7B`XkMWW~L0Q-%+ zNc^+se_7jke#wpEJBo#N1R$CYo#*Ijq^fgCa-o+xH${lIB;u(vLLOoy(KIx)$)GCt zBMK5t?vr$968Clwy2lyui%bRUjRteSY7BRwB_oo#YsmbVe|X3xjE7i)43<>}qbc2R zh-UemknE+HPs#d%R)Ht|B&?+U{M9%+jPe+wUoqyq%;CbNh}~; zvUD$?(jXm@E)CL3BPAWu-7O19iNvC?A|l=3cm4hTUp&t@OFTO_cJIA2XWsLkne$$v zi;Btmq@M02Iru1sfFc>WS)QsX#ta6T4Nwo#7vj#i^x(;3w63BbQz|sW!{eoDw($p- zriUk;6l4ga!t?R#SqR4A6p5*aMXWSjOrqM5Eh%M1#f?a1=4h#K6ShqP{eubyPJ68k z@>vm3f_wU_#Z#~PtCj`}ZkH}Z4sqfy! zgmL#B9ssUPc+b4_AY&9OO{wN_c%imP4Fm)~P;@G{5j_;5L56*Z%%I{M;cbFw;m#UPHTe;BP`5$30=XDS3VKuC>{FAo2PH)Vem z&{wtVMJWre4kSI#O9QA2g(9U70#b@+0F0*4abOgCVib$YCGKL0a_V9!-W4n%p5Q5( zcu+5uQ|SIQ4(+O& z0WA2Nc;IXT%g|Hw$PmgP;1UIegLRW_w;8B}l?~y22XDr7XEXyyQh)S|k~6Ta@@@Uf zR#OxqCIdyH)^IEJK~CW!$ZZ!0vD?{*czQhcn=eF7+%9@lS}HJcv%)eSGnOYro1UJ%g(D#m zN_0ZaYQK>hfzmAM1Q%JQiOa^`7IlmI%l*X)Mdk7FL4g8XX5@T0^wkY(4}p(kD9REL ziu;3Pzu{PlbL=4z?5~X$mnD2M(s+Bt_vajQ9dgTR+rh8oI*tg=M&)|F?aH*3&0c01 zTbgCNxM1arM(Kttuz+w~Bp|$T7P6z&BkEWcmYuVz;9{qKB8t zqdaynp6m_HQU{XbzJ|v8;FN5}d+5ybQ^-0EB1k{;uum^qJ94enPgpx{kg`6I=N*92#YY)8d}!-^I2@P4y#?@Qo(hFE6btpG z915lKz(-T5Oc`OyWUPu!aG>(%fK2vgS{I~-v@LUh)v?gROP)S5-s8YACp}v<_-NdK zQKSff_|IQv4zd&3PmiBDI<7yUzgQqFS{!*SeKu8S3VYE}VBSaz%^g-5x$T1WFR9KN%LIFiAo3iJJPWK2z&w`Ov zPU|3qCCNCv2%{GOvE7TQmyo9Dm(2$79S7Uk8GL9D5D7F{(HUFwO($ny2uyXcrHbpX<-JPV z!f++`5`=d&kdE3eW|<6A0n(4*-q0v?7m-s#NwYdgO+BrpRIGNd98?3M5*FV!w8=+^= z=#SNt|BFTT@nh{@tpERYRrB$+5btkU^wLOuQtO^HiGhr^4Ux|BuvDMMoymnIug0`y zW-K6;z<^5SC=sG@?pzbL?mM$jNXh09^6+Z_(~grf8k=urvu zyc$z{e6*sSAO)QUQ6KG5MZjkjCCf&!rU6cm{+&=H%I`{8*$&3f3V4G=_VLrv`3%eF z{azb;{L61^;`$Q6PJKzsfV**Gry>rk{S&454zP~aC-zCT>&5qJGcLs%{+ad9N$Yp{ zJ#B!t!xRF+Q=NWzVyBEj_9c!cHFyBuS>8s%4u&Z&@6?7AmOi%siv<(eNQ&9Z6_Y)v zMJjq~1D{1*1nLXpwC)SL7HbeWx+qa0kpK)0pl*rwR>DeK0ty7aLXHkmM8bQp&0L;=G_3MGdRV$FRb57nqwK} zt*4?V@2T`ytkhAnR&zT0L{D7&gL8S`iD3W-icmtLH8%^K_?#7>H0;cSNl^h?fbDGP zf<)3niW#{g=Tc8ondF0LVwcq;Cl(KY3yf1X<$9yQ2%VWlJx1Trl<*o4-C)CPKZgs1 z+M?(~>g#hUj`P^boQFpN^X~?UyJH+5w;uUtPY6quott#dE^zXJn)wxoT(>huW1Zp&gD%Ez}85OQ0_PLeWW6l%{850z*&y zU-!Q1AKgI%oaJ9)CEowTsR7j5|I4Ydc_@U590(WIKS|N;JNz%D_D>!JMhjci$1iIV6Mzfe_VCr^G`9LTrhIMOBML-)N>)!c+)Q z&#jm0#rP4hrisxa~CTm1kmtz%Q?%i)Ys5Ivg!ruYFn1U!Ii zK9QnoS|97)C^I31*pM0ZUR5ao;2Am<#pI~dGJ7%0WiFTdknK##{OiG&MWz`l(~}8t)%Pnk$C($B%aMEC>A~3gDzeyg^<|nF%@8 zH;3w-&o!oa)h)pr|IEvwMt@pan=h~BixM2XjekN%Bpx8{V}NCT%HFR0<%XD(Dkn_m zLjNfz)!6-p_o<%Ffz-CnT4QaJTqE^+K(-AkaW(}`s;8Womo>a>;l!M8)!5#8Kjpmm z@>K2_5P5sd_Vy|It>1^Yer2(M3gCZ!a)I67KE4cP21+O+P6kfIa)^GS3265cRvwnZWY?XxMotIK zY+<{2`W?Vs2L#{3WocC6*3W{omcuDO_vO-b&Q^N_Cy2_@7ILYGb800^-7xT@SbJ{x zxCX6KXAG1ylumE+qA+eBEK>qhXL(a38<#pDwq1?C|6A!( zDmstl9;(N-^@T%0eF66XVZirHwisE$;_%orc*7pNp_{%?N?hA90S$@=O5_eRV1yKk zK#^=SDMaxeQbGTeJP44$-w*6k52wi>=Iqm~Wc_@6TO9uA3rlJ=7}zdj1C}zk=8G9_6qyoaZ#>0!M7Mo}Agg*=Bvj6B)9zgT6RWgEFk-$(nc z{$i0XEfeP_l31m1?{eFrvX+LkQc)Tk?|G`Ji#&-SI|ol@PDDzB8BhR4t)nCqF4pv0 zI&q+NUpjHC?zgn|9Pn0qpl(l^VxaCf%U0bV>FHyj3f9z-WV7Ovaw$Fi2Lo)}bcH+; z{R12Wz#5887qrgzKfn>do5W2wX>AnnJJ$&uI?%Mwa@>@ofK>Febo!}o>9wgY$ZJK< z0`^NvWs(~meYh+QWmk)Tnv#w=5w{E18PmTZ@77BQb&xli12U$Caw;j}r5GWta9k1q zhK!lY3<_Xl2fq>r&CDnV&AUDcOOYbv$e$bj2SW>`8efY0@ zK$rK$mmdXLksWpNyh$R_Pb>S8CUql7GjYiz^tLDSHtVv)^cLt*jItz6-f9-OYE#Y8 zSJW^F1u;9PvH~82p3yzdektQVR2HPxFtPQ!e_Uh;X2uMlUHWAJ%`{ZU6?57n0`Dy| zupq}b;$04mvx8V76z^X!QvZsf;@+ev_-d6F^(_>olYcUPBO-ALKumSa$R=swYHrA1 ztaaQAy?ajIEELyoe4rLCuIN4p_$Zl!a&c2U!_b2>Au#Ak zCixvI(aAOi5iMJ0#~)(+PIP^DqnSzRdF>eMgJL2V;$n`>JKoz)=^Y=57=cvR z-Cr!!8C0L>0u9dIlw*RKiqr^22>~5At>hpz@?i=^VhrVaD&=VcyWYN9Ss&yxQL6|+ zOe3R6p%m8{yb%gNQbx)WjVfr2#rcBMxYPk4>iJ(MeI_2VWQUV;V=gE zY^mZP1*-@Sk+*Jdx5aRr%CESUM)+uH0b%f@{vAMyC3Q{!G;JoOWVEs8DynfMzzFJ!^i}a(!k92xEb}@mV9ahrg;iAXnrWDpOCd zRpy{nPNT`02eZkMtUQkO`)ePGRp+-kIgw$bs5^SHh#Fui_%h?To7P!>2e9Enr@&$Bc|O`>oZ&6tYP$7PUU@Yz{M#- z6lvxJAFJypWMm6LkWk9(fkVw3q@oy;u(Az>Xg3IzkhLyCoz%@r4t9=nkgx=+8$fj; zFh*})FWNzO9#hSHrm1!CQJ7I_Rq<0Ra_6abM-ETYAM}C2iJ}kGdL9gqNR=?rW?iy_ z6rxQos9B=Sd9LI`y(aAu4(j88s*OclJq+>ZdUJpgNb>mUE?-5*rlo;;1L^qi`Asq$ z5y-!s*Ap^%qN6&Kh@`S0CyI9-z9=PXvQr^*8jhQJ&vSNvS~;73j_u}Xtez?#$By!Q z(nb&+D*+Hg?Vz^ETz{CJp4QVQaux4(CDMbr=37qqi&aVz5BN_MnRZLLSsPATB5|lN zcAR(Iil>vC#9MwP)Ia?6<~Z4AbqLB1gy~G;zC%;P;%Ld zx;_wyT|t+lj_iVj?V_cW(Y}4B!WXhEBace98TbWmvUc#4RVZuph@=~(#Tx1*$I)pe zTa4W1jxjSAmShR`E^@HC4u*Bm4Z{|ui%7o#D2<%ic&5mvkzNqeR^6nlsrkk^^+k418< z_v`|v8>VoPuFsLKW*S+$al)aD*^MQw0K(}7naWPNV1TS;#GDAJ0z&ZN`Z{Ff`b3f2 z?nyaBdDM~YbdxM2?Xsgw$>D;dJvLy7qoTL60_^~Sly+)82LXu$5JOMT=2e;HiIzmc z2026lx%Q}Sb{+TBk~7rvyliTx^qqUIb=@x(J|#XI@c0o!92)w{E?4tg3(ZHEGIrj$p&YOIgX4$ophR<9dBm38NQkmXppS;^oB%TQ^ly zF1akj4hGpz~2YEn@#LN1O- z3F|k+4)<@25zqWoBx_u1uz$xvtL$D3oNb3o^THx}$f=7Gg#u|!-ZaXSB_I`OL>h6N zhU1;QRR8SsgOHJo8*}W;JYB&0ZcCMrHffTtsKm}f4sF-hyUF2O$lG!>{I7?eQntp=c5ArhWi$9kL%p7+4n z{xw;;QALk`-gR$jQtfx3U1@{zAhDfr;rQnO1^&`OFa!D5^RP1Yoxaq=gm0 zWVG}`syngznOT6!qyTk(H^11X-|(bIkQn+xMJifjh&KYyeDvUK%eSmO1O4J_Sf2eM# z5S}(X=|aCE(qtE;D8i-3Di-gSb3g;RtTiw<1>SHd^B;XWws0uN;Ss!%lWL0v-hVpCO&xP195)Vy3ehVHksT5N_eaKn zfD8;c&(-N}v9X=NQPdaiiXIG7k!U~t3&)thSfU=pn^KY7pgiH6?~w<{xOnG zPZ>cw2ACTLz`|Zmn{eZSG-y5NNNfSZ@Xpmifx(F!vbCC1?2=@o4ja7;W49rzA(<5%U6P^`!51PYWJ83 z{-8xBnxl0<^!U!!(EXcr+%GpWQ$YA{n^MFq^DWPp4*5tST=mc#^y}iJ2JPhWq>A{* z<0R{c37-VqbO$)n?tOhcNN040T|af2^e%rF;M$uY@bYhOTj{xDueUn!3&4zHZC zlL^eezFqfk;Ey@S30|T(rJvumh!vXF%6JF99KOO0(Z&DbUqFS~E}-DsPAb=uVsRE7Cyd7rtfCk?-6AL0a(Ax!)0FMdW}ui)cz(dtl4%7OxAHPz=5doALa@s(WYGHjjsqP%h6b2 z%@{W1I~807gbWaMwxMCz1S3#?9Iip>2i8{WImSfaajByV2oM z!ct|_*6Ks%{@lF7Z=FfmJ1Q&#LA>WyN&+*I8TSC81^kz8k(vREQ)_~gU-`#8z80)! zqUn_0^W>IV%P>g`t7Gj|2y`wDBQScIm{&z>L}$^`Te-Fq zK6G6A4W^iK8rdE?{L`j6Pp*7sW!s))7)# z(CWImROufOT37n3EF^n5@9_sqlQaAv4k{nYUkU_ie4-Jo?#j%*R~h9VzQGf?q1gHx zrfwQ%uq+5GvvP5d83O$14OJ1z7g8oMf8sJi?&k63@R?dWLK6eiyBQ~gdmrUYvzx!- zutsG*OkX~Gmm%_XY-Pih=FdS2_0N`Uy`t5ur?B27u2H6SCLc+LAF(1bu#QsA61P^m z!tIJz?7rOnI6p{H`^wK86YkjZfK@)S#*C03d(oinAt9WuRyPrMH zvs$hj&1ca%iC-_bZom?qsh$@&dEahAmja9FchK{5(N9`cL7{csqKN}`)8x;(WjIx~ zSnZs5XVeW!Lziek9_2W)K4{)C?PO3iHA+KLZ(9pd5!EBXw7Q>6{F>uJQ-3r6y zYGn1PG%{eKm(b8!t_TsoeslbDzlwIQz2aWsb81rG(=1%Y>d^P#(#RDDynzb8)-Uj6 zm5Mdu?=b7y|R@xHczu&pk z3@{zWUWzS~D$BM*hakE{mTKKO5_^hhErK?byR}bXMMPQ?U0ktKt!rDx@SG=KFo6h$ z=<5e8`$xT%;=BZ5m$;o?P#Gu{N{hL(PNIEi_)m#6h=II>+ncLEvUX3yNL8b=gg43D zj|0Q3@}Z9cFf7Czp;N zEPeALkTdsQ>Afe%qw?$xmSSNB#WR_{^EF6!QLA6c zWnF-^kA-iKY%9?dVdqnof<`U%0JBl*}r(@%6tG#6F^ov35P`L1O2%o(fF)onf?CTx;9I zf%J&fk2Qwwk~_Jz$$xb9g+65ZA@FOxY{h!qlVZ&VS%Z(}5qu-r%4Xrwre2V#NpV13j$yIW?1eM?ojO&xef*K@8idwb9|NEpm$#l z)m#$Y(jLUo^&0XMOdg9RqK4Nh@_YPtXCg-9K_x%N4%!*G9g1&IqE7C z@9>*~@~vKj@Y{=@BnFdF3uXcJ9ICpyLd=0ITV*;i=Y$lwvVF17`Y63DlmZ8TlUr0- zOw2&vD-E-$KPmsXe+F8BSKvNiEJv(Ub%|HJkxr&}P{ z`-E*)IQKc+mCbl7ja%_m!tW+O<=@;AOe5@`Z@S@rckpagjj~mVu>~6Io~^Vc?Ch9M zE(?P;Ed7hQJws)E`Di1v`POiBwOQ2du(SXH1p-L&9j|e8%?WmvT`dBLOzdiM1{k-Ov0e~el;~un!2%K z`XsR*!@?8Uf`{Qo8^`!3*xy7GI8%l zQgrpM(k|whR~XVl|E0=Jt+n8n@SN-L78^y2hmq6PmtqPwUpSr=b?9^#k zyVz*pZ;syyzLp00%G3plYz&Kk(e6E#KT`2`QDXqaBPK@8nhO;0g&b^x|KOBF=XqFL zuhZXqv5=uYKqyL=#)(%dgv?lJA8Z%t7sn<;sBpHbz^-l!m@D}du21nTkZpU%HPS{c-gq+Y-ya5J5gB!186?+Rd zvH$!!;TXO&QN;KM_fK`{oZ@`z+2`P7&2iY0lV5%2Xr^@i`gzY_^%y8{gOh7D+&gLk?iTD%!@_F{rv^)G`+thtQcLX1jxBe&yyi;3!0q60QwA!OL zsMUKd4ZVRCb*nmsSJr%K{hCSrTugz9G2L~*9-mx!?wR@9EYsC*)NpSpYJ$F2JlvNF z>$}f{Um*?DoT~XAM&PS%*x6>j>b8eOt`5>5Jie)$w4@amo1>Y?+?vUq2&*h;R2?3z zDnAtZpg4Y=)}fl-N0s|3&S5CTC9Sd6rTa&_P>%09u0^?JUqDznFELO# zPpOl#8!|8m8rj>Flz$)Tqk8oX>vmnYMd0F_;4Q2E*Wi3zCg02t>VGzBb*mO6lIAJl zyQehX@=Qh36Ne4(!dF-M1&8tq=n#X!uK63+_f}uVEfJTk585rsULW`p#)J&D&yZGs zM#*cTL%asNBtjFQ>5W^bbf(|V;|2qC=Ib7Rp07I!R#zuHZ5Pb1OuIQpVlSWQ%=(3U zhcXpcUp><4^~*0mlwSzQ(K&1nQ5q~e4OZ@f4BoULsmgC%V*%BbtLTVR_k@<~wkH+0 z<{XHVKfCy4pHFEPx37{;?n(kE;T3mt^R=wL^R?ej9m z^TbvbqeZ{XQ=Q!2vKx5Hm2~L3kK<}MfQQYZxR4Rimi0l;4yT>{xMbm;r9LZVCvI}mMJ5sUy(}rRP`U1^;*)JbfJZCdVRL`B=d3ZbS7-9Ev*L0=W z3;6=Kc2!HvVq97TR^0J@A=A2 z2?=$T-rOcHUki?jaOWb8(b|v!8+GvNx;#?VW7>4ynmn>@mYBinsQ5Ab#=(H`a8O{X zjl0d^&H1pjU{ACB(Ffd`_k)K5e=-72;r=ldhv^rj*}}73gfZG_-$Ak()8Aq`aeb^f zHMX`cZExk#air92+4BGE@ zjPV!A>H8%vhFyZV6PVCW*@3de9-k~W(OgC~p4~;g>GLD4FutLwV=P)+-@;hT$qBfz z3X=>$xW9dg-=5@Qez0&64Lgsm9cLwZg0}JoBIA=SD zr|+>|bj^dwIzW59Oh&sM_zoQIJuz!Veu*BO=*+#YF-vBgt>GY{P%UQ4vCk37l0 zZA?O}AIbC*C_`0qZ#tbi6keMZENL(6TVl`UE%CnW5Ys+3DjZqSB~|$mG-CbDj3e4& z#_&lW(`r=$u5s3&O9}mR20n+8wFj#@-*m&AEnpW!L+Wd@{iKFAxZAeUU+DV^c5aa< z6Y^%k{7v2{h{hO%}XTn1;12^lqB6Ln_LJY+}A7cc*|(X$nCFIgCLt(WM0s8$$^ud40~E@<<_$ejz|Ok%^Afi&d(LYUa_&yZ6Z zJi+Jt^%nTiBziU>w0gD8lNJ|=npz~Db6J?tLDu2t-&U4tCzT|2XbhL zqym{4$LkB^KB+{$o+i(hFag&)?+1uLzVt!oVSe;!0m-a{LDSI3V3~ zx}dA|EiS%<+Kbw-a5XDk|GnzqjOdwJSKmaF1Zo9`RWjxUdqd6|a-rkHrA%*@wKt_Z z8-60CNa527x7ai-(56hGb$FxUK_Aud#2tIWA|0f7Grh(014YCaQ6?rr<4$sBW9ZUD zJ)GWSc#NyZ_o8Nit$Q1npF}5KnL)lEDU>{*2fHy>Z2k7;5U0KNW#+C6Zh^0LSWoJ2 z0T|8d+Kf-lX=o1K0^J`p+eV0v0Vm&T%ZgCwc-Q#Bmyz4ojD{O5B|eEd?RSXZ3xBbU z&Bs3_)W({N^vQBzm}?X^&nz-bkxx(cp9`KWmTJS3j`?|ijV0P}5i?b# zEf*OWfs^~@5YPF^CP(~hOFK{+>r2b)Pi%=TjVU(!s+?F zw$D2v9e8YHX^u{T#Qw&Q9O<ySKKSrS@|x=4+jfVT zqZ{q6UP)#>RkuU@y_YUNYPmSl-s9-Lk|)*}GDTaM(;9yJNjrW*2jl-^MZb15!MAFUeEWh=uHSZN!=k zTq-=zS?FRj#qN_WDoU4sZ$tCm^;}u&VWU}EOrCCRh4lV|X}rY0jCBPr zLiMY&)#`6x&bOyXCiDDPf-B+uQ!$A)LU&n`uOEfl^#%pzx2wko$GokYI04cl)`e(? z;;3GOj`+Az`wIAjX#(C)e*Z+aif&gmF{NDHvG1E8-=Ml3PxNi})n=ROvNae`5qg-JE}Hd>K#mr&%_hruL1?*W6g}KGD8aLQib{ zM^BAW7hidJf8I;c-4grM;_>R;yP;bTvOUv8(}b0y}7Pp6EA09mcTBtcFlTUv}Qec~eS z$D9|~!N=Gaw<&(|p$x7c7f-9|PNDuujh3oenNUyL-c_k?Yg~C(FvHbOr%ho(I1Roe zqg;tbKqG&px&+xOWts+LVAq{lgsP*GCb+k75Q8}I%~n`ywu({qjyZ?4_^=#{CKEDV zS@fFpz@nC0TISq`zz>zsI3!EuGI)Ipk4fHZUV5fyzWa7V-k(>g;>22R&%)Er?}c9* z6I~%mBp35B@sw~pd8zcz0jxdbtD3j+K7rg*mAQ8V22zqHds@1OdFZ~kSPM8uMDSTdkYEel@?dtMiC_i{+NMm@M${-CDuE!;ED(@5LIHBrfqGggU>@lDCSBz^p= z54hHfOMjwt9}2CEHOJ75etQ0eBg_i>$t!;ZQ_HFlO|UNF#qnSz*7U69ce@xx1vc!< z!c;Vmu*`3S$rBg6R%3H?Vbn6iFv}QOljqTD6H`rZqtT~>jH;W3J|auDOCv}|iG8v~ z)+cM}{TO@m=i2*pKYsxUc1t77LYB%c}hYa}HY4{pB_Jvg}pC$;1?P<)wy(SgEdq!6I$g zf`v0`FydWKjE9n%bjd=!xk<*SqpNhrn{~Z`y{l-;&*k=&o@!(?Ua>^=E}y13W0+Pa zUK7S5PKh3s(~Pf?&R73I(v`g7)oAA~w~7bMlNWB__XK>>RoULS2dmdbgR>)!?et8K zd*3rl4ZgZy%6c8X+FL@wp{M^xb42iGh#qg@x3qRw-@Hjsi#FeHmTxSawB1nbZ){En zUu}+58I)f8r)NBRe(+=@Cm-zMKHu^7Z8*VA1EqLW3c z7(TEckn$ef<@iU+F?@sd_v;tfEfZlbo5nTi9#bYOCs$?u@43F84TfS1SE32-6AV2( za+K5^$m7Yzx7d8wE=1*J2!a$9-^iZFQ(qMPFc(klIRb>DblPH` z-C@uWWni`&@fV8)ZE|s)1_`xVsy;w6e8152{kDhu!}b$<=WrWGC!7h(>t~Y4 zt2}nAu$rTf6x)>LhY2`oH1K-O<9#1nc$J+DHFu2Ckugpb|O1`ouX)zcQjSCE!l z5lg#)ceQ6}QAs$aA3C zv~=MW=Ej?hVlk`py_|mAQXGh1xca=!l=}Y3OZWI*u1`hLjNHq5a?n&7iLQ!xa}ZZ^ zCqMqU*YPmhAy;=XQCGTA&rNLmMe)oz*!0c&{W9;T=x0QNeadl9*2IAY_uPXdYjyVu zavts{lp{(e&4cP3^icbDW0S02=E9c#?~ZJkkB6?B;E>6eO|^)ztJfQrPth*KV=P2D z55B$e5t1)#vo_|i4MOr1*5fO3xf1EL*2FW7Ya;A?bP;KSa>{ZWONWhC{w9mndJo*O zZ3aH}@=jG=hhb~fu%?d;n%(y{l&UTtym}!_+}3;vyN;QQvj`d*?HK1lmLccn8Nw>>;ldB;lW-CB4riQspQZxi_067#k8(IU4O;Yt*i{twzSF(=|wL6iQV za?X=;HyRt!CUjqES+pe-D|uz{(~~u;-ybb?waSBwu-SXTag5Yg}j-Ur@- zGQPaay9i^aD4<#@c*e3)i{#Sq8yIZ$z4ytoRY{pVebtIC%WQ7*^`*U2R+r24u#jRY z)+ug=9PZ#JqYjrS#>0u1IJ$7Zbrk-`t-ym`-huio=S26{<@{SWTp$ia9#v7KyQQwr zYiFE0>sAcXv{qO+gc?a!A%T6Ahq6&#fv-W!nP~&XYzT(JzL+y=SijDdGG}G&#)gvC zU9){52h%{ z7Kt8fHeM-KTPAC<#?3bvOgWZ6N@XHfu*?^W#0;5Weu+&l^zB-w9R(y9{wfK)VTnhsFI_(+N%6C{K$*wgGU5UZ%$~N{qk_) zPcgPj*R#Pzh?)j-T$jphTxZH?;l>$z>dUfU)O2U^D+ZZvy!#S7t+K)--2JUj=J98NI&Go*Gw5?3Q^E!`HblQg4cWehx0=1*U-r&r=P%CiyXe*MvMz zLbe-9Oxeh)qgO_FY)ZXTg^hi2S*%CwvAz&&XuR$FV)GKZXPg?bPyN#TFII}Du5Wo$ z(P7Cx8%g=}>LAIxC~hjI1OG``PyT$xCl=ihF>N8Wk1RUvu>)M|uuRZh+4(Z9 zgnQEMSte0*Pu5Cil@fuW7oOkRVPIxu$hQ}Qt1k&GW~j->dlk4v(X@8_6?zM%6f+sJ zFrWBwnc^7ZHfNA;9rgVMr}Ug+U5LR(`s~L}wIYzSPBR+@uS%5gXTQByrBZQlp$zNaD>DFwzojfsQ z;ljg7PnmQpC%88a$3F?flk%9p7Xo&2b!}{7(pcO7{;rsLt2rOs-z;@OW& z_SZF=`EkGLoS8aFo4RO^?z!IoI^>IE0g~(;XZsX-oU++Ak z9^I=5R3tS$3@MqU?q3%j|IoSiBb`pha$DOb_4yCoVksYN3CQQF`S&?gORZlAv9o$4 zmF{s#Q0k@Qeft56X%;t?0`g?Jg?;cdH!*i*wV8K+b@$k<@TyZ^#F z;+pLq_y_(cPlocM{SR^lN9?VMJihVtBicXC@g5UdVr-XoqM||G8u-#<%7=_+`Y3gL zLHo|;ZfxxGQ)}9YXQ8_m_O-9NCSG(|7uv3tQkFx1X=zU~{_se4cV!nPedV7;Nct)( z=z%`>BnyX{#KjtTZ{>e=^_5X^1xvTM1sR;+5+u00Yj6gF%itlw-7UCFaF^ij8k_`8 zkil&j7-Vn@P9FEJC*OKM>(uG$>ObApUAuNEGL$}Sv&NZ@Jtsx)`&RyZ?Tt#QXNf^7NMR{B4&c zu)26#AIxMjLG5b9vRWvj*pTcu{<}g0NQA{}e*iBoikd1tvLZ zX*Y+xxW~R$oLejAF(}Nb${}?;sADDkDtRA~NF5W2bjQy9@o5Kx!1t9a9j8?)*Ot6} zs?-b>t2<=a|B%U8ba&cC|4!EQdb}GR{^MMB#3Y(uDpMGpl(LBBg#NHL#;_Shm6OZ2 z{VbDs9Nky^>Bi3$JNQ3`>n>cXbAnEgNkI$VcqTi#CJx=7*lZR=yr#v-D94v!+z( z?cCg4mr*F~A=I?$2^W6pD5{Io&&jJ*#!f*tT^R{D=*rCuiIrSpog{@(EI@0gD!)}+ zeS*j?E%}KOQ0E(chkhP(05l{ZXM&@`FO=Jq&fiS$yHTs{@iYd$6TQNmL#y#d;@0l; zo4vs_KWN9N?hE%^E-wGx*Q1gJ_Tmz<>;7G|h`e_&x%?l3V*=3zaAvDhEA|#&@kkqy zijI4dZdi6lIvEVM2NE5UPeu?%@Tq+zB~o&YrXaaYm(=evOv)x47+tA7)!qCY`G(fq=cKAoBs#&B!on4>?gQNNTp8~U& zEw>all$%h_4*gDSDdbaxt%1Oyyh5e*r=-q*2tQ6m7oHw7A&-H7W*#F^9wZ@tT!^<6 z5(Rs=r?(XHsf~R*mb+W^dSB7i9^+a?OcY5d=^7;g(Xw*3iE39U6RzLAm<>aSy}t%A zq}mWy3g9*F5>=@Su@(&y`AzuX@w$jb{dK?_e&o~lUoY0LvAiYOrjlyz0EL~tZu6Ae zgF&ueXN8t-I3_iJ^U(4)m!67}a-d~-2dcUVoJQyi|H{0bYT=l8v1D)QTU*cBnNd2g zf%xW>MA<7_hkgo>?w0)EIf7u8q8mD0*{0pTr+4x^Ew45ej@;FbvT%jnEYQ)S^|Qt< zwe4&6n0(cc>7e;+Umqiq-X9{HNC698L)CQ7=)H?(IF~9)&$Ar4;b<)OZ&__zl!()> zXUkTtMk~HUK2ZX+M;b@1cq;RD_&bc&CdAdk_9Vp=p^&)bmciju7Q3M>@5uQJ7|Z(I zT^6eThjT^Rw~WW~URD7(xH<;1OgAHoWc$RCGpN#=;}M-^HHhXOiv}#cM@F{E8uDuV z!UNnzomDxd9wdr7Z!J4$edG_CP>3d2o48F(-lFJ+|C!ewa+a34$Zm5CCg-h1?vb>? zNk=;RBz$tyzbZOoCOH;oTlX@asy`3i7S$KHAnH(f4XP1jx~u$6f8uF>h|BO4w_+dizcCJWo$bt54Tzrhr zJH1#xeH(g0P=jg-Ies|!g_KbCl{BCWA{>YIA+X_G-^N?HHorabRar^x{DZWv zcUX|dR;?tRo954FgUjfvDkrjuc&a~s6-ImWOpva1=JueR>k~?CwG437djb!dI`Qb& z=oO+!S0g8ZAFIp&V)|@TcvWMUyge@tbgj;{J?3WX;T0G%Hl+mC2nmcZFIL zgPzraI;lnohtSqt!I|v$^w&$XHf#;3%+u!B)>HclEp7mvOIL=!LFioy?WZ>yQ;W04 zI(zR-(6H)mGSSM*sBQ#eoPq~z0m!)=dvCHA9Mdmcw2P_V2lG}d#r&0F(0BLktoDJd z!kO*5F`bPhG0>95msSvYI-#@6%+ z6Rtup<3d*ve0!z7M-x42x@%>mE#^PcWnl!iP()ehR&K^9e+g=D)LaY=#Qyx|@iRs2 zhU-dZ_s)K~R?jBylQQf#9Pv^~o@v)7A90_=1jeTE)=OBrsDbs~d9Qq@$ZXaWMX*#J z9l@z%wy-j{Prbq~q|JWwQ9ds~e_sCv)POX~iZvv1rED^-zD;@}0LVW)nH5mrl6W%^uv1%d2S_y8sPEE{U5 zm~4J<@{Ffyw@}oM&S|+iu6Mk$<(?R$kFcxDZKa2-dSy>2ER^R$LJp7*xj`#_jaQtj z?<*=-y$#M9+7a9Wr-X%b%7@)idL#?VOv2tKx2+V~nHnrM13C)+XeYkZHdl5Kz>JhM zZ(Fr$fPym@tH1@^GbS-5o3*V`07t;~8INHC2u5I82N0J*wcNfz!_<&vEUufD?M?$L zVrKL5Zh?JK-@2Z0)Q!~HB9dhpdR9jEnd@y#f);+^I96VU(lkF|zpqHm65a6bA*tlr zJHR$_dmF`Qyqd;ZOrfeI1TKj=ze~3Zh;JyC-DsE!CF@=Phd_uep={RA$;yvMq)MKx zE;F8kbx(@&r9WY=9eknlrf|#fK3M0Ks?SDAzNPC+yLa~Vz^!&_R&iC;U*t0KcZs& zuaoz9`vG50|EOf!M)6Ms(|{W)sjcAArGfp*CXhqS>W7q}6A{MOZU^FO8KvWJoDSbW z+2h2HN|G602&cYKx88ek_l->AXjSe9?LIs0Aizgg>31nDZ#!?q zc0fKgRsR1FI`?st;9@*lU&@~ZePcx_f7H`efG)F~yzgX=NxeWGk*OlG?Y~5&%^)vB z@hcOUEqlQheragu-zzxsM=dJYpaQ2(edtwso6d(Qw!J5t0)4$kwI+f12(`Q6;8zGE zM$PN7N@R#AWUaR;FwgxLS(Qa$%2n(rfOw-->kmqv4cIO-v>**+A_|48!l4 zA|M98yRBa{S!}`ZA4`5G&9ihqPDO#fo?!ZDn-$_E>5O){ATJ>6y;eZK0{TRKvyMGADO4Ql` zswO|6e(BrPF1qNo3ZjF~=7!~lPgcY&v9gj`!#|kgQ32e`JBKj?xC$!#CMFwB!*c>_ z-`qlt0#1S;!4-BCy$(c{Yo>ORP?NeZC8F&rsrqNt_j~XWC!9fJ= zVbNYr$ofNn+=4uLj;n++3CJ9S$JwOaDMx`aj43_cf(%)L&+_RE0?lPZSq@!L_SUYS zCve~{A-Hr5Mx}ciIZ-bJyMi11)vsJI5KD4d6{3U1%qLgG*x_&9p%^`##SQ&_hdEc~ z=uKu&4(cgGhk1g7NqRDuWN*vhGf6Kgi;d_D#PK4PJOcgyS{pA)?cg zt=uc8y|)dVESy5(`#|JB1Y@hgk8@Xn14^FctRw98X3;;{;pK>;5X>^)z>~P| z(l&+hfM`^FBW&0|O7R^U_Ey|wH(>`OXhLziOU_^=&Q8e>IWqNkeC6~i&RJq3I@d=; zUX&KLr6bXuI%OQ9zd-t!X#`gWJIHzWiw5pYH-=%L0_ST^BJp*<|4 zf?#l6J0x&~0uj=7IY1OUD=|xOe0YoY-UyP3XF^=Vg-v)Ks6q}(m|1&C1o%qnV@kKA z;n_u&FGEkazZC0e?G61jf|BmW3_Imm@W0a5B&Fa^QvI@LZNpVR15OYQ>6ryhNerYN zj{;E_Qo;r10R)YIgRRGj>Sk|%2p{3xj}iHXo(5-xUtF4?SWbO!rp);}lazfhYkY6e zPczeunw-~%1{}-o)1(vDQt+!?=cg96ohR2_6!3(yk0!;t>Vb{7_LxY}u zF!VYkedEd|=Zeym{l)f8z$;8rqg?D;Zxe#;xM-2uq9OiXfdc|Z9W3pDL` zR>i6>_szf>)jO0cY;9sqdTT4-Przo-zA#aaZMfJJs<`vmj*RRb#QjbmZ3R?xNIZv! z-7{dP+^3OwYF+P%w_%Q;CAbkkF_gW9t{S^@5fk^|o*h>Ftdei`>94in!x4-6z5ZXF zPdl}^*PyILwzjCwNP4PboZ8jZe+cF~Ow$qfAx*Sv{o&NDNS79zoCZ#r0Zo~1hvE2^ zaDWpC%6SriKYhngcrFWWg5t}44gjR%Pz;1oP+ZXD`DZ>$OuiIAR$Gcu^+U%(uU4a; zSd`12=uaLX{$U%E51CUf{;&q?Tr zH3@IZ5Kf4X9aj-%qiF z+%*05KxT@>!6S|A*)yb9==_SxY!a9_1MWrqu3N;6&TX<4?wQVQH6Jg9z0bRkBfGO291!^;!9V4>_BIpg%XAvJK)VM_n-9a&)(d^_BBikoJr~s{cf@ThT6=Da1#C$JnwP%cmA^K(cMv4s@mofR( zmeV zmIGEaq8;JKVsc-RRfwM_9zklm%Z@s%S6=nc=qhci=Fc$%pf}dR5kJtqGMAhbFqu2x ztHP3%O@vT)>+P$ZX`|r`lG(F(MM8=9yG+)_26@Jga^lB_-VZ=~SVi|$PII%ecm+ZzK5VX*ImsyQlw>q|6u#4fwR}mkL}=zB z)5q1N4@f7J_8;4a{>d_u7u+{hrJqEb(kw?UJLU2E>U3z@7aco9L9$s21@=Bh;8zj` ze=eAR*SZQm4ph>Keh+0RqmZUfo==QBPIm8>+;ISuTUn?FUCZv{ zJZc;Rhv?+GKTh(ESbGuoP?V}s7Jnpl2^lybt+JgtOOEJmX8Hz?QR1R4*sVaxow-Zr z1XiKJGYSWJh`OS(ug?M0a~&h77M2`h(_PTEZ*kM?9MFxw1ZiA&Ol8+E)H7#%Grr@G zg*qP$0kurmG$A1d$o(sk2sq>HD91}b$?WPDE(q49Fidr>0*8RqX5)qGM%KPrIudC= zrie@9Zjsm#Iq_=6$Rl6VBYG=p-B&IR!6*Z&Zf27;xgiZFM5n3DI+AdNy!h7yNCWP@EdIhBygbmkV*osDRxFo*wQKtn5!>2iL#4GIk z-?X{*ZH#o-`B2HFjG>CN{#{~C6dIo2k{ z2M#aJwjVBEVb_XE%<5kvp0ZGE#Sh|@I{fhxcu)c~Rvo?`?`mq4-V~eyXMku0;FmTUuTCoFSTg8bGh^Y(`3#c7#`PAhW z_nSJP16^c28eN@!dyq(yL2+PX^Br5dkF;Yk@0LZ#sf_M%3(C7o0tYJpMq~a3t;??dND%+kT12tzg5oe9O3dY` zxuK?#ND}0k9w#!KPicM}1an@2WA!Fgnkt(|PF%(;?M?|`4w$c~_7xO8=t7cs*dx}y zfs3rY3s3pqQ=T>mp<1(ZP{>OO$#+ap7nM0e2ahJ>uE?xJgU!F=%pE~lVE2i~W9U`u ziMbh6F_Ek}@ASVUU=sq3oPU^ z5<@NWHRTm;0wjiAO{rlzps~9Up$ZGLGAv^H<1naUVGBWLkfnvygv6JlJ`;8`Cvodu z2pMbseR{^X+V&ggE{*xxBDkx0f|X!HmZA1ZO=V0iyQ5AYPf;DMIv)BXV#L!VNzIS~ z0He8k9Fn1$=`SY30=G+koNV%ym%{)3@reiohDAfE&%ZHjX*Q}WCpc)A)0ikAL-DkP zWMJ?dhJ%N%B#M{Z2j|kK(-B;Lj}xs*T-IYXalN+)OBJLfH!(3JdA)opXMjLT1*ts1 z`PYL@)QeZxGr&+M7mF&lXdPko#`O0bd)l+cq7z*u0T9QEVXMm!fnae z$Pvl+UOU#a?p#O;rRWO?E6Z(*Jacqe<(dY7>oe&8^HEY(%i)ee?jVGOd8Er+!_~NI zCo3Vmj$GZdyPaKd z!;ZcspWW;Tu?Tvt3J%gc_+&p1cp@F~R!YfsvFWUAPnuKJLxW3K1&sWSSlP9KBw@o2 zktTBMKZr?Iq9r)fRE1WDsjBl_6|E_m6c4$k^P2Rrm>7CDW?xl{t071v;irex-N1G2 zcNqx^%pYubU4?QUGF%^%@6yyX*^ZS9a7OOsuA<`O^rGHLCv5x*27i(P-_cJI&WKOu z+_OQ_4B!r()7K}`&*SdJ3jl~J&i8{!e)MeagKK7F7>8E?GxnXdz-#9Tv&0X{O+waj zRK8Pb0TV`iw-kzuXT1LqU;?E`naaP7%vsi&nPzH?Sy2dlRnP>yOgLj{8w{3zXfYCM zU?YjCY(@@-%;xT65W46>)9%^cAV`qWx{@olc7Ogz&}zwYD4N6@*8%mZHy}S<+WQ+4 z@74o$cIvHLwPUxv5UXODuZ;3Cy7r4iu_v0}GvNIl4K#>0V}7H=^etflFr#fmQl0Jx znra)OT+VeQLk>p4nq_NnWg+MLDVR|+!sDKN^|AHyOo~M6LZtDw2mKA^CmT^ZuZk(Q z6#r<$5Er#!40l%4!@m*}z_=g92!1lXDdy8|HZY-mL4-pz`zG!qCszv6six&4bO)FV z#Z+aZ*>qylCnnEsy27H{p=L~s`;XZUPG3I2Nc z1oBVRX;0iKrx4G_C~35#Fo0?;n0VjiP1K%#YD1uUAXlD7sHh@Ln^CApr0Ew6hd7i* z`%!PydHEqOA2g`2WX;xuaZSUs-e>tWFj=kAg)wKXn8&O@{)0??6HHKpyAF9FVT~5` zDFxa5o)(WSPjye|1?Cl1>+PJi(RYwLJe||{&4-oLs+WQ_Me(p6MPMOaL23W9|H5ke}3%03~u-zV&Q+a zC$HMqYtZ;Bd)j4i|5M@rFQ5HqbpQBE!+!@K{vTVfV$J`s_5YdfzYKaUQTu-%|2x6f z|DEqYzWr}yF!ST9*SG&&!pW=Gp#QmqS53!%Gzpua-G2y5_foSjigAy@DZa(ScZtKW z7qxDwJbJ|jsojc1^?wMo!~y>`rE~fshk9ZWi0OUI;u0{|(Vfk*aG=x0&Lyecel>Gn zcpUiJ4*}#lzT_(tu|GV*RdOSt@``&tt4lh!rskpGa(@id7Wo?+hcmShT3weCnOjU0>I4 zr98G#!kmXh)QN-#s2y}josy2B(`}OB79JA1)m*f{TX>*xQAa%xA9-&lLOo@cH#4>7 ze({~gV8p0)CvvbDhwjHG88xl7Q4ml0g)8;mVt@C5s|F}bN^ge-qK$S88qC~%DYhL> zFK1)RvRJL`Fg5OxyYmemev=g7o57F16Hq^K6VRfUqJBAjIsKZf=8#zoE@PkF05dg; zNTh&Ed*$H3O80A-)&3kUFeRuHM|Z>Sgc4G+x)iQA1}E!U4usxRcRt9I*JK}}@``3v ze16#A)+9r-JM$)mJ5fx|Qr36*q=VKjux!5tUnbD_GB{H={;nBkgfe!Qlo`2TlN`GN z#4_2HniEkrc$CQAe2H?qOXH=iJz-ri%RX}ts#>vXlcrF-fVmAOD$~1MXKi?&cumcg zGdTK&FbZyn(2^X>6cfkw>fI@)hnfIpk(?+VV|SCEj)+}?+6UB?jshG!p51e++MCJh z)N@nLRocR#OKUn3ssrK#wainRylYcVA1WBKXz*w6e#P`3?6jb|(~jH4v|V|TE^9Err>wCddV{RZDN20uHn>i z%e`_kd+}dj_Y`H+tx32&W9_Q>dOe!|@jYR@IY3hWJZ8ej`LI zltKXF(;yrg%q)_QM3c}&khb?N^y2lIc%vMV%>_N%nJWaX4+E(xucnu!4ThiQ)yN0GyK_=e&hmcp*axE@HQ8DII$&|j0eDyqfZ06$J8kL2X) zrKslgA%eW328wN_<{xpKQy%5f+${)1_KFl%uuT#fdK|%Xco{?yuf;KcP0G}1CR%vv zUZL1`y^^u1U%mOtOR*i~495TS=Pt9A>o=iBWM|$Ar$dlgYAo@!cNU5WdJAGz&N>fq zUz_Zt4UENfC4Y7d>>64f-L%!ogcg}_pe94R5j+-oqLTXtKJ@Kax?PFoo6_y~weC_d z|5NLvvIriopw9(|a^^c}_gSjwxsdg>wt*Jb%a_!jL9&-Butg`>AWWhoT{gX zDD@AO4Qhr4z_P@wqDK6BuiP_Y6b()+13$>yhQbn{7cLzXas0|AdU1KOjZ~fst+%$N zb%^|1@v3Nu&sq=CQN!GnrqkSU6%l($fJsd4JG3=CrieSE^nlv<|eP;Bkfn z*E}TY7rTG8Pzcf_q!>Nfb)~|P*wY7ZrBqLmnKw?qTsrmJS>ZLbqD@xcNAN!RdKyvE z&P~qg!ay;lpA#k|5*OTUE()G#k4-wPcf~igYOAJ!VD(P-A0VyH?hcv}_SFE@gxUj1 z%LIywbs4p*$94uZT;_F$`TO4jldFTHS*^&fd9pw(4Yfb|S)UxJeobk~XZ|$l@+7d< zMm^1h7dQ@Vg0cftgKOYHyJ`Hm+6kKU6CU?jc40N7t4}30rq2#(ci0M^BJa5!boyd) zH!~>PHzP*%9M&?}+J9Sj_LwfCQ#ZKPiIO}{9N!W2$Q3bB5)Spz>Sz|A&E$cs(WpQU z+ebpZj$%&5Nd6?uD?3umcG6ti!^ccXd2e-p?lPmib`W6PBV(rfm3kv z=}uWDh#%GvMsYi+qJ7n_@5tVjiVo#hgl4#0qL7z$7V3CCl9hg-WCP>>TE3y~_zF=l zJOp?usSR}F{dPgNO0i5h`|VD#)e92x=yg;C$ZRMH7*U{tLwoec%``s|5&T*e;IMue=#?8M@HLkwv z=md-5-W-WEuTeFhn}?fS@5h)jm|nEUxhO8W_4EE*OI*K9Z_XE1%7miw76Pmc@ZWHF zd}RZiG3Dr9z+FhQ4{5f`bcA6`E>onbD)o&jH8xIgL*yr09QWxP*7ZXw z3;Oi;Q@>OnX|zwuJBjxgt9&1nEXC{c-oe-|)yXB0_%~{TFg_bD!lo&h>TC$w;*^Ut zkO*aYbE{&s;~le{igGy_%G9O?tIbz9con(xl8y6b+Zh~~XeU>cI6e)|A-*sqyds{r zy5NNI8~nHjyq zsIA&HI;ar1fgjyCsh0?J4*{A#7o{9NN_LJsD^4IK}Ct;Vs#?@#}m!42%* zgk!2qEdxxPK_#3SVbA3Hp|hegKOMN?okG$_0iH)j4~txMHYhpa(cbDWFpz z0O0u3sZ`zD?k)g;fq^*S0sug{FP%CKKu{nIW?lIhR@mC35)cj;JCZGQF^f`C$zgC z&K<$$jz;_Y;jm6PcW;XDAj()L!~Io54NT1Woa&mk!$`CLG zmIs^$JWM_h@SxBDPiP5X@HvMZ6AsSQ8+$ll&d>N9r&f?1(44jsSdOOo5+~>XrtWR^@Fh}%V1M0M6f49 z1qsyD;8VK|x$WiSg~B=U-S$Fb{2;g0fxnqUDDX+MG?4E%3eHmcS zWF#q05+Dbp@W3KnATS-hKRHmI)PaAB8WWTN;^I666d`{UGsl<|KH=0lmszxh&3;O~bzY5L6@jdYQw zsPWqnf8kS}O-%kR!GE@ym)D7Qzq$M2bOR`Z{ZAJ5vkLM-NyAWn-u_qwN;d$7!3q3D zjzs)T>*J3_{}u{~kVc_VUKBJxieR#T4|U>me`B8*$kpA;=QqWP3V(6*ar4G``?-1h z{EhnWrv2~k|ETkSjsBOH{KcIz5{$A^aR1Jt|Jgv;-#EWzq8JmRC8^+ol$BILp_C+DwJ$z8EK)#cyfm|~;PzTCMQAYdyXpVNmxlnM`fyV9_|J#4ITDg0nEOAa= zlUVen^8Gz$5N#|9=}s9Nio)T7_zX@Y z@RN48#Can;e>oe}^A5%GC)ijdn+% zFn%aWCs!=$H<6}4&g-TZMM-}zb;{y*!nh-ZDaKMgY5rsVsJnW5yP{Elw<0LrPVTN4 zbxH(4P?pe1R5)4R5aZvxy|I7B8B3J!pAg!e@82Q7VaETntiMhBx2&#Sva({?INut2Y&XNi$&R|IuITy+!5{Yn@M=2@GC?Wo$ z_w#na1v+6-*IX&dbIFYurK^&hqV zk6Ka|8sZN({x4M4@bvITJ9++LHnjVHFyOx;s20H`ajA0+co~pEAB64Deuh_@bA~K2H(HRzbx=C3;fFh z|FXcpEbuQ2{J&>`e}2fLFqAD{Amuatc<%HQ18wb_<}foo17lrEt_A=&{RoZl@}s&6 z0C-_=SQu1`&(_YK@BA|09Ds##D*&!IA^d!}p(n5x+W#b9 zby809Jr_|JxFw|)q}*HpD8K+<0x$>g0h|H;0CxZyfCETUY7C{t4*;X|YyCI$9KY$! zDOAoBDtAgwj1Qm#@CJARoPN^-PUe7uLn;5Xt)Gj$-0!AS7qtL@v+s|OcZ2|d^C7ACHfZf93-KXJ!F_mzaOjdp`mIl=mp@iT`X9%mV-}M*si~ZU1a@&Hw-!BLM)m zDIX`S)9-Q4P<~IlP!f3CB>(`O9RR@i7671e_``0LzLS1H!2|$cMX{A}KLC(L004wt zDZCy38@*4mfPdTVf5iFIe#f5y73P1XF!I{X3>MZryv(!v10Qw83ew{|1IYkdRO@HbP{i)+N$_xX}oTPzI!pk4!^chNy_AJE&lwR&X zdQLF@?xyH__S|{u3&+!di)T&&PG325g|gs|Sl=82ieuT%#eebbzg5eYbJ^_XQpho& zEej|~DCfC8Xt~;H8J|ET)LtgGLf{aDaGE99xxQZ_h)@}eu36qoP%UIyn;a(_=1VZw z-sP06@3-I>yFeN^ofV+JEAafNy8ZJj=Dga&V?f^v#LkB-7k@{6Z?*T0=ZW$m4<@AJ ze)8_x?mz|d(H)YPk;cz3PVsImJ!lj;Km*}-4Qjw%_pzO$C z>vg8S_tv0~&yzbWjRjmIO(LtJ@?YkZ!DSk5oo_s^Fl9EPQLuFki20R0dh`&}sd)Rf z4SU<(^`4o#HQUmUe#KuJTG%7rs@o2!QmSB?^A0&k{vNz7P!|9338dY^%)QskZZMyO zCNgV^k@dP(9W-v*0)z1Zxci=dw`l?_m`oUos&2m`*)KD98sEaB)%{JlHl0j=YR?^aGuVnKL|a0}F5SP>)6LH*$OE_ZM~NV}6BtKh8I6seO;;2ZMp(7FUCOitOZK40 zc05H&r_xXkV2uP3r8IKMz$(2XbR=WERcY(RcyM?^r$aw69^;#pxrurAdsvk^yUaI? zZ!_tZRu?vN>%-Q!>a6DPQ*wN4tq|ct86kED$HvpMzS2ZpSF2e@eHD7J?AdKTqobQP`*{(^0L^ndbGHW? zm9mxRA-*}YhrDmY^^N4^J+lfs3jQGxx4FHeehiqSenGu9m1d@cuCu5+Bndw;X%I`f zW4sqLRRALRMOQpL?7l4qvoEwt9orgLjqGmBa zM@ojSHZ2;x*tpg^+a`!*+afDC%dFFs8IcT847~J4zK~nxjjt8XM1NxtR#OYRDQGnp z{cPOHUeknQPrw$~aC^qe2O9BnLCyWS{h_fd zFA9Eeao{CGhg_UAZuXjeejyR2h+rY56{a!!t+YF^9F{e35-R2C;1=HAwlGf_(9Y9a z;2kfF+WNxb6p5KUTU_QK?#P&CWZ}g%{kL zdWw))KUX|uiaT3lzpM8RyV~J>R+X~0HNqQ@YFh*Y9E%}x{_r@WVuOFP4(JtIhn&tE zDs!z4s$0TTpGKl}5muI&9_hGGFXL&-0530oBnQX4qdCILM?wR~!=T%zb8mODcX;*V zLrYe|3%L6fIj$A7^ll07YXZV-dXn&V%p+98Nu`AfDpDmRbnNvWs*j_#0^G_MT+c=z z&ODmBLT<{Xsz^L{55aZrA33z=?VdR&D=DwHnyFP7f=-0Oq1v;mkP;d~a3piVD;ze=b`g;Lgo6%P)-9 zT9u~vjsYq*yl3t~0(L^HeRpnF{Y-fqU!6`59mvx7xE^htZkfL6-y?ujVy=x}Atwl? z8BY&iyC<)(qZ>i1m{xrLE=N8=uYc>7_@nz4wA8YWk2=oP#yOnP#Y?!JX27;Q(qB1s z0q$hFn>!bh-rlHKHWRd4E`BG%`h|j>&UD~ecGs9%p%NvkT4KGCAqiFC>9OqKDO77~ zqW`fz`@trQXm0Aj1ybT$@?@*56)pu<^C_COR>Js_9zx$gY#}?zyRpV+-xu>GpgK&%Ieif3Kh+);yvTJ^z?G7qzmVyqNmhQ z=eqtOUWAgjQ-STq0DHylmq>#~#7B9Bb_44@$W8Hd=jnCx>9eVvSqWEXG|S6DuF7x2VJuuK#La zNZ}}7#)X(4Y?)p+7*wdO-A^Y*RQ75HGVG&RiXGknRy1kxj)0r&$&nuGoeS@AcnzSiVjm4rD-~ zCJQ49eCXXJYw=!tcvHtGG$JG#16=Ks*DJIoq}?SK=0{xdvtCS%z*seM%4QpN=RPrZ zy4NETnjjFnlmsKba+Z*T=f9#OTxS>XVub5HcT_$@h4J*oUuRu*47zh*$IS_e=@=LS zzj+GM6djI9H@UFK542PQqbwVs2AFH2rT0EDgX9u3H(4!TsY>ved{^U95qh_@BDc8{k)creatdSfc(8mYnCae=Yt+rj zv!7~hL5!A7)E;@MamjB=+;d~fFp}BAiiak!GfSk!smawL_PcuXy{p}HW5jkwXRsX~ z3P<(u@hYF% zCG(niX{9bQI+aXc_-S)m2Q9k zs$GSG0oF6;Q+LYHxDw(}8uPQ>PbsX%^tBayO$>d-197~n2YK?ZdN90-Q;*9+r;N-E zg=?6%(~D}oTtv!tRs8#f#cOIS2^en6AD(s6`FqWGD+}*=~&gOdGxCK{ua4q!6v{m(@(J;5F@!QO4wPL5k@U-nv z*`Z4@p?39P5y)ZHkU`rw`dQgJ-7zMTi$o zfAS%%Nkww6TpmPZ;o0B?GAVWyXPYv9VSnFh(S%HDN7vHf#0DCopH~Tv9?lw>uNF5( zA`e$rb*EUZMp>tM z`5~iK1z{;VSLudmMRD-qJC*xtte@)$?fNS^q;MDwwp_Az(LlO(W=X{5bq%7YVxDNa>zj;Rh$MAT| zZ|{?&?z5+Z^_NY3&}JjaN-DMy4vPInb2()O7-kr0Nu?#=PP<(6)at_Cyw2!#zT%=* zw`OId5vk?Y5~(kpdE>A?YUDc$?Q&q7kbe$}@hZ5f(@#JBk>BYE8`eetx$$2q?c2{a z?s&Ds(BsDShWQK}#bT^L9+|_{b?nBtnB45)J0R_Xn2B0z4HOdM6`zpJ)H$ryvMAYB zKM>L`7)`RVduy4e-dBT%)zLwu2m2 z8zm&RZJ7{D#BAESzC=6^3SySDUVg8U^RpEP%B}5h+79;9Te!||pWB@O#L(5H!nCWX z*{Mm$&V)#IKV|*O@g;733~bm4ifxq|xWf#as@8(kR1w1DvK3-7x=Kv+Z4-- z<|>^s*Hht=fo9!yS!gt65kE~P>=u+Sqe^F<;N~n%dy)@hb@A>4xizk;4enXDcbfz0 za!f3&V(s0=sdZhc&~euctQ1pA3FYF~uLRX@Sfn39gCw_en?J9_E%lLvfAU;cE&J|6 zUCsGIG=RIsTh)OP=7E0p{@Hg$cksO{F-tM+n}JGE@rxtXz5V(AJ6hs9yRFj6LAXKv z^<*ilZtu)xKMlPh1Pfr#wFIQnpf=zNmq-Q@`-K!L2vntq6IYMy(Q`6|6^bm0)v13Uf2Jp9#X% z#&+t%(7`XW+TKdbv0Czm@FM4hvRyr(7GICseW@0F=-;bVmd46H#aPp~{tF48KHIA}x8B4_F$~Tdux*O*>qdoI7#u=bk zl!b|myM9AGH-yFS?edwDGCg1QZ){SdOziub<%~C42W}4OrmOWh#z%xJfx`$I9d; z3&-|%oyLKK)z_*^tB=HcRf2uThFc-$?lqUD*LW3sJ`!TSThJdf7yMwO*8+(XuCFBM zYAMMajSx*-^#)qq#&Di4aXL8{Vv?D}Yd8f<=Gk=pGJK*oeP(IyyE-`tAUFAy3nVf} z13aCpV^6`eih%DDN?4(~=yZ5W6`@3I1h)tcT`WbvMOXC9`AiiJ8QiZBZq6C238ZXS zbab@>;4sR5CYD!mjE7sHVA`{G+hvRe;i?zyObQ^yFbo8)VK+nc-)q>|uC8pa-(`G)7RrCz ztmT`zi6qLYF3@$-V4wJ1Hz3(BRJu$skp^g|FqR@VwpSB~{LB#-&ibJwL`q)FAJUX< zwR|lh0;9_4+6Bc;J#yZQ--%vxX#$O47|F9`f!P_RFg9(an>58uAh>cGUYub2a_hc2 zdycNvqt4#bx5OUMF`*CzOZshN#`>wIc5=?yl7i1j(n2U$3AY76yIxWSsxOXeg8S{b zuk>>zmaW94(6U+g-I0%8eQ08*G+TAb;5at)_mgu4h$T|2Mu!u=5J zkm9(JD{dcOUz9XlHsvWarEA6!yCmE$?`5Ubo0dCqsr_U%N~bVwPk5_7yKv$)70ee7<#iH-APDX0#B~ z9iU_4f^1|M?YAW+8EscDPl#CTSUEZS&*oE^_K@5NF-7p$sW9`DjdsdM2whL;7t|Wm zzMz;B@|6P}KWCp^kgwr}>Rc zoO+jAEKYFAu;3ZMFun08r}}h1hht*kqh8rINpfe1S#DO>am&-^!G%Oy)yp+CgKAy8^6! zFb=og(JB$7cBkxu7(OT}axTq2=FGnDzz5>nE+vKz;fZjRolU2`Ak~CgdfCPhO&L{x z)eWPjsR@+xos4^8X{aQf=u)K30Dkr1z!*`K*q4Vir727QxLuLWbU49fYC#H4NrB%r zqK>n)f(6*v6Vm92ZAx5?StA`IwtV+{z)qRdDj%R3@NqeR5;{&t(MY*ZsvfKi(~AUx zvK=g8t0gYgKDt)D=2PP-Bl1IwW0mNY@pHFU9TZS#@nVmGi0*QRtOor8h|g-oMy{o? zb5%f0E=>I)Wm`Gwz&Ig0WveGTkooF-b_b`a*nM)I>OFYqcb4wPOqdQFxhGL!`pLzd zq%t{V@ae(0rBVvmXlaI^rzjl@KEvGfyltc2(6HUAxMrj&_oHF{YHqIU4Z5D!f%HBH zHM3mV@{fChp`iynX-yIFnTg(hH}d-h9zy)MX4S^~&kj0g&Z>fIs|g>yR$#iWI-@oE zr7!Uwna_Ki2`Fk;b&j{Up2W`0juzpTgv!#3J%|-TXY~4kiw>E^{tiT5ma8$%dY{-% zkvG?6V!HRuxGf*V5ktq=4W|I{Ihe~}5_&Odq;mfBJzVHYEuMQgef;$bAxS?%!=0JW zLV*cA&T3i647|yG26+)dd-{o32?q*TWNh6dWpp{a@5O>J@6@E!kdXc2IR*1IzFc&t@{7 z_VUs7`zT`O@aFT67nxta1iS5r(#~59hf1UJGQSPx9RsQ~~C~r$Wa|sGTHbuvO23YmEGu-On@ig^}b!|iThuJiTJ+qhZx(xHG*rE)0lWjTn0Nt zP<%)5C%?hZ%jN4o`47+6?EefmMsO=OD5JwUjsb?6Doe|kK5jQx1#jjYv974Bwj@qf z@T|;Jm##&LU9iV^n*c2yr0&$#^;7fe^POS3)Q$3@@c}qS*{;pibd-@4b&6%y7MUL4M~pPLtH+i8mMWb5eMYTV7+slr?uP$k$kSM2>H9i3lgU2XB4 z?YQP*#Kd2pl~2iPT~QEI5|5sxkFb_~p1K!7Ep6&HTb`SIuh<^X5zF0=9yyP?QoyFy z_ng1Bf;FGH=^R8U_ZR>R6WcfjTwD8&;AHDitf@(uf3YgPe7_1K?OH55o;P?1KL+Hs z<{Yjm!Yz@wm*_@``~YA4t?ekg{v^)S!?AJMDgsQa=4!D+nzg3VdFt=ZmT$*m@@Glpc32ClIul3pK!i!h{MiWxXbB6 zQ*N1Vmsn~$b+|kZWj9#N>I1l&sSxHi7ku}vaK(zq*^MnAuqc`176}%izPhT(i7a>56?0ys@6ltVqrIp`m!e5WWUfb*3H&YD+fk7&{#UHU$>Mq=LM-lK25Xl*S4RLPnAqS_Fko0F`8 z^idonf^c&yG2v$LHyy`-hsS`od;7)*tTQ)V+PpZ`ug|tDMWTxf_m!*cD>*9StOgu? z-#)cy+ng5(TJuyboTr|~HgkVV4loX|jSL-rhhMAj%-8DV@F(!nYc*)pf$6?3{8Wo5 zj5l*wP)wLyO@b&iwYO##kVGs-hemzUQ?kKZqFb!|zn)1C;(ws0UTja1Z{o5Um^ADj z7eu#x?2JRCm;w(l)^WDe)?C657s8yOT{%gd+x%c+y2=N+(uSWPY76_A;>UV%157{# zmgD1s$dvn=N=ZZ4Oa4d)WUT_xH1 z0TIsRPq;x{C$*4#C`ZRruh=R&E`@ZpLN#{zVIO?W(m?i=0#6=w!deOh31J_OwyAxz zyFEXlOe8RG@xWb4@$ZI^Act8y>G59-_#!S=L_G7#ZEMr^XskLnnFl-snzs*PTOf;R znL==I}bR9US=xstt_0kSlb<{AH+|6rz^Jm`1H0u1ZMHk$>Vt7FB$ z8KiPON4heuiOtvlyy$~}V7|^BPVKAd44W6?H_~o&uHiR?z(xXVt_#%1OwshxgUXZE z1P8)7RRmRdG{u#hXO01`zm9l${r9I;1eQO0#AaLv+3r3bySh~~D$!Q;+Saw042;N3 z;kREJb!^s?TeKK>3_;qBu)gMXd;I#fFY1;;Wp!hd zh0uwcWL?%UI~7ioZi2u8G1drAz@P8*@SRSBaN_A^f3z0GVAZ_%%PEO>cm< zT<@LTKD+P*vE6+B>5Y)~&S#F&lD?Z0v^_Tl1DbBw?@LQ0hU99oCU>d#^5-s|z`Utl z&}JkL1unj}X?MPPL131A8Tb5huVdsQMr%8x_MJ3q%Jba$#E|%_NAXvmrE9Bq@_pkR z^yyN6!}smt-9xVXv)J=ZJr+Vs|zz74SCQP^bMGxk`xD$R?&0s z&&i@(-IOb)OGOv`aX|1Gz+0ad#tn{tdZ5Q#^X4w?hF(Om@(qIp-dV9}v)TxR*d@8~ z1uQxai>QWu;)Z+__Y{CT;9mMfjYoy$SSp0u4b%mU$G?kji+jbr$1fxwqod0t%K!N4 z#Nn@g<1xH%op0UP!!Js{Kk-LH#cs2259L{Vk#pj$#pUKZ%GO2`a|N@$v}z69hJ&SB ze4~hdtVpqT^@2xiDT8ay4kNU%U1Y{ZRmW(&Xz;<`*b zFbkLtB^Heu@u?99ZiP1UB93;1RgSnTjRnbkTGQaVJ@cNJwj|JcxN8BXnphygTAa8w zYTCpYc_t^`I;X-_B2pDP+qMDrZAmP;y%_YfxVUR0bZ~<+nX5wS)(lf-QO)PL_R9zMIlz!_L{aX)>^KPbDsC3U!%UMaamlp(;gbm7~=O>{0(~Jquw~fw2iapBotMpGYblI1RNvbK1$qL{$Ju% z)z!5-${31-+GZ2F<^|&L{`xC#N!;{^2xp(@H(D?zy~KjrVq>3V$Ucr}Lbt`0SfU{T zQ|{2J*1pS8=v#{)%U>AyC1giy0mID3i}maL z5b1fEc1nhzvb#TeRWkb38rBV;^<8PZfZVi_@L3@i*d;-;<{RsyGOjxuu`XCHxD;>c z88w52wgP*>wiYu`lO?=nMb$__O=u)i@WUkXt?|^_6 zFm@!$D`O#bdTRsUp(!^x<-|SY3Lly=tna@2pwaM}9ouwA?hbRqlMUBG@|isuY%Xrt z?n0g~yumjD*d9ke#6XZh}86vv2g3t-&l0OC{T2vB@%L$+d)4tD%Dsq&} z#RV4~%RXpnPc&Ccg@9V2-3OrldL$2XZN%G}4flPk@JZ7J!@dSp`AZw~=`M$kQHx0a zB_vO^Q2cu4qOc*0G0tAJM*!w*b9pq8^h0nhInN}5RKxt*)Z3gN=h*!6OU-3qcNx-F ztwm6xP>IFFdZ9d4v+@d@EPm1GlM2UFWpuH-7A!%oo_kGJ#Vzo8fL9gF#DpWM*k@`~ zJU%aLp3Js?)pp-IUwA5lV`VFZA z0&*>?xl|@!4rLLKFU<*i>wpo^^fH9^h*QF1E%WV1;XZW|3 z^66wdtQ!;D$_S1eoH6j%QqQ@e+?V$%X`bf*9d0Dt9gNz{dM9V2?>9B|xDWmQ*N|s& zbHP*Rr(Vq)DMP$n^FV`|*V+ZHC36ZxEo}R`&s9Gbt<9;fBU%g9Vurum=l%-ya`keH zH-?7#&zy2NL`NW79kn;J>u<5md2|m(kNHw2ZbW?|Ifdk&%W-_aD;@ z>SFt4U%nWao}YFU$@DGe3#hve+m%#4^}0<%pE&jyIU)O@X309ctB8`%?z=zs9+VTE zlnVYdRukxkbZ1JlcX~T6>xOk_(AuSUISpYC zwnfq74-@CIVD~e$gc6GLlfDWuejku!{ir0I7Q&6p7p*PXGLKIl!Sq`bYtupz1wXUFcWST;3SLLIYKgIYYR8Y)#4J-0&Js*tKFIh!gs3TP$g#m2h* zYjoBik9_ZGo+*}B7iacwGd=UM`}K3uuITDkit>#I%Gd;Yt-5Lagt4=bVpzNklXE0p zQa%h~%A8o8y7@Bt1{Dyl2Y0URrj-U}N~_wd4`g4q)URA>fXqbH%$M23(Sz(5s+rZo z?pYMW;96(8;0)2HpUgQz98Io_M6^;y=Y^k#8obEGAI5aS$jP*B$K)VYz+7HXSB_C(k- z>G3fRl_v-5tvN$_+?AT0n5xqGTbsMeP z_^Fl0z#~e&Z|gRT77y!L@vrN;=Chxzc|kQR*mM%{!T9XF#D=REeoqO!CN=WZIAtbS zi-n0G4|Ck7(XN9{(+}K+H|}wv<_m)*^5OSWSiZ6{M>4*(R=dzX@HBtaiNCbXRN!6~ z&7)`?pHYc5tvp~m@F-ADK{-CN^p`>g(kznnWRFEZK;Lh&m4=LBUQ;xrpN=@s7M*`d z(A0}}U%>R?FjD~T$S|WxO2`uxBi147njgJdz*wy}t*#sO5H%D=?m!~lRj{%vOXUlN z&2klCT3i0J^Y>$Q)8=n&`H%GGlRD!}_N18;%(pyswvr{v)}9$5kX26~OKgBTTH-a- znjCae@|aB9ATyA{MM#BKM+$R5Q5o~g-EmX-xU{$#{&M;beg6h@c8bR)*^U#Gr_k!M zm~R=iE%Av|D8wpe<)O>e9m5b+1uq6hD>E3bCu=4Z?%fAzzz&>`-U)T<#p?p-XwcX5O=+ml2 zUdj7;@m)?y`p^yBZBX3P&kJM8dP^z>tnjXS8wSH9apPESpDzv0&&ki8^W>AQ4TzuF zFFC@Jg%`S2_&YzzS`_ zm%GAm+HU2jtOJMUG4(Q8@y)kC*3)sGS7Nej7de+R8*dU5%+9PRI_Y%dv4h{JhMx2q9=H6X({zDZsztwpcgcFTT(<0#rutPJ42Q-VR}gSj~O5Nhl`y zKmI^JnDtse#@^kNU}*3qz+Dv|0=kzVb^WPC-mM9QEg^fJt*ViSK5DpW_mg=q zd*g4U9RuVeSC=X)Ml+hUV+Z4ZhMGAhUL%@QS!p~P{-q_YxpNc)3JU{% zzbo(|VIf;HxiDNF{=^B*>Re?evM z=!FB-zhQXp6t?CkeL;V#c!&%_m&FdaifT#|`GfjKp=%&=LK&zuV>Co)PZGvEYGeGO z*VTR^xnC!=%0BFiv(W&<_GnsATWsi?y1i-EX4P6oKP_ySy{m+_IBHV9P}7sPS^CX--myzddV2QGYWLY)__5daY-6ry4@?aE zaVJ8pknoKqa-ne0C-Eqv>yUkYqMx>VGNdx}(1xV$Uv;&*yZeiCy}^4r&1g&t$FXrpQ%L z{#WpWev>6-8_Pn8`vC&ulc4pp*-q=iT|w-PE|^|9j-Q16SnfH2zAyt1{A{KmV%%0W3ELkW7FZ^x4awWCyy}_C;3c2kJ z$7QDlByGgnHtNG2#gPyrQT$x_nn)<0YJoi3fZ*mZ6Ujf8Z&foUXrcGP@ScYVeY^ZU zgCm-7d7YB2OUCaX?)x2jqi%jPPzWpf?)Px;JFA9luJynHLtH#;nSREp1ubD&B@Jv; zo^EKa=~$TdRUGKn4M5)n`f43YU|kk$T>C0&GgJsq%u~Qc&ajvWn178G*dEj%Y8R@H z>byY~EmxHCceE7KS(Gw$5Mqn7ik`yjF;C933p|XpqSIw)h@zEX^ymR8Cm$%$`$nr= z2G#|~u&?=Atd~J63)5Zs9Tb)1u1A?-3F+|`F8d+^Y53(^Kd1=m#vZ&$6}dWsy{lkKXB`%!V7Dp0Hq z&o^pCFKScIF(tk_^H7yZ)_lFwnREf3CnzLr&=6o09-q4IYsO6)!&r3b*9!3HRKJ?( z-deG161AIjtCnj}UF!DDTq#Y%iIDW>2wnQ|jtQ2&ACm3-7v!W8mv4Xa;H-&FAEg%4 z!Pb|lKCA@0zeZc3iRR48ual$IA{#=<*vf%*J_%2L@e3ak&Wv?W*!MI@w4<87t9nSa z^|)H=T)xN7*0MLbl|aIGaYyj z4&L5gkac@_=70Uv3Qni3lPA{K0JALE;1z%itQwc0pPacS*H=_OH&_?^&!OR^S~l}3aL3%pr- zDNalxg$P=IdB^vSgYi~2J%|2ZSY)k9fJp3G0 z8LR2)80$Gynir#bWm6{ysU_+m*;;3#yvf>6x8Fn4#DFWTB)+v$NiHT#-|ng{hFU2P zG|`tsjgp3BC4h#k0wqA$t{um2^O-jw*yh2yTnp zs_d1^Wm>Y1m0A#k3#5bzHg#WwVMj&(Tyaj--sjv zRpN5X66EZIyvk5Cuk09F5F%3j{@p~Z2t01r-n4uGe}7~)IE0P41E?>Y9!q1jNWin~7oastxx$>h)DTJv~`%pwOCYY(2`>8rI>1I-LY+nFF2*(glaHxa+I@&xvM>!g8 zy>TR{^^}liT6ieG>-D&${sV$Jy=GfQ_o7!3dS4=2^@3rY*tiD>-bVC=u6QB~9)}Wx zmAMfQ9~MS6=VUd5NmJbgHQm?ZbX)B28P5xP>xBDu<3~L@>+Ry=3rH%zs4@DR>C>N6 zQ!Nffia%)2Zl!Q*MVy6$a8|g{PF?*mH|wi5Xgg_(#yWpE@b-R9pLoUEZ+ zs3q%4HBeB-KeW?YqYx(gLG~5DJ2ah;!4GD@FoN@W#qP+m_x}`ND%gEyAzhL%Kckr- z8N$|@vmvls;TRsbrHMZZXNuK~zLxjqqs^{l0Piag(02%-b2kSFUA@qEQ#bE*LpZf& z#O0N)$3I!}r3-=WyY5H&zkuQNnvuoQ1;FqNvAjc~;ZVVF8snR~%s=ValfIvBzWhrq zM)MyG-+4q6hW%BbEA;{gTD(I~@Q-(mg~QLpXx_WLf;iBN+^w6_EH2b6b`aPtcmF8? z3^#O))yV21Nw@Vg{nSjthMO#4Gw!Cj*0truzI_J9?^D*TLp_e{eNdGGdqKBzU|5O6(HZ##pA`SMCiVP!Yd1gjk@kFv9w zW@22jRdK;l#IK$v(Nbdi*@p|>&d#Y1k_6SF#R50JxNX*C*M^ax)%tsVdstK!D~(Op zvS$R35tp|nS>UODK$v=pZ@^K1E~y5I9;@(ZbMGR{-is^zto%VfE^0LiZfz*vp8k{? zz9X*a-y!i;Sr}KRRc5?Ci-z&@KA?(kO5gfNJ0)0f#;WMjGrcRD5EM0tQPWvu@J=P7 z-F0eS5u>|%FyfsrHl5SDJ~vrAirH#(;B3`G%xj7Vp-y9M76=m}%(dVN&QWY>^6klJqu$~6bU$qB0TJAlW;MZXYN%F)Bt|SF&3--fU%>iw z#onurRv@DB=1tjLLi{$RBxmV0?tS@vFe1cPB#lMydTiBDV{fZy!{j73`m0++fRA$M zh*(N6^H0CX#L7l5w27f*JtLNtawaWuzEGt@n*=O|YJbwDHnFi@W_#Qrimeg~9L_CM z)=5Q_^w3z_w@>%-dvIiqXzDnzgL&jKoM`0=r1}a$6>Y(@WV@g<1m_kG=@#bXTBdY8 zdGQ>3uiAz-jOBGk?*BvEdj~YpZSTUoiZrDcr3*;_0YT}Vmk_aYz)NRb+P5jb=L zgpyDM0!SC77(l6tNT?E;NJo$^B29Yz2H$he{oU_=-=CKZ$)3G-nVHO9>sim*+2a+r zs5YAEi)8Lqmr^0p)&ir#RCc2dUgcma5eL_?P%2kIiGLu#CuCo)yI1K|oYJ;s$6=Us z#U$@rvn}pC<}39_q?=jA*{LOP@9gF%g4`ap8x_*=96z%YU4!P`Ax9iC)FP&nO-A4Q zMs_<^Rpj}oEvjceUgP@pPRX1gBIw&(>*~umO_G-iFQJ} z-r+Lv;Q&)!^DdadgV>w?1M)Pc)ID*UWUr-})QayQFoupgH(oQu1hEai91$|v`9`H^ zmI!TT(2=3)zaNOKw8*z(KImSrtw;Bz`-}C8z=~X?c{BN((RKWVy8J=vu9!eZ`K5CE z?$`V~d#Ln9DE}+RiVvb+$EQA5Uhf`buy`N&n#*goQ`7v=HURk1(}an64R;aDwMe&5 z%HI&ZIF9_RReLwSZ#+J*%;ABeuB}KtuV=Lw6Uz$R=$*;KuU`p9^A@SR7I?(|+p)WF zdQH6@!^1^BFQ_vO^nDRtyyiv>nm&k8$3u;A=tk0&0Z0~JZlcBS&X>QI+Gs^IHgmf^ zap6iHD#TLJ-w3i8d%*FCpC)WnskPQ<*i^h~M5Y_BqlzmO+7&8#Yp=QaQ&D?jjZd1z zvmA#Ua#T%dgjx9A3CbzCiS^6fsXR`QsKzJh>278mzE}I8+T>*ROn!b^bpGp!@Yx{NBaWlL&Wir`VzQWRm9Moa$+^Jrd4XQ|od1vX!#g>)4=(pTr7c2OP5|q?M&3(MY zB#l>0dPdQml;s^|83ek^S=0)xw_kVKNSzXS_)6WU6z+Ci(4DS375KrVt&=B)*_6I( zau=^ksK^7;{fL*=Hhb9x+rdxnN$@=R`qnk;Y*-o3QK>GkJ4K_t?L+#$g5Ox;Vb z-qw5Sm#{zEll+4RO1FyM6(SiJj$9l*Om`?!{op)SgvBjt>>*QcM8$>@H`g1#bL5)ngL}8gQtDQEaRMu{gYee7WAJT@8+W#;x9{FNuOKfn>}n50AStr+*1zP9r*t)~^$!Cv$Dc#%82LuWK ze}csSFTsDBy6nScyX@bchsx}?as=C;6{|b*fTMEV?s^xnFr|R}bGTf=j>(GkUCCW@ zd6A^Mw?NzDe6(N2kA8Pukf5L9fjMMshtHMgLP^ib=d@ZEfZsQ}`G<8XDQ1RsnVN{$ zC?shcDLX{HbDHlLo_DgcD0UZ^Xl?oe%o?c;`+g#Wvp7~#=i}?(17`e8?6|ACE>0ZF zuAic{!m>KsO|L(n9wOo<@LI4+n5&ILhiLtr`#TZgv+G&tgw&kW@8?lf_e!7Jjh(yB zPC4?*QgeLgKg>oIJK1o%eOxlnb=*q`KP*b^n`o^E`w@O62rUlulD~|rdE~7<+C@o| z=Ib;+{*!}^*_15*VXa1&=$q2#+k!7QkQjzvlXee!)5XB zZ=Ew-kVvP`w@8V`l%2I?)$eMOG#fMJMWnCK{Au;eN{qB3w4NODSl9rALW zDTg`H$aSe`$8NEUlf$+LE|6y0^hNHST(%^H@7-PT2VBu7Rps{f0iukw)C;YnV-uUF zQm%=07bIkIgNK}TJLm7h%yV5wbYR1hjN3}I;XIA(s0Pr83BAMml6_20Cde6QjDqqS zsCq&=>guHLI@eYpQ-?c}L51yK#?^6ZmXiq__L7e~+xClb^&JHRFwu%UHLEinXcP7O z`_-{BMXR(-`6pHugrSo2>%TZ%wjEx}mnLcZt?p55Cdd~GF-ns8>U(ySji^TjsOtVc%Qdou5eWPaJc9tVo^U(U`V4%+{Ea z?K2%u`hjn#MXJsZM8Un}eY~;U6LtJdUK)#D(pODrE1up#%4le+FS|Q=*DVD$N3*kj z`UFIQH5Trdvt?wq^%+5Hq3^ekL2Rsf{%4g%VQx7WBoNLdZhydpc&W?au(BWr;@Q4v z{yVgjwud^8mLp&1QhlxZst&ud5Mu%wY2NNIosg_ zF@L-Df+Y6*n>wGDqm-8{ZUWGnIsDI7{hlbjXVBmTkBH`X`uoug0I4Cq`On;8zAEim6u1z3CJuPfL7x<+=D zjEscra#@skSx40KN{wT&5SH1vHNEFOU=tbura z`ZEa;n5d}y*Rb>L2#S7++rQ58TlTHA1+r}NGnbWOO5J@V`GLs@%Hq>+UTL+lzo+hx zSyAzkai;=GN;AhM3(P^PoC_~b)Ky!2lwE_v&dnTb&WWK~7bL4Qs|vai1TKD6 z^VgEQk_mJ(eq5re-eq_t!V15%Je*lEpRI-U+;nW0FLK&mA7v)_#ruJ63{)azL(Nf& zC*=!+>lD^00NVc0Y08vMot(5e-zWiRHHZC~SLgC#Or?^lSQEm40Ao=5J}JqQ6>hTx z>-(qWqMK*kx9y7zMDH;6A}nfgE90@5^VA1@?qNi;HLXU_?Ya3+#`G$knhlbm2a?rb z!5Oq~_BLfD)|zO7OX;@fs3@R|vvG>vk6U%NckFz?8LJLujx)WToJC64?~QA9HoG86 z>o^YEvv`;Ka-_%pgbl6zkdRbu8+rsDNhUCEKA#TDt{zj;)pa}OK2}y;^|t$wDb3eh zWMWNOftVf|8FYg2lpytE)99c)=21@YNR@)|7;i5@o?ThIaL~Fco|CqqQ-56|KVCwV zmqss?P`i(A-PV5Sc0ux$0hxwLQbZ}m4qE)iLhQ4^OK6jT@pRj-^V8WnpyCLjoydcj z_-;R0ya>TZ7QgE##f01CnVzazjvvcno<2wlqBpn^qYB(8j^I7`htjv+W`?jGFYjk{ z@6`M_B~wk3T(tuVoh0?;GHl+Ovxmh!)jGn2O`Xsi5WCk@dU|d|h(+QW`R@u3dwPmy z7!DBd-^lFSEuNx$ zo}L?14l!_DU0qjikHHKrJTb}bh<+ z@S9EsU7UeSp~=TfyRyAv5n>B6cKsClthE6gs0oGSmm81hZ2mPUlHUv#+N^7$9Si$EMdX8k^~uv zR8S#}$lrrIXJzZ0U*5TYIc>n5J-Z;8{mEsaaY2&MAEaRsIur_NILTxD9&q|=_bl`w z0Ym8h*-MIOqap}#n8yn{y_kYO=YNr}@+`LBBfOwcY-JpSxE&7mRDTO@DZ%E?E5;-f zf)%avT7Nno9NjvU$<3kvZu_!4*x-~Vq`EVV)jHaB?swb;iRe+y@rTN$saIupQ*m@~ z1mX%zT!oYl{Pz&eqI?Q;KO1){7D4eju`UI!59B*bi_a=>q8!3JH`p*!~E0MET!b{-V= z@U89q=!}U`Pc`G93t^XSTam0qPvze`ctz5&RY|i|$*-#p%lt2|H=Dmc6?bb;CWt*yKN9_BWhLpz9QLWO`vf4@xN<+{ipKtyvT?A z1v&qe{UiF{iUVTrf7-t6@4up%%Wgk}&)Wu32V6Gr0;i`UlNY%?`*H15#beIk*6RzB z%+rZ8Zf(u`TTh2jF<;hnLNPA8SexSPGyc{ez>+qI&11c=VJCQ+6C4=(QGQ876DJTk z{90uFxiTtw!_UJnf8bo{9R5@KskC)R^2m(CPic#0C5HvcT1#ox2I8oDPU5sfsk=Bb zJFEQv-2Mn%9Ns;3cn7@yX9FrDFC|MrvldN28{)|PxKQqiR>so%r|vCb)%(hHr;PP} zlvR=jzGq{ZHX@}<@P*6neA(6{M;@Qc9)?0Rvyo=IF25ZQW9=_U9^|jJPG6AFt>>?O zIWs$Xo*(b004blZE>kW*pQugT16-e{CqK`-oX(1V1>_$YK+mgxFYMfZT77et;MEP| zf!N;GS?bxujV}|LscUhIh!p7UVL`dx>}#>O zBUyQmImO6&X%incJt7jAiD;TMbiy6~3iyGAZE4f?&Q{iGqTU3s$ktZ*m?`72>M0g` zDq0^_U~@ip-gW5cenA3lJ*z%T6m4sz?|iKzBN<{G`sUGjZzu$%{k1e7z%$Mawf$w+f~Ziab9&Y zWtLC|xtT{Hy)`8U-G*!#c9f#9nNomGUxPMsYVf3lc*UqTfyzmJz?g^nxp7C7bp5Wf zy=n%aat?8IFoU-pHkn6b@TI=9Mz|r^OO+=n7WqA!eEshXS3}X%Hi5Y)HPB})#v1i` z4e1>@EhEDhVL~*v8dFvL%uu1HiecSTYJ?+4V!e;K2Tg>se>7HF`SQrgQKGSSMtm9% z;dwzS`w55VbS3AbBS|xYWUefoJjOi?Ih_<#(z#jXec;C^1q*-No7n=D1bl zW4P7yqW7h?-s0x%MSvHVyZFI$-S+ZH8Q_5eMe1Hxmlq=~HHHY*5M8~1*kx64hSxuT zsyr!x?U;@bhuNpH!u8|eX`)%g&QywMkCAx-UANy&E(n_`JGbuH1oIJ)s?s46i80 z6=M+l_86}~xPG?;nq#HXYNSdN_-;ng8Y3uJfiYSm-OHrM3}TgrD$Yiz--K9YyYs7c zj$tK>Or(W63a)d^YR?wWyqGPXZI@oX>C|wdns;qd=*>2gJF79Sg?N0-`MsLSW0ytY zko|2=WniddfT=*2c0gTV?!t{t%0pV_qtMc(ndH#bmC>XSCpW9n{46PH`l3!xAUOt{KkxK5n>N8m3TbY&@4`P9ch!s~->--DHNltZjom<_hVsUMkfj}rp4D9RA9Ul z=KzEHq^(mc!h#gAniNMIC@r?gNNchs(jx02!OnSUy4S1jLTu57l6(T}sv+vohL_bn z&rxNYISmegKbztscdC;lW9K`adB7Wh95{dkid%<5Uo&*JXfaxO1s_O^o^}@XX=7M> zHc@qQGr)lPE-(k9i&H1%b2>tal#$OSu)%yk=cF14*oclq+cHXs-jS_eN#ng~C>Ni( zczzybbCU95Jne(B!S}L3^QY_aW3l|3K@4NRa~f<3h09IunxUjTLv8gVKGjmfa@4n; zek!`&=W?ZMLs;-lW(wYOmcm_KGZggkA$%0l5o?pfM~QLS;b-W2Z~I^yJ`Z1O*mmNA zTp_%f!b^^4S3LET=0xjuHW%5b`bDY}2vkAQ6 zW>D#yDR{!L3&>{6x>Nv+_IzV^9U|BS) zO(2TMG(OytN;7|yGMiN}?Nh5#z`;{%DcOwC)vPr$q^C$sK`9kGUWL+iOC5tWAHp~= z8&B=gOFF>xX4rjxqyg_o?eX^KPUg1^<`jhQ3kxbx{b+ZZJXtg@Svc#=OznMmrE=h3 zYip)J_uS5_!t zNMdbc1#hS}61zd;5fp47Q891?^^L@WC2=g{Jehz%6?F*N)Q;q6>#9j>og!J2>(f;! zqF#44(bN4pWBJFL_ziF5;P?-ip&FO!ch9G;BZ3<)4^{2c`*qd9!D2j1mGPxgUU036 z#8e6mV>SvNI+@7C7g`u{(i<2rL)CjfqrCWf!W((wBG?vjFEk=F3l8zBzXjX%IudHX z=YC6lT+$1u=s?YeB7P;+s%A!$>N#GLbdSnuB+oHb>U+fnVx2YDAXRk-g;2LZgpw@89V z_azpp93NTtek^TgqiTt7Sa$rs006HEaYMUnpL{>}(8hYNppQ3Vw zUcjUvK}MEAhKB*=fM1MxD#;LQ$gF)(afi2+ah4}Vj**vaEvxf}$6$ zQH#s0`JzDnaSg&T?xltQ%v5Cf+ZJ%giM1KJR+eCmSE|(oiZrh3dS3)?N04828WC3W zMp~K2KZ6}#Pv*4%%cqXGCt%eExUZ1Ce8}JA(k}UZI_G^>fKVgwYTU392-w7e{RD65?7rJcaxnG-=Lj&S74{vQpj2 z;y(}0XuQ%idFbL`LiB2JrG&@h@f0wh)8y8xIk?$f$n36CqZ(P-DSc5n)yl?3=qira zv+6Ew8=59w*txWQFgP~4GU)PjCP zz1d0rm9)gnG>l$to51(fL7gf7wl+?RUS03R?4Ro@q}+ybDPR=<+sp8nBg_XYpgS_W z8umO0Qn+Su01Bk(Fhj~qsnwCas`$wX_*SfMN;4C`BIkv&kCSSGFjY^@l#1oizWoOL zH#FuJUSu;WKacX%3MG}26X|#nM4_sYR1A~L^q5^q@8yv%VU0qf8!2n!eTwFQ4VgH02T=NIoVl*&f!*1DXT55n#lG3m1Z2|BI z?c<4M(yTmw2w(xu>2vX>XO4b{{lB(zrxxT}JN=!3+!>{R=l%1%y#yUM#@xO8asmrLpF>W-1=qnt~!RxkF#xUU83vsJj<&^(FJ8AZGr=F%pkAuI z@Wu3O7#&|H5jpS9zbv!UGa7TuF&+bzxgFzlr#PN0<=pW~rB$|aiT{sM`>LZ>5!_x7)oN{}i$5KOndLK;IAzw8}ZM#sK%qyfYS&(i?h zR~VYhKe41@j`1|K69$IeVPSjoQX(nREil_8ZcV9-e51P^f6Gs?eHt&=S!k9eK|S~s zUSvMOSEmW#urd)!dh2c2Sjo03DTK+-(_UPRafYWs8D0cCHfXLQ6m=u!Ad6~@ zb#e&WH293h{Z1n{GK~&pfdJV$rQ1aqyc}uivL<^aqUjJ%&BP|qc*|dL>fF}c{_%9S z!oW=4O6owWq1hPxsQDMw0TO}}!78vK0$k3yxdlmnrBAZA7guC@y`MAobZTG_>=0n~@jC=> zh+a7<;6#h7O6*A#GADZx2IW>I_1z8ZtW!k*#$-Ix)*1!IMkW?xb2yUR)vYp+zk0wm zI?$IRz!i5GB2_4o#$locCjmYj%FJXQ?+OL@lxWvRS;d{FknHDEkoeN4mu6ZYz<>LX zxs3oGAK;?xv1xSO`+>czr1WVHDep_;?Cp0VWIzJ+vMnuM*j1$6s-8;nxGgN05eF!G zVcZLQ`ZNrpV&w8dh|i_*p^6VEVTA?)X#lCN2?5SARXjX3+s+>2>51rk#_@zAN~Mir zE`mkt4u3fqgUq}N#u`*&5PYM5z5SQlBX)DL|99dRS?6E)f4M$l|G$^`Z>P8Zx89@N z90=z~~xE>3V09lar4u8hL*yL)g(sm=mei6lxeZZS=h30Dm=l;qVbzX1?s zwp=+ZWLEnLbBn#e~aV?EjkKJliY7|kRv~PYM@bt>Oo7RuKz$punTR`KJOCHfF079!*{I0b2qeX_oFR(m=H^#!$~1QL1GgP* z`5uIWZK%;MzdN5AtuAwQ6Tw)1^^bbh*=_i%YDZTe6bI(hK&Mq z#|%jW>PM{!HzFuZW!||ghS0Pp2)P|`n9pC*ijr)p0(r44ygBr0$({$a{=aZmCp(f7 zF8<&&K0Uqed4dm*d9X)^R)FTZ~=iq3z+H?u^z|?#}hD)gTs7bL*sVr;PMK1BzRx(gx)01?~EKQ zp(@L>1V&{aKj+#D>qOdmVZ3oCLSs>JL<|a6h_GqDq^H8#0C=(#xPK63GCx6!P}e{qt#l zCxF)fYyi`ZHQ;|#IrNG==@mdJ;KA8w?U5cyyeV-KJ?gP5-NgQ?y~7kB&m}Q@?q43; zmMkLpmZYSe@s-E=+l)Kl(Vk10xRGRy*R%sbc{dSV0ixi)+q%2wED$mNpK)5!Ygb7B z9jE0nxN;e&1>&@~Rl=|F-Z!+}x`zY;wST9!4S~cYpx?KdS&WRmFyf!)|HNspT*hfn z6=6S3qM+D%&VRG)*J;0{C9`hd!jt&@MXXj5hjEm^a$@krZcp_`F&}Igx3sBX##hnUSmfvO_~k) zh87T7&!}MabD_(|dJB^`JWj9yc#I}LW$Rx8CB0VPs`vm3RB+*rtqHofbN3Ww3NbH1 zStI_58k>R&IH?mSRY9;I=l7t{t6mVRbnk^NTkS;nSlL_8@9mQi<@j?=1q&BH2~;0H zC-D$?jrTNCL_a=P6V`*?qyN`|p67v{&w;QeUe54Sgu#3EAvpm7!zIy^lz65_!3&ad zMa@~@_;qs7gi^zm@>RpGCO0_26$Y9-@@dcdaoY97h6Bb+7o~hn#Bl!UlG0oN^{eIn zVmcMBYaq-!rgT9)Xb|II{tY_#8|du_`nPm(qcmTzL~H{2&JV3fQJOyaM;RXWwW0SH zoW50P;$mz2ZMmHqlOXu?GFndvZ4jTnh}rydyFqI;IYW} z?C8#IG2NN*Oef2&u;v3c=k{|g5RZdw=XZ8b(IaAGm@Mo6v28qCe0*ffAX& zQzKWT9vu;Zia>Am|En%gM(q4gvu*!LA(u{urt(I@h83T5&2za3m2dZh>|J0q82{=*>_q{XOsDw1pZGMpjrUUpW2rnb3pZf zw{=vn6pb%Yj}j{(UZ&f6Ga~02)ojbf;3Hf8B!h z>(f%l8l>KFKx=uz8$X=j!>i3J&ytThr<51N2HVC@;L_Kxo+Wa9{&g$;F*QavuZSN3 zD>NBM{uramEMcf{i-1qrP4~(a&@WA|Uo#~%GXONuW_qK@Vsm=qT2M;2!>Dm0j3G1i zy?I^~R@o^E+6n}-s1}9N8ljnYyqLSyr~tb@{Y1oYNd(%cqe!dzrCo_CNiY0-ljB1a zzUz4*L5PV_6+G=OU0^582pqqj(MUoX3_IdBow?tegm5_U4sH}#sgB45qA06?KDki{ zj4Vvh&+D4NoqLV#@6iNGV=c6k5u8ujuo#U_17l!4H>1~LuRhUuqM0sWq{%e;PRO?G zgK_z-Za=9SHvZ~0Kxe52DJiMBBIJ4mC-s&k0D(NE*sa0Tn^HV;$>E09=+B$ygu;7P ziEo#KGnmYs&BHR+JOEVsAubPi?ZVO-{S{BJNsIH1BI|o$FM+3`Os9uUmt2r|d0OFa za(zyX{Kf9cZqohnZiXTy6roN2Uq-J4Fl38L<0H^8%djz{SiLYNf8ykZ+P zVbu+gkV5@gqY-nMISCZVAD zrfR4dl3_!uQ3m)Ig$vvUruX5$=iZL^V>8gs#XuZ2ypZB{1X)xZ57V$j5MYH=E@K^} zbg&c^vbIVm{T!!QHbqvLCdApG>4y^KkmBtqK&l=?0duO$g)r!*jdG%^2=a96uJ)Hf zSq0&k%Shaxv~diaXY)-Nk)8GJczee9P7+^|usWkmR!8Dor$Pe9^}ax=`L@j1p43c_ z=>;H~`6%pav{j&`@{GaUM`YOriCy?~pw4w6_CwBDdcqjN{N^Nx+-SP?&W>1yt#0RN zOI#y9$2x8me%1Y|!lJgRx?@NSg92ew|?y@ zTvolTxVx9b^lYwo=o8{m=09Q}Igu&7Vl|WF9qL9rs+V?{29kbHy0UV-Gv!wJp7d*f z#${a=p3MU4btH=|E?WiEx_k6Bwu&vEb}V~2SS=D;S3QW0tx_v|ZXH=UNXKQ)1^R)w zz{CD$pK(X^vcIdmm#3GAjh}P8^QGoH^1ZRrE3)EaSv~pQnSYM%*%Yo3DCQ0nvpC9> z^%n73wzA0jcVe-xu?IK}pffXRpsz0EvV+x9UnAS!TYxp9990Knbl+|vc!v=|`aZB9 zHztxbt@e0QB!MV6FEyHukaZ)|&R>{~iC?)0% z{l5?l6&_mMI`~3~0+o-LMyllwFIH=ChH*LHyoF(_CtuHS20!JEu>5tc#x1@j(PL+8 z{sKY5)Coi9`J6>$pPy;~HzBdewqr|%wJW}}%NB%?rd-(J=j`e7lfE28GMmRKv-xXC z<@*AVqSPZ?gRp`%oI4veft<6IY{e5E*CCwrX*(vckl zh7@;a&rIuX?FtSUglQE4=lyd(w}%6k5SvJ}2if z3n`0?cCO`y@R^=9jpeQv*>AGJ873$|Wtc}u1Zb>kLDqI72XpOH6Ja^T8N@LCTXwn( z^jUWo3zv9$5tiN9t_!#sda4_$HB=q4G}Uu5JDo=2Ul z$uYf|C(J=(^h>d0o5x&*yc+aN#dN)^dFVoucuT|ne z0DP|Mp_swB;0%PJ4}fGN$iyTnR$B}aEr7vbP_VNvE2igqpiC;1#-{E0_v$n1-C@8w z*o6Hh+C)FL_oYwUgY+o%01W0W#ug4!2pBy`ksYqz(m1{06wXs=KaCL10@|K-XJ=Fb z-%lTQ)tjO8hfL=c??J3FRp)0202<(Lai_c!jR3veYA$**DJ4|&-2(m_*}C})T?%Dz zdYO_r*8`^ed+&kkC9I$6S1S82%J-FN!ddIml=-iD`pP#qwvB9@>2d*k{$Ujx7bF%l zLAe9vGjh3K%4eE#XUjiU`TKe|zs{Yp+E`ohH-VmqaA0+}7O8q=a&qJ0i<#%R6H;&@Ta-Q)DYMgr~hrdzYOa&#u2S zL;$c12t|AM`WSNMBC)$a`JzZgIyu>vi6oI7DQlqrFVjz$zW{*fMtExeO(O3v#*e9G$(N6ul_FoM@1K>CNag&&cgITxTMz^oXiMG`z>AU4qr6Da{p!P za2{2JY|M+Do$-xPg``6;8+;qOLI4n0fMCb=hT6137llGs3XEnOrW#4@c3=+l&)xc@ z9H^DWt^vGzrq_F=GtFJlj#MZdSj_f{){8A(dabk%82xD53<1LqVLcToUC?ia(L(JQ ziEaXNv?5Vjda1~de3AcOMZbBDXlcZgS!)#H0e`xx(4|~CucpVo260lZS7&%ZQlNDn zTP_H=Fli7bU@&rE<5ya}306m zAa>&VH{$q)u6&XWK_eoQ$Na%Fg?JiD)euCGxM#g?P4lE|GmTZno8c*6;oH^s zZMy)ct8zDT&J1w(uCsz`fD5A~sCs)6J{vA9%*t{8F8FpH`5}ZnIE)8K zygwrkKBhU?y(~0!M02#u`TI}lfj^~{B0ngnY|g68ez>d=_@~C7s<%&U2L1nA1`yfs ze7o80pZ{W0S>>Bqx5$@>PXl`0ORHY5Io7%qQ+v-<9DHO=lC~=RlOhI8fs~qEx;Y@; zs&$5D^MidE1oTtuGy&}Y1OayARVxaiWJysK4C0DXk^96D;RCaZQqf9@ zgYh!Qo2LV8!CL2@ZIJV-CjLD`JXf?tQj|O`nLInve4*>{k^}H=E0N*h&)9j|4TMtF z8+5O8Eyc13=;@8@D$=$#rGc>v+dR%txrFPyln?$+WB!WKn1gBTOwhujkJ1`-?9((R zgmuPug&vpLHXYN&Q&Bk|Y(r-E6g2}=qY`gQU1AgBt3_o#xY+&iL{pXwdGOKN@G+L zHf&Ge4&x@JgWe7=a{6+699`OpY-R^_`8`VK3pJGbne~hA3)dI#C)# z$!h;d>QMuxVe6eR%{9R&Wr?r`4RcMaeA0kN5w}i-pX$VXi`ENWa#y__H)_r0Hdhv&1_^NN?2r=!h7Uc(B=q)ph2&t|rLU^fx$j}$oOjmUDJ(;LPOM0%`Qvv2 z1^^gmO)A$!^bPF3Y+uq~kc7Moh8#IcSo&rG^8-3}N z(bsG6Do85QLYeCdgfvDGrt}_u>a}ee;!7ktT>H!JNDi$#YR7qW_h;ugX1jVftwbAKE0N$ zYUg39+}mbu9YR!Eo15Lhb88s^po?zW%b;3j++ZcFg)%R`H< zr)Hj7PTmAuh$~^~$~~EWK3W-YWT`Pt`7=U29D zKjOa!+%MPOFWU-p{6)F!2dU+3UAiDCD^V!w`=yAj^Hb;-84CX%61vuuzHMA?SfcrZ z>z4ifHmw|sw<$qP`~`{1n(SY$O&;jQP8hdD_D@x>l1OkKb6m_TqVJZ(C>)lddMHi7K0K3 zDCrV_kai6U2$3i^a*;|?e8yn>vaC%G0WR_qKtMzcS4)Pp3Nwc(Y_-R`gW66Ffc2ZF z#@{G4wAP$okbK#G!dQIRn)p7qD>t@&?$EaAbgccjda5eDkz()mxC$vVz(vgq1~2(W zxtiXNkx(}p!2sj>5^VkX$OW}sG8c3zz{sYEdZy6hFX&*~o*uqzcPN-!q|EJ1?8pV4 zO8Pli3xBZDl{N9bDtF|m+Qdn9-EYrP_L+xoL$Lz+*L;#!KpLPnHWgAp`6wrN z-)jk!4Si~}m%MdB!j&g*JMwU>cES3!kaExWj zHztV{F{(fNNcLDbTdx30?x|EE1pwrw z00@2=azIaC0&Nv?_QrY*smmw?d&3)ffWaAYgRvXDr7tD8!oQ#|;l2(4$Kxj5ZlB-1 zAW3Qi27l;bD?1QBF`^^+>&jnbl;q@8q}Q%qy#_o#8(3GLp69-pIEIvgS0X$WTQEeY zg7k_g{LUx|HFzA^b{nK>>s^E&p5MC0bk7iGSMzBb9JK=h462c_&qDFPm)|E-zOq=9 zk@SFyit0uN3X_c*pMkrHs^T2BOMbH6VSO)-`M|}d!M`fb!OQ%bx z7QO~+zO4Cq$P}iToce2N>&_9AyWq>3+B5anb?0DI`Xtiw=DU*GY8FhnWs6qAH^Z`! z4iSf)iC`UY2IF3V!%TVF=#PYt=?!t``G-b=f=+7IJ89xtCZP}wOHqb?j@Cz?Y(TX3 z-$+|Ow@)w}2{`WWS!u6kV#8h7&BD{UM6zzoLzcJh+CKES;*>OsquQ8$aCZUHZ}_^Z zd~MJSI#l9^ZEWhn4cD-W2=TS1uBLfu1XF1a$NhNH4-+6fdz7H4hZGSSt4*@#(DN(7 z=?JG(VYf$)WgIkW~$^NI^d@&-}*{~{jH-`N2@If6=Td+#m`^AEZ7O= z7qg@fhEN`+n3_Cr{&8L{{dte+^NXS_0fBE3J=FDs`{_B8&^pdjs+1@Ek<>nK`lfv2 z9fAr9atKXN9t||iSHQ~*5QROXjwmb}O-4hu0_Uw|W7B<0g7MD4G){BdBVXggR&MoV zLm}T+gxG#@@6W|7v%#L7%#;g~h*!?=be`(R*ICv-vlQ+!KZyFKXJATJA~@HS87}^! zzFhRG>`5!b#Ou+g>2IEl9qDbIZT5!Hyq(k7gw$;bPu1~<^S5{~*zi>jo26t8&Xgbu zG;{3_v&D(JFh_Gz;=SqCOG;3LXG+X6MZ+wS0 zNE^nbgTtM#T7K3Dn$}(36l&jOe(^2vA@zYLUjo_h2FA|F%IWI?H#5T(oUTtA)_SC$ zbhvMuSIpO@AZ#1uA+MaBK_FEzyZgbKrqP3YhCNAZ9eizzHg&q-Lt%AaFJOgjK@JC> zPYYm#o`?w!RY*&_AkmFTUo0-sWLk#ee~79;e;C~<=YRVR zf|Ku`xBob@g8KdR>;C(0-LBR65{)KXR+?0~nhf;BVU_{5;FcvQ=<#9JXCGCF2C-@J zf&__Wq1s*G{=3Qg<1zcskFUv{La6uVEZcMwpNPGwZaRY_(Hn!6GtL%9s@l)TqB_yE z?>}O>xZcj0##SOmx!yuLb*T6ZQM{XqL0Tfewe2ImeHS*SB4U=>d++hKwPLi2*rP`5QCkU0g~lqeYHN(z8he!f^Stl(KfdG3dCx1? zecdCuuj9Oa=kGjE!Sq(mLYK9Wa`RCH`;G7s*~Cbo0~gluP9UE%GO=}Pv~n4k;?H?& zuTU(Y-7C~6+X(9abg3vA>@mlJO4P@8Iomp1h^&RkCL1Zltik zVDPrJZUMe}H1f(wv4Pg-YzyUhA+o(YhbJI>0L}1>15TQP0FnQR&qWj<=9Sk30^#Yh z{v_OK^zb#@Oj2QOPr`jD153!e4V}nqvM2ns&r`ioYj8+ZRL&Ntd&-XsQKy(TL-w!5ke8t<4#z2xV8983T7n|v@ zC5z1|o$(_5w0;6Q(tqaGkgMEol1dxl7Wcg1bWrW+3RRHeLcz4&bhp|90%eo*NDwfg z-k%@1w2x5V!%|&kQrJ?G@TZSpv1eVwCPp%q2D0A(^$Sa@E9YlQRm#dL4zl$gdL#hC z9%__z&1DValBht&#g=sOn?VLG%V1A^VNa34iLj?~fW(Dg4R(go#@G+O^IfFyIb;uE zknde^CcKa|r3z%l^oI-c`_v@VE$4A#B$?w^^tyhILu3a%6Z=R?ysJ7QUkh@UbiaNd z=uJpI9dgoi>3&(Pe^H?%>;SQX1Qbc-)w5@6pz23C4K)0+E<+UlP?*A zI9^(jeQW8xr1I`Pyq(ADgc;f%6`$AJ^!x~{pT(M`ghxS3^^y7Y%#Ucx=x6|djzyrV z;=0~{_nS^>`@vBEN`*1`5yqddR#H>s>HmAYTb$YTjAwEG`)ZO4 zneFtB*0M%3;lCcsV+(TZO?&Z5UiiQoEaNL@U!` zjSF8sT#e6v;ohEN7KAcU(TC`LM+xAdcw~uwDeYf`;N#5dCyLGB8QoKN!5}t|+<39}`T>IE==?rrl8`gv4Hcxt5wluuGZ_t_^ar zt17@=B}vR$5=^w4=xZJD$l5#i>{1`*^(m50KMAmoCkspu&ZF5D-n=&SkaFuz_KIo~HvpyBks z6qQnRVRCD5h{zw~mQ`t%oU3j$mc zKJ$q}gncn9T@1Mz*Mr@1^h-KlB(ZWi;L)VRuDFOT(fDeuDy+?{C|6es3uBS#3e3XH zUCu(pnW!0v5*%?LqZ=7+r|_(SxJ8o;5+O+|i3)}AvPm&+;_yxQltjA?J`8(+&A9HM zA6ajYTN;_;#xZ%}+h;=ZWlZ0#3*`xi2~mL7h3*wNrRGSDTGft4LRWE^H`5 z`{s44&LGaqKvYyPQ-J8r>B}4N)CyZ=+|vA{ik(~HtVCKr!Xp#%5%2m*8xVB<+Fk79 z*TL0@@x+%RQ)&xgHR3ftn|_-6;A2ro!s33@lH!I(bT_c%@Ps*gfXJLgb<}oAM%Q?F zY?kP~8kezxBmv!J(lo$2Z0a z_8Mzp5!YxY!PX>X_8LT-d&>l6Ge*>(mPu!?f?BKk><;K*5<0<-vDV$q&v>t+5)I>$NRjas@=BTQ! z_rDMb^m*fiTZTrGUd$QAX{*{RC9A!jW-9rv5-H3g+`1y%xI0qVu9~xXChnX70~0d> z{+?Ik=j#8oMkLE94&XJ}|ISgL_ZkuAkpt&2@kL#Pg{}ZQ3^tC_$`!!h1+(2m3mc%*M_1rCu9TpM6|AnN;7>rCmWPE%G_5WkMa^<`F>7hxi){fT*&P5z^$EE z`;ZTXEO}AV5Ji_Yv3lS8zUi2w_)_dNRS6>{;+6At-Cj)9^oCWQV|Xpd=FP-q%6el2%5n&~jHpeitU~8z|kPs>v;ixL} zMMV0QYq*GgCOxcfJOt^dGdprK^L8fZT~g-la<;M$1IB~_i*+$KCoY&y#Ked!OLpFjmgR;z9Cjz)7a+b-m}A1RAl4R@Oq$={!)!Smd&XM)Y>o zZ>AHpcb*%Ih9GE=rs?rmIGfdpFp}v5Up>j^@p^fIBn~TW;g8v51a0>JAqu|a&*;&U zjKg>9vmEAg8_)%+aBHB+z@@LNGDC!MSSo~fIHS1EW;buv-LlZ`yxW%3EH}O9 zdsD54ck1HmK_VsDML>klHaW(N6i1&spbrdExYPX`YShe3C(Ts5b30T2s7i=C&pR8R zFNI9T=3U1+9+?*xohzm0?>r1(#Re59IDXFNRah?as^9iYemiR5{%se%G)VS=O}R^O z?j6VMmC;_ywv8@4+9(L7corkPcbrflyh{}`s#rsoih#j_G+O|RYYPce42zvRy7K3e z;^mPNA|vA>po&RAVpe7NEO8;gWdpo`Io~+O@=8w0r*q8_dczLP>;2I;h9CX8#MJQX zX{S#&T-qm3rX~_^(#|CP%5C6RZ~|L7U7;&|YganEcT)+_-d`SCsvSczZlM@#AJdd5 z%WC6h&-)&GOeKbu2K)d4#Wmfj=u*@Ux14?jH>SCFVBFL3DKJ4LIVO64&RSYqAYl=( z_eMXLyssJX+>%?5ps!`Qs6{3xCpBVV{?^L{MG0v)X9#V15PvJ+%2H8E7fCFOB)CCZ zU+SF;>mB7)v#IAzr-EAx1cbwrvY1<~#QZ_9NdQq`=c%blHW@cYLc5>74czEDcTqBa z>+BG~TO8LMAPxN*ZfUET-Pux)8$E}S253x4&s`m>ML>dYiCm+H$RM6FDZ)f_si6(| zH$Zijv({dq0=x}wy1Y)yI^R1vZrn&3gNd0|L3xVQRrY;FTOVTgV%x%~Z2q^4;|Ss9 z5=U_qE49cv`=rASA?|q<@Ck7PE^s0>$Lpgk-a8#z#1a9o)Ds%|aVDCK)YQt@Nbvu= zZ_D5HbqAusmPxi_ekV8QM?)ON`irf_Qe_9G+{B#wGU8$}sq9UWkr=QG*Z+E__U!~y zhkHUlMs{W&fsI|sJ9AIpwRI7-s5fmQIdNU6$|R>gQP@LMY`;q`4$6pKoZc>%`+Lsz z!7Sz;hG)aWP0SKD!f?BYG?kPts11M{9R9hqgkxdcm)S>vVW6*wi0Zc&;|1-EBfofe z<6P^zwVD4S9ma`$+~n|1o8c(^CH67OaV*;Q4taO#?l5GL5}c&X8`sG(?ZJ}uBgA5& zf7Uf|A-atUAMh!)iK*8U_ZjV z120?bfaedZ2zufn!`)8jd5JIj>h(a^e1^am8aqkNq&-;!H3UicRMt|RWFX-f@j`2Lz*v} z)`{CX-=3XTA-bluG(@;;eG*d0+fE{PuuJiXlv_%oAkA=F=CeXrx~C&Q>}yEDa(8N$6`unxB?0?fe;=LqM6FxHfnUtxIXCWA z_YgUVgG3I)!IQgu!O|=Y4N$F{Q_z;7UV}y`^OS*0O|5rw%!kU-)|bE=>VbIkqim!= z`z_a+D^^-70C-yhQlUAN+{3D{ZCnJpt8gWc`t&HjcZAN{BO;I3;e^Znig5f>E=)u@

#dh*(W^bTMYZ*=U%;@#{T|iy-K4G|TDC@lBk6NvbXJlcKvAidRCNZg z0v7ew)h6bFni3>+Nq;VFvXs$p&ixGGE#taj7N)dDkrFZeUYbr?RJL_|6~_X^A$HRb zcz1`{{TjxN8ZjUf1jEGW!C4PgparbK=9V=TeZia4x3D&WGViMCsFMuK>HBQ%(Fwlb zoP8kjO8OV=G4?DV-YBx3*X3N{t9B{%uvU#^DkmGL`rM@@8w4^|axesJC6yn~P2?4w zVfn`S^murmus>uOp1Fpz*fRZ`!pt@5%V-W{g-e1gal_E*cNvjvvv zX#^y=-UKm|RI48I zcSR)_*5Y%-T-|NwRRD08v`x4-D2o2x^_zzObaB*}_uEoa@>n;-H-R-#Fs56bDRtvH z6!Q_T&%LkL0#=}EmgfawO;o7}xW+t_2mx&x^a;eBv}DRl)E^H!OG;#QPil^qeahki zRznH$*s)$@D~vD?L=z9|VVW5vLg~I_H`=c>p<0-x(6P8nIT#WrOI|YRzI;eY)0vs8 zwNha385V(Z0~6nP-~7-qgZZL8f!)_MRwfv!j^k~1KvGnUgkZs25BpS-r(PZpRV+XF zhqH)N-JG?*>2f)EgUwJQs4mj4&cP>a_dTx0vr}2=08ROG$+3VplKqA+*lI!R%FXB; z7mhgNZM&qHt=$sJ&s#lFH{Xjq zxBt8X*k%!Bp-SDF8?pWklYwta^hPz)8D=y+sOWqG8P~p=)346ggZ6%ZyM(o-vrM=# zL0^dZCZz?VD2DU(Fw!&v)RGASXl!*|2|57hTOx{quz;ew27TJ!OEmWv$zhBTJ^^&( z&Vp;3z{|b20_zmt{(NQJti^B?qnQ$;*@)%ym|Z}*3=~R%m}ctgx{koZdHgsW8B;sW z!>DvEY&&_8jd17Ll+7_;_ifK-2GuhgcNwDpToODCb({c@y8td-;j29cU4ek^_l$$q!WmW|2embygn`MPLOerUk0VU8g( z0vNXH7+Yu&2y_$tReuEg{O1zOyzc_E2@E!OqGyuPPdUr=OCB)2WngJ9a}^qp0s(wHNhK9tly7q3o187K9eGkxq)X`a}Cqmk-o7sRA4d9I}O3x zJ^n+tO-t^nW>f3a2xyD4!#S}wQCY~tj_DxgKEbNfWeD}sXl{5zNjG_AP7GC)UtGak z^gN+R2vkn`9RiMwmhrP0}vmH{VpyY|Z;N_AkoJ;jGOW3P1ZQWZt0CP ztN8?Dab-59ClKH^4Qgi^%$dSsg#8$doLZZhH&!(IJ}JSh`gv#jg25aA`J}90a$VV& z#+&lxZ984brq)9I_Ar=cVDB%Q?udx1`b@*PE17BoaEg0frE4KWwL8Z+W8k!3!nX#y zc5Wbu8NXcC{=TUa7i=z^@VZJE`BjT2wbV%R`E3*yXxo*}+xiOqPzyY$o~GNjS-~*3 z1vU2qqZOTh+KU2kED?&WT5TdYV1|uj-}>ItUWt z3BINh)kiK@@%Hc{+V^jhGY2+%J=fzC1@^#Mu6~?xlp1FIW{lC=H?N;hed?5SQIaLA zfY)WLH5k=NMiO?CKgkRV?dyBatdsAqEFaEKLP_MVt}mzEPPJO~WXkJ>kDKzQuzpBk zgJ8pwwJZ&MUY9$zT}>T^TX%=5%gVC`ugTwWHpf~LTTZYGU$$BNly;Ow5{4Fw{w0R zo31GW(7%q)Tt^|lV{L+MyKqXQ)~c_wcOKMsq|EX#KQ?t;5;KWIl;-?`#0gjRTZ8xx z^F#T?b1%+#qndGW6ZFwLCgRO%ME?1z!sR-mGm%g4fE%6;B~{QSu!$vZ6ei+T%;3xwE=GyKWkB)TX+gEn@;7 z@nS12RnEr7T{x{=RVvEno49X+^wkh){r7Hm18d@FS8-{!jMyo@5%v?OCssDqDawl1 zAN0RuOS0mgUw#u1)@xX=0Se%C zHy{_Oj?>fCZH_H0%;#g$NfS!SmE@dzUFslEfH(B=Op=78&#GlW%LQt6QO#i_o4kCc zf6@d;Ax|WkF~wzf(Bl)v5B4%JG$3+|mi! zlfn|5M^`v_I(OXoBimmMka$WqWS0+15EPWhp?A)J+#%^h(UyitqQ z3t&d;)Ih^_MW9f9!Rg~f)lu@m5e+1(MGgv+;HeA^;A37Iv|Ty!=Mq3)-YoK2#lt;6 zHbp(mbFkU47@G>Tn5L{7Nl~3rVw{%?@UJaTf2ZFl9@qlDm)=E()GZi2-({(oVw3r{ zu8lmj12t89X-6T`nm6GE>W5ZB?7@&c2loVuPs18-R4`|~KtYzJUz`>%mA$-t5|Ss8 z4zdP>h$XwDYw$^0YMJ28#KL-zIL3%$ncs$L<%m;=12}=rN^C_S>s!o2mDXU?s-nw% zHSO1S4yfQC*4SB)5V<6_!llN}ZQ`SqYGN~VYaPL3CuRvpLRXz>=-8rk=^{YvFg2Kc zCwKLb^UtMdHbhLY45OHMUCVxQ*3OWT*zN_=FHY#zsx~E@kXL5Wo8{{+$hg;(*5WFM z&8Rg>es+-d>_?)ib*CLaaFWF#d$sN@Ek-U2wI#gH<%d9b?2i8eDzKTFY4dUUuq=xz z_TsZ^v%Q37`8vq>Vnmo1eXv+!OAkk1SoU697WhYNsqbdXy9}(409AgA^qmZ z{)c53Mi(ft4?U4pl(4~0tHV%=L1$=iLK|aN4%w=!bE0+u5)*b9BXdN6n9|?mbx<2e zy)`7xV4AW-pzzh_6aPtb3#8dnO(_TwI=vW8<31ZZHDD*JD$Fk2u55~ri1yA5nvt+i zqR`AWtZuc_;ZQQcR#V^ zddmWGKusNIn7wU|RXG$x6i#tw*DatzqGAQWBV07Fmj>(`Hab&m&X*`QeNENQD=f}a zb;SdvT+J&{N$@( z+;((R%mI(=P2(^y!YUy-9$mzycuoD#l17R0nLNQR3QdO2*m8MOY#C{`^_q2%97aHP ziZpjX4lw7j;7i)aGNawvuCJ?-msZ5G=H#K@TfqXK^fqLQ!!^DBT(YF`4(tFhm&~c? zL5A;BqhL~kaw&FJ6#u?kFS;3S(3SWhZO1IFjhD*iS8wSv`x)NkoAo)Xf6l;OA}kR? z_T+!=;4c2sjy8NK<3hhOkls<&JtO6|AaSN%KS#BZa7^1e&a@Wf3-x6~KAP&c=}boG zWopiF)SO$pb|tQGA2zWJc(%qRRpHK70gzKP)`nbJ)KtOz+{)cnfEVHo*39I~0LhIU9s5LMve@5@X#6rM+l5kBnRU??Fk5TFm zWdw(dw1zT-ST|cE4HmW#j;1kGK#$s?8n0&+m^Pe{60Y%@!Q1p2I8)k#>A-~WT5rEZ zbyyo;k#ASMy#slYW+dRm3t>uN+CQ;t_qzz5b9%rZpNnU;7WBitZ^gSDGrutT_0+*j zMP+ybUeu0BN}bJRT}cC0kkiCUy{rSj%}EbCA19U=DOI%hIL zVTqdPFNa~cZIeGaRLj`F+Y0;;v=n6i5@PW=$lM`6YXP2`RUnoxjWI14<|W&5P^Jk+ zt{|3K+8VYjjf+oYEBNNT8)TZhk0#t2s$$MHQ;fkFan?*dWb5;0`XM|-p5v)fHWEAg zGBU+4FG*OG-ciE7z>WxDmojcXj|1zmKMXCm>U(!!%jYFye;5r}{xOU64!a;F{8aHB zL(Yn}hc?61?axb+KJG9sl?Fbd84w@^TiiBVw*hZhZ3?A#hYtk|)th0z3ErD&1;zzA zeJw_eC-)Hnk;C)+*2@g;Y5vezif_YiVr%+D^0)0iz$UgjV~DI4yQ|(a7qo(j-?}R} zpUcOu5LS@`K?g7mkmTR437&0JfCEQaUCB%jCqwItUoY}+08+cVy(ujPYoMmO?PQV{ z&NPlZGTany)r_1j%J-^`bgK@pRq19Kpp!9{5d2}HQZBLT;1O`5V1jGO<{jqn?Mj;( zs<#b%l_|AmANQRq#5qU8tmh!X#}C?!*%Y8*!yFz6>|m=kFp+(|9A6lVto6<2vzLHA zaW~o~SOlF?3sfti_IWC&?}$jDcohH5lW zN|d{B9sysiwvkC@@H6+E%KSmP;%}L@y|&!}1;-vSe=eExW_LO%ga$xDPq9Cl24Q7g zd&xVDu9O(xuDvSSoI{&q>ix3a&o|_MoQ?Z`IVz`-Y6JTJTskV>i`>B|QSZzFGeiGZ z@U8#%w{J2b2iYF9+RH8fHpMi^PC&@8ohVVC43^Lu&vT&4FVouTn1G`$p2nG%Pu^_D zX1np4Q!3QX&k%BeD%#1h#d}3Nn4jizwSz^O?__Ak-C{bL+dQY6nAwR@X8ckaKS(b@L(0q~&zGxsKbrjL^nRj<5zAXpQ+YFy==s(& z^XJlsTC6wpy)ZwLk0_Y$G@3%vnB>n;pQPcbF;!x2cC7{e7C>#$gpVV035)*_Xr!iN z8mS2&j(YxHhRsYB+Nv}Ki+ckk{1Pkub1CqCx099rnnMDmfr=)C?Mg#TS<7S-`Sl2M ze5kfBYZ734qbK-_pN#$wvM6@01lZEqsy69#74u&MILy_LC6EM2T;J6$Hc)Ya#Fi56 zoAt{FD8Ki%^OzSMU9YV9#PMT;=?iG!MfA1{UdYrdUEC`#Do5&Kg0Vd8t7Yj|T14s@ zvH0ROg}A5h6^f3$vdQX}rHQRkkp+{aIki5{OSEIe)}t}pBrDN#ID>K19X0v z(UZ05A4G#im}GnklPd{1N$F3#TJ{sW-+03*f8&KLs;r6mE;3a|P^0sC?0z%hR#&!x zHVGFdMf;s_Y!Ymunc;2qyt|tO%^B{-aD%SVLh&N=odgdbRqV)Jk8TcfHz(<;I^_V8 z+g`WLXXw14rn;Jv_qgUcomYu7oxf9GsZp&BK5xIefSSK~yLk9e9S-LXRJ=Y?dhQ=` zTcEWyvIG;Tu9tbcab;qa17d#>>#j7QQkM&vY*6KQFt%xVt29?a&eR`^U{OGh- zI&*52ssQRK2pg7btE}}8LsLW(-kYS8*l!6x&e`QB)Bnpn`2B1D360|tve!2^(hE-?Gi(JmZ#SFcMuDp~Joz$O8)cC}&^$KL}#5+^G zya~d?GRf{f6%_c_3@WwZlP;b<08@*4>RbcbiQ?(ndHk)tI0+M{}=T)1wV?uSQLJ$-PRR z09q46|5L-5W)fX&U|KpK*M z|M_W}F@+y2*9(tFd>9S;7LkP<>fHs6@IU`&d=dE7`4J{>AFL~%!D3cJ70Y5oRQ(g3 zT66kc^CV-#9aAvSE!)mCQLyqm1Sob^$CA+tP3<9bzSk8_4#k4ADj~6{5eA@BV}5y- z!a5Mx6^wM^5pWRy+NjgpNjbXL8+)|h^DovvQ>cDpwKawC^|KN2wErc9<67ltLFz|6 z74GQw#=-X*&JNuH5cC$NEB$shH50--GzD9J?2BFeXNRS{$(UwGsB`(!RY7ONm;E(| zv>A_Y;b|z$T)t+o4z!XhrXjSQ_v?dcqpB%x<~$RB+TELf?hQ=DSBkmK(yTENm9J4w z>pyPah|(2PTzIZ}S;c>rE$xMm9&NC^to@Xl?4NkS2y|&&E@m zunj5^TfOX!0uFD(-gcO^&FK3-$+h(TyBRIn*7lN%`F#NYj1@TQn~kXW1R5Y9c+uhh zqNP5;TDZvX(NPj+sN6uMhB=xjmMD`|F{(cYuLSt|CPca{1k^Lh>Xa`6#N&J87$9hl z**s!13i6?2G8cs%8s$q@i6m{R3``}yQpxjvSI~yS2BlStB)hb2^F_~vGWHQD#K7g4 zmTs5x_la-1CiyLxVDL$o-1LeO>Fr!Owi%#iaOW`I#>0qT9s>FC#f%p2wquf8{$G;c z54*6iq4cce#OEp#0m-MaR@!EDeeMY?hcD*X8;qCgG5+vH<*@p8T?7? zbm=|3oTJqSuElgyds2#l`MFW_%jclk;_~G!<^o=oNK;lmyuLs#4J5$nl+EdpLBe^} zhB=9!&-v)QiZ^JX%I=Pbb1WV(M|bTe3S`oP;2qrefFqH30nenwY(75A(FP$de;MXH zN9}9&65I)gv;QiMVtLZ4DX-+RTN#uf;(5+W5P@bu`xU9c)|o=rifF{06lnQm4(&Y? zT;61RAfa|-BA$X3>XU z86s#`3?V)5fA|C{E^UrxMU!%iJvo6`if;QUnY7El^o!<&sa=|tVCxHoBFzwtR&&Ct zmA%H|xdTK26<^f4Vernn;G=Z?8u#@RRO9{Z&bN@emPz~|CK-J5I}PQ*0He3TCP}VK znYn0X6!edMo5i9k{4eOxpVSOqzahOQa_ z{Ed*7-u$v}gKgj%_8?VX*u9F|CWRaPTGn#CP^b>RNOW}Vt>oYN|H}Vg_Wzdtuh##{{;lzUg*H07Pm_Bz`FH)lt$+9aD}~%f z|Bt|W&5*k(3CiJ|f~#qdW)<@cE4{d^ntDY|Ho13^sk=Pe;#{qvOrmEKROX6~tZRL1 zHBazbmi~e~ateOCa<86Pl{T0!6P{o;R!e*B&!iRB4JCRDEqoayAT ztxl^R?jX`vZ8-6TK&Ee{%g5NQX{5A!2{wIGDt@BEy*eAE z0chy#7XXNF6(pwpdPGkirccANuI0PnrU?xZ>7+aw$Ocj|BjYTp>`KYsJkoS5?JSc; zCY!2*i2}0EjY;CZ{HpaLe0RtJ&)>cz6ObFdD2M&JT6>)`LOPw-pw8&3J;pyMNh;qE zN7<9S7Wqb%m|UCe?Tgr7TgF4Rt=ClfKUQ*s#lqU~vCVyK&-tEW%S$hIF8AsmR?D!p zd&B3O3!V8WRl(2-!KqfffGe_W2WReg3R{78wIR1eR4VVBZ6^9F_C=HG#j-P0hP_$R zhl%BiR7ZMbaz%5&&h{~O&F)-Ho2ubQMPj{5)DQTP37;Tl+QW`>AlhwN)5!$HJn)4{ ztvWDsRNSg|z28l+O$*Y<+4J;DLqDo(y$QZ$~JeS~)REXX$qdQMKpWdIUrlo*2wzSyyuWNcPmTtjPRh^TfK-}!3Oid~+E1odPbY=6@AfrivyJ)U@{ePYw1CeUa{DRWKqR{$*p z)9)x7ab8@rF?+g`?C4kRp0TY$Y)nTb)`fE{2^^*C&Z*F_Cp21!FK^>P8E?E{wUvId znQLsbQiaBT$;|&aS1xPD?#eWC(Le=)F`G&W?SL5nq8QAQG?K5{xVf{`b<#4HRreRrPc6cb?j>W)f*jRp>)c&ge&7{-M8de=fm7 zD`*~b{P+H%rH1?K1}(YUzn^~-!(F2J%PH$xxWB6I7=EAo>j(ATv&aAZA3wOil(-G4 ze{V*u{A6mjuDw79^8M5_ki9+eSb2^7Qr7r^LdE&~<XYJ6xj)GSP6@fFVbCGCNmQnq8%BO*vJqXv+&A-}Z)Yl2W zZhF)F83lg6!@CQYtbc9}PQ^Wx|L#*F^Hq59$tP#Ofrsv&r1X8K;2UNo6^*5ahHY*l zh==&;TT_gm%-Nn+?%)LONHP+KMO z#oZ=sWWmz$KOfI%#A@$9a>uBv%Z7jaYwHI?Zd6jL4e&MR2EozR!j zVxySL!||ayGuG+PB|RZ3AukCIqs(NCW|bp2E_y(0C!_Tz_sTE0Je^jo&07KW6;PyC0ig=H? z^o721%Y~~@%AZTUXN&dSZTC3l@Ab$;@bNzVE7z%Gw2)*`D*QZeViWH6qRclWSx)PU zeX5BB_m0y$6!G%>{ zYLJu8*-K3ti@j3KVdiQs_U+5>zVw&XAq(Z+!5-nmgYF{nt?sC+faSSbjdshkIQO5t zLS~UQ_beLvq}vHCZwGE^znytCr}$5kigjMP?1@GFdJ6kRY`aV{DNbf#zOm&;h|)cwdbO7IX94N*M5w670{fI z|D%7(`WN1mK|)iRyKf*SS2bh(>cpCx^o49UjoHy8Gr|2%447u}b*mIT(=pt0+Ow6( zNR_^8ESD${x9zl6@@u!cgw-Cl*|~OhkSwhsX|88ZoIU}tyll#`k5W$iBj$sBhoKztt-KAya8&DXxAFTJ8FR=g3VMls? z%-yT=!XKIQR7ht3RKK>9}W!naX>i|IW& zmc4JHQF5pnlk3eR?Jr<0_R(!$B>vj2YF6)UIhsyGIZDcvw-9D9M6M#rvv+M=U*CPH zdj0ZxX#ufj2iXJ&?JBOC5Etjif!_VDI$o!od~UEGFQWGlV*3VuGZWqqR5wf9dm8tV zaM{u(C**^}3jGp0c=dDSy^foaN;kb{Po1;=IzNcGucU}7o;%sn$>UVyYLb4m!guE} zscOBZcj41`IFpCXuJLXVss&$^pDCFp(+U^JcAYY9i~PY;JwWeQ;}j}q z*z)ElIx76z0{WLK^q_uU4XNkJ=pkaYJT>1s^zFAILql6=N$ziZuYZcYLJH?j&j$bc zxgB9gJu5HKH+`iQY}S}cNnVr~=?#LtvBeSo@tjb^4^(lE2$l^DAL)2RRz9@VY-*ok z4O@k@zw|I4P@hDE{9N-%^?X#+m=^AOnJQWNPN_*s#}Cf>arGN;xLmT2s9+5@y=qsk z;Q1>x3t$cXa|s8!czLnn$=S)7#aF4no?PK6RMvZ?ecZ~2ertHb!JMn4p0!{8A3iRL zs@sRPj2?QA;(_d+VsdAN&lI{{s+O~K1b_WjP6>VdcJ|<^d;Mf^d7H%ZNuZ%#*JL~J z#vON|5Wrt)Ef5aJ;@+|1lLOH=tfA{VU;O999oiV?j2a(PYf|Xke_9BS{_y8B27VQZ z$vl5FXl#8{2HN-5xJ4z_Zo6qPZL=r{oTZkauPO{ao}<*QkeYx<#Q{7W%V0 zfT}&lhDczLmdzEbJhRNSPX}z(yZz{^GqRNj!g&1OC;5TjGm7#7xL4yiABx;MZj9Xd zTQr8&*N6)x_u1I^GKo{nG>Tn=7-qX3-d5rd3b8&65;oi0{VWyIN|bKHI6`Ih3nuP{ zZelcEF@);HQ>BR`8KYOwA)*pht+$k{OpA=)P$VaiAxAV#1o+7$1u$pb{Y&Z_ysvIK z7uM2YS_sK1wOCLnwbACL-kzP$n^$c+Gfle&!mS12{%f zHq*CDWhZY!ps4kRaf*jMyB=4PHqy=i@7nOOc=twH+Hiw$4qfk(C`gL%|gXf4-`s(G^c z*a}7qY99A^y@>vY#O#g3$NjsPH^2PN60WmJ5BhWI*2?H;Ve0R>{+d^E4*Gu?Po^6C ze=Z5h&m4W`8Vjf^OoqN$zE`aZ)9;`PIUYzK7ZMHP+y>jf6ts;PId)Y@)z%+sc zN{^~4^|yAf|I`diYh`L5Nkb$i>q`fYk5vrvbsiN*4S#=mR*LI-QGi+iQ*pZKHWZ%CS`NB+FVJS zl32@7a{I}8l3JCE`NkXP0M%2{#S?MdwAUjxcl6s|x2&)QxqqVM?igYzK3;;&yB zH$!~?xyUJbDRMTebY)AVeeOVNclRJ}mcY8MCwV9D;Eu<^X_Q^ak(!iJR-%n?mENxq z;KFajm*ZqfrNF|G{oNEcGZ$x5*S`_Bj_9$09nHH}O1@1f(NRJgyFN)NweoDdB(8%T zT1_v#i9r2 z+c`N@rE6PkzuTGi+qjt#KfQvz8$hEpVz$UlOWNY8mQqSsbue8(#G9pn=!xZkoN)zM zXz+)|aC^eKyI#HX*A&A4By-J}CWCRC?DNH3lou^QYR(}*HY&qJUcSaX>15OD-!IS9 zx$6eGAAa!7ZH>~AF=ao^n9G@eh5?)_NrJ$YR}XmHm2Q~kz^|ZJ0d)5LgW^AAzQsZ; zjtA)$(k}%tR(n*ks`uN+7hVFhq zPW9X3tYu6IZ;<@TaME;Wl98X}5JRP$Ymw#1^g1Vy8BJCu}1 zOZr{hMtbq9|8-Ub)8GH`nw(?F_WO$i&uSrUI%i-=oDdH68q2&>wY?~TpXrzkKR%r) zF;AIv8#I0$Y9ah|!cP0wSh5d#CUvnt&&7a~eQNQ9zNZ3q9PnVdYF^kT=M#L@$vGHS zrtji@$ImRV zlbNsLoo;swopSw>^i2Nf{`h#0-gCX+nR!H%hWnt|=!=Y-{ssDfF5%U^s*d|(9eeJz zC|o^~Qa)Xj5-zH}C^|M;BZM*zQ0Kkd{okM$l|%v(IrxYCGWh%-JrDmG(lsQAN=G?x zcfRbrB7vU{L(fP%%+seZjM8re{YIo(d~~P^GGfm!>y)*E2S`q?rYd*-I13x5X>O7c z9c?yolm5@PWFH%+M}B$Bq67<}>T`*JjfSZQ%5+yJHD*&x%KdW$zrA!Qyjuw1sei52 zPP!3Q>(^&5>>V*HI-D6$6+3+;jQTK0OTg8(N?0n!@A!4u81yt1CtS$U$zA?v=NZ4U zbO0tVSi!1#)a#!{XSaI}h~{>8!Y^OHw7?x^4Q!2Ry;4|ViI1rQw7GIXQB(hJdo~y; zkC;tM}1n^#w!8n8tbBp z!0R?`}M;ja2@2 zCb4Kqt){VuWT67hW`5s?znRZ4K6a^Je~Drriwm#xocTd9Q^XhNSM^`_KWpGJ)jdzc z$bQ~SkGk<#qP<1f^SG(!n#Al*`t_fSl6~6r_Ek>LdzkE6d$hD0e@07wa+H~hXgJN^ zs%<$|8M|!~B8h(48_x*kE zpXYb(THJZgbzP0SR~vpih}m`6_FB>+!p7N59U*AsFXxsO1OGI0VJOsrUtq<9g!XvH zWmNq5#eu$oVcOr&<$el?GOb2mWzE2~%gn@xF4)%#7);0s=jU>w9Of9k{wljCzSg|5ac5GL z1o8BRlqMoGdO4+21lkmX^(+KwBGvC4{pkO^;>=&g@6q8C+D39h1h9Hu zqEFmipp$wrQC7_gboGkP^ZjEj%W|ws`%raTJ-yIzMX^JrNV}Vb@{Tv`!aFAF;U5KY zsXsNrQHRfvnG-r0t|IHBHDiOkUg}s+`qT|fq8-#rPE6sRZTsn2=FXk9(Ur9C=Wq3a zK4G_x(*okiB5-ZTKNj{TOke+0rzw@bB|`mZCsNz`;@ zU_BmDs0eMbqZ41YzvMjc9jbX}SGBV@>>b#iX-5>A>79I_Xd<-Vg`MNWCA zo$Qa=R>%xL2{*HkSW(Y!Mw-bFE4L_lU^8aK36I5GL)D$WlvP1&g5hKLv=+QIcVFBN z4eCVsjZ|qIsd$&EHf-1z1_-SEp|NwWX}m8BdNk`X3cT8E&q>_E&<-)=2SgC?yIsaR zR4d=;RM^?x+2(uaC<=H?UsDHyinMMF+F#h5A`O^0t8Ki+$m$H1-_)_#&Z&qK!h+eC z`jWE$oOb`zwf&j8bf(nk?^xMqneg6^Ea(>PtnysFKVU3}6?JP%Q8L2|eCu0$B zXj%-O4@}jh+TBN&*jQcybgC+X&sF~ssQT2$Z6K-I)ZdX^{H55F4O`jT+*9fjIcL4; zb@JzgZWcdF-sO07t*%uZi^}OfDh2g83kZ&eY->PZ-%mBU37WcshT>T&$9x@3;w6@u z2OSJ0tlz-8iu^FHAQSTzm0h1tX1&dUkh8(S`j{ES(HL8>;}Tfhw_Dq){``eLbS8#= z#Wd;}$;io1zC?r7u2yDyN5|_pBD$7T9f2ZQxkgF9 zTJl9b`A4uD=}VY)E-f(BcKI?tu}xSv!#jNI)neMu+zH^-N59jBj1{|IOJkHzsFLpUs?T_Kd;SQZTHh@xm? z@L1>XIazSLh7X%=^{HLWjSynQM(+=rjrt3P;*$S#-4 z(Q}=5{VUPCec~eVssY_zcfGB_rU4@g(tb~5da<4q*GRh9yyFLiL_o`oV6n6Kl8~~m z&=S3?aEZW6@22U8dDHueDEcfWz`b!Lx1eFKkI1KDxob;WIf*MgHxp8QV$3Su{H=4N z&T=g2GVjJG9+Q}~MmE>?vB7?Xx5m!}{!DQ5xX!HL9XNY7Srd3f`q%qYkI0WPpKiEV zo^{5Q$ZA^}?PoF-d8a^){3|QbpO{x+TIkp6e}5L94=p%$Ukwe}GWOLId0Aeu(s%ys zvXa6GzO8l=poZIcAE8I{GS})>NPeFt3jSq0h)9oSi4NO1?3av!#ohe)O0g~mF;uu9 z=3N+0;<%x^CDTA#CsNz%Kxp^ua~Ok_|$yxE4j+g56i;$jkcN`mK%vHL-UiiHiWe zYqs(>OTp~KQ`@VG@c95I*n39hT_1s}_Qw@T0YTyqWjV?M-%#KtzpsjL=oPH9z6x@tG;J79Fr z{egPp_<|geKU2Umq4Ju+E#;AtU9XHjz4Rd>9t68=ifY$XtPVDr{u7Fb@W=srJNT`| zSXfHi4bq8{D@yS<9y&ykhBG8VQhsZ6I5K#C!pAe!Dg^(!J*BRd7{pu|zDI zR}3M9fB&AW{BaP+W!`a^u!ScQOH3dXyh!GUJiNP;x#YvztO`XhDlV>weLam&&xM$^ z3h!;&*Cpy$0vuShyBc35TBdSdaXGNOU!R*#&o!61=hK|n$z@wKzpRE{DX|3viOG6&p{-sK|NxIZRh<|%1k+n zU!3;uEv^r;mG-X=B{QQ$rZ+?>t{WuA+5t};?6KA^U{g%Pg9;)h?}X}_C-eY%f}@}H zc`JUWN_4Ife#xm4_9yR$GAF2<|8Qa1KNB#RqX5gn*xw$~LA3_R4HetX-%Ku4@pA~7 z_wKca-aIB;&Vj9x17hR8?b}*&{A1*y6g?oIlA$+wbMqRh)$5Q&9hN6S(;|T{c|4C< zZBd4Xct+DmsP|)d{IS3hB_CL}-)yQup(i30AgR#M@j9EnwSBT`4O3Fmf~b#lc9w8f zQ#r5oT#k017kDZo?>)xEaKUmOCNF|IEr&hSnHsgHDb}`XjN0x zIz9WTQ-hd==TxTe4b|1GZCH$YTEm-f;M`g+3Q|f(cl&|QW*{X?Jk&HHShsu?l$(Ur)1^sER|~p$I3#RDbI#cQ`1h08HR^x;xPJ_eSM*yAbEv)0hYC+rRG~; ztK;*{fv3}c4e-N{RzG=7#7zIuwP3SWhq?FIpkGS4&`-m^E<+tl+I&?r2hq)D`_d}D zSn#rDwbE5u9QF1JYc5!4+vqE`hCL1PjU%QKZqAgD7?$$VRsW<6D})a}jwD}Y*h!kd zpNZw=j+7(h`v!LVn0aU8leI`ApuEqhiw{_qo$$0Q{9SXtSB`4j+|iZUZ{Mqdb|heS zA)@6O_4eTVT%l@5qn~3fZu92yQR$BK5^ZU`W$_ayr)id@Be-byrfn95H` zV~yW`HkU51Q)obd#q)Iv+oW|7-yb$Cyv&uP+f5@f$dEd5{&WmY-N4w1=$c;0>iQWo z2Zcv@`?*5UcZ{!l4wzKF+B1KloAgUY%R;}N8do#V&iUq1@v2;)e)cv*-$8Ur4Lf-7U&mSE5)ZEvma%*mXwSy-qe|tl&lUV z<=Idf1IurT06;)s_PtZr8W8_S2B=Xr^IP z27X6-ciGGsiz8=Q&EO54O&^emHQDJ;srwt8D^ZqSRcm55cz(nvW+e~agZK~3%u7KZ zrRe!O7$@ut3+vg=vyp=?M{-SEUn`Px7h$#DDzLyOHecQud!xNQoPFyPN+QhI^1_y9 znv~-b7fd?yRx~=^z2tnT@MRKAw;m6G)9ExmDF5KeRD)p}#@>P3eDzs~3SZ$rnZ5g= zv?I(J3JD~l^Da?t)}ISRAH8t1mOBm|JKHB)Uby_F^(HGPKX$B7ZF*3721C1%+l8Ux z@vBF2_D`f6diYy1t-q>HM-z}pyB~`BSQT4(;U!YX$%$V3@jtqXaB81Ugb&#nF1kjo zdj|S_mI%PTQkayE3$O2teqw(5t0P>(ZnIOCV@Bp2Y-6;R!@;L6)=MJP!))X8Y%E&)y46q(xjj+t&sMv6|J_G}t0{kud9xrWXCK9=h@vXS#v5pxEyz;#{m;6za+728l6yI0bG`E&pFkx zbA+KaHcl&x)5-eOKbM3#6?Kk7mma<#sl8s`4gA#=E^bU`%Yw6Jq=C*8RFk(3I{W&M zX3OPj@+&AL{5d7}mGO~*9*SBZC2*(nX`;<52@#D!AF4VC!1u; zO~D28R3p$AeKCf{uQzeZgSVpCPw98Ye41Y_wtpo2;j=TXflb}vuZ17utERYqSVj7b}#-`QkLs)Ts0J{Ebv@LWOXD6IJvT+e9B zG?u;>D~2(_XDeWIeA?cJ4(7IQ@f3CdDQ4%(-h5wiP)J_gHkqb&r}dLn0TIu|W5_>> z+M6Em+2~oAw{sIJN#|ZPs0d9E3D6uIdW!lIkB zJ=u7C5=$HM7}_W6QtuE9S#P0s1 z2@B0DEJGOji)0D-zAb3h$19FbmYF_F@OpY+n3d+D8qAjX0VybXMA@UbnkhNE1dd1< z81~8HT6_3h)0;1qopB3xx5cKoE6eq$3?yNu8GHP;Y^Bk+6XZ3YitZks%+OIawZSmu6j zFhH{`!gZP;V}abczxJEXizC%=l+V^Qkm|0f8JqkQC-vs%4|BEz!}*=(wab|{uv9C# zr6TmxyTO~ZmeUfE;Yt=a!c8dA+smB$2fE1u6|$3oLp3q)znSlPf+;-*^Ot%M`{5?O zOTv%zl!Qm#x*eUiw#%b(A4&Ap42qJ*FL=j3S?FlxXdilWY!gs7%Pnh+<^R#u2Ko3_ z|3qNm{M##rPVvUJ6ikqd=t@6!+Gs|6ydTOZm5sjB*b;DT!_hVCdOCS728kfuHD?Eu}CtOwQTJhl<;U8G;Opg9$WmLD4#q{G-w}k@?Njz(;=-SC6dM& z*zdkcY=mp~$IqnU09& zOyy+(KmU*NK1CMkJnnHtQ$zQFn2Q5AIk)L47N7+K?p!KzaXNMuulf=F;#CN~i1zS< zOp!JNvDUgvBE}WnH{Swm(hav{i^dnEY@BM=+(8@Ml$;M2Jb%pm2IFj!%r+MUV;E(C z)-Ao}Q8mZ3Hc1m#Q4R9f%}lrkk-2{a>FuQ?VseHehI1SNskx&jfDhoDR%K=`-=QCm zTF~1B8#BrD9e_*4lN5%Rv&|@MCjXwRvPA6~#)>%_fC5J+nZKMZ4R86AyFIoI2&*e! z)zGu;YyBlgvM}$i1kgT_E$S)xnvQtVqyP{X?@bo3ev+^(8LTMPG|;UPYQG~d?k6c6B9XPqq7GNc}P@hSJ(EU2q5gDv>)4BfjtOAb)O67_m!7(bc? z!{|ChK0iyl|8rN&Om;9~2B|85l%Mr4a8B4)RI_TVJDR~gtxCE6O-C8ecP71%_9zzD z%%kN6V}|vGdHW`a8wr2f8Hrta^P26~pwa$WnZb_#=%||xOmgHyo>ZK28Hn3*0?Q?I zy4mX2@EShe0TXw%s&6rNJ+gSw8N6PNSXw|y)&{(jZD`|2YLr$9j{ezk5d*v!P*p8? zCMVE(KiJf=O8uDbb7ER<>;6?@YlCskDhEpl_8y=oXw;86vF!=~#0j*Omu#<2vw+$z z5Wq*WiLJrlo}e*29vkR)ew|pzZGa~fLLtg^ddM=cPj^n+5*FRkqtT&nwHRKXDy3JJ z&?{MZrGM4;P1~@BqFPDcA4n*1PnnLD3Mw$yH{XF~5wGLGyy#o#863+qx3`EJtj)(`F2{dv)B5 z&%^uj2$H(C*BH_^~Z%Z z*gN{{0@b{-tT2}>(p52-)b57fXVcBN+QCYQtAq!pK=y3Oi$?ig2TtX6Lo730;IG0g zIw?34qISq>uKqO5jo;zreD;E$01qqb`lKhpQqgxiqAVF3E*f5->Y>Yiy7k);F-@Tq545f z&uH~#(xf7@(39Clo6Z{AyG~Uw$&sO;$MGtS!=2Pz=*E0! z<)@*68B1VCBj@V_SUwPPF3@+y`e4X@KZ<(ha_Mo$6zEAIVODqPY`kgdWk$_GHqwMM z>$;UnXa8ft_54JcsZ!Fc^&ix4rmy0^nG&u722b#d`k{n;cFg;DnU_pC&syWByLc9K zV!yg*9l$aMdB^ocvi~q6of0K5HO31(y8KvyUm4eNR4A#C2Mew+m9dIJ)_v-lUMk%? z1A9Ru-L%f#X{bA8W2eF$<4znih)-#E&$rm&&*VB-=R$|mArI8@rBUnFO)8!rwuKGf z(CTY-eXC`uG3i*%_F@*%<5>%eI?AaylT$bpXQG*BUV+Xnn@-XjSv0xVVxIK^XP#cQ zMwMaqUOH~+uht~Ny#Y+N=~2fXYJNxl2}X|BmD|UWs|72z{v|dJvsG0XT7IJYdRJr9 z`dSHlncrLFP$Ja#VQCnW;r-^(i`M#lW^R!1FKptu;)9%RjQd|SYtyXSbOC#p{RJ!i zdki3uICO}PAvlQjO7mQ(j6X#i3TRaX5kv|wRvr! zkcCJr#2A2|>pPyU5%!}OQKEz7D1zWmpz;WSI#$Wmyd2Q!)x@ao7(2pDWdCg9PtZ#d zT^HY{= zo8r;PX5*%;#AE}9x@3}Ab}QjRXC+iq zpIt&+&o87e)!|Varg9?TZ?0d=XB#B2WXnXmsz-uKo2vt4{thZ!Z`{^nM_s)VH%YRK zZOa?PSH#Oa*NvrOQ4B$2H9lx31Gq+(o^app6at zd-}r-->Ex9j$gfUG{|VloY0EL8AdByr14Hk%5@bC7)3XiBurPA`}nyp%SnR=C>~we zD9QsahkPqOuuzQFp7@6mt0~GBRKXPO%SsRKHlVD#O9vkbudkU%Wf(zCg@oEGG~)w% zma(oNeMX)0lJO5gDSymWrL&qns{h)Y#pB>a)He|pBYNj}nH;9BH1XN$GPE!FrAKXZ zh?KLMRop=F_GS9w{%F(XcT$pppI33!d0Q~iz}Q$#P(bmSz%#*yi+wr3k>f+ktjgWg z4>I~>81A;46*ek_mxHtk(T2H(JTbONac3!%K6=EzJx9eLnGwt_j&`d}scqy}G z)7#Zc*i1#$!DcISjLRA?BBfIMPyMa@HG;mQMM1Sm%{k>(t_|=>dg2pD^TE~VHu)#| zni@uaOsakR%ZrRE+q790hg1L5ddanQZH4WSw!qsXsAc$qe$?jou3+k+}VjAdBp` zk1f`~z9M<=09YAvtbV`^>n!n5I;W{r0g%A7ZQTtWMqA?pz`3D&nk``baX~-|o9$D^ z-$Bk|!mQyjJSXjfQrrjPS<1W!#4S;>`D+x{bjJBphRcOU$19bDctK{$1(|&Dt|I_Y z-*B1c0IV}1RTo+=)II!zgwOczC1Gc!`I-uHXlJ$TnCzrkJ^pyR#%=yrg zBHt7TMB?QG^AXqRfK+La_QymCp3u1$?Y+k~s?~ltOWp3+p5W%+T|{v)&&}(GW~kyA zW5Sf#=MQ8o;cY%|`c$(kR&OF3Edv(coICU7T}OLFmhbK@31~n}Wg<)m{2>K;UOW!Rp3S-8#EfWYc~{sx6b0r9kA?r)poy9sb6E7((S zIM{x?>Wd~5Efq!-vt+4xGXoCz;76lA!lMi7N)n7&1k8GuIxXT9lU~C26Ph6Pt#|*n zxs+naqgAmXXO!zxH%bI)jh3WMxD|mN~Ph!pX zJoh3x^^EzYb-1M7Or@8XTMAr2EJuj6JKOpuY^_450`*L6;*-`KpyT;)HN@T*>rse_l@|$Ky53Xlqu^cz14nR4dL;GD7hgBn%SF z=OIWL+AHOTP}WU)-x! zJ{2K%EM_e-ce=gIt}t%c%M;Qs-99qf8>`;-O#_7IQW&T8UdE9nQtb=;BM^0#Eexuk z4b|hjPES{D>J|v_qaJ?_$=;7?@@qY(3U$Wz~t zMke2G0zJV8XQ3=2gmQAdrpjSQPP7PNjxdJ7Rb`YiGp%;5g@aMM&B#6AhU_ z>3HLtvDxyR(?Vp#U#W=g#I_)Z>r$++RaHjXNljpbKR%c3l0B1#!92@wm!QKlCe}?W zVuKhcdhEfBk|v0;_*xu3bf=pl!vd1)ZVpJpvJ^^gNrUMdFgVWq%#dA2p*K(Fo^OF zYw2)w#C=l%i_xI&_lwv;g#D*ThLc;{*fVuc)x1WEg-v5i)lhiCXy=k%>4|TCx%WDh znOQ}f)B0Yq7Wz_s>%UPyW=3|CdmtiP9q1-AeWHhx*y`l|Sbqi#`oi2~23BQd2HdjA z-IuRCZfT0`>`#c<=frH$DxQG4+!fM1wFgpT^dd-H)>A2cNp(f*exE8v+-Usy#MbA8 zMEDm`pCnw`nHQdHC|ODTTEHb2+G6B$YdJ(%aBf2j$f`J#WX)`dh_vl~Zp3$L-=ccZ z-$>GjOV4X_U43JxhqBRu>7!i8a}PZE%;c5;vI6J9>gQa|U7&_HI6TNn6`#3i`ML!T z5UhH3oP(v9a?gXwiJwap$EvnoSdiG?Vh3p~!K9O+>8uUYIz!u)r0d;@=||`ES>6%V z>!ciCiF={q($Qs4`y$l@ACqK_#fc6&Ecpso2?^!xYVX6#4V#D_pfpe>z*wlQUx@fp zZvVomhkq&^uik`)^(Ha)+ZwfI{bO@RQAp zs}H_pVu;y+PsVJz8pnBuq_$edePg58Q{3}Y=6x33*HaU()9x%)ek?xbxk@o7lQ|d4 zzj>PCMAj@{^}e~cvc{N)E@U`+=Q`TGupJ@dI+u}sA1vdB=JVC}Patg{=$P_GPyC3x<0a7yQ}b!wk4Dnp_ATi6n!KqN`=Zr7NfKgsB7NTg2@*hqzMEr6#mWB z<4d@IgoVi$bisTI$5qYJT1!5A1{Mjl2v{ADO4c)!&G>VWe)0A%K9iQNoRn~x6R>g& z`ULG*>Xv=DLfAEfef)z#@CRY)*CFFk**T!79N+%n=E(JUtkdUa!nc?BkI)7Kil?QLM$4c`qY4Js&c#|vqH zu>PVN@2ZLBHFF+}o)7J=o3Kx>S(!WtQdOq}^i!uElKZPZ_UyKbl8QxU5SZy75ol%G z4eGSqFOX?uJb<|uUB>L_Eni0~9PKO`=Dc8QC|X>R^hb(R2mG>0NVx)U`3zcj{xnjW z;mPVO4EUL)q(RPFqW6w z0}E~cJR<__&u}U^vZ!LzZ$*W6Ebv>`d^}9r{$xc&t|_FX_>~FEKq1JEyqwn;XLqva zC3a6CqX4!}!mHk5hZq;>$%2&pJb|Tz6Cm>$_hpmNy5lxrviwl9wLWZYEh3SHM z#)wQwMDLiJ70qr&ZY$&SjUA;Jm=>odD?l$)mnCJ)TY+kZ{sA zx3sr23KB{*fc z2ty$Co59XU7xJaCgy=~v!)T{9SUorAMPwgjkk0-zm{mjI(GAqiZvN)geAjRCG9LZ0 zZeAhbr2~^nj4KOYA2jU+-OR@=w<1s!(8J|;S}WQ2y>l7^7EIh3Q?X>jj#s*%Qemvx zpgZsrht_qsu&36INS0^WgH*=lv>8|KT+f>j7O0E7Fpk82E!RzZr#U^7!RzZZ_nZ{c zX33J)PFN01RH3hwxaClraWi9eRSM%l(A<8kj@S;iN=LteSdUyX&n9!K7jF+QQ(Zg{ ze!ux#|JjqAqDAjTeF888WGS9$^c~iHj(j34zjVzX$(Y;y`E8OC2*P&{z~bpcgn`gb z=zxYpt>mgJ6)w-h;~tqPwMXTWdrf3fi?;x(L2gftKO|oZ;4znLgAhx44bp=bRtK<% zjJ4&&_VmA50=RvyIXRg(eM>>3h>lq!jBLIaYm}jyhSw!fl;V#dR2u@x&nxWBvGgNs z;Vjb_J(im_|G4et*Y-VBiuXhCQ7kA)=Dh=aAi9QC0BRYsi;K;3NmHk^(at@BUbJ_O z6r6(Ugo^Y(#PDh7Cpc7~T~kU$%%$FYwB*hL$1<-`$V_^pWobjNds$QsOnY+Tqr!oX z(EJZ(CH>|VGiYi7jBA=lq?tSD<%g7QCSSioC}n7WARB-1RnNxCMnhaR4gVLiM~dZY z-s_jL;{9@_SFvusAUbnBa81<1zf%3LP76!=VVv7(MWMitjQk{6(Snv31HW;=^%ysEo#I4ZIGgcaU8;jAt9|M+GXGh|1OE^ZwUwj zRR*b0ecf0XVSz&BsKB4qH zI=dS9x`?+@!~&1EGQZxuEW9%n^lm|hJx(jDz?G1V_Sp@Bg+Y(8PK6$`r5_!C7Uagp zyLsfIJ9DJtaLGb3x3j2U_I|*i`V(3dVI$m!VPRm_+}Aff-L=4I6Dp50-`DOIZu+&) z*JXUsG)nmbj*_Do3+#FXg*$=qz2{>0g-WU)((8xu8~zlURSx@*oVelc!A7!C!^|@CL87(2I1+J!c9Wij)8=^ z-!vQmkJ9S_^lA4EJ~y&ZLeWV3m8ykna-l2OZ`>!s`i#)CO|Z~ z9TxhR!j+RxLP_k^F?$7|HG%4TJX`oT^vBA#ZZPo&Ki~)7#OJm2EhP=Q=Iv(^X9P5_ zuJduZAIPU}R7Xy!#2#axQBO&J3hsk{)IrE}6`A=-TyWm?IEzH8E>Hx>rdx%((v*dl zhbqH}Pc8KzW%}PX`E4Wu-5TnT%|$r1FVgQET!b6YBg~3)1N%!$GMF#}&SQ9!?pCQ(-MX)St>}Q}k(ZWak zNm-r!nk`m_@2i|jxmHGXEcLAiXFf3P^SSDf5|=!9=$+C{n#5XJll2pvP{mj?_R%zC zr#CcuT0*%v1FFk)ng0i z1>-H21IHo^XCCUYVMBhSVZS!LlwMQ6qAmx=UZ%CmgT+!S=|J}+XLxJ;c<6zHhI~rV z7US{yh^fmf_O(v2p=_)FKp3K6v2j7dbKJjyZ1mjg0#+t`Zb zINth}^|=JP9&GK`jVB&q+;*IV_!a!ELKypV$SrQGbT`uYD^i+Epm5{?D$ zlfRUk!dsyKv6TL6o#Czjt+(_)^%C(V^)Kb-Zq@(e1N@JLxK+pgBS^yi$7y>hhi~-1 zCSDE(e*yZh{hu!X<7fC1>i81COF8)e4FhlC2mGJmljD8L|F!;8 z@_*aH`~G81Y_%Z&ug?;Y>#2pYyj62*Im-M?SsnHHyzIujM(Y~XfH?@X<*e}+`P)#; zP_|^HM?&-C-H7(Q_57G-t(B!**M8NO2aB#I#WiYOBSxo4hGQmyj9Ve+6jd~I$jMflv0%Y1v%;i%1K>Ph z{o1Eg`);*i(u~-^!5%MYbda+ta@*)WRx(#Nsm}%qjjIRtT4N|f$FZT>UT0$n%l4x_6jFuEA@|qfwx5& zcaT#3SzbQD$o|R0{kzLEmK^<4KX(}1SS}oFU-K4ryU{MfeoNlWeu;~BUm&;xvKB! z^=6H_@5F44=JtM!!>ysdfqU>Duk0~cl`o@W)4EK9WV6e;zHjD?Nf4fcow<%fT~jo8 zqJOaSqhWE~Dxj?0Rlo%3pSbbmCYMUru={ebrs2r~bAzvRj$LH4WtD+joY=vsppUFU z0#f>6>wvUPnt+dbv_9MD_;iiVZVpy_JUdNFhtP2?@W@1HxPMUQfmp|RhmG9~MK&wQ z-iN`@$WCj)_)*iJK_e0TpVE6PQJ;JEBGd?g`}jJ>;{nm#oeS_$f|QVooIv18qI#^j zBX$L-pgo*DT&-W8E!eu|eC)wIU2FT>+@>#>*)nRO1f@}^1j@ElLCeiMeZd{tFxGIA zKKDn>GInRYokh!j(veZ~22VkuX6^oX4D=iOE3w#M7a!<@3PAJEL$1x6_Yt>hBgTf`B^277 zVQm4I-70OfyD5s5;wzoyut0&RxkcH2r#v%iG^sGl<5l|0RLY(bsv|mw6Lo0*?kuzU z=UNwl@cGX_fn(d|8-+-%dcv-Nw|TtsU1XcCyzecOZ+u}LKQ;9?KC9(u@0PZa*2Zfx>8n2!V>A9>?VO9cFm0K*4t4F? zd+M-O6D8_Ld}M4T`j?>yzEB^<&?xlVwiJ^k*GYMpyYwY8C8Y8`4ldfWnc+}&8Kdt( zYA(SE<)Q@VX@k#5ZMScflhwzmRCC%Hr}zzSaMl$13u_jdTV_z6$Mfq^HKiV~)6{=3Bjg!X0rH8EV2h#^=ClUV$N{Ie$iuCQo+T-76Qm+0HAQ_@+2sen5 zQ1TZ1pO!Mi{p>Zpz;N010s(rcQI67V&xm{cE3e}XhNnAN{@0QK5wFv1I_)vjBkGww zYtrCo&~Me+k;xUwp#DtVzkgM~OSJj0Lg~DxkmSv#0u`OmUNz7Xk7ZSGk!k|Vvgr_Y zcPUV&ZBeP_+>KoP$nq+B#fZu2!l-37KLrw86mpC_c<#!g%{NgIj%w%#RzGEMzdR$0 zihtB4ylp-#?a9V}hk4r`f}VN1v0=vFYNb0dBRYbXqezek^Qx-Gb!h$_qfPsf^J3W1 zEYZFKJcwK53UDP7U}1&-BUoTl54(Yuu;g9{-4vXJTyU~&04|g#yT5@##6}n79_Onm z{(|Kp)hTF}Z`pn=t|}S~ZLiY{&df>Xv^D2`MT>_a)kVBtfNb0EmopYfg={gOlD%t_ zZ!G%dE{5iJy14#)#V<(Gk`B-;m}EE-tnW$}KjZyV6V+H0MSME@#s4>;|w32rYRvqvxK3T zGy1rqxRrE!Jtvb`mLPQ?N8SmKweFwRzeFjA^wTG?4>^AhE)fS6hYG2d^cxRURoC2B z2qSy5pCILSRmSZ>Xt&ky=Rx%_V_2(rGKz)jM0N&!Z;?E?LVL8nN>^-{NsL3T5c9ah-!rUlSe@5zTvSvo;_N4{4v5D%Ar zA1~``{N6pNfoVU0lU%oJ(>u|~yJcgfZCa(nal}7;mRV7^af?M5r=Kl!ERw~WTW?mr zV0)H+C?{=8e6{&tr+a*H-=F4C0IWp)d9CZo!%7>u^Qc81)%Ds^1u`8l=%99;w{L@6 z5@KC6wk;3`kvs7w+NL#c7#30dM{q2G7uXp0Xg@?}xo=$M7Gd6KgRMQxiupiUMR4l2 zFW4@_j$4^AONiW>$Mx;@1-Zs5CE_{t4^N>nN>L#nlEtZZlex=;s%{Yupn!Lk3XhA+ zlaAr#j#T1=^M_EQ>2>^-+wAXlv?|*m_{pkiv4@;6vPIl-RBzOCof!~CnS2qd8**QH z`GXY2F-N98de6YQYWAUJBnd!A?>{(68w2PtqNAUh%= zYai_=yn{w<*#LktKMXo&x*K+}@@1QN+&bTCY&Mztp&*nwK;8+?g2!U-- z>N&r??+>1T8$bV#;7XU@$Dv3i*4B0P;jL}?drMsOtE4Qm??G=EhHz{?_eF%cAVb)w zIafoIIeZ@UHeTcHt25{tSI?4*!FVdw@>?(FU{7fsev$kmSa-1mO#daF{=}C4sfF6` zWg7Pt7D?D_@G!Sqy-pPwx1h${_Ojs2+sR(t8#_hbWn&h8G~IkY52{=l!UtXxx)FzM zITNNNGJlvE+MGWh3y2P1+ywi=qZe1@I^2~XE?G-&--W-%p8Ox;o8^w12>gL`;&zdAXVab3Lv8!8W&Ut6VHI&R`%#?fA3+YpTrA>* zwf*-sHst1Rpv#DNJ!8A~5~#4iF*|8V=DQyLZEENr!Sz|epyc(OrIws{?pYw`KY}(; zL+)+0)Qi(A9YFBy!tFl-GLvKK7uoKj91qc)dS7@NK28B2U;3QofYJ#k z+Q8Q_TbaKZuB`=v7xx`QJ+ZNJ`0mcdZ-JtJTf7z$obkK(oWu2uPvzdZk(B&)j4$Tv zdBhWIIsgA$AePCUJ8fb+Rl6ZNBwm~5{u;pnhodE-D_!i0p)1}F-P@Oco_nba-1R{r zALQqnZmnG1?ua68TUriBIQ2QDaUH`FNfYc#&E0cV8*M?lb?=T`u8mm(L~uA<*HOt` z1rl62haNf3FZxCcj~Xs2IP2P6-2?ZeA!^_Vwz{FsnbL=Q_`8a)TZl8mt>7zV=e>My(vaUa_Hu zr;XXD{u&N`U22DY(#)=GC*|IXnOM0}Ka|0K>PD7mJ-N|a0Yc(~dj^-0^Dzl>wz*nN zQlm+HI*TE2r>jO>zCVpaXT3+ach?Tp2G3+ z<{IVv0rG|gn=51iMs)_g1KRiF50zlh<;mT3T+S6=wCPP%+h%C27`uV!4aqvcl#EH5J;HF4F;~MiRG~24wG88LE$i;jtE>Tqk}OGaI}ZQ8+4q! zb-W`ouKo(wM0L2$aeQ?`x(V9bq46sD3EP6>kO^xb3!XC6{u|IY#g}Qhjk-b2%dxAt zU1MCo3a%ACo9gdg()y3!R=T`wD{Bb>pt9e@Oy|f0WRxGmI@kXoserb4{sBaXRYl^u zTrMOzOXFT`KQ#!u`VMrnE+Xi>RHNR#GqDIXP+Sv6U!HRS9N>KMd0$lTd7RB?C z*C8**TBbRkSZvJ^P#f~$qoa7A=}t}aWx^+siS__RJQ_T2Y09f+1$q4`pyyudq|}|; zKTJx!bhqu7GB&wKzPT^BDoCtf*&aV%{O)N)tP`+xYs2XA}zl#rv}CNw*b`zB6t#Z7TD(obOirZMe7s%k0wEG$4} zD`7C#dH(j~``KcG-fF`CtLjStlF0tY>9V`*w9U-6yWFy^Eh`VQ%Wk{O%9P5?E+sQ1 zMHo9ayX`V7S82OUEvZaN5vH=T@?gu96k#e;RD?+pMi^%Nf3Wtuzkid%F!SE$eeTca z9lYu7o7K)R4M5PH^JedQ?Agw^#=x##crtxA)A*}IGUKdiQ$=r?N}!{U9hrD>$?Unm zO_+U&EvdM$oc-E7$Tygz z$;Hhfe>_p8N!or(J<GjSuIJSmZ>unH+5~h1Kz?x1 zIuq6Gj1CM5UY`Gc=vB5}y=si~N=s|9Y{_4eFV&{$7sMO==*3EDl;=O!b2$ULZ%TU} z^sLYB0kzYDm6mr^@w06wnIviLj0(*sKNdI}F-UVln5~Igy09omf$Pn( zr5{fz&p02Ju9mL-fE_<{qf1Zw2Z6;`QjhiUM{HNFE0`A1f8&w!oq}bvMcyy%YN&Zz z2WKqz+k^k2t`g*0Az6}X$^fd1nN5<=fGYv+6ZIwPz-zdZ*W>AJ#r5uOQ5PEH)@MGh zt_|n%w?$078uVmA730;ct8==%TV3v6dv?mT*=>eX*L`Kfjtg&Rud$sy=I{ugiJvNS zxEuZiv+W zUsL6~-6v$Q@~XF>_>bpKw;%T8@b+cAz2g!%wXciT8$zzM1Df>|Fz-R^uZMbvEwRzq zT?%lL*whv-sG3&4{F^bk;Dh@hH_46d>iMO?RYP<8r%XS$HYw#p?#TB;F}EA`%lfVz z^FCXLi_rXpPA$}Ir|)!e5f#7=setY~@K6nt~qe=0fl^$61q}o{pM7?%R{z!)gAA zpf@X&{^PGZ6&?(dEbDeZsdxU=`#UyL6Mrb&Mz8f{+JirBsA zffqgn@ZkE#fn(YZbFzLT@J){$^;t}4(;cnT5@of#4)36pYmE>xD!*1;O0$g9L7=XA zjUl>0x~*uKXfF(5UdN?qN2_1ZY%8E#Nj7Aw2NejZ6|^?9f9hQaN$m^?PB@dag9h>v zoeZbxL>$jyS!>~vsX)wQJRipmtSkzN$@qaH;QGzp8EJY)0y&gHqNZH{3b-1*<|kxp zIjw-#K?tTd$!U_J5unm~AT%pkM*B(tKRE^fU=kXtk_&!3rA<)G0=LzbsP&Ekf$Jou z^%C%FX8?<#ijhqN62^|(HI%rW5hbQ5K|7qx)jtIfxjt8 z12v6O8zTHRMo0)nrWMYQLj}^rad9~AZI#cZx9(3lmt}B)sdh(bd22Mf$9+&bQeeR{y*BRl}NN|(T~d3GY-!IG>ySa zr>xC(uu!7|rGRIEBmDh$RFn2TKC59!;ODo_|}#D;fwmAoq{x#ctQ{Hxzv)BD#1_fmRW%UAwYya zt>*HChCHqFVekHf@lk*FM;Ch#xkYudefL=#%vTLH#XomL*Xex|YS>3%s0p@xl&&%?=Lx8`-L5TT3)_ z2-M61{vCyv(=*D?Gk6EFf7!hv_3()KSt$$n!G@}I&=veWY)=L#bJ#eK&wN6$yZVYMUVY+X^-%M(aUY+d@4Y;kpLtUlo!FUD24l=fk8vM9sfEFVEk(P`px5z>cWwGLcztGYPup>vIYS$f2RE=isKj4j+UqV1f^ z(S&||G|n5Nzje{P>MpnPz|VRjQChtIMns#_ld#V>Pi*~r*u-<=XGfm={Xkse67mp2 z;E&rGt|>i{4z_}1k)bQ*g)JO?dfTFh-y^zicb`zwl8WRHA#Z6vgMrlNu`wJ?qd;pA z>Qn56?*o>3niZXyMj);f%9hp96Y# zak5W1S<~%$u)cUUr`N@ZQaV57Yc+4!%D~Ie2w!pWmT!+H%QPaNu zV-u(@Xzj8UoMx~||Mw`{qBEdYK$-H5lVfaDJ$LxR0i6bnI5fNFoSSWeYpFheUH+EZ zttqJ%b;BFRpR+%fh4hWJN`J-e^UJzTUpnfdVn?cIs%`&gZmsTTNB27BX@7QD_M-GD zYx)N5wXN9jIQw+B!Hlh8U9Mz!R7d#7lhSN&kfcxJDgNm6^z0`Qznn84n5mlKgFEPd zIn_ru{N>4kzYZL`WSrm-b5}CV58Fu^dXGZb`O07Qmp^)7?%NK}i#yN!ms3AJ-wiH0 zbStTTscOmi?ki5Kdap=Q&mS=C__0CtJ!jCQf!TnrE1&1__1M;io>XUd3-B6L!^K*+ zL!_{6=MOj?3R5j;0LE$w%GP=l!VC^y|Nn#Y)3^}|)q;G1fmBDC5Rni-lO#sMUGOR3 z8cBHgVqX%^GcgKKr-Ok59M@h>_NYhg3%5b*=y_NCnVt8Kb{Cnh6Yf zjNvI5)!-&_shq2QWDE>+a}pBw-ab_m3c*f=pOM`GIO#K50W?8VB#puyi)m&Dw$@f? zGg*#TsPurSg3uzHkp^}G+?6Qd24QJ}rVTtZ)Pz7pqc@oy^^$=s<06tOBqionz~{$7 zfC1}pTKyIagTzt3E-53|7fUHuk{Sfge~UE+VY{woVEjE{F{ zvq|>mT{%mMf7588646s}jUw)_(ao9oln~vO-E^>@PMd*|R-InYwgNDOgzykQ-wuv< zfR_IN3sJ1&o>gYhZVe?A2$2$tg0OlHR)_3?Y{b!8+P|YB@P^cLEzAz-;?JNWtB@wS zKcPT$_}|t4KwB$U{qHu70h!)En%4_1AwW4Kn-JbD(CN1x@EoV2TKfO^_T!ARsah=? z%T5uDNB_NV4f#o>$-iwHe0$!=C5(A%VxQfx@c|%gmID9Lrv<6+-@CG-Mu(cyhwT2X z4ar4?Ov3Xu5#C(0&`gi-Xt;y-fPnS*fXHRYf5ibS&=e(jjSf<1fdWLw{w5>6r9i@u zazMmqNy7_{-IDJYP208G7K@shaOKq4v%g(lQg=+} zGbe4;%{8{ic6ntCNgmL!1{=Hmx(Er9g_*{-jM1DIOIMHSV)NTT*W%OF#-O0Z7Z&%K zfBw~^Zb6F@&u^adC?u})g}Zhu=5(#hSRUVjQvYA4dlyX@1#iszyoYi3@w>O4SO2#4 zT(r9QQr*(A$rVeZ)^FVOZp>}3C0lYYPUtnj?Z)?5&#u!vZ}u4d{Ff7BUr#x?bLk(Q zCPbWPblSDCQ+3bd3%ZZ*9DCkpP%F@h6#&gHB&@b+MPYF1#f_b;Sl1D68OPkN_v$pI zQ&Z8XF5~)yzuNk+XHfSQJ)%n2e_OD1*StIFx<#?X;Mh~gemQYw6f-tsnCsg?#}VXT zPEk$V@5q0^a{i9C`5fBCxOD8rEn)YX7YFp}BYNc=6WF~>eaLiTPWOqY#yw3s`p@wm zV?8}&3!|8^ja||Po&FbC$<1HJTxU$*)AGTmer@dhWi};>S^E-}^t}-|!XY5l;8a7+ zbFt|cQ)D?|as0+U=M=lqchB|*T@Fp(*5goDThAUxCLZZ~q_6EEyAFN2@7>o5Sbmfw zyT*r&{Ji+lk^5f)Y}hyK?^i^o!w{o)=dS?s9{1tu1!_=!sDax1adhW!`j~v5cWRPS5K!r}n~- zXVw;}$mo1FXymNz``30$T>;9}taKQgZW-Vk$P>)()S*-l&i<$Lr0c}I-xvnl==LmsQ) z#gKRZxwmF+(Qo~lhQ3$r2~^E|kM|ksAlf%@@SczSC1dUFZSW^MdR!HUW}DU`b2q5~ zUGQ)@wGNbXYl_BAG{;N^)CzskEBrdWnlvL?$R)_iAQFL46e-4aDmE`$OjC5q&Z>5X zorLBIVg3kQfdxCrRQYeKUa@mSH+@ye>rZ#ytHy{c_U!#KAVHV;$az7&6m!cLlE<4h zBV4!CLZ7W*fp6y_Hbpm%Y@dI|ru4$qdw%b`=SK!`=S3bTW1gpbO>5o6<>_mMm&ZL< z-H~L+KJ0Qb^66-qZr?bcz}&0u+%Z`e=670 zt$fIx>t2TDGKn@4pP$R)_4gyl;Q zF`Eiaw)=FJ#i5DQgPt@@Yb+f!CHIPWn1B8Al_%{a`0UK)ms>XnsfXM#b^q}Dj=qKc zchB>AF}vU9VxQ{|Hm%qL_7POmF0?JaE$Lem3=4WBaY{R5k?x`Ab%R>m)Wv!UCg#JF3* zd#>9pQzhU|^Y-pbIX1CZWCb-m=I(v_c~9%)w;fq&o&m?4w$Bnw^dEaJ$1v8@E3i|y ziF*?2a`|gScV9u+J0l}<(R&n;;);(@QtA7rh(p)4Gd?v{s=x40MQg1+b;K-^LMI?n+&f@x(Z8Mn=ESrkC8e(#+-?j&c{ zu1n({oQU2t?# zht2eCo|hE9Ovm?aXPo`E&Y2&N>FIE#s2TDeAqYYk&r#YtU`PqAWg}DMFg=0gSjyVC zXY1OOv#@ep1fv;hLM}9g0}%q2$GU7LWsr?C>iO*qW^J`T5?4f^-;i^LUz&(Dynvx^ z-d;M=IYK({Qr$B8(W~my@3ONzOw1NB#-w&UG8U@n&ecZYvBUA5Qu3rfAVxIU!LjX(%)g4+R{NrjS$-Mba`8SjQ`N@bUKx-3XieYQA`FD3nPmb^G*spk zYqi0oB0kzB16a}s2D!8UuZ)>z?wx!&t-*Qv{nBtEF?we}&Fp|3obFNi-Jke8Y)LeC z^)GlA%(>`tZ%%|=+K}D(d!iBsKJy-=+$z2EI{xIrjEXP(1Ie95l4G0BWmS($5`^+p zZ`OJ0S3R?}S=H<-C@y+v|EFnjWJUd|ZaKNaS^+7>!~rnVA*OuiK#q-nkMjY6;GlP0 z)MR)5&?C*AC_xZ;q-CMs*vgteAebmIljoEGEw}r(@%1sEVvFLDANC?${EoM|O zQNBxI%+BFk zZ?8JJz0*3MS*ya2eq8+W!012DpW8W`b2&U=*xOcl!;XgD2WQ8-=6U=x{ZRom|4CKL zr`XEnRTGVqqSx|j!yLR%Y#9*TH5PB=_uL&EGP>u|TK z31sFl29e>3yQFB%FmayVfeLW4fy8$DgX#e1*cHGur5Kchpt3OR6Gn-w`9BV6du!9$ z#MN~#AG~u(OB!YW;`^c#=N2mFjP9E-(=(vHIm+wQn3&!o^2zeOm|TwCx9$i{1pU_8Sv;ZD!K6i|DyE%`*LVK_41s&gUYh-ccJEQ!>B) zCYFy?oc?y=pTFW?X6@?N!)zy7ano=~SWpJ7hkx>5y~{!YhFvM{g%oac(?gWAa5U`#%#ol%o^@v&Cck=XfxkYrpD zTXCUTWF~!O0`!4IBz}iUq(Ty*5xoE<)xl9KA-%3hPSaC3qzdJ~^y$V}$5=h@!E{BB z(MvzPdlT?yqx_c%r!`)Q7i^LOZ2ue-{k!L{tR3TX5@&T8erI=n;_oj;&8pqm9KB(M z<}*SIg0plUN~4Mt;dzE!HR!b~hljxcvmvjYQKpebf045FGOCJ>0gY$!6jf1zy#lK} zLvj^`@DZ_U<~_q4X(TeEE?2Kp@P)x*<%c<+F4po)X=D`)SNMIh_E?MU*oU>$ae}7QnoLPHj+g|sh%^FR9O44KzYG3^ z3L|duX%|_`85V(%;U*#&8&tott$FWM&TS6nLSYApf8_GVdT-_4iy|r4*=nTH_uIw& zWom_#Zo#-6eg`ddaxG9D7HXNU_1fMr1an3w9a+wzJlA82d1mPjLAQx4qu%x+ja1`4)!L7!U3^fq=LtB+XK9^Ju ziDc%GSTtrTBw4`KaoweeP-F}+!z9XI;ND2Ss@as)xYweUr?^&;z;YdJF|=V03RW&b z4xI;131&q=IrlWoR7GZUVzV?NuKPiJQ+Z9_AH&ziEA5Qek{G7H0bvENO)*Eo*X2Bc z_7UA6L;vACb(yu&yMT`3{ch@J1p5bpxQlZOBeoGDlkQxUGoRq-!it<5Gwo0pco_sO zNzs#P!2c7S=UapNfBQ&q)jBrWcA(nJ%~JT8#=H-1An~VIv!Dh2PaZLRJ(pd6b4j zJ7VH|(Kk9uV1n+NOA6$(AiLL&1Y76MfsDIvVu&EaBFl$RO`0BlAh;v_CHSp(9U%jB z%Ytq5+WLK;1I6@~x`T`Kr~8VeGus*c;{Z%E#UmY0la3sthaV??ap5}wffnVKFr{cZ zFPKkfC=$b~Dcor7bdG~YgH!yOfHXLXB5e_-GyuLP!rlWZ#om)saDD2jzqfL`eMIgkurbwel_wK~Y`+6khcBIl? zU5#~jF*)Mok*pf!B>iE0$k>xwS=L;gu*KfUPT~iDsOMrrXDMihxFOI;;cwncY2&v{ zW)l~Lg56D^m?Is$^EFSC98ma4YLw^>d#iz}Y)oN_)w6W%j4o3tiYXu{!aY)rg4s9& zizpm(EHO2R)CzYDs1{l}MvGW%3jLZ0#Nh;gvI=;FwE@Jx)R;Mjj>73DC38#KB3xHU zNJ;qDTfZdh01*12ad}<%tVBvHQ<}~yX^G;C5c6)GjY=?iv|ZuZmUc$GwIfzYA}xn* znJn&#VHPvsoeFi!(ZI>`x#5ULBuYKPqf{X?@TqQW$R+$OV2mx&YLWO18?6hzv>hQa z{JL>M5{bKm{(sB`&qp=G0;X*wfvQ-PfTi~)@P6%#0(rO)O6Zd`mevvzffDFcklF{5 zQp+$>%4tb$K=%?9iJhW+Wx2^{70fx3l#y*-cQ;y8tw-CYt=4_thVLSz@cO&$UQ-QM4iV&RQRZ8|C{1{4Ap_e0tm1a~A{A!2-a$+>92y$lS6R!r`B|NDr1I)wP zlSSbXr$LXzM6$@-8vcHiPlKXUGC~8Pf+Pnu7nlhnl>%C>n!~4_6k(S5yjv5B`AEF3 zUL6G(@^Jz*67-u}h1C(s`G%=XJb0b27K!8(Wmn@kyPdHK7l;rejJnwC$R`?Qlu8D& zGnK0;>0|mDk14Ro1kl(XeMutbcPYJ~(h81rkp*dk#03OTDAee_4i~|G2wDBqGD(Nh}XU1MJ*YEIcMrz0BH-8U=LsW@PwGiQ3?IIIL`A^MQgVzF}$ zsFV^FA%X^KmZoi142ndNGPpMq3K@t8!MG*{rwF0kv7Hg!gwlA1pl4$w_Zx-ZAZHoA z2*p#?>i4Jxn`6`Em9 zCOxjms${_Okwd=k^@nCZa6FLrXtFEIhRnh=S$u_=kFiutTvo=)O@g@^i40GoP4Va} z1jK?N7N%5?cu3=bM(xz%*j7*&;L>o=zl>bGD`yQENN%*XH|KAvqN>k33J?j6L5(V3=Kp_e19|{4RI@~%*LxL%ih@3(aF$Wf=AUQHb zr1Hgm-Dy@T2LtJ%uTUPzW`oWwhd=5s7xGdK80uagyTJ(FC+R`Webb>oSUjzR!i&3} zqwuPGF1ndQsny}eNO0>Z#E#GEgVuED3;HygQz{_JgLsXT&SW=h3sr<$xRk=q62T~! zEw^R}dMX%AuB2Uz8WD?2#_6~MTq6e_Qxs9hCj2Xm$x3B|D@~cJCY(HEb@%aQl3I%g zLQA26EE&Z{5hZ4Z3MgO>!~6Q#rI%r1@MhoRjtoi?ma@c;4f1+T6Oo$Y(O)g*5!U&m zc1G{)L%}nY(^rO)SZQJ3Tcih0rUE`Bj6vWYGkUwaGr=x}2{e%`Xlp|D0y&N<0%J-I zB(g)BD@Bu~D3yBm(9!~}&tj8t5g^I^W3E7wQW-xIU z4>T9|AlopD6!HN~X3Y;%O$86gGd~tk&`T@!s8K!sz32(NoJRfRN)){wjjhNpBMiG1I`up>Qb-DPI2-Nvl<>$VQoS{7p@fC747d1! znr1PQ!xr%;YmzKPi%tf9Ey53YTvg{URZ#x0&xwD|7jY{dCGzH1v{F1yh5$8SObjXX zhp6Ib_*yP49J7jN!fL?#jO6{)1?XpF=x9L;p_!2_tuDgZ!M>nml>b&CzS&xCIxE=p);B0D@N zZ7%3duJ6w32sK$x`?kSM5L<<-h0*u~AWUv9mDXKgkR(R72X}!DVwr@D3gj zHWk;xn-Q%9DvkJ#j~sv6KO0Siye*S*YGkl+)W00P|Rz* zkRZJz;WFl1Y_5U42-K@f^@y4-H9G2XQ+|Y^!5Y>%aIPC9%OR@eIS^%yh;BJ<0lcv0 z0%%-GSO~stG&XPB_o>V(19zbmIEiQ$W2IjmWfaYuQsm60O-V>9v^%o`m^4XuHs*bL z7?p`wOdxVduVnpk0h^+FaH zW4gMjD3z4S!WGuso)Ch7R5F$pMG%k(4GAbY46hwwPyl2L*t67+@Ocm0eg%0lQW z5^B*@Bl^JFCW(_&mN83?e(HLq@aQ%yohAdw6qVLHUPRMY*tqw)CE_X$lW&&jha` z)F`^yi=uI}+bI72!?&SpinaA+2DaO#OG@90&3TMQAd{qS015U(U?0W46_n74maUfLo%L8$_`o z!-^v~7x*o-1A=yIXSiAQ*j;PJ!q88~8;!hFBSy}^*lGtmK_YCe_7^}UU=!Yat_W!+ zy@DW+VQ5Ho+fekHVj~U8AOL1(FiW9>D-dJ-fhG-^YgVGeabBZw7K)Mt5<&=Ei=dHU zQzDro=L7GGO$Iqhqh@-vkihZHQXDumr`iq5V6GLUQp9eYItdIDn?vR&LHmv{!(r8; zhIq6N6WlUs*^dwswBVdeIcW!@CKKe2S_wiRDN2B#Qk^3O@X)(#B_6E%2R)dpoq%n+miSSd+ltNCInDFn^Uh9JA$ zoD#(==G9>8{9*(77tW+eV8(c>dX}@ahD~4iWB*M!Ki{Z;$iGb)A z5B37D+;w~|(Gq=>3EfDHa>VFd4;Xp@3NbmRH>kM+0jUnwT= z#e`6pYCyaV6jqpNF7`J-A;o&ynH0)`ujZH^&SGX`*nWDb(a6HVg+FKmZZawJUX!N( zi_j0>^hLlLGO-O)0lgw4DQLz86h})+X-I!>es@Vy3wZLBgXET(@)2S3KJNOGu)+~s zyfg+!-Sjdyy~vHIo~EykAXsy-ln6N%q0*n>@au=nx<0Jz{4~*mLDPqyU(J|&<&!aR zbK3QX*H`y>e){O?on7r8PrlAsy7F1UKbwP}+i%=__mbzLmTvoOLUm0a9^W~3ifGrYxi=HKj5zwQpX zoH4rbUZ*`zs~%rjJMYk=k<%QCQ^O}u`^Uaw{ihFZ&s>iB*JKr5tz$h@%}9~OvYf#1EcLlYiZ zICbMWEq0f*pz(A^N+*yYsNyW>|E3o^@^cq#IKO7W`FTBCWXlGX-{{rt&a&Fc1Sf$C zCpY=$mc~V`NE3_qPJF3S9AIr<9n^1kOjV*THI_T@%&*1XQ6Y6n2`4ne8O9|8_I!Z8 z5n?RHr6r`?ou9~&f{f=#sXA{#QkE!_5U!G;c@a*Rs`&_xU7&HY3XEJfv#>+y+6upX z2ZyBNiMXs0Wu+Wa1aoy<0Y@}Li=b-^#=GAaH+~5jbu(_%;mgsw_4e;?xx!LImSK6K z>oT)%=LsL~qIS&NH|}is+(i|XkoRDX)p zm{4h^JX3GP1hues7DI)1Dms_P_FkRcw|UKO|G~cv{-f7c@v;gJiO17K=fvFyzWOaq z929`+ry8p9$U|}_AjQtH8#rRKZKa;YWQ&2>&Ehhx9P&~E`fYsiqYZ%6JYAA6X7Cycu+ zX+a6=(CVyo*2aF5>)S4;XW63z|HRf?mW9q4R5i-&O_N6h+gyv25oDV}JOmTNtc7En zz}jglNFjtlB7)CEU?iL;zAB28%ZvnEBS zvzd|Id-XN>@LnrEcALV;_J4fEm#X3ZE)C?izH#2`JapgI;a@IegBMH~zw^Pv(oY-o z`P~*4)?UYRMWvym^Dr9JzFdAS*%~6di%kTk&c<~JLWEO9l2KntQBh)2NzvbCp^3Fz zQwb7jq4n3cj_R57;7zyTi`HGzT}Ur|c*`cH&!a!33{M-_)w+55?z-QXFN^Edc6dZo z{E5uWZqKiZKa6UOTTvW)wuBNSh}l>M`fd>-Cn<|7M2ZR>i{u)>kRbo!8D)+z(wL7z zs$w>@fK2fH)3VHS8JES&4(^gy<-#$^Mdf(LnCe~dHFOm_78WecOB^KsSlxW*e7 jLc2!u=Jqep#)%(Vq|C~ABmY*dcZBx1ZFeHBz4HG7|I>Tw diff --git a/licences/SFML-LICENSE.md b/licences/SFML-LICENSE.md deleted file mode 100755 index da50b4c..0000000 --- a/licences/SFML-LICENSE.md +++ /dev/null @@ -1,9 +0,0 @@ -Copyright (C) 2007-2022 Laurent Gomila - laurent@sfml-dev.org - -This 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. diff --git a/licences/clip-LICENSE.txt b/licences/clip-LICENSE.txt deleted file mode 100755 index a4c1fcb..0000000 --- a/licences/clip-LICENSE.txt +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2015-2022 David Capello - -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. diff --git a/licences/stb-LICENSE b/licences/stb-LICENSE deleted file mode 100755 index a77ae91..0000000 --- a/licences/stb-LICENSE +++ /dev/null @@ -1,37 +0,0 @@ -This software is available under 2 licenses -- choose whichever you prefer. ------------------------------------------------------------------------------- -ALTERNATIVE A - MIT License -Copyright (c) 2017 Sean Barrett -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. ------------------------------------------------------------------------------- -ALTERNATIVE B - Public Domain (www.unlicense.org) -This is free and unencumbered software released into the public domain. -Anyone is free to copy, modify, publish, use, compile, sell, or distribute this -software, either in source code form or as a compiled binary, for any purpose, -commercial or non-commercial, and by any means. -In jurisdictions that recognize copyright laws, the author or authors of this -software dedicate any and all copyright interest in the software to the public -domain. We make this dedication for the benefit of the public at large and to -the detriment of our heirs and successors. We intend this dedication to be an -overt act of relinquishment in perpetuity of all present and future rights to -this software under copyright law. -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 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. diff --git a/src/ogfx/BitmapFont.cpp b/src/ogfx/BitmapFont.cpp deleted file mode 100755 index 3b015b2..0000000 --- a/src/ogfx/BitmapFont.cpp +++ /dev/null @@ -1,270 +0,0 @@ -#include "BitmapFont.hpp" -#include -#include -#include -#include - -//TODO: Add errors - -namespace ogfx -{ - using namespace ostd; - - BitmapFont& BitmapFont::create(String filePath, bool monospace) - { - m_texture = ResourceManager::loadTexture(filePath, true, GL_NEAREST, GL_NEAREST); - m_monoSpace = monospace; - __load(); - return *this; - } - - BitmapFont& BitmapFont::create(ResourceID texture, bool monospace) - { - m_texture = texture; - m_monoSpace = monospace; - __load(); - return *this; - } - - TextureAtlasIndex BitmapFont::getChar(unsigned char c, Rectangle& outRect) - { - outRect = m_charBounds[(uint32_t)c]; - if (m_monoSpace) outRect.w = m_maxCharWidth + 4; - return m_characters[(uint32_t)c]; - } - - float BitmapFont::getSpaceWidth(void) - { - if (m_monoSpace) return m_maxCharWidth; - return m_spaceWidth; - } - - void BitmapFont::setSpaceWidth(float w) - { - m_spaceWidth = w; - if (!m_monoSpace) - m_charBounds[(uint32_t)' '] = { (m_charSize.x - m_spaceWidth) / 2.0f, 5.0f, m_spaceWidth, m_charSize.y - 10 }; - } - - void BitmapFont::enableMonoSpace(bool mono) - { - if (isInvalid()) return; //TODO: Error - create(m_texture, mono); - } - - void BitmapFont::calc_char_bounds(void) - { - uint32_t xtiles = m_textureSize.x / m_charSize.x; - uint32_t ytiles = m_textureSize.y / m_charSize.y; - const auto& pixels = ResourceManager::getTexture(m_texture).getPixelData(); - uint8_t** sub_pixels = new uint8_t*[m_charSize.y]; - for (int32_t row = 0; row < m_charSize.y; row++) - sub_pixels[row] = new uint8_t[m_charSize.x]; - for (int32_t y = ytiles - 1; y >= 0; y--) - { - for (int32_t x = 0; x < xtiles; x++) - { - int32_t xx = (x * m_charSize.x * 4); - int32_t yy = (y * m_charSize.y * 4); - for (int32_t row = 0; row < m_charSize.y; row++) - { - for (int32_t col = 0; col < m_charSize.x; col++) - { - int32_t real_x = xx + (col * 4); - int32_t real_y = yy + (row * 4); - int32_t _1d_coord = CONVERT_2D_1D(real_x, real_y, (uint32_t)m_textureSize.x); - sub_pixels[row][col] = pixels[_1d_coord]; - } - } - auto rect = test_grid(sub_pixels, m_charSize.x, m_charSize.y); - // std::cout << (char)m_charBounds.size() << "\n"; - // std::cout << rect.getPosition() << "\n"; - // std::cout << rect.getSize() << "\n\n"; - if (rect.w > m_maxCharWidth) - m_maxCharWidth = rect.w; - m_charBounds.push_back(rect); - } - } - if (m_monoSpace) - { - for (auto& cb : m_charBounds) - { - float oldw = cb.w; - float newx_offset = (m_maxCharWidth - oldw) / 2; - cb.w = m_maxCharWidth; - cb.x -= newx_offset; - if (cb.x < 0) cb.x = 0; - } - } - } - - Rectangle BitmapFont::test_grid(uint8_t** grid, int32_t width, int32_t height, uint8_t invalid_alpha) - { - int32_t top = 0, bottom = height, left = 0, right = width; - bool found = false; - // for (int32_t row = 0; row < height; row++) - // { - // for (int32_t col = 0; col < width; col++) - // { - // if (grid[row][col] != invalid_alpha) - // { - // top = row; - // found = true; - // break; - // } - // } - // if (found) break; - // } - // if (!found) return { 0, 0, 0, 0 }; //TODO: ERROR - found = false; - for (int32_t col = 0; col < width; col++) - { - for (int32_t row = 0; row < height; row++) - { - if (grid[row][col] != invalid_alpha) - { - left = col; - found = true; - break; - } - } - if (found) break; - } - if (!found) return { 0, 0, 0, 0 }; //TODO: ERROR - found = false; - for (int32_t col = width - 1; col >= 0; col--) - { - for (int32_t row = 0; row < width; row++) - { - if (grid[row][col] != invalid_alpha) - { - right = col; - found = true; - break; - } - } - if (found) break; - } - if (!found) return { 0, 0, 0, 0 }; //TODO: ERROR - // found = false; - // for (int32_t row = height - 1; row >= 0; row--) - // { - // for (int32_t col = 0; col < width; col++) - // { - // if (grid[row][col] != invalid_alpha) - // { - // bottom = row; - // found = true; - // break; - // } - // } - // if (found) break; - // } - Rectangle rect = Rectangle((float)left, (float)top, (float)(right - left), (float)(bottom - top)); - if (rect.x < 0) rect.x = 0; - if (rect.y < 0) rect.y = 0; - if (rect.w > width) rect.w = width; - if (rect.h > height) rect.h = height; - return { rect.x, 0, rect.w, (float)height }; - return rect; - } - - // void BitmapFont::calc_char_bounds(void) - // { - // uint32_t xtiles = m_textureSize.x / m_charSize.x; - // uint32_t ytiles = m_textureSize.y / m_charSize.y; - // const auto& pixels = ResourceManager::getTexture(m_texture).getPixelData(); - // for (int32_t y = ytiles - 1; y >= 0; y--) - // { - // for (int32_t x = 0; x < xtiles; x++) - // { - // int32_t xx = (x * m_charSize.x * 4); - // int32_t yy = (y * m_charSize.y * 4); - // float bl = m_charSize.x, bt = m_charSize.y, br = 0.0f, bb = 0.0f; - // int32_t revy = 0; - // for (int32_t ty = m_charSize.y - 1; ty >= 0; ty--, revy++) - // { - // for (int32_t tx = 0; tx < m_charSize.x; tx++) - // { - // uint32_t px = xx + (tx * 4); - // uint32_t py = yy + (ty * 4); - // uint8_t alpha = pixels[CONVERT_2D_1D(px, py, (uint32_t)m_textureSize.x)]; - // if (alpha != 0) - // { - // if (revy < m_charSize.y / 2) - // { if (revy < bt) bt = revy; } - // else if (revy > bb) bb = revy; - - // if (tx < m_charSize.x / 2) - // { if (tx < bl) bl = tx; } - // else if (tx > br) br = tx; - // } - // } - // } - // Rectangle rect(bl - 2, bt - 2, br - bl + 4, bb - bt + 4); - // std::cout << (char)m_charBounds.size() << "\n"; - // std::cout << rect.getPosition() << "\n"; - // std::cout << rect.getSize() << "\n\n"; - // if (rect.x < 0) rect.x = 0; - // if (rect.y < 0) rect.y = 0; - // if (rect.w < 10) rect.w = 10; - // if (rect.h < 10) rect.h = 10; - // if (rect.w > m_maxCharWidth) - // m_maxCharWidth = rect.w; - // m_charBounds.push_back(rect); - // } - // } - // if (m_monoSpace) - // { - // for (auto& cb : m_charBounds) - // { - // float oldw = cb.w; - // float newx = m_maxCharWidth - oldw; - // newx = cb.x - (newx / 2.0f); - // cb.w = m_maxCharWidth; - // if (newx >= 0) cb.x = newx; - // } - // } - // } - - void BitmapFont::__load(void) - { - invalidate(); - m_characters.clear(); - m_charBounds.clear(); - m_maxCharWidth = 0.0f; - if (m_texture == ResourceManager::InvalidResource) - { - ErrorHandler::pushError(BitmapFont::ERR_INVALID_TEXTURE); - String err_str = ErrorHandler::getLastErrorString(); - OX_ERROR("%s", err_str.c_str()); - return; - } - auto& tex = ResourceManager::getTexture(m_texture); - if (tex.getWidth() % 16 != 0 || tex.getHeight() % 16 != 0) - { - ErrorHandler::pushError(BitmapFont::ERR_INVALID_TEXTURE_SIZE); - String err_str = ErrorHandler::getLastErrorString(); - OX_ERROR("%s", err_str.c_str()); - return; - } - m_charSize = { (float)(tex.getWidth() / 16.0f), (float)(tex.getHeight() / 16.0f) }; - m_textureSize = { (float)tex.getWidth(), (float)tex.getHeight() }; - calc_char_bounds(); - if (!m_monoSpace) - m_charBounds[(uint32_t)' '] = { (m_charSize.x - m_spaceWidth) / 2.0f, 5.0f, m_spaceWidth, m_charSize.y - 10 }; - for (uint32_t y = 0; y < 16; y++) - { - for (uint32_t x = 0; x < 16; x++) - { - auto& bounds = m_charBounds[CONVERT_2D_1D(x, y, 16)]; - m_characters.push_back(tex.addTileInfo((x * m_charSize.x) + bounds.x, - (y * m_charSize.y) + bounds.y, - bounds.w, - bounds.h)); - } - } - setTypeName("ox::BitmapFont"); - validate(); - } -} diff --git a/src/ogfx/BitmapFont.hpp b/src/ogfx/BitmapFont.hpp deleted file mode 100755 index 8feea52..0000000 --- a/src/ogfx/BitmapFont.hpp +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef __BITMAP_FONT_HPP__ -#define __BITMAP_FONT_HPP__ - -#include -#include -#include -#include - -namespace ogfx -{ - using namespace ostd; //TODO: Remove from header - - class BitmapFont : public BaseObject - { - public: - inline BitmapFont(void) { invalidate(); } - inline BitmapFont(String filePath, bool monospace = false) { create(filePath, monospace); } - BitmapFont& create(String filePath, bool monospace = false); - BitmapFont& create(ResourceID texture, bool monospace = false); - TextureAtlasIndex getChar(unsigned char c, Rectangle& outRect); - float getSpaceWidth(void); - inline ResourceID getTexture(void) { return m_texture; } - inline float getBaseCharHeight(void) { return m_charSize.y; } - void setSpaceWidth(float w); - inline bool isMonoSpace(void) { return m_monoSpace; } - void enableMonoSpace(bool mono = true); - - private: - void calc_char_bounds(void); - void __load(void); - Rectangle test_grid(uint8_t** grid, int32_t width, int32_t height, uint8_t invalid_alpha = 0); - - private: - ResourceID m_texture; - std::vector m_characters; - std::vector m_charBounds; - Vec2 m_charSize; - Vec2 m_textureSize; - float m_spaceWidth { 20.0f }; - float m_maxCharWidth { 0.0f }; - bool m_monoSpace { false }; - - - public: - inline static constexpr int32_t ERR_INVALID_TEXTURE = OX_BITMAPFONT_ERR_MASK + 0x0001; - inline static constexpr int32_t ERR_INVALID_TEXTURE_SIZE = OX_BITMAPFONT_ERR_MASK + 0x0002; - }; -} - -#endif diff --git a/src/ogfx/BlendRenderer.cpp b/src/ogfx/BlendRenderer.cpp deleted file mode 100755 index 5dfade7..0000000 --- a/src/ogfx/BlendRenderer.cpp +++ /dev/null @@ -1,101 +0,0 @@ -#include "BlendRenderer.hpp" -#include -#include - -namespace ogfx -{ - BlendRenderer& BlendRenderer::create(IPoint screenSize, OrthoCamera& camera) - { - m_screenSize = screenSize; - m_destination.create(screenSize.x, screenSize.y); - m_shader = ResourceManager::getDefaultBlendShader(); - m_blendModes.resize(BlendRenderer::MaxLayers, tBlendModes::Transparent);; - connectSignal(tBuiltinSignals::WindowResized); - m_camera = &camera; - setTypeName("ox::BlendRenderer"); - validate(); - return *this; - } - - LayerID BlendRenderer::addLayer(RenderTarget& target, uint8_t blendMode) - {//TODO: Errors - if (isInvalid()) return BlendRenderer::InvalidLayer; - if (m_layers.size() >= BlendRenderer::MaxLayers) return BlendRenderer::InvalidLayer; - LayerID id = BlendRenderer::s_nextID++; - m_layers.push_back({ target, blendMode }); - return id; - } - - void BlendRenderer::process(RenderCore& gfx) - { - if (isInvalid()) return; - uint32_t rt = gfx.getCurrentRenderTarget(); - ResourceID shad = gfx.getCurrentShaderID(); - gfx.setRenderTarget(m_destination); - gfx.bindShader(m_shader); - gfx.clear({ 0, 0, 0, 0 }); - gfx.updateUniform_mat4f("u_viewProjMatrix", m_camera->getProjectionMatrix()); - uint32_t index = 0; - for (auto& layer : m_layers) - { - m_blendModes[index] = layer.blendMode; - gfx.drawRenderTarget(*layer.target, { 0.0f, 0.0f }, { (float)m_screenSize.x, (float)m_screenSize.y }); - // gfx.drawRenderTarget(*layer.target);//, { 0.0f, 0.0f }, { (float)m_screenSize.x, (float)m_screenSize.y }); - index++; - } - if (index < BlendRenderer::MaxLayers) - { - for ( ; index < BlendRenderer::MaxLayers; index++) - m_blendModes[index] = tBlendModes::Transparent; - } - gfx.updateUniform_arri("u_blendModes", m_blendModes); - gfx.updateUniform_i("u_layerCount", m_layers.size()); - gfx.bindShader(shad); - gfx.setRenderTarget(rt); - } - - void BlendRenderer::renderTo(RenderCore& gfx, const RenderTarget& target, ResourceID shader) - { - if (isInvalid()) return; - uint32_t rt = gfx.getCurrentRenderTarget(); - ResourceID shad = gfx.getCurrentShaderID(); - gfx.setRenderTarget(target); - gfx.bindShader(shader); - gfx.updateUniform_mat4f("u_viewProjMatrix", m_camera->getProjectionMatrix()); - gfx.drawRenderTarget(m_destination); - gfx.bindShader(shad); - gfx.setRenderTarget(rt); - } - - bool BlendRenderer::overrideDefaultBlendShader(ResourceID shader) - { - if (ResourceManager::getShader(shader).isInvalid()) return false; - m_shader = shader; - return true; - } - - void BlendRenderer::renderToScreen(RenderCore& gfx, ResourceID shader) - { - renderTo(gfx, Renderer2D::getDefaultRenderTarget(), shader); - } - - void BlendRenderer::setDefaultBlendShader(void) - { - m_shader = ResourceManager::getDefaultBlendShader(); - } - - BlendRenderer::tLayer& BlendRenderer::getLayer(LayerID layer) - { - if (layer >= m_layers.size()) return BlendRenderer::s_invalidLayer; - return m_layers[layer]; - } - - void BlendRenderer::handleSignal(tSignal& signal) - { - if (signal.ID == tBuiltinSignals::WindowResized) - { - WindowSizeObj& newSize = static_cast(signal.userData); - m_screenSize = { newSize.width, newSize.height }; - } - } -} \ No newline at end of file diff --git a/src/ogfx/BlendRenderer.hpp b/src/ogfx/BlendRenderer.hpp deleted file mode 100755 index 12f3e51..0000000 --- a/src/ogfx/BlendRenderer.hpp +++ /dev/null @@ -1,72 +0,0 @@ -#ifndef __BLEND_RENDERER_HPP__ -#define __BLEND_RENDERER_HPP__ - -#include -#include - -namespace ogfx -{ - using namespace ostd; //TODO: Remove from header - - struct tBlendModes - { - inline static constexpr uint8_t Override = 0; - inline static constexpr uint8_t Transparent = 1; - inline static constexpr uint8_t Multiply = 2; - inline static constexpr uint8_t Add = 3; - inline static constexpr uint8_t Subtract = 4; - inline static constexpr uint8_t Normal = 5; - - inline static constexpr uint8_t Invalid = 0xFF; - }; - - class RenderCore; - class BlendRenderer : public BaseObject - { - public: struct tLayer - { - RenderTarget* target { nullptr }; - uint8_t blendMode { tBlendModes::Override }; - - inline tLayer(void) { } - inline tLayer(RenderTarget& _target, uint8_t _blendMode) { target = &_target; blendMode = _blendMode; } - inline bool isValid(void) { return m_valid && target != nullptr && blendMode != tBlendModes::Invalid && target->isValid(); } - - private: - inline tLayer(bool v = false) { m_valid = v; } - bool m_valid { true }; - - friend class BlendRenderer; - }; - - public: - inline BlendRenderer(void) { invalidate(); } - inline BlendRenderer(IPoint screenSize, OrthoCamera& camera) { create(screenSize, camera); } - BlendRenderer& create(IPoint screenSize, OrthoCamera& camera); - LayerID addLayer(RenderTarget& target, uint8_t blendMode = tBlendModes::Override); - void process(RenderCore& gfx); - void renderTo(RenderCore& gfx, const RenderTarget& target, ResourceID shader); - void renderToScreen(RenderCore& gfx, ResourceID shader); - bool overrideDefaultBlendShader(ResourceID shader); - void setDefaultBlendShader(void); - tLayer& getLayer(LayerID layer); - void handleSignal(tSignal& signal) override; - inline RenderTarget& getDestination(void) { return m_destination; } - - private: - RenderTarget m_destination; - ResourceID m_shader; - std::vector m_layers; - IPoint m_screenSize; - std::vector m_blendModes; - OrthoCamera* m_camera { nullptr }; - inline static LayerID s_nextID = 0; - inline static tLayer s_invalidLayer { false }; - - public: - inline static constexpr int32_t MaxLayers = 14; - inline static constexpr LayerID InvalidLayer = 1024; - }; -} - -#endif \ No newline at end of file diff --git a/src/ogfx/Camera.cpp b/src/ogfx/Camera.cpp deleted file mode 100755 index 58d021d..0000000 --- a/src/ogfx/Camera.cpp +++ /dev/null @@ -1,187 +0,0 @@ -#include "Camera.hpp" -#include "DataStructures.hpp" - -#include "Window.hpp" -#include "Signals.hpp" - -#include - -namespace ogfx -{ - using namespace ostd; - - FirstPersonCamera& FirstPersonCamera::create(Window &window, bool invert_y) - { - m_window = &window; - m_invert_y = invert_y; - - updateProjectionMatrix(); - - setTypeName("ogfx::FirstPersonCamera"); - validate(); - - updateViewMatrix(); - return *this; - } - - void FirstPersonCamera::mouseMoved(float x, float y) - { - if (isInvalid()) return; - - m_reset_mouse = true; - float xpos = x - (m_window->getSize().x / 2.0f); - float ypos = y - (m_window->getSize().y / 2.0f); - - xpos *= m_moveSensitivity; - ypos *= m_moveSensitivity * (m_invert_y ? 1.0f : -1.0f); - - m_yaw += xpos; - m_pitch += ypos; - - if (m_pitch > 89.0f) - m_pitch = 89.0f; - if (m_pitch < -89.0f) - m_pitch = -89.0f; - - glm::vec3 front; - front.x = cos(glm::radians(m_yaw)) * cos(glm::radians(m_pitch)); - front.y = sin(glm::radians(m_pitch)); - front.z = sin(glm::radians(m_yaw)) * cos(glm::radians(m_pitch)); - m_front = glm::normalize(front); - } - - void FirstPersonCamera::updateViewMatrix(void) - { - if (isInvalid()) return; - - m_viewMat = glm::lookAt(m_position, m_position + m_front, m_up); - } - - void FirstPersonCamera::updateProjectionMatrix(float fov, float near, float far) - { - tPerspective persp(m_window->getSize().x, m_window->getSize().y); - if (fov != 0.0f) persp.FOV = fov; - if (near != 0.0f) persp.nearPlane = near; - if (far != 0.0f) persp.farPlane = far; - persp.update(); - m_perspMat = persp.getMatrix(); - } - - void FirstPersonCamera::update(void) - { - if (isInvalid()) return; - - if (m_reset_mouse) - { - m_window->centerMouse(); - m_reset_mouse = false; - } - - glm::vec3 absolute_front = m_front; - absolute_front.y = 0.0f; - - if (m_move_keys[KeyForward]) - m_position += m_moveSpeed * absolute_front; - if (m_move_keys[KeyLeft]) - m_position -= glm::normalize(glm::cross(m_front, m_up)) * m_moveSpeed; - if (m_move_keys[KeyBackwards]) - m_position -= m_moveSpeed * absolute_front; - if (m_move_keys[KeyRight]) - m_position += glm::normalize(glm::cross(m_front, m_up)) * m_moveSpeed; - if (m_move_keys[KeyUp]) - m_position += m_moveSpeed * m_up; - if (m_move_keys[KeyDown]) - m_position -= m_moveSpeed * m_up; - - updateViewMatrix(); - } - - void FirstPersonCamera::KeyPressed(uint32_t key) - { - if (isInvalid()) return; - switch (key) - { - case KeyForward: - case KeyLeft: - case KeyBackwards: - case KeyRight: - case KeyUp: - case KeyDown: - break; - default: return; - } - m_move_keys[key] = true; - } - - void FirstPersonCamera::keyReleased(uint32_t key) - { - if (isInvalid()) return; - switch (key) - { - case KeyForward: - case KeyLeft: - case KeyBackwards: - case KeyRight: - case KeyUp: - case KeyDown: - break; - default: return; - } - m_move_keys[key] = false; - } - - - - - OrthoCamera::OrthoCamera(float left, float right, float bottom, float top, float near, float far) - { - create(left, right, bottom, top, near, far); - } - - OrthoCamera& OrthoCamera::createDefault(float windowWidth, float WindowHeight, bool soft) - { - return create(0.0f, windowWidth * 1.0f, WindowHeight * 1.0f, 0.0f, -1.0f, 1.0f, soft); - } - - OrthoCamera& OrthoCamera::create(float left, float right, float bottom, float top, float near, float far, bool soft) - { - m_projection = glm::ortho(left, right, bottom, top, near, far); - __update_view_proj_mat(); - - enableSignals(); - if (!soft) - connectSignal(tBuiltinSignals::WindowResized); - - setTypeName("ox::OrthoCamera"); - validate(); - return *this; - } - - void OrthoCamera::handleSignal(ostd::tSignal& signal) - { - if (signal.ID == tBuiltinSignals::WindowResized) - { - WindowSizeObj wsobj = static_cast(signal.userData); - createDefault(wsobj.width, wsobj.height, true); - } - } - - String OrthoCamera::toString(void) const - { - StringEditor se = getTypeName(); - se.add(" position = { "); - se.addf(m_position.x).add(", "); - se.addf(m_position.y).add(", "); - se.addf(m_position.z).add(" } rotation = { ").addf(m_rotation).add(" } "); - return se.str(); - } - - void OrthoCamera::__update_view_proj_mat(void) - { - glm::mat4 transform = glm::translate(glm::mat4(1.0f), m_position); - transform = glm::rotate(transform, glm::radians(m_rotation), glm::vec3(0, 0, 1)); - - m_view = glm::inverse(transform); - m_viewProj = m_projection * m_view; - } -} diff --git a/src/ogfx/Camera.hpp b/src/ogfx/Camera.hpp deleted file mode 100755 index ee3e813..0000000 --- a/src/ogfx/Camera.hpp +++ /dev/null @@ -1,98 +0,0 @@ -#ifndef __CAMERA_HPP__ -#define __CAMERA_HPP__ - -#include -#include -#include - -namespace ogfx -{ - using namespace ostd; //TODO: Remove from header - - class Window; - class FirstPersonCamera : BaseObject - { - public: - inline FirstPersonCamera(void) { invalidate(); } - inline FirstPersonCamera(Window& window, bool invert_y = false) { create(window, invert_y); } - FirstPersonCamera& create(Window& window, bool invert_y = false); - void mouseMoved(float x, float y); - void updateViewMatrix(void); - void updateProjectionMatrix(float fov = 0.0f, float near = 0.0f, float far = 0.0f); - inline glm::mat4& getViewMat(void) { return m_viewMat; } - inline glm::mat4& getProjMat(void) { return m_perspMat; } - void update(void); - void KeyPressed(uint32_t key); - void keyReleased(uint32_t key); - - inline ostd::Vec3 getPosition(void) { return { m_position.x, m_position.y, m_position.z }; } - inline ostd::Vec3 getFront(void) { return { m_front.x, m_front.y, m_front.z }; } - - private: - glm::vec3 m_position { 0.0f, 0.0f, 10.0f }; - glm::vec3 m_front { 0.0f, 0.0f, -1.0f }; - glm::vec3 m_up { 0.0f, 1.0f, 0.0f }; - - float m_yaw { -90.0f }; - float m_pitch { 0.0f }; - - float m_moveSpeed { 0.4f }; - float m_moveSensitivity { 0.02f }; - - bool m_invert_y { false }; - bool m_reset_mouse { true }; - - bool m_move_keys[6] { false, false, false, false, false, false }; - - glm::mat4 m_viewMat { 1.0f }; - glm::mat4 m_perspMat { 1.0f }; - - Window* m_window { nullptr }; - - public: - inline static constexpr uint32_t KeyForward = 0; - inline static constexpr uint32_t KeyBackwards = 2; - inline static constexpr uint32_t KeyLeft = 1; - inline static constexpr uint32_t KeyRight = 3; - inline static constexpr uint32_t KeyUp = 4; - inline static constexpr uint32_t KeyDown = 5; - }; - - class OrthoCamera : public BaseObject - { - public: - inline OrthoCamera(void) { invalidate(); } - //inline OrthoCamera(float left, float right, float bottom, float top, float near = -1.0f, float far = 1.0f) { create(left, right, bottom, top, near, far); } - OrthoCamera(float left, float right, float bottom, float top, float near = -1.0f, float far = 1.0f); - OrthoCamera& createDefault(float windowWidth, float windowHeight, bool soft = false); - - void handleSignal(ostd::tSignal& signal) override; - - inline const glm::vec3& getPosition(void) const { return m_position; } - inline void setPosition(const glm::vec3& pos) { m_position = pos; __update_view_proj_mat(); } - - inline float getRotation(void) const { return m_rotation; } - inline void setRotation(float rot) { m_rotation = rot; __update_view_proj_mat(); } - - inline const glm::mat4& getProjectionMatrix(void) const { return m_projection; } - inline const glm::mat4& getViewMatrix(void) const { return m_view; } - inline const glm::mat4& getViewProjectionMatrix(void) const { return m_viewProj; } - - String toString(void) const override; - - private: - void __update_view_proj_mat(void); - OrthoCamera& create(float left, float ight, float bottom, float top, float near = -1.0f, float far = 1.0f, bool soft = false); - - private: - glm::mat4 m_projection { 1.0f }; - glm::mat4 m_view { 1.0f }; - glm::mat4 m_viewProj { 1.0f }; - glm::vec3 m_position { 0.0f, 0.0f, 0.0f }; - float m_rotation { 0.0f }; - }; - - typedef OrthoCamera Camera2D; -} - -#endif diff --git a/src/ogfx/DataStructures.hpp b/src/ogfx/DataStructures.hpp deleted file mode 100755 index 3e61643..0000000 --- a/src/ogfx/DataStructures.hpp +++ /dev/null @@ -1,225 +0,0 @@ -#ifndef __DATA_STRUCTURES_HPP__ -#define __DATA_STRUCTURES_HPP__ - -#include -#include -#include -#include -#include - -namespace ogfx -{ - using namespace ostd; //TODO: Remove from header - - struct tVertex - { - Vec3 position; - Color::FloatCol color; - Vec2 texCoords; - Vec3 normal; - - inline static VertexBufferLayout getVertexBufferLayout(void) - { - VertexBufferLayout layout; - layout.push(3); - layout.push(4); - layout.push(2); - layout.push(3); - return layout; - } - }; - struct tVertex2D - { - Vec3 position; - Color::FloatCol color; - Vec2 texCoords; - float texIndex { 0.0f }; - - inline static VertexBufferLayout getVertexBufferLayout(void) - { - VertexBufferLayout layout; - layout.push(3); - layout.push(4); - layout.push(2); - layout.push(1); - return layout; - } - }; - - struct tPerspective - { - float FOV { 45.0f }; - float windowWidth { 0 }; - float windowHeight { 0 }; - float nearPlane { 0.1f }; - float farPlane { 300.0f }; - - inline tPerspective(int32_t win_w, float win_h) { windowWidth = win_w; windowHeight = win_h; update(); } - inline tPerspective(float fov, float win_w, float win_h, float near, float far) - { - FOV = fov; - windowWidth = win_w; - windowHeight = win_h; - nearPlane = near; - farPlane = far; - update(); - } - inline void update(void) { m_matrix = glm::perspective(FOV, getAspectRatio(), nearPlane, farPlane); } - inline float getAspectRatio(void) { return windowWidth / windowHeight; } - inline const glm::mat4& getMatrix(void) { return m_matrix; } - - private: - glm::mat4 m_matrix; - }; - - class Transform2D - { - private: - float m_rotation { 0.0f }; - Vec2 m_translation { 0.0f, 0.0f }; - Vec2 m_scale { 1.0f, 1.0f }; - bool m_centeredOrigin { false }; - Vec2 m_baseSize { 0.0f, 0.0f }; - - bool m_applied { false }; - glm::mat4 m_matrix; - std::vector m_vertices; - - public: - inline Transform2D(void) { apply(); } - - inline Transform2D& resetRotation(float newValue = 0.0f) { m_applied = (m_rotation == newValue && m_applied); m_rotation = newValue; return *this; } - inline Transform2D& resetTranslation(Vec2 newValue = { 0.0f, 0.0f }) { m_applied = (m_translation == newValue && m_applied); m_translation = newValue; return *this; } - inline Transform2D& resetScale(Vec2 newValue = { 1.0f, 1.0f }) { m_applied = (m_scale == newValue && m_applied); m_scale = newValue; return *this; } - inline Transform2D& reset(float _rotation = 0.0f, Vec2 _translation = { 0.0f, 0.0f }, Vec2 _scale = { 1.0f,1.0f }) { resetRotation(_rotation); resetTranslation(_translation); return resetScale(_scale); } - - inline Transform2D& rotate(float value) { m_applied = (value == 0.0f && m_applied); m_rotation += value; return *this; } - inline Transform2D& translate(Vec2 value) { m_applied = (value == Vec2(0.0f, 0.0f) && m_applied); m_translation += value; return *this; } - inline Transform2D& scale(Vec2 value) { m_applied = (value == Vec2(0.0f, 0.0f) && m_applied); m_scale += value; return *this; } - - inline float getRotation(void) const { return m_rotation; } - inline Vec2 getTranslation(void) const { return m_translation; } - inline Vec2 getScale(void) const { return m_scale; } - inline bool isOriginCentered(void) const { return m_centeredOrigin; } - inline bool isApplied(void) const { return m_applied; } - inline glm::mat4 getMatrix(void) const { return m_matrix; } - inline std::vector getVertices(void) const { return m_vertices; } - inline Vec2 getBaseSize(void) const { return m_baseSize; } - - inline Transform2D& setOriginCentered(bool b = true) { m_applied = (m_centeredOrigin == b && m_applied); m_centeredOrigin = b; return *this; } - inline Transform2D& setBaseSize(Vec2 baseSize) { m_applied = (m_baseSize == baseSize && m_applied); m_baseSize = baseSize; return *this; } - - inline Transform2D& apply(void) - { - if (m_applied) return *this; - - glm::vec4 npos(0.0f, 0.0f, 0.0f, 1.0f); - glm::mat4 model = glm::translate(glm::mat4(1.0f), { m_translation.x, m_translation.y, 0.0f }); - model = glm::rotate(model, DEG_TO_RAD(m_rotation), { 0.0f, 0.0f, 1.0f }); - model = glm::scale(model, { m_scale.x, m_scale.y, 1.0f }); - - m_vertices.clear(); - if (m_centeredOrigin) - { - npos = { -(m_baseSize.x / 2.0f), -(m_baseSize.y / 2.0f), 0.0f, 1.0f }; - npos = model * npos; - m_vertices.push_back({ npos.x, npos.y }); - npos = { m_baseSize.x / 2.0f, -(m_baseSize.y / 2.0f), 0.0f, 1.0f }; - npos = model * npos; - m_vertices.push_back({ npos.x, npos.y }); - npos = { m_baseSize.x / 2.0f, m_baseSize.y / 2.0f, 0.0f, 1.0f }; - npos = model * npos; - m_vertices.push_back({ npos.x, npos.y }); - npos = { -(m_baseSize.x / 2.0f), m_baseSize.y / 2.0f, 0.0f, 1.0f }; - npos = model * npos; - m_vertices.push_back({ npos.x, npos.y }); - } - else - { - npos = { 0.0f, 0.0f, 0.0f, 1.0f }; - npos = model * npos; - m_vertices.push_back({ npos.x, npos.y }); - npos = { m_baseSize.x, 0.0f, 0.0f, 1.0f }; - npos = model * npos; - m_vertices.push_back({ npos.x, npos.y }); - npos = { m_baseSize.x, m_baseSize.y, 0.0f, 1.0f }; - npos = model * npos; - m_vertices.push_back({ npos.x, npos.y }); - npos = { 0.0f, m_baseSize.y, 0.0f, 1.0f }; - npos = model * npos; - m_vertices.push_back({ npos.x, npos.y }); - } - - m_applied = true; - return *this; - } - }; - - class Transform3D - { - private: - Vec3 m_rotation { 0.0f, 0.0f, 0.0f }; - Vec3 m_translation { 0.0f, 0.0f, 0.0f }; - Vec3 m_scale { 1.0f, 1.0f, 1.0f }; - - bool m_updateNormalMatrix { true }; - bool m_applied { true }; - glm::mat4 m_matrix; - glm::mat4 m_normalMatrix; - - public: - inline Transform3D(void) { m_matrix = glm::mat4(1.0f); m_normalMatrix = m_matrix; } - - inline Transform3D& loadIdentity(void) { m_matrix = glm::mat4(1.0f); m_applied = true; m_rotation = { 0.0f, 0.0f, 0.0f }; m_translation = { 0.0f, 0.0f, 0.0f }; m_scale = { 1.0f, 1.0f, 1.0f }; m_normalMatrix = m_matrix; m_updateNormalMatrix = false; m_applied = true; return *this; } - - inline Transform3D& rotate(Vec3 value) { m_applied = (value == Vec3(0.0f, 0.0f, 0.0f) && m_applied); m_updateNormalMatrix = !m_applied; m_rotation += value; return *this; } - inline Transform3D& translate(Vec3 value) { m_applied = (value == Vec3(0.0f, 0.0f, 0.0f) && m_applied); m_translation += value; return *this; } - inline Transform3D& scale(Vec3 value) { m_applied = (value == Vec3(0.0f, 0.0f, 0.0f) && m_applied); m_updateNormalMatrix = !m_applied; m_scale += value; return *this; } - - inline Vec3 getRotation(void) const { return m_rotation; } - inline Vec3 getTranslation(void) const { return m_translation; } - inline Vec3 getScale(void) const { return m_scale; } - inline bool isApplied(void) const { return m_applied; } - inline glm::mat4 getMatrix(void) const { return m_matrix; } - inline glm::mat4 getNormalMatrix(void) const { return m_normalMatrix; } - - inline Transform3D& apply(void) - { - if (m_applied) return *this; - - m_matrix = glm::translate(glm::mat4(1.0f), { m_translation.x, m_translation.y, m_translation.z }); - m_matrix = glm::scale(m_matrix, { m_scale.x, m_scale.y, m_scale.z }); - m_matrix = glm::rotate(m_matrix, DEG_TO_RAD(m_rotation.z), { 0.0f, 0.0f, 1.0f }); - m_matrix = glm::rotate(m_matrix, DEG_TO_RAD(m_rotation.y), { 0.0f, 1.0f, 0.0f }); - m_matrix = glm::rotate(m_matrix, DEG_TO_RAD(m_rotation.x), { 1.0f, 0.0f, 0.0f }); - - if (m_updateNormalMatrix) - { - m_normalMatrix = glm::transpose(glm::inverse(m_matrix)); - m_updateNormalMatrix = false; - } - - m_applied = true; - return *this; - } - }; - - struct tContextSettings - { - struct tGLProfile - { - inline static constexpr uint8_t Core = 0; - inline static constexpr uint8_t Compatibility = 1; - }; - - uint8_t depthBits { 24 }; - uint8_t stencilBits { 8 }; - uint8_t antiAliasLevel { 0 }; //TODO: Add "enums" - uint8_t GLMajorVersion = { 4 }; - uint8_t GLMinorVersion { 2 }; - uint8_t GLProfile { tGLProfile::Core }; - }; - -} - - #endif diff --git a/src/ogfx/DebugTools.cpp b/src/ogfx/DebugTools.cpp deleted file mode 100644 index b886c05..0000000 --- a/src/ogfx/DebugTools.cpp +++ /dev/null @@ -1,240 +0,0 @@ -#include "DebugTools.hpp" - -#include -#include -#include - -namespace ogfx -{ - void DebugInfoWidget::init(ogfx::oxgui::Widget& parent) - { - if (parent.isInvalid()) - { - invalidate(); - } - setPosition({ 0, 0 }); - setSize(parent.getContentSize()); - - connectSignals(); - connectSignal(DebugTools::OnProfileDataRecieved); - setTypeName("ogfx::DebugInfoWidget"); - validate(); - enable(); - parent.addWidget(*this); - } - - void DebugInfoWidget::renderContent(ogfx::RenderCore& gfx) - { - if (m_dataList == nullptr) return; - - Renderer2D::tTextInfo textInfo; - textInfo.characterHeight = 24; - textInfo.characterSpacing = 6; - textInfo.font = ogfx::ResourceManager::getDefaultBitmapFont(); - ogfx::Renderer2D::Text::characterHeight = textInfo.characterHeight; - ogfx::Renderer2D::Text::characterSpacing = textInfo.characterSpacing; - ogfx::Renderer2D::Text::font = textInfo.font; - - auto stateGradientPixels = ogfx::ResourceManager::getTexture(ogfx::ResourceManager::getStateGradientTexture()).getPixelData(); - - ostd::Vec2 pos = getPosition() + ostd::Vec2 { 10, 20 }; - - bool line = true; - - float max_avg = 0; - for (auto& data : m_dataList->data) - { - if (ostd::StringEditor(data.second.name).startsWith("Total Frame Time")) - continue; - float avg = data.second.getAvgTime(); - if (avg > max_avg) - max_avg = avg; - } - - for (auto& data : m_dataList->data) - { - if (!line) - gfx.drawQuad({ getx() + 1, pos.y }, { getw() - 2, 20 }, { 30, 30, 30, 255 }, false); - line = !line; - - float avg_val = data.second.getAvgTime(); - uint32_t mapped = std::round(ostd::Utils::map_value(avg_val, 0.0f, max_avg, 1.0f, 198.0f)) * 4; - - textInfo.characterSpacing = 6; - textInfo.font = ogfx::ResourceManager::getDefaultBitmapFont(); - ogfx::Renderer2D::Text::characterSpacing = textInfo.characterSpacing; - ogfx::Renderer2D::Text::font = textInfo.font; - textInfo.color = { stateGradientPixels[mapped], stateGradientPixels[mapped + 1], stateGradientPixels[mapped + 2] }; - if (ostd::StringEditor(data.second.name).startsWith("Total Frame Time")) - textInfo.color = { 200, 200, 200 }; - ostd::StringEditor str(data.second.name); - str.add(": "); - gfx.drawText(str.str(), pos, textInfo); - - - str.clr().addf(avg_val).add(" ms"); - textInfo.characterSpacing = -10; - textInfo.font = ogfx::ResourceManager::getDefaultBitmapFontMono(); - ogfx::Renderer2D::Text::characterSpacing = textInfo.characterSpacing; - ogfx::Renderer2D::Text::font = textInfo.font; - float w = ogfx::Renderer2D::Text::getStringBounds(str.str()).x; - gfx.drawText(str.str(), { getx() + getw() - w + 35, pos.y }, textInfo); - - pos += ostd::Vec2 { 0, 20 }; - } - - textInfo.characterHeight = 24; - textInfo.characterSpacing = 6; - textInfo.font = ogfx::ResourceManager::getDefaultBitmapFont(); - textInfo.color = { 30, 150, 200 }; - ogfx::Renderer2D::Text::characterHeight = textInfo.characterHeight; - ogfx::Renderer2D::Text::characterSpacing = textInfo.characterSpacing; - ogfx::Renderer2D::Text::font = textInfo.font; - - ostd::StringEditor str; - - gfx.drawQuad({ getx() + 1, pos.y }, { getw() - 2, 20 }, { 30, 30, 70, 200 }, false); - gfx.drawText("FPS: ", pos, textInfo); - str.addi(DebugTools::m_fps); - textInfo.characterSpacing = -5; - textInfo.font = ogfx::ResourceManager::getDefaultBitmapFontMono(); - textInfo.color = { 190, 0, 190 }; - ogfx::Renderer2D::Text::characterSpacing = textInfo.characterSpacing; - ogfx::Renderer2D::Text::font = textInfo.font; - float w = ogfx::Renderer2D::Text::getStringBounds(str.str()).x; - // std::cout << str << "\n"; - gfx.drawText(str.str(), { getx() + getw() - 10 - w, pos.y }, textInfo); - textInfo.color = { 30, 150, 200 }; - textInfo.font = ogfx::ResourceManager::getDefaultBitmapFont(); - textInfo.characterSpacing = 6; - str.clr(); - pos += ostd::Vec2 { 0, 20 }; - - gfx.drawText("UPS: ", pos, textInfo); - str.addi(DebugTools::m_ups); - textInfo.characterSpacing = -5; - textInfo.font = ogfx::ResourceManager::getDefaultBitmapFontMono(); - textInfo.color = { 190, 0, 190 }; - ogfx::Renderer2D::Text::characterSpacing = textInfo.characterSpacing; - ogfx::Renderer2D::Text::font = textInfo.font; - w = ogfx::Renderer2D::Text::getStringBounds(str.str()).x; - gfx.drawText(str.str(), { getx() + getw() - 10 - w, pos.y }, textInfo); - textInfo.color = { 30, 150, 200 }; - textInfo.font = ogfx::ResourceManager::getDefaultBitmapFont(); - textInfo.characterSpacing = 6; - str.clr(); - pos += ostd::Vec2 { 0, 20 }; - - gfx.drawQuad({ getx() + 1, pos.y }, { getw() - 2, 20 }, { 30, 30, 70, 200 }, false); - gfx.drawText("Uniform Updates: ", pos, textInfo); - str.addi(DebugTools::m_uniformUpdates); - textInfo.characterSpacing = -5; - textInfo.font = ogfx::ResourceManager::getDefaultBitmapFontMono(); - textInfo.color = { 190, 0, 190 }; - ogfx::Renderer2D::Text::characterSpacing = textInfo.characterSpacing; - ogfx::Renderer2D::Text::font = textInfo.font; - w = ogfx::Renderer2D::Text::getStringBounds(str.str()).x; - gfx.drawText(str.str(), { getx() + getw() - 10 - w, pos.y }, textInfo); - textInfo.color = { 30, 150, 200 }; - textInfo.font = ogfx::ResourceManager::getDefaultBitmapFont(); - textInfo.characterSpacing = 6; - str.clr(); - pos += ostd::Vec2 { 0, 20 }; - - gfx.drawText("Render Queue: ", pos, textInfo); - str.addi(DebugTools::m_renderCmdCount); - textInfo.characterSpacing = -5; - textInfo.font = ogfx::ResourceManager::getDefaultBitmapFontMono(); - textInfo.color = { 190, 0, 190 }; - ogfx::Renderer2D::Text::characterSpacing = textInfo.characterSpacing; - ogfx::Renderer2D::Text::font = textInfo.font; - w = ogfx::Renderer2D::Text::getStringBounds(str.str()).x; - gfx.drawText(str.str(), { getx() + getw() - 10 - w, pos.y }, textInfo); - textInfo.color = { 30, 150, 200 }; - textInfo.font = ogfx::ResourceManager::getDefaultBitmapFont(); - textInfo.characterSpacing = 6; - str.clr(); - pos += ostd::Vec2 { 0, 20 }; - - gfx.drawQuad({ getx() + 1, pos.y }, { getw() - 2, 20 }, { 30, 30, 70, 200 }, false); - gfx.drawText("Draw Calls: ", pos, textInfo); - str.addi(ogfx::Renderer2D::getRenderStats().drawCalls); - textInfo.characterSpacing = -5; - textInfo.font = ogfx::ResourceManager::getDefaultBitmapFontMono(); - textInfo.color = { 190, 0, 190 }; - ogfx::Renderer2D::Text::characterSpacing = textInfo.characterSpacing; - ogfx::Renderer2D::Text::font = textInfo.font; - w = ogfx::Renderer2D::Text::getStringBounds(str.str()).x; - gfx.drawText(str.str(), { getx() + getw() - 10 - w, pos.y }, textInfo); - textInfo.color = { 30, 150, 200 }; - textInfo.font = ogfx::ResourceManager::getDefaultBitmapFont(); - textInfo.characterSpacing = 6; - str.clr(); - pos += ostd::Vec2 { 0, 20 }; - - gfx.drawText("Quad Count: ", pos, textInfo); - str.addi(ogfx::Renderer2D::getRenderStats().quadCount); - textInfo.characterSpacing = -5; - textInfo.font = ogfx::ResourceManager::getDefaultBitmapFontMono(); - textInfo.color = { 190, 0, 190 }; - ogfx::Renderer2D::Text::characterSpacing = textInfo.characterSpacing; - ogfx::Renderer2D::Text::font = textInfo.font; - w = ogfx::Renderer2D::Text::getStringBounds(str.str()).x; - gfx.drawText(str.str(), { getx() + getw() - 10 - w, pos.y }, textInfo); - textInfo.color = { 30, 150, 200 }; - textInfo.font = ogfx::ResourceManager::getDefaultBitmapFont(); - textInfo.characterSpacing = 6; - str.clr(); - pos += ostd::Vec2 { 0, 20 }; - - gfx.drawQuad({ getx() + 1, pos.y }, { getw() - 2, 20 }, { 30, 30, 70, 200 }, false); - gfx.drawText("RenderBuffer Binds: ", pos, textInfo); - str.addi(ogfx::Renderer2D::getRenderStats().renderBufferBinds); - textInfo.characterSpacing = -5; - textInfo.font = ogfx::ResourceManager::getDefaultBitmapFontMono(); - textInfo.color = { 190, 0, 190 }; - ogfx::Renderer2D::Text::characterSpacing = textInfo.characterSpacing; - ogfx::Renderer2D::Text::font = textInfo.font; - w = ogfx::Renderer2D::Text::getStringBounds(str.str()).x; - gfx.drawText(str.str(), { getx() + getw() - 10 - w, pos.y }, textInfo); - textInfo.color = { 30, 150, 200 }; - textInfo.font = ogfx::ResourceManager::getDefaultBitmapFont(); - textInfo.characterSpacing = 6; - str.clr(); - pos += ostd::Vec2 { 0, 20 }; - - gfx.drawText("Shader Binds: ", pos, textInfo); - str.addi(ogfx::Renderer2D::getRenderStats().shaderBinds); - textInfo.characterSpacing = -5; - textInfo.font = ogfx::ResourceManager::getDefaultBitmapFontMono(); - textInfo.color = { 190, 0, 190 }; - ogfx::Renderer2D::Text::characterSpacing = textInfo.characterSpacing; - ogfx::Renderer2D::Text::font = textInfo.font; - w = ogfx::Renderer2D::Text::getStringBounds(str.str()).x; - gfx.drawText(str.str(), { getx() + getw() - 10 - w, pos.y }, textInfo); - textInfo.color = { 30, 150, 200 }; - textInfo.font = ogfx::ResourceManager::getDefaultBitmapFont(); - textInfo.characterSpacing = 6; - str.clr(); - pos += ostd::Vec2 { 0, 20 }; - } - - void DebugInfoWidget::onSignal(ostd::tSignal& signal) - { - if (signal.ID == DebugTools::OnProfileDataRecieved && m_dataList == nullptr) - { - m_dataList = (DebugTimesList*)(&signal.userData); - } - } - - - - void DebugTools::showDebugWindow(GraphicsApplication2D* parent_app, bool show) - { - if (parent_app == nullptr) return; - if (!m_debugWindowEnabled) return; - parent_app->m_debugToolsWindow.enable(show); - m_debugWindowTabPanel.selectTab((show ? 0 : 1)); - } - -} \ No newline at end of file diff --git a/src/ogfx/DebugTools.hpp b/src/ogfx/DebugTools.hpp deleted file mode 100644 index 5544d48..0000000 --- a/src/ogfx/DebugTools.hpp +++ /dev/null @@ -1,95 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include -#include - -namespace ogfx -{ - class DebugTimeEntry - { - public: - ostd::String name { "UNNAMED" }; - double totalTime { 0 }; - uint32_t sampleCount { 0 }; - - double avgTime { 0 }; - - inline double getAvgTime(void) - { - return avgTime; - } - - inline void computeAvgTime(void) - { - if (sampleCount <= 0) return; - avgTime = totalTime / sampleCount; - } - }; - - class DebugTimesList : public ostd::BaseObject - { - public: - std::unordered_map data; - - inline void updateEntry(uint32_t id, DebugTimeEntry entry = DebugTimeEntry()) { data[id] = entry; } - inline DebugTimeEntry& get(uint32_t id) { return data[id]; } - }; - - class DebugInfoWidget : public ogfx::oxgui::Widget - { - public: - inline DebugInfoWidget(void) { } - void init(ogfx::oxgui::Widget& parent); - - void renderContent(ogfx::RenderCore& gfx) override; - void onSignal(ostd::tSignal& signal) override; - - private: - DebugTimesList* m_dataList { nullptr }; - }; - - class GraphicsApplication2D; - class DebugTools - { - public: - static void showDebugWindow(GraphicsApplication2D* parent_app, bool show = true); - - inline static ostd::Timer m_profileTimer; - inline static ostd::Timer m_totalFrameTimer; - inline static DebugTimesList m_timesList; - - inline static uint32_t m_fps { 0 }; - inline static uint32_t m_ups { 0 }; - - inline static uint32_t m_uniformUpdates { 0 }; - inline static uint32_t m_renderCmdCount { 0 }; - - inline static bool m_debugWindowEnabled { false }; - inline static bool m_drawBasicFrameInfo { false }; - - inline static DebugInfoWidget m_debugInfoWidget; - inline static ogfx::oxgui::TabPanel m_debugWindowTabPanel; - inline static ogfx::oxgui::TabWidget m_debugWindowInfoTab; - inline static ogfx::oxgui::TabWidget m_debugWindowWatcherTab; - inline static ogfx::oxgui::TabWidget m_debugWindowTab3; - - inline static constexpr uint32_t FramerateCalculations = 0; - inline static constexpr uint32_t OnSecondsUpdate = 1; - inline static constexpr uint32_t EventHandling = 2; - inline static constexpr uint32_t OnSignalsRefresh = 23; - inline static constexpr uint32_t OnUpdate = 4; - inline static constexpr uint32_t OnRender = 5; - inline static constexpr uint32_t OnDisplay = 6; - inline static constexpr uint32_t OnFrameFinalize = 7; - inline static constexpr uint32_t OnWindowDisplay = 8; - inline static constexpr uint32_t TotalFrameTime = 128; - - inline static const uint32_t OnProfileDataRecieved = ostd::SignalHandler::newCustomSignal(2200); - - inline static void enableDebugWindow(bool enable = true) { m_debugWindowEnabled = enable; } - }; -} \ No newline at end of file diff --git a/src/ogfx/Errors.cpp b/src/ogfx/Errors.cpp deleted file mode 100755 index bfa3ef6..0000000 --- a/src/ogfx/Errors.cpp +++ /dev/null @@ -1,81 +0,0 @@ -#include "Errors.hpp" -#include -#include -#include -#include -#include -#include -#include - -namespace ogfx -{ - using namespace ostd; - - String ErrorHandler::mapError(int32_t err_code) - { - StringEditor se; - se.add(Utils::getHexStr(err_code, true, 4)).add(": "); - switch (err_code) - { - case OX_NO_ERROR: return ""; - - /** ox::Shader Errors **/ - case Shader::ERR_SHADER_COMPILE_FAILED: return se.add("A Shader failed to compile").str(); - case Shader::ERR_SHADER_SOURCE_READ_FILED: return se.add("Failed to read shader source code").str(); - case Shader::ERR_FAILED_TO_REGISTER_UNIFORM: return se.add("Failed to register uniform").str(); - case Shader::ERR_FAILED_TO_UPDATE_UNIFORM: return se.add("Failed to update uniform").str(); - - /** ox::VertexArray Errors **/ - case VertexArray::ERR_NO_EBO_SET: return se.add("No ElementBuffer set in VertexArray.").str(); - - /** ox::Texture Errors **/ - case Texture::ERR_IMAGE_LOAD_FAILED: return se.add("Failed to load Texture.").str(); - case Texture::ERR_NO_DATA_STORED: return se.add("Attempting to retrieve local Texture data of a non-stored instance.").str(); - - /** ox::BitmapFont Errors **/ - case BitmapFont::ERR_INVALID_TEXTURE: return se.add("Invalid BitmapFont Texture.").str(); - case BitmapFont::ERR_INVALID_TEXTURE_SIZE: return se.add("Invalid Size for ox::BitmapFont Texture: width and height must both be multiples of 16.").str(); - - /** Custom or undefined Errors **/ - default: - { - if (ErrorHandler::s_customMapErrorCallback != nullptr) - return (*ErrorHandler::s_customMapErrorCallback)(err_code); - } - } - return "Unknown Error."; - } - - void ErrorHandler::pushError(int32_t err_code) - { - if (err_code != OX_NO_ERROR) - s_errorStack.push_back(err_code); - } - - String ErrorHandler::getLastErrorString(void) - { - if (ErrorHandler::s_errorStack.size() == 0) return ""; - return ErrorHandler::mapError(ErrorHandler::s_errorStack[s_errorStack.size() - 1]); - } - - - - void ErrorHandler::__gl_clearErrors(void) - { - while(glGetError() != GL_NO_ERROR); - } - - bool ErrorHandler::__gl_printError(const char* func_call, const char* file_path, int32_t line_number) - { - bool res = false; - StringEditor se; - while (GLenum err_code = glGetError()) - { - se = "[OpenGL]: (err_code = "; - se.add(Utils::getHexStr(err_code, true, 4)).add(")"); - OX_ERROR("%s:\nFile: %s on Line %d\n\t%s;\n", se.c_str(), file_path, line_number, func_call); - res = true; - } - return res; - } -} diff --git a/src/ogfx/Errors.hpp b/src/ogfx/Errors.hpp deleted file mode 100755 index 8105885..0000000 --- a/src/ogfx/Errors.hpp +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef __ERRORS_HPP__ -#define __ERRORS_HPP__ - -#include -#include - -#ifdef __DEBUG__ - #define GLCall( x ) \ - ogfx::ErrorHandler::__gl_clearErrors(); \ - x; \ - if ( ogfx::ErrorHandler::__gl_printError( #x, __FILE__, __LINE__) ) __builtin_trap(); - #define GLCallRV( x ) [&]() { \ - ogfx::ErrorHandler::__gl_clearErrors(); \ - auto retVal = x; \ - if ( ogfx::ErrorHandler::__gl_printError( #x, __FILE__, __LINE__) ) __builtin_trap(); \ - return retVal; \ - }() -#else - #define GLCall( x ) x - #define GLCallRV( x ) x -#endif - -namespace ogfx -{ - using namespace ostd; //TODO: Remove - typedef String(*fpCustomMapErrorCallback)(int32_t); - - class ErrorHandler - { - public: - static String mapError(int32_t err_code); - static void pushError(int32_t err_code); - static String getLastErrorString(void); - inline static void setCustomMapErrorCallback(fpCustomMapErrorCallback callback) { s_customMapErrorCallback = callback; } - - static void __gl_clearErrors(void); - static bool __gl_printError(const char* func_call, const char* file_path, int32_t line_number); - - private: - inline static fpCustomMapErrorCallback s_customMapErrorCallback { nullptr }; - inline static std::vector s_errorStack; - }; -} - -#endif diff --git a/src/ogfx/GLBuffers.cpp b/src/ogfx/GLBuffers.cpp deleted file mode 100755 index 59a19d6..0000000 --- a/src/ogfx/GLBuffers.cpp +++ /dev/null @@ -1,167 +0,0 @@ -#include "GLBuffers.hpp" -#include "Errors.hpp" -//TODO: Implement Errors - -namespace ogfx -{ - using namespace ostd; - - VertexBuffer::~VertexBuffer(void) - { - if (isInvalid()) return; - uint32_t gl_id = getOpenGLID(); - GLCall(glDeleteBuffers(1, &gl_id)); - } - - VertexBuffer& VertexBuffer::create(const void* data, uint32_t byte_size, bool dynamic) - { - uint32_t gl_id; - GLCall(glGenBuffers(1, &gl_id)); - setID(gl_id); - bind(); - GLCall(glBufferData(GL_ARRAY_BUFFER, byte_size, data, (dynamic ? GL_DYNAMIC_DRAW : GL_STATIC_DRAW))); - unbind(); - setTypeName("ox::VertexBuffer"); - validate(); - return *this; - } - - void VertexBuffer::bind(void) const - { - GLCall(glBindBuffer(GL_ARRAY_BUFFER, getOpenGLID())); - } - - void VertexBuffer::unbind(void) const - { - GLCall(glBindBuffer(GL_ARRAY_BUFFER, 0)); - } - - - - ElementBuffer::~ElementBuffer(void) - { - if (isInvalid()) return; - uint32_t gl_id = getOpenGLID(); - GLCall(glDeleteBuffers(1, &gl_id)); - } - - ElementBuffer& ElementBuffer::create(const void* data, uint32_t elem_count) - { - m_elem_count = elem_count; - uint32_t gl_id; - GLCall(glGenBuffers(1, &gl_id)); - setID(gl_id); - bind(); - GLCall(glBufferData(GL_ELEMENT_ARRAY_BUFFER, m_elem_count * sizeof(uint32_t), data, GL_STATIC_DRAW)); - unbind(); - setTypeName("ox::ElementBuffer"); - validate(); - return *this; - } - - void ElementBuffer::bind(void) const - { - GLCall(glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, getOpenGLID())); - } - - void ElementBuffer::unbind(void) const - { - GLCall(glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0)); - } - - - - uint32_t tVertexBufferElem::gl_typeToSize(uint32_t type) - { - switch (type) - { - case GL_FLOAT: return sizeof(GLfloat); - case GL_UNSIGNED_INT: return sizeof(GLuint); - case GL_INT: return sizeof(GLint); - case GL_BYTE: return sizeof(GLbyte); - case GL_UNSIGNED_BYTE: return sizeof(GLubyte); - default: break; - } - OX_WARN("Unkwnown type in tVertexBufferElem"); - return 0; - } - - - - - VertexArray::VertexArray(bool init) - { - if (!init) return; - create(); - } - - VertexArray::~VertexArray(void) - { - if (isInvalid()) return; - uint32_t gl_id = getOpenGLID(); - GLCall(glDeleteVertexArrays(1, &gl_id)); - } - - VertexArray& VertexArray::create(void) - { - uint32_t gl_id; - GLCall(glGenVertexArrays(1, &gl_id)); - setID(gl_id); - setTypeName("ox::VertexArray"); - return *this; - } - - uint32_t VertexArray::addBuffer(VertexBuffer& vbo, const VertexBufferLayout& layout) - { - bind(); - vbo.bind(); - const auto& elements = layout.getElements(); - uint64_t offset = 0; - for (uint32_t i = 0; i < elements.size(); i++) - { - const auto& elem = elements[i]; - GLCall(glEnableVertexAttribArray(i)); - GLCall(glVertexAttribPointer(i, elem.count, elem.type, elem.normalized, layout.getStride(), (const void*)offset)); - offset += elem.count * tVertexBufferElem::gl_typeToSize(elem.type); - } - unbind(); - vbo.unbind(); - m_vertexBuffers.push_back(&vbo); - return m_vertexBuffers.size() - 1; - } - - void VertexArray::setElementBuffer(const ElementBuffer& ebo) - { - if (!ebo.isValid()) - { - OX_WARN("Invalid ElementBuffer object passed in VertexArray."); - return; - } - bind(); - ebo.bind(); - unbind(); - ebo.unbind(); - validate(); - } - - void VertexArray::bind(void) const - { - GLCall(glBindVertexArray(getOpenGLID())); - } - - void VertexArray::unbind(void) const - { - GLCall(glBindVertexArray(0)); - } - - VertexBuffer& VertexArray::getVerteBuffer(uint32_t internal_index) - { - if (internal_index >= m_vertexBuffers.size()) return (VertexBuffer&)BaseObject::InvalidRef(); - return *(m_vertexBuffers[internal_index]); - } - - uint32_t VertexArray::getElementCount(void) const - { - return m_elem_count; - } -} diff --git a/src/ogfx/GLBuffers.hpp b/src/ogfx/GLBuffers.hpp deleted file mode 100755 index 8abd6f3..0000000 --- a/src/ogfx/GLBuffers.hpp +++ /dev/null @@ -1,120 +0,0 @@ -#ifndef __GL_BUFFERS_HPP__ -#define __GL_BUFFERS_HPP__ - -#include -#include -#include -#include -#include - -namespace ogfx -{ - using namespace ostd; //TODO: Remove this from header - - class VertexBuffer : public BaseObject - { - public: - inline VertexBuffer(void) { invalidate(); } - inline VertexBuffer(const void* data, uint32_t byte_size, bool dynamic = false) { create(data, byte_size, dynamic); } - ~VertexBuffer(void); - VertexBuffer& create(const void* data, uint32_t byte_size, bool dynamic = false); - void bind(void) const; - void unbind(void) const; - inline uint32_t getOpenGLID(void) const { return static_cast(getID()); } - }; - - class ElementBuffer : public BaseObject - { - public: - inline ElementBuffer(void) { invalidate(); } - inline ElementBuffer(const uint32_t* data, uint32_t elem_count) { create(data, elem_count); } - ~ElementBuffer(void); - ElementBuffer& create(const void* data, uint32_t elem_count); - void bind(void) const; - void unbind(void) const; - inline uint32_t getElementCount(void) const { return m_elem_count; } - inline uint32_t getOpenGLID(void) const { return static_cast(getID()); } - - private: - uint32_t m_elem_count { 0 }; - }; - - struct tVertexBufferElem - { - uint32_t type; - uint32_t count; - int32_t normalized; - - static uint32_t gl_typeToSize(uint32_t type); - }; - - class VertexBufferLayout - { - public: - inline VertexBufferLayout(void) : m_stride(0) { } - template - inline void push(uint32_t count) - { - if constexpr(std::is_same_v) - { - m_elements.push_back({ GL_FLOAT, count, GL_FALSE }); - m_stride += count * tVertexBufferElem::gl_typeToSize(GL_FLOAT); - } - else if constexpr(std::is_same_v) - { - m_elements.push_back({ GL_UNSIGNED_INT, count, GL_FALSE }); - m_stride += count * tVertexBufferElem::gl_typeToSize(GL_UNSIGNED_INT); - } - else if constexpr(std::is_same_v) - { - m_elements.push_back({ GL_INT, count, GL_FALSE }); - m_stride += count * tVertexBufferElem::gl_typeToSize(GL_INT); - } - else if constexpr(std::is_same_v) - { - m_elements.push_back({ GL_UNSIGNED_BYTE, count, GL_TRUE }); - m_stride += count * tVertexBufferElem::gl_typeToSize(GL_UNSIGNED_BYTE); - } - else if constexpr(std::is_same_v) - { - m_elements.push_back({ GL_BYTE, count, GL_TRUE }); - m_stride += count * tVertexBufferElem::gl_typeToSize(GL_BYTE); - } - else - { - OX_WARN("Invalid template parameter in ox::VertexBufferLayout"); - return; - } - } - inline uint32_t getStride(void) const { return m_stride; } - inline const std::vector& getElements(void) const { return m_elements; } - - private: - std::vector m_elements; - uint32_t m_stride; - }; - - class VertexArray : public BaseObject - { - public: - VertexArray(bool init = true); - ~VertexArray(void); - VertexArray& create(void); - uint32_t addBuffer(VertexBuffer& vbo, const VertexBufferLayout& layout); - void setElementBuffer(const ElementBuffer& ebo); - void bind(void) const; - void unbind(void) const; - uint32_t getElementCount(void) const; - VertexBuffer& getVerteBuffer(uint32_t internal_index = 0); - inline uint32_t getOpenGLID(void) const { return static_cast(getID()); } - - private: - uint32_t m_elem_count; - std::vector m_vertexBuffers; - - public: - inline static constexpr int32_t ERR_NO_EBO_SET = OX_GLBUFFERS_ERR_MASK + 0x0001; - }; -} - -#endif diff --git a/src/ogfx/GraphicsApplication.cpp b/src/ogfx/GraphicsApplication.cpp deleted file mode 100644 index 0087801..0000000 --- a/src/ogfx/GraphicsApplication.cpp +++ /dev/null @@ -1,695 +0,0 @@ -#include "GraphicsApplication.hpp" -#include "Errors.hpp" -#include "Renderer2D.hpp" -#include "Signals.hpp" -#include "RenderCommands.hpp" -#include "RenderCore.hpp" -#include "Utils.hpp" -#include "RTData.hpp" -#include "Widgets.hpp" - -namespace ogfx -{ - using namespace ostd; - - GraphicsApplication2D& GraphicsApplication2D::create(int32_t windowWidth, int32_t windowHeight, const ostd::String& windowTitle, tContextSettings contextSettings) - { - /** Window Code **/ - m_window.create({ static_cast(windowWidth), static_cast(windowHeight) }, windowTitle, contextSettings); - if (!m_window.isValid()) - { - ErrorHandler::pushError(GraphicsApplication2D::ERR_WINDOW_CREATE_FAIL); - String err_str = ErrorHandler::getLastErrorString(); - OX_FATAL("%s", err_str.c_str()); - return *this; - } - - m_window.printOpenGLInfo(); - // m_window.setWindowIcon(windowIconPath); - - /** Subsystem initialization **/ - Renderer2D::init(); - SignalHandler::init(); - ResourceManager::init(); - Renderer2D::Text::init(); - // Input::init(m_window.getGLFWWindowPtr()); - RenderCommandPool::init(); - RenderCore::initRenderQUeue(); - oxgui::WidgetManager::init(); - /******************************/ - - m_lastFrameTime = Timer::getEpoch() / 1000.0; - - enableVSync(false); - - connectSignal(tBuiltinSignals::OnGuiEvent); - - - if (ogfx::DebugTools::m_debugWindowEnabled) - { - DebugTools::m_timesList.updateEntry(DebugTools::FramerateCalculations); - DebugTools::m_timesList.get(DebugTools::FramerateCalculations).name = "Framerate Calculations"; - - DebugTools::m_timesList.updateEntry(DebugTools::OnSecondsUpdate); - DebugTools::m_timesList.get(DebugTools::OnSecondsUpdate).name = "Seconds Update"; - - DebugTools::m_timesList.updateEntry(DebugTools::EventHandling); - DebugTools::m_timesList.get(DebugTools::EventHandling).name = "Event Handling"; - - DebugTools::m_timesList.updateEntry(DebugTools::OnUpdate); - DebugTools::m_timesList.get(DebugTools::OnUpdate).name = "Update"; - - DebugTools::m_timesList.updateEntry(DebugTools::OnRender); - DebugTools::m_timesList.get(DebugTools::OnRender).name = "Render"; - - DebugTools::m_timesList.updateEntry(DebugTools::OnDisplay); - DebugTools::m_timesList.get(DebugTools::OnDisplay).name = "Render Queue Execution"; - - DebugTools::m_timesList.updateEntry(DebugTools::OnFrameFinalize); - DebugTools::m_timesList.get(DebugTools::OnFrameFinalize).name = "Frame Finalize"; - - DebugTools::m_timesList.updateEntry(DebugTools::OnSignalsRefresh); - DebugTools::m_timesList.get(DebugTools::OnSignalsRefresh).name = "Signals Refresh"; - - DebugTools::m_timesList.updateEntry(DebugTools::OnWindowDisplay); - DebugTools::m_timesList.get(DebugTools::OnWindowDisplay).name = "Flip Buffers"; - - DebugTools::m_timesList.updateEntry(DebugTools::TotalFrameTime); - DebugTools::m_timesList.get(DebugTools::TotalFrameTime).name = "Total Frame Time"; - - m_debugToolsWindow.create({ 5, 5 }, { 600, 410 }); - m_debugToolsWindow.enable(); - m_debugToolsWindow.setTitle("Debug Tools"); - // m_debugToolsWindow.setBounds(5, 5, 500, 385); - oxgui::WidgetTheme theme = oxgui::WidgetManager::getGlobalTheme(); - oxgui::WidgetManager::addWidget(m_debugToolsWindow); - theme.subWindow.titleBarColor_focused = { 85, 0, 85 }; - theme.subWindow.backgroundColor = { 0, 0, 0, 235 }; - theme.subWindow.borderColor_focused = { 85, 0, 85 }; - m_debugToolsWindow.setTheme(theme); - m_debugToolsWindow.enableGlobalThemeOverride(true); - theme.tabPanel.backgroundColor = { 10, 10, 10 }; - theme.tabPanel.tabBackground_focused = { 10, 10, 10 }; - // theme.tabPanel.tabBarBackground = { 85, 0, 85 }; - DebugTools::m_debugWindowTabPanel.setTheme(theme); - DebugTools::m_debugWindowTabPanel.enableGlobalThemeOverride(true); - - DebugTools::m_debugWindowTabPanel.create(m_debugToolsWindow); - DebugTools::m_debugWindowTabPanel.addTab(DebugTools::m_debugWindowInfoTab); - DebugTools::m_debugWindowTabPanel.addTab(DebugTools::m_debugWindowWatcherTab); - DebugTools::m_debugWindowTabPanel.addTab(DebugTools::m_debugWindowTab3); - DebugTools::m_debugWindowInfoTab.setText("Debug Info"); - DebugTools::m_debugWindowWatcherTab.setText("Watcher"); - DebugTools::m_debugWindowTab3.setText("Tab3"); - DebugTools::m_debugWindowTabPanel.selectTab(0); - - DebugTools::m_debugInfoWidget.init(DebugTools::m_debugWindowInfoTab); - } - - setTypeName("ogfx::GraphicsApplication2D"); - validate(); - onSetup(); - m_window.initialize(); - return *this; - } - - void GraphicsApplication2D::destroy(void) - { - RenderCommandPool::destroy(); - Renderer2D::shutdown(); - } - - void GraphicsApplication2D::nextFrame(void) - { - if (!isRunning()) return; - - const bool DEBUG = ogfx::DebugTools::m_debugWindowEnabled; - - if (DEBUG) - { - DebugTools::m_totalFrameTimer.start(false, "", ostd::eTimeUnits::Milliseconds); - DebugTools::m_profileTimer.start(false, "", ostd::eTimeUnits::Milliseconds); - } - double currTime = Timer::getEpoch() / 1000.0; - m_rtfps++; - RTData::DeltaTime = (float)(currTime - m_lastFrameTime); - m_lastFrameTime = currTime; - double timeDiff = currTime - m_prevTime; - if (DEBUG) - { - DebugTools::m_timesList.get(DebugTools::FramerateCalculations).totalTime += DebugTools::m_profileTimer.end(false); - DebugTools::m_timesList.get(DebugTools::FramerateCalculations).sampleCount++; - DebugTools::m_profileTimer.start(false, "", ostd::eTimeUnits::Milliseconds); - } - if (timeDiff >= 1.0f) - { - onSecondsUpdate(); - // SoundHandler::update(); - m_prevTime = currTime; - if (DEBUG) - { - DebugTools::m_fps = m_rtfps; - DebugTools::m_ups = m_rtups; - for (auto& data : DebugTools::m_timesList.data) - { - data.second.computeAvgTime(); - data.second.sampleCount = 1; - data.second.totalTime = data.second.getAvgTime(); - } - } - m_rtfps = 0; - m_rtups = 0; - } - // LightingManager::update(); - onFrameStart(); - if (DEBUG) - { - DebugTools::m_timesList.get(DebugTools::OnSecondsUpdate).totalTime += DebugTools::m_profileTimer.end(false); - DebugTools::m_timesList.get(DebugTools::OnSecondsUpdate).sampleCount++; - DebugTools::m_profileTimer.start(false, "", ostd::eTimeUnits::Milliseconds); - } - m_window.handleEvents(); - if (DEBUG) - { - DebugTools::m_timesList.get(DebugTools::EventHandling).totalTime += DebugTools::m_profileTimer.end(false); - DebugTools::m_timesList.get(DebugTools::EventHandling).sampleCount++; - DebugTools::m_profileTimer.start(false, "", ostd::eTimeUnits::Milliseconds); - } - while (m_upsAccumulator > m_upsStep) - { - onUpdate(); - m_upsAccumulator -= m_upsStep; - m_rtups++; - if (DEBUG) - { - SignalHandler::emitSignal(DebugTools::OnProfileDataRecieved, tSignalPriority::RealTime, DebugTools::m_timesList); - ogfx::DebugTools::m_drawBasicFrameInfo = ogfx::DebugTools::m_debugWindowTabPanel.getSelectedTab() != 0; - } - } - m_upsAccumulator += m_upsClock.restart(); - if (DEBUG) - { - DebugTools::m_timesList.get(DebugTools::OnUpdate).totalTime += DebugTools::m_profileTimer.end(false); - DebugTools::m_timesList.get(DebugTools::OnUpdate).sampleCount++; - DebugTools::m_profileTimer.start(false, "", ostd::eTimeUnits::Milliseconds); - } - onRender(); - onGuiRender(); - Renderer2D::resetStats(); - if (DEBUG) - { - DebugTools::m_timesList.get(DebugTools::OnRender).totalTime += DebugTools::m_profileTimer.end(false); - DebugTools::m_timesList.get(DebugTools::OnRender).sampleCount++; - DebugTools::m_profileTimer.start(false, "", ostd::eTimeUnits::Milliseconds); - } - RenderCore::display(); - if (DEBUG) - { - DebugTools::m_renderCmdCount = RenderCore::getRenderCmdCount(); - } - RenderCore::resetRenderCmdCount(); - Renderer2D::setDefaultRenderTarget(); - if (DEBUG) - { - DebugTools::m_timesList.get(DebugTools::OnDisplay).totalTime += DebugTools::m_profileTimer.end(false); - DebugTools::m_timesList.get(DebugTools::OnDisplay).sampleCount++; - DebugTools::m_profileTimer.start(false, "", ostd::eTimeUnits::Milliseconds); - } - SignalHandler::refresh(); - if (DEBUG) - { - DebugTools::m_timesList.get(DebugTools::OnSignalsRefresh).totalTime += DebugTools::m_profileTimer.end(false); - DebugTools::m_timesList.get(DebugTools::OnSignalsRefresh).sampleCount++; - DebugTools::m_profileTimer.start(false, "", ostd::eTimeUnits::Milliseconds); - } - m_window.renderFrame(); - if (DEBUG) - { - DebugTools::m_timesList.get(DebugTools::OnWindowDisplay).totalTime += DebugTools::m_profileTimer.end(false); - DebugTools::m_timesList.get(DebugTools::OnWindowDisplay).sampleCount++; - DebugTools::m_profileTimer.start(false, "", ostd::eTimeUnits::Milliseconds); - } - onFrameEnd(); - RenderCommandPool::newFrame(); - if (DEBUG) - { - DebugTools::m_uniformUpdates = Shader::getUniformUpdateCount(); - } - Shader::resetUniformUpdateCount(); - if (DEBUG) - { - DebugTools::m_timesList.get(DebugTools::OnFrameFinalize).totalTime += DebugTools::m_profileTimer.end(false); - DebugTools::m_timesList.get(DebugTools::OnFrameFinalize).sampleCount++; - } - if (!isRunning()) - { - destroy(); - OX_DEBUG("Destroying SFML Window"); - } - if (DEBUG) - { - DebugTools::m_timesList.get(DebugTools::TotalFrameTime).totalTime += DebugTools::m_totalFrameTimer.end(false); - DebugTools::m_timesList.get(DebugTools::TotalFrameTime).sampleCount++; - for (auto& data : DebugTools::m_timesList.data) - { - data.second.computeAvgTime(); - } - } - } - - void GraphicsApplication2D::handleSignal(tSignal& signal) - { - if (signal.ID == tBuiltinSignals::OnGuiEvent) - { - Event& evt = (Event&)signal.userData; - sf::Event& event = evt.sf(); - if (event.type == sf::Event::Closed) - { - m_window.close(); - onClose(); - } - else if (event.type == sf::Event::KeyPressed) - { - if (event.key.code == sf::Keyboard::Escape) - { - m_window.close(); - onClose(); - } - onKeyPressed(evt); - } - else if (event.type == sf::Event::KeyReleased) - { - // if (event.key.code == sf::Keyboard::F9) - // m_showDebugInfo = !m_showDebugInfo; - onKeyReleased(evt); - } - else if (event.type == sf::Event::Resized) - { - glViewport(0, 0, event.size.width, event.size.height); - m_window.initialize(); - } - else if (event.type == sf::Event::MouseMoved) - { - onMousePressed(evt); - } - else if (event.type == sf::Event::MouseButtonPressed) - { - onMouseReleased(evt); - } - else if (event.type == sf::Event::MouseButtonReleased) - { - onMouseMoved(evt); - } - } - - onSignal(signal); - } - - void GraphicsApplication2D::drawDebugInfo(RenderCore& gfx, Color col) - { - if (!ogfx::DebugTools::m_debugWindowEnabled || !ogfx::DebugTools::m_drawBasicFrameInfo) return; - gfx.drawText(StringEditor("FPS: ").addi(ogfx::DebugTools::m_fps).str(), { 5, 5 }, 30.0f, col); - gfx.drawText(StringEditor("FrameTime: ").addf(DebugTools::m_timesList.get(DebugTools::TotalFrameTime).getAvgTime()).str(), { 5, 35 }, 30.0f, col); - } - - // void GraphicsApplication2D::drawDebugInfo(RenderCore& gfx, Color col) - // { - // if (!m_showDebugInfo) return; - // float sp = gfx.getTextSpacing(); - // ResourceID font = gfx.getFont(); - // Renderer2D::Text::font = ResourceManager::getDefaultBitmapFontMono(); - // gfx.setTextSpacing(-15.0f); - // gfx.setFont(ResourceManager::getDefaultBitmapFontMono()); - // float fontSize = 24; - // float fontSpacing = -15; - - // float strw = 0; - // float maxw = 0; - // std::vector debugStrings; - // debugStrings.reserve(100); - // StringEditor str; - - // str = "DrawCalls: "; - // str.addi(Renderer2D::getRenderStats().drawCalls); - // strw = Renderer2D::Text::getStringBounds(str.str(), { 0, 0 }, fontSize, fontSpacing).x; - // debugStrings.push_back(str.str()); - // if (strw > maxw) maxw = strw; - - // str = "Quads: "; - // str.addi(Renderer2D::getRenderStats().quadCount); - // strw = Renderer2D::Text::getStringBounds(str.str(), { 0, 0 }, fontSize, fontSpacing).x; - // debugStrings.push_back(str.str()); - // if (strw > maxw) maxw = strw; - - // str = "FPS: "; - // str.addi(getFps()); - // strw = Renderer2D::Text::getStringBounds(str.str(), { 0, 0 }, fontSize, fontSpacing).x; - // debugStrings.push_back(str.str()); - // if (strw > maxw) maxw = strw; - - // str = "UPS: "; - // str.addi(m_ups); - // strw = Renderer2D::Text::getStringBounds(str.str(), { 0, 0 }, fontSize, fontSpacing).x; - // debugStrings.push_back(str.str()); - // if (strw > maxw) maxw = strw; - - // str = "RenderTarget Binds: "; - // str.addi(Renderer2D::getRenderStats().renderBufferBinds); - // strw = Renderer2D::Text::getStringBounds(str.str(), { 0, 0 }, fontSize, fontSpacing).x; - // debugStrings.push_back(str.str()); - // if (strw > maxw) maxw = strw; - - // str = "Shader Binds: "; - // str.addi(Renderer2D::getRenderStats().shaderBinds); - // strw = Renderer2D::Text::getStringBounds(str.str(), { 0, 0 }, fontSize, fontSpacing).x; - // debugStrings.push_back(str.str()); - // if (strw > maxw) maxw = strw; - - // str = "Uniform Updates: "; - // str.addi(m_uniformUpdates); - // strw = Renderer2D::Text::getStringBounds(str.str(), { 0, 0 }, fontSize, fontSpacing).x; - // debugStrings.push_back(str.str()); - // if (strw > maxw) maxw = strw; - - // str = "Render Queue: "; - // str.addi(m_renderCmdCount); - // strw = Renderer2D::Text::getStringBounds(str.str(), { 0, 0 }, fontSize, fontSpacing).x; - // debugStrings.push_back(str.str()); - // if (strw > maxw) maxw = strw; - - // Renderer2D::Text::font = font; - - // gfx.drawQuad({ 0, 0 }, { (maxw * 2) + 40, (debugStrings.size() * fontSize * 2) + 15 }, { 0, 0, 0, 223 }); - - // float offsety = 20; - // int32_t i = 0; - // for (auto& str : debugStrings) - // gfx.drawText(str, { 5.0f, 10.0f + (i++ * offsety) }, fontSize, col); - - // gfx.setTextSpacing(sp); - // gfx.setFont(font); - // } - - - - - - - - - GraphicsApplication& GraphicsApplication::create(int32_t windowWidth, int32_t windowHeight, const ostd::String& windowTitle, tContextSettings contextSettings) - { - /** Window Code **/ - m_window.create({ static_cast(windowWidth), static_cast(windowHeight) }, windowTitle, contextSettings); - if (!m_window.isValid()) - { - ErrorHandler::pushError(GraphicsApplication::ERR_WINDOW_CREATE_FAIL); - String err_str = ErrorHandler::getLastErrorString(); - OX_FATAL("%s", err_str.c_str()); - return *this; - } - - m_window.printOpenGLInfo(); - // m_window.setWindowIcon(windowIconPath); - - /** Subsystem initialization **/ - Renderer2D::init(); - SignalHandler::init(); - ResourceManager::init(); - Renderer2D::Text::init(); - RenderCommandPool::init(); - RenderCore::initRenderQUeue(); - oxgui::WidgetManager::init(); - /******************************/ - - m_lastFrameTime = Timer::getEpoch() / 1000.0; - - enableVSync(false); - - connectSignal(tBuiltinSignals::OnGuiEvent); - - - if (ogfx::DebugTools::m_debugWindowEnabled) - { - DebugTools::m_timesList.updateEntry(DebugTools::FramerateCalculations); - DebugTools::m_timesList.get(DebugTools::FramerateCalculations).name = "Framerate Calculations"; - - DebugTools::m_timesList.updateEntry(DebugTools::OnSecondsUpdate); - DebugTools::m_timesList.get(DebugTools::OnSecondsUpdate).name = "Seconds Update"; - - DebugTools::m_timesList.updateEntry(DebugTools::EventHandling); - DebugTools::m_timesList.get(DebugTools::EventHandling).name = "Event Handling"; - - DebugTools::m_timesList.updateEntry(DebugTools::OnUpdate); - DebugTools::m_timesList.get(DebugTools::OnUpdate).name = "Update"; - - DebugTools::m_timesList.updateEntry(DebugTools::OnRender); - DebugTools::m_timesList.get(DebugTools::OnRender).name = "Render"; - - DebugTools::m_timesList.updateEntry(DebugTools::OnDisplay); - DebugTools::m_timesList.get(DebugTools::OnDisplay).name = "Render Queue Execution"; - - DebugTools::m_timesList.updateEntry(DebugTools::OnFrameFinalize); - DebugTools::m_timesList.get(DebugTools::OnFrameFinalize).name = "Frame Finalize"; - - DebugTools::m_timesList.updateEntry(DebugTools::OnSignalsRefresh); - DebugTools::m_timesList.get(DebugTools::OnSignalsRefresh).name = "Signals Refresh"; - - DebugTools::m_timesList.updateEntry(DebugTools::OnWindowDisplay); - DebugTools::m_timesList.get(DebugTools::OnWindowDisplay).name = "Flip Buffers"; - - DebugTools::m_timesList.updateEntry(DebugTools::TotalFrameTime); - DebugTools::m_timesList.get(DebugTools::TotalFrameTime).name = "Total Frame Time"; - - m_debugToolsWindow.create({ 5, 5 }, { 600, 410 }); - m_debugToolsWindow.enable(); - m_debugToolsWindow.setTitle("Debug Tools"); - // m_debugToolsWindow.setBounds(5, 5, 500, 385); - oxgui::WidgetTheme theme = oxgui::WidgetManager::getGlobalTheme(); - oxgui::WidgetManager::addWidget(m_debugToolsWindow); - theme.subWindow.titleBarColor_focused = { 85, 0, 85 }; - theme.subWindow.backgroundColor = { 0, 0, 0, 235 }; - theme.subWindow.borderColor_focused = { 85, 0, 85 }; - m_debugToolsWindow.setTheme(theme); - m_debugToolsWindow.enableGlobalThemeOverride(true); - theme.tabPanel.backgroundColor = { 10, 10, 10 }; - theme.tabPanel.tabBackground_focused = { 10, 10, 10 }; - // theme.tabPanel.tabBarBackground = { 85, 0, 85 }; - DebugTools::m_debugWindowTabPanel.setTheme(theme); - DebugTools::m_debugWindowTabPanel.enableGlobalThemeOverride(true); - - DebugTools::m_debugWindowTabPanel.create(m_debugToolsWindow); - DebugTools::m_debugWindowTabPanel.addTab(DebugTools::m_debugWindowInfoTab); - DebugTools::m_debugWindowTabPanel.addTab(DebugTools::m_debugWindowWatcherTab); - DebugTools::m_debugWindowTabPanel.addTab(DebugTools::m_debugWindowTab3); - DebugTools::m_debugWindowInfoTab.setText("Debug Info"); - DebugTools::m_debugWindowWatcherTab.setText("Watcher"); - DebugTools::m_debugWindowTab3.setText("Tab3"); - DebugTools::m_debugWindowTabPanel.selectTab(0); - - DebugTools::m_debugInfoWidget.init(DebugTools::m_debugWindowInfoTab); - } - - setTypeName("ogfx::GraphicsApplication"); - validate(); - m_window.initialize(); - onSetup(); - return *this; - } - - void GraphicsApplication::destroy(void) - { - RenderCommandPool::destroy(); - Renderer2D::shutdown(); - } - - void GraphicsApplication::nextFrame(void) - { - if (!isRunning()) return; - - const bool DEBUG = ogfx::DebugTools::m_debugWindowEnabled; - - if (DEBUG) - { - DebugTools::m_totalFrameTimer.start(false, "", ostd::eTimeUnits::Milliseconds); - DebugTools::m_profileTimer.start(false, "", ostd::eTimeUnits::Milliseconds); - } - double currTime = Timer::getEpoch() / 1000.0; - m_rtfps++; - RTData::DeltaTime = (float)(currTime - m_lastFrameTime); - m_lastFrameTime = currTime; - double timeDiff = currTime - m_prevTime; - if (DEBUG) - { - DebugTools::m_timesList.get(DebugTools::FramerateCalculations).totalTime += DebugTools::m_profileTimer.end(false); - DebugTools::m_timesList.get(DebugTools::FramerateCalculations).sampleCount++; - DebugTools::m_profileTimer.start(false, "", ostd::eTimeUnits::Milliseconds); - } - if (timeDiff >= 1.0f) - { - onSecondsUpdate(); - // SoundHandler::update(); - m_prevTime = currTime; - if (DEBUG) - { - DebugTools::m_fps = m_rtfps; - DebugTools::m_ups = m_rtups; - for (auto& data : DebugTools::m_timesList.data) - { - data.second.computeAvgTime(); - data.second.sampleCount = 1; - data.second.totalTime = data.second.getAvgTime(); - } - } - m_rtfps = 0; - m_rtups = 0; - } - onFrameStart(); - if (DEBUG) - { - DebugTools::m_timesList.get(DebugTools::OnSecondsUpdate).totalTime += DebugTools::m_profileTimer.end(false); - DebugTools::m_timesList.get(DebugTools::OnSecondsUpdate).sampleCount++; - DebugTools::m_profileTimer.start(false, "", ostd::eTimeUnits::Milliseconds); - } - m_window.handleEvents(); - if (DEBUG) - { - DebugTools::m_timesList.get(DebugTools::EventHandling).totalTime += DebugTools::m_profileTimer.end(false); - DebugTools::m_timesList.get(DebugTools::EventHandling).sampleCount++; - DebugTools::m_profileTimer.start(false, "", ostd::eTimeUnits::Milliseconds); - } - while (m_upsAccumulator > m_upsStep) - { - onUpdate(); - m_upsAccumulator -= m_upsStep; - m_rtups++; - if (DEBUG) - { - SignalHandler::emitSignal(DebugTools::OnProfileDataRecieved, tSignalPriority::RealTime, DebugTools::m_timesList); - ogfx::DebugTools::m_drawBasicFrameInfo = ogfx::DebugTools::m_debugWindowTabPanel.getSelectedTab() != 0; - } - } - m_upsAccumulator += m_upsClock.restart(); - if (DEBUG) - { - DebugTools::m_timesList.get(DebugTools::OnUpdate).totalTime += DebugTools::m_profileTimer.end(false); - DebugTools::m_timesList.get(DebugTools::OnUpdate).sampleCount++; - DebugTools::m_profileTimer.start(false, "", ostd::eTimeUnits::Milliseconds); - } - onRender(); - onGuiRender(); - Renderer2D::resetStats(); - if (DEBUG) - { - DebugTools::m_timesList.get(DebugTools::OnRender).totalTime += DebugTools::m_profileTimer.end(false); - DebugTools::m_timesList.get(DebugTools::OnRender).sampleCount++; - DebugTools::m_profileTimer.start(false, "", ostd::eTimeUnits::Milliseconds); - } - RenderCore::display(); - if (DEBUG) - { - DebugTools::m_renderCmdCount = RenderCore::getRenderCmdCount(); - } - RenderCore::resetRenderCmdCount(); - Renderer2D::setDefaultRenderTarget(); - if (DEBUG) - { - DebugTools::m_timesList.get(DebugTools::OnDisplay).totalTime += DebugTools::m_profileTimer.end(false); - DebugTools::m_timesList.get(DebugTools::OnDisplay).sampleCount++; - DebugTools::m_profileTimer.start(false, "", ostd::eTimeUnits::Milliseconds); - } - SignalHandler::refresh(); - if (DEBUG) - { - DebugTools::m_timesList.get(DebugTools::OnSignalsRefresh).totalTime += DebugTools::m_profileTimer.end(false); - DebugTools::m_timesList.get(DebugTools::OnSignalsRefresh).sampleCount++; - DebugTools::m_profileTimer.start(false, "", ostd::eTimeUnits::Milliseconds); - } - m_window.renderFrame(); - if (DEBUG) - { - DebugTools::m_timesList.get(DebugTools::OnWindowDisplay).totalTime += DebugTools::m_profileTimer.end(false); - DebugTools::m_timesList.get(DebugTools::OnWindowDisplay).sampleCount++; - DebugTools::m_profileTimer.start(false, "", ostd::eTimeUnits::Milliseconds); - } - onFrameEnd(); - RenderCommandPool::newFrame(); - if (DEBUG) - { - DebugTools::m_uniformUpdates = Shader::getUniformUpdateCount(); - } - Shader::resetUniformUpdateCount(); - if (DEBUG) - { - DebugTools::m_timesList.get(DebugTools::OnFrameFinalize).totalTime += DebugTools::m_profileTimer.end(false); - DebugTools::m_timesList.get(DebugTools::OnFrameFinalize).sampleCount++; - } - if (!isRunning()) - { - destroy(); - OX_DEBUG("Destroying SFML Window"); - } - if (DEBUG) - { - DebugTools::m_timesList.get(DebugTools::TotalFrameTime).totalTime += DebugTools::m_totalFrameTimer.end(false); - DebugTools::m_timesList.get(DebugTools::TotalFrameTime).sampleCount++; - for (auto& data : DebugTools::m_timesList.data) - { - data.second.computeAvgTime(); - } - } - } - - void GraphicsApplication::handleSignal(tSignal& signal) - { - if (signal.ID == tBuiltinSignals::OnGuiEvent) - { - Event& evt = (Event&)signal.userData; - sf::Event& event = evt.sf(); - if (event.type == sf::Event::Closed) - { - m_window.close(); - onClose(); - } - else if (event.type == sf::Event::KeyPressed) - { - if (event.key.code == sf::Keyboard::Escape) - { - m_window.close(); - onClose(); - } - onKeyPressed(evt); - } - else if (event.type == sf::Event::KeyReleased) - { - onKeyReleased(evt); - } - else if (event.type == sf::Event::Resized) - { - glViewport(0, 0, event.size.width, event.size.height); - m_window.initialize(); - } - else if (event.type == sf::Event::MouseMoved) - { - onMousePressed(evt); - } - else if (event.type == sf::Event::MouseButtonPressed) - { - onMouseReleased(evt); - } - else if (event.type == sf::Event::MouseButtonReleased) - { - onMouseMoved(evt); - } - } - - onSignal(signal); - } - - void GraphicsApplication::drawDebugInfo(RenderCore& gfx, Color col) - { - if (!ogfx::DebugTools::m_debugWindowEnabled || !ogfx::DebugTools::m_drawBasicFrameInfo) return; - gfx.drawText(StringEditor("FPS: ").addi(ogfx::DebugTools::m_fps).str(), { 5, 5 }, 30.0f, col); - gfx.drawText(StringEditor("FrameTime: ").addf(DebugTools::m_timesList.get(DebugTools::TotalFrameTime).getAvgTime()).str(), { 5, 35 }, 30.0f, col); - } -} \ No newline at end of file diff --git a/src/ogfx/GraphicsApplication.hpp b/src/ogfx/GraphicsApplication.hpp deleted file mode 100644 index a16573b..0000000 --- a/src/ogfx/GraphicsApplication.hpp +++ /dev/null @@ -1,137 +0,0 @@ -#pragma once - -#include -#include -#include -#include - -namespace ogfx -{ - class RenderCore; - class GraphicsApplication2D : public ostd::BaseObject - { - public: - inline GraphicsApplication2D(void) { invalidate(); } - inline GraphicsApplication2D(int32_t windowWidth, int32_t windowHeight, const ostd::String& windowTitle, tContextSettings contextSettings = tContextSettings()) { create(windowWidth, windowHeight, windowTitle, contextSettings); } - GraphicsApplication2D& create(int32_t windowWidth, int32_t windowHeight, const ostd::String& windowTitle, tContextSettings contextSettings = tContextSettings()); - - void destroy(void); - void nextFrame(void); - - inline bool isRunning(void) { return isValid() && m_window.isRunning(); } - // inline uint32_t& getFps(void) { return m_fps; } - inline void enableVSync(bool enabled = true) { m_window.sf().setVerticalSyncEnabled(enabled); } - inline IPoint getWindowSize(void) { return { m_window.getSize().x, m_window.getSize().y }; } - inline int32_t getWindowWidth(void) { return m_window.getSize().x; } - inline int32_t getWindowHeight(void) { return m_window.getSize().y; } - // inline void enableDebugInfo(bool v = true) { m_showDebugInfo = v; } - // inline bool isDebugInfoEnabled(void) { return m_showDebugInfo; } - - // void drawDebugInfo(RenderCore& gfx, Color col = { 150, 180, 130 }); - void drawDebugInfo(RenderCore& gfx, Color col = { 150, 180, 130 }); - void handleSignal(tSignal& signal) override; - - virtual void onFrameStart(void) { } - virtual void onFrameEnd(void) { } - virtual void onSetup(void) { } - virtual void onRender(void) { } - virtual void onUpdate(void) { } - virtual void onSecondsUpdate(void) { } - virtual void onGuiRender(void) { } - virtual void onKeyPressed(Event& evt) { } - virtual void onKeyReleased(Event& evt) { } - virtual void onMousePressed(Event& evt) { } - virtual void onMouseReleased(Event& evt) { } - virtual void onMouseMoved(Event& evt) { } - virtual void onSignal(tSignal& signal) { } - virtual void onClose(void) { } - - protected: - Window m_window; - Color m_clearColor; - - private: - uint32_t m_rtfps { 0 }; - uint32_t m_rtups { 0 }; - // uint32_t m_fps { 0 }; - // uint32_t m_ups { 0 }; - double m_prevTime { 0.0 }; - double m_lastFrameTime { 0.0 }; - - sf::Clock m_upsClock; - sf::Time m_upsAccumulator = sf::Time::Zero; - sf::Time m_upsStep = sf::seconds(1.f / 60.f); - - // uint32_t m_uniformUpdates { 0 }; - // uint32_t m_renderCmdCount { 0 }; - - // bool m_showDebugInfo { false }; - - ogfx::oxgui::SubWindow m_debugToolsWindow; - - public: - inline static constexpr int32_t ERR_WINDOW_CREATE_FAIL = OX_GFX_APPLICATION_2D_ERR_MASK + 0x0001; - inline static constexpr int32_t ERR_INVALID_APP_INSTANCE = OX_GFX_APPLICATION_2D_ERR_MASK + 0x0002; - - - friend class DebugTools; - }; - - class GraphicsApplication : public ostd::BaseObject - { - public: - inline GraphicsApplication(void) { invalidate(); } - inline GraphicsApplication(int32_t windowWidth, int32_t windowHeight, const ostd::String& windowTitle, tContextSettings contextSettings = tContextSettings()) { create(windowWidth, windowHeight, windowTitle, contextSettings); } - GraphicsApplication& create(int32_t windowWidth, int32_t windowHeight, const ostd::String& windowTitle, tContextSettings contextSettings = tContextSettings()); - - void destroy(void); - void nextFrame(void); - - inline bool isRunning(void) { return isValid() && m_window.isRunning(); } - inline void enableVSync(bool enabled = true) { m_window.sf().setVerticalSyncEnabled(enabled); } - inline IPoint getWindowSize(void) { return { m_window.getSize().x, m_window.getSize().y }; } - inline int32_t getWindowWidth(void) { return m_window.getSize().x; } - inline int32_t getWindowHeight(void) { return m_window.getSize().y; } - - void drawDebugInfo(RenderCore& gfx, Color col = { 150, 180, 130 }); - void handleSignal(tSignal& signal) override; - - virtual void onFrameStart(void) { } - virtual void onFrameEnd(void) { } - virtual void onSetup(void) { } - virtual void onRender(void) { } - virtual void onUpdate(void) { } - virtual void onSecondsUpdate(void) { } - virtual void onGuiRender(void) { } - virtual void onKeyPressed(Event& evt) { } - virtual void onKeyReleased(Event& evt) { } - virtual void onMousePressed(Event& evt) { } - virtual void onMouseReleased(Event& evt) { } - virtual void onMouseMoved(Event& evt) { } - virtual void onSignal(tSignal& signal) { } - virtual void onClose(void) { } - - protected: - Window m_window; - Color m_clearColor; - - private: - uint32_t m_rtfps { 0 }; - uint32_t m_rtups { 0 }; - double m_prevTime { 0.0 }; - double m_lastFrameTime { 0.0 }; - - sf::Clock m_upsClock; - sf::Time m_upsAccumulator = sf::Time::Zero; - sf::Time m_upsStep = sf::seconds(1.f / 60.f); - - ogfx::oxgui::SubWindow m_debugToolsWindow; - - public: - inline static constexpr int32_t ERR_WINDOW_CREATE_FAIL = OX_GFX_APPLICATION_2D_ERR_MASK + 0x0001; - inline static constexpr int32_t ERR_INVALID_APP_INSTANCE = OX_GFX_APPLICATION_2D_ERR_MASK + 0x0002; - - - friend class DebugTools; - }; -} \ No newline at end of file diff --git a/src/ogfx/Mesh.cpp b/src/ogfx/Mesh.cpp deleted file mode 100644 index 85e89e8..0000000 --- a/src/ogfx/Mesh.cpp +++ /dev/null @@ -1,79 +0,0 @@ -#include "Mesh.hpp" - -namespace ogfx -{ - using namespace ostd; - - void Mesh::initialize(void) - { - vao.create(); - auto layout = tVertex::getVertexBufferLayout(); - vbo.create(&vertices[0], vertices.size() * layout.getStride()); - vao.addBuffer(vbo, layout); - ebo.create(&indices[0], indices.size()); - vao.setElementBuffer(ebo); - } - - void Mesh::bind(void) - { - vao.bind(); - } - - void Mesh::unbind(void) - { - vao.unbind(); - } - - void Mesh::draw(void) - { - glDrawElements(GL_TRIANGLES, ebo.getElementCount(), GL_UNSIGNED_INT, 0); - } - - Mesh Mesh::newPlaneMesh(bool auto_initialize) - { - Mesh plane; - plane.indices = { 0, 1, 3, 1, 2, 3 }; - plane.vertices = { - tVertex { { 1.0f, 1.0f, 0.0f}, {1.0f, 1.0f, 1.0f, 1.0f}, {1.0f, 1.0f}, {0.0f, 0.0f, 1.0f}}, - tVertex { { 1.0f, -1.0f, 0.0f}, {1.0f, 1.0f, 1.0f, 1.0f}, {1.0f, 0.0f}, {0.0f, 0.0f, 1.0f}}, - tVertex { {-1.0f, -1.0f, 0.0f}, {1.0f, 1.0f, 1.0f, 1.0f}, {0.0f, 0.0f}, {0.0f, 0.0f, 1.0f}}, - tVertex { {-1.0f, 1.0f, 0.0f}, {1.0f, 1.0f, 1.0f, 1.0f}, {0.0f, 1.0f}, {0.0f, 0.0f, 1.0f}} - }; - if (auto_initialize) plane.initialize(); - return plane; - } - - Mesh Mesh::newCubeMesh(bool auto_initialize) - { - Mesh cube; - cube.indices = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 0, 18, 1, 3, 19, 4, 6, 20, 7, 9, 21, 10, 12, 22, 13, 15, 23, 16 }; - cube.vertices = { - tVertex { { -1.000000, 1.000000, 1.000000 }, {1.0, 1.0, 1.0, 1.0}, { 0.875000, 0.500000 }, { 0.000000, 0.000000, 1.000000 } }, - tVertex { { 1.000000, -1.000000, 1.000000 }, {1.0, 1.0, 1.0, 1.0}, { 0.625000, 0.750000 }, { 0.000000, 0.000000, 1.000000 } }, - tVertex { { 1.000000, 1.000000, 1.000000 }, {1.0, 1.0, 1.0, 1.0}, { 0.625000, 0.500000 }, { 0.000000, 0.000000, 1.000000 } }, - tVertex { { 1.000000, -1.000000, 1.000000 }, {1.0, 1.0, 1.0, 1.0}, { 0.625000, 0.750000 }, { 0.000000, -1.000000, 0.000000 } }, - tVertex { { -1.000000, -1.000000, -1.000000 }, {1.0, 1.0, 1.0, 1.0}, { 0.375000, 1.000000 }, { 0.000000, -1.000000, 0.000000 } }, - tVertex { { 1.000000, -1.000000, -1.000000 }, {1.0, 1.0, 1.0, 1.0}, { 0.375000, 0.750000 }, { 0.000000, -1.000000, 0.000000 } }, - tVertex { { -1.000000, -1.000000, 1.000000 }, {1.0, 1.0, 1.0, 1.0}, { 0.625000, 0.000000 }, { -1.000000, 0.000000, 0.000000 } }, - tVertex { { -1.000000, 1.000000, -1.000000 }, {1.0, 1.0, 1.0, 1.0}, { 0.375000, 0.250000 }, { -1.000000, 0.000000, 0.000000 } }, - tVertex { { -1.000000, -1.000000, -1.000000 }, {1.0, 1.0, 1.0, 1.0}, { 0.375000, 0.000000 }, { -1.000000, 0.000000, 0.000000 } }, - tVertex { { 1.000000, 1.000000, -1.000000 }, {1.0, 1.0, 1.0, 1.0}, { 0.375000, 0.500000 }, { 0.000000, 0.000000, -1.000000 } }, - tVertex { { -1.000000, -1.000000, -1.000000 }, {1.0, 1.0, 1.0, 1.0}, { 0.125000, 0.750000 }, { 0.000000, 0.000000, -1.000000 } }, - tVertex { { -1.000000, 1.000000, -1.000000 }, {1.0, 1.0, 1.0, 1.0}, { 0.125000, 0.500000 }, { 0.000000, 0.000000, -1.000000 } }, - tVertex { { 1.000000, 1.000000, 1.000000 }, {1.0, 1.0, 1.0, 1.0}, { 0.625000, 0.500000 }, { 1.000000, 0.000000, 0.000000 } }, - tVertex { { 1.000000, -1.000000, -1.000000 }, {1.0, 1.0, 1.0, 1.0}, { 0.375000, 0.750000 }, { 1.000000, 0.000000, 0.000000 } }, - tVertex { { 1.000000, 1.000000, -1.000000 }, {1.0, 1.0, 1.0, 1.0}, { 0.375000, 0.500000 }, { 1.000000, 0.000000, 0.000000 } }, - tVertex { { -1.000000, 1.000000, 1.000000 }, {1.0, 1.0, 1.0, 1.0}, { 0.625000, 0.250000 }, { 0.000000, 1.000000, 0.000000 } }, - tVertex { { 1.000000, 1.000000, -1.000000 }, {1.0, 1.0, 1.0, 1.0}, { 0.375000, 0.500000 }, { 0.000000, 1.000000, 0.000000 } }, - tVertex { { -1.000000, 1.000000, -1.000000 }, {1.0, 1.0, 1.0, 1.0}, { 0.375000, 0.250000 }, { 0.000000, 1.000000, 0.000000 } }, - tVertex { { -1.000000, -1.000000, 1.000000 }, {1.0, 1.0, 1.0, 1.0}, { 0.875000, 0.750000 }, { 0.000000, 0.000000, 1.000000 } }, - tVertex { { -1.000000, -1.000000, 1.000000 }, {1.0, 1.0, 1.0, 1.0}, { 0.625000, 1.000000 }, { 0.000000, -1.000000, 0.000000 } }, - tVertex { { -1.000000, 1.000000, 1.000000 }, {1.0, 1.0, 1.0, 1.0}, { 0.625000, 0.250000 }, { -1.000000, 0.000000, 0.000000 } }, - tVertex { { 1.000000, -1.000000, -1.000000 }, {1.0, 1.0, 1.0, 1.0}, { 0.375000, 0.750000 }, { 0.000000, 0.000000, -1.000000 } }, - tVertex { { 1.000000, -1.000000, 1.000000 }, {1.0, 1.0, 1.0, 1.0}, { 0.625000, 0.750000 }, { 1.000000, 0.000000, 0.000000 } }, - tVertex { { 1.000000, 1.000000, 1.000000 }, {1.0, 1.0, 1.0, 1.0}, { 0.625000, 0.500000 }, { 0.000000, 1.000000, 0.000000 } } - }; - if (auto_initialize) cube.initialize(); - return cube; - } -} \ No newline at end of file diff --git a/src/ogfx/Mesh.hpp b/src/ogfx/Mesh.hpp deleted file mode 100755 index 000f4e6..0000000 --- a/src/ogfx/Mesh.hpp +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef __TEMP_HPP__ -#define __TEMP_HPP__ - -#include -#include - -namespace ogfx -{ - class Mesh - { - public: - inline Mesh(void) { } - void initialize(void); - inline Transform3D& getTransform(void) { return transform; } - void bind(void); - void unbind(void); - void draw(void); - - static Mesh newPlaneMesh(bool auto_initialize = false); - static Mesh newCubeMesh(bool auto_initialize = false); - - private: - VertexArray vao { false }; - VertexBuffer vbo; - ElementBuffer ebo; - Transform3D transform; - - public: - std::vector indices; - std::vector vertices; - std::vector textures; - }; - -} - -#endif diff --git a/src/ogfx/OX3DLoader.cpp b/src/ogfx/OX3DLoader.cpp deleted file mode 100755 index 5c74974..0000000 --- a/src/ogfx/OX3DLoader.cpp +++ /dev/null @@ -1,137 +0,0 @@ -#include "OX3DLoader.hpp" -#include "Serial.hpp" -#include "Types.hpp" -#include "Utils.hpp" -#include "ogfx/DataStructures.hpp" -#include "ogfx/ResourceManager.hpp" -#include -#include -#include - -namespace ogfx -{ - using namespace ostd; - - std::vector OX3DLoader::loadFromFile(const String& filePath, const ostd::String& texturesSubPath) - { - s_error = true; - std::vector meshes; - loadRawData(filePath); - if (s_rawData.size() == 0) return { }; //TODO: Error - serial::SerialIO reader(s_rawData, serial::SerialIO::tEndianness::BigEndian); - int32_t meshCount = 0; - StreamIndex addr = 0; - //Start Reading - reader.r_DWord(addr, meshCount); - addr += tTypeSize::DWORD; - if (meshCount < 1) return { }; //TODO: Error - meshCount = 1; //TODO: Remove this. This is a manual override to force reading only the first mesh - for (int32_t currentMeshIndex = meshCount - 1; currentMeshIndex >= 0; currentMeshIndex--) - { - Mesh mesh; - int32_t vertCount = 0; - reader.r_DWord(addr, vertCount); - addr += tTypeSize::DWORD; - if (vertCount < 3) return { }; //TODO: Error - for (uint32_t v = 0; v < vertCount; v++) - { - tVertex vertex; - reader.r_Float(addr, vertex.position.x); - addr += tTypeSize::FLOAT; - reader.r_Float(addr, vertex.position.y); - addr += tTypeSize::FLOAT; - reader.r_Float(addr, vertex.position.z); - addr += tTypeSize::FLOAT; - - reader.r_Float(addr, vertex.normal.x); - addr += tTypeSize::FLOAT; - reader.r_Float(addr, vertex.normal.y); - addr += tTypeSize::FLOAT; - reader.r_Float(addr, vertex.normal.z); - addr += tTypeSize::FLOAT; - - reader.r_Float(addr, vertex.texCoords.x); - addr += tTypeSize::FLOAT; - reader.r_Float(addr, vertex.texCoords.y); - addr += tTypeSize::FLOAT; - - mesh.vertices.push_back(vertex); - } - int32_t indicesCount = 0; - reader.r_DWord(addr, indicesCount); - addr += tTypeSize::DWORD; - if (indicesCount < 3) return { }; //TODO: Error - for (uint32_t i = 0; i < indicesCount; i++) - { - int32_t index = 0; - reader.r_DWord(addr, index); - addr += tTypeSize::DWORD; - mesh.indices.push_back(index); - } - int32_t textureCount = 0; - reader.r_DWord(addr, textureCount); - addr += tTypeSize::DWORD; - if (textureCount < 1) break; - for (uint32_t t = 0; t < textureCount; t++) - { - int8_t tex_type = 0; //TODO: Use - reader.r_Byte(addr, tex_type); - addr += tTypeSize::BYTE; - int32_t tex_path_len = 0; - reader.r_DWord(addr, tex_path_len); - addr += tTypeSize::DWORD; - if (tex_path_len < 1) return { }; //TODO: Error - StringEditor texPath_se; - if (texturesSubPath != "") - texPath_se.add(texturesSubPath).add("/"); - for (uint32_t i = 0; i < tex_path_len; i++) - { - int8_t c = 0; - reader.r_Byte(addr, c); - addr += tTypeSize::BYTE; - texPath_se.add(c); - } - /*std::vector tex_data; - int32_t tex_size = 0; - reader.r_DWord(addr, tex_size); - addr += tTypeSize::DWORD; - if (tex_size < 4) return { }; //TODO: Error - for (uint32_t i = 0; i < tex_size; i++) - { - int8_t b = 0; - reader.r_Byte(addr, b); - addr += tTypeSize::BYTE; - tex_data.push_back(b); - }*/ - - //mesh.textures.push_back(ResourceManager::loadTexture(&tex_data[0], tex_size, 0, 0)); - mesh.textures.push_back(ResourceManager::loadTexture(texPath_se.str())); - } - meshes.push_back(mesh); - } - s_error = false; - //mesh.initialize(); - return meshes; - } - - Mesh OX3DLoader::loadSingleMeshFromFile(const ostd::String& filePath, const ostd::String& texturesPath) - { - Mesh mesh; - auto meshVec = loadFromFile(filePath, texturesPath); - if (meshVec.size() > 0) - mesh = meshVec[0]; - return mesh; - } - - void OX3DLoader::loadRawData(const String& filePath) - { - s_rawData.clear(); - std::ifstream fin(filePath, std::ios::binary); - if (!fin.is_open()) return; //TODO: Error - fin.seekg(0, std::ios::end); - size_t fileSize = fin.tellg(); - fin.seekg(0, std::ios::beg); - s_rawData = ByteStream(fileSize, 0); - fin.read(reinterpret_cast(&s_rawData[0]), fileSize); - } -} diff --git a/src/ogfx/OX3DLoader.hpp b/src/ogfx/OX3DLoader.hpp deleted file mode 100755 index e2d26e6..0000000 --- a/src/ogfx/OX3DLoader.hpp +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef __OX3D_LOADER_HPP__ -#define __OX3D_LOADER_HPP__ - -#include -#include - -namespace ogfx -{ - class OX3DLoader - { - public: - static std::vector loadFromFile(const ostd::String& filePath, const ostd::String& texturesSubPath = ""); //TODO: Handle more than only the first mesh - static Mesh loadSingleMeshFromFile(const ostd::String& filePath, const ostd::String& texturesPath = ""); - static inline bool errorOccurred(void) { return s_error; } - - private: - static void loadRawData(const ostd::String& filePath); - - private: - inline static ostd::ByteStream s_rawData; - inline static bool s_error = false; - - }; -} - -#endif diff --git a/src/ogfx/RTData.cpp b/src/ogfx/RTData.cpp deleted file mode 100755 index f5dc093..0000000 --- a/src/ogfx/RTData.cpp +++ /dev/null @@ -1,12 +0,0 @@ -#include "RTData.hpp" -#include - -namespace ogfx -{ - using namespace ostd; - - // uint32_t RTData::newCustomSignal(uint32_t sub_id) - // { - // return tBuiltinSignals::CustomSignalBase + sub_id; - // } -} \ No newline at end of file diff --git a/src/ogfx/RTData.hpp b/src/ogfx/RTData.hpp deleted file mode 100755 index 7d4052e..0000000 --- a/src/ogfx/RTData.hpp +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef __RTDATA_HPP__ -#define __RTDATA_HPP__ - -#include -#include - -namespace ogfx -{ - class RTData - { - public: - inline static float DeltaTime { 0.0f }; - inline static ostd::IPoint windowSize { 0, 0 }; - // static uint32_t newCustomSignal(uint32_t sub_id); - }; -} - -#endif \ No newline at end of file diff --git a/src/ogfx/RenderCommands.cpp b/src/ogfx/RenderCommands.cpp deleted file mode 100755 index 555af1f..0000000 --- a/src/ogfx/RenderCommands.cpp +++ /dev/null @@ -1,446 +0,0 @@ -#include "RenderCommands.hpp" -#include - -namespace ogfx -{ - using namespace ostd; - - static constexpr uint32_t DEFAULT_POOL_BLOCK_SIZE = 512; - static constexpr uint32_t SMALL_POOL_BLOCK_SIZE = 64; - - void RenderCommandPool::init(void) - { - s_clearCmdPool.reserve(DEFAULT_POOL_BLOCK_SIZE); - for (uint32_t i = 0; i < DEFAULT_POOL_BLOCK_SIZE; i++) - s_clearCmdPool.push_back(new rcom::Clear({ 0, 0, 0, 0 })); - s_drawQuadPool.reserve(DEFAULT_POOL_BLOCK_SIZE); - for (uint32_t i = 0; i < DEFAULT_POOL_BLOCK_SIZE; i++) - s_drawQuadPool.push_back(new rcom::DrawQuad({}, { 0, 0, 0, 0 }, { 0, 0 })); - s_drawLinePool.reserve(DEFAULT_POOL_BLOCK_SIZE); - for (uint32_t i = 0; i < DEFAULT_POOL_BLOCK_SIZE; i++) - s_drawLinePool.push_back(new rcom::DrawLine({ 0, 0 }, { 0, 0 }, 0.0f, { 0, 0, 0, 0 })); - s_drawTextPool.reserve(DEFAULT_POOL_BLOCK_SIZE); - for (uint32_t i = 0; i < DEFAULT_POOL_BLOCK_SIZE; i++) - s_drawTextPool.push_back(new rcom::DrawText("", 0, Vec2(0.0f, 0.0f), Color(0, 0, 0, 0), 0.0f, 0.0f)); - s_bindShaderPool.reserve(SMALL_POOL_BLOCK_SIZE); - for (uint32_t i = 0; i < SMALL_POOL_BLOCK_SIZE; i++) - s_bindShaderPool.push_back(new rcom::BindShader(0)); - - s_updUfQueue.reserve(SMALL_POOL_BLOCK_SIZE); - for (uint32_t i = 0; i < SMALL_POOL_BLOCK_SIZE; i++) - s_updUfQueue.push_back(new rcom::UpdateUniform("", 0, 0.0f)); - s_updUiQueue.reserve(SMALL_POOL_BLOCK_SIZE); - for (uint32_t i = 0; i < SMALL_POOL_BLOCK_SIZE; i++) - s_updUiQueue.push_back(new rcom::UpdateUniform("", 0, 0)); - s_updUbQueue.reserve(SMALL_POOL_BLOCK_SIZE); - for (uint32_t i = 0; i < SMALL_POOL_BLOCK_SIZE; i++) - s_updUbQueue.push_back(new rcom::UpdateUniform("", 0, false)); - s_updUvec2Queue.reserve(SMALL_POOL_BLOCK_SIZE); - for (uint32_t i = 0; i < SMALL_POOL_BLOCK_SIZE; i++) - s_updUvec2Queue.push_back(new rcom::UpdateUniform("", 0, { 0.0f, 0.0f })); - s_updUvec3Queue.reserve(SMALL_POOL_BLOCK_SIZE); - for (uint32_t i = 0; i < SMALL_POOL_BLOCK_SIZE; i++) - s_updUvec3Queue.push_back(new rcom::UpdateUniform("", 0, { 0.0f, 0.0f, 0.0f })); - s_updUvec4Queue.reserve(SMALL_POOL_BLOCK_SIZE); - for (uint32_t i = 0; i < SMALL_POOL_BLOCK_SIZE; i++) - s_updUvec4Queue.push_back(new rcom::UpdateUniform("", 0, { 0.0f, 0.0f, 0.0f, 0.0f })); - s_updUmat4Queue.reserve(SMALL_POOL_BLOCK_SIZE); - for (uint32_t i = 0; i < SMALL_POOL_BLOCK_SIZE; i++) - s_updUmat4Queue.push_back(new rcom::UpdateUniform("", 0, glm::mat4(0.0f))); - s_updUcolQueue.reserve(SMALL_POOL_BLOCK_SIZE); - for (uint32_t i = 0; i < SMALL_POOL_BLOCK_SIZE; i++) - s_updUcolQueue.push_back(new rcom::UpdateUniform("", 0, { 0, 0, 0, 0 })); - s_updUarriQueue.reserve(SMALL_POOL_BLOCK_SIZE); - for (uint32_t i = 0; i < SMALL_POOL_BLOCK_SIZE; i++) - s_updUarriQueue.push_back(new rcom::UpdateUniform>("", 0, { })); - s_updUarrfQueue.reserve(SMALL_POOL_BLOCK_SIZE); - for (uint32_t i = 0; i < SMALL_POOL_BLOCK_SIZE; i++) - s_updUarrfQueue.push_back(new rcom::UpdateUniform>("", 0, { })); - - s_initialized = true; - } - - void RenderCommandPool::destroy(void) - { - return; //TODO: Fix memory leak (got a crash when caling this function, that's why it's currently disabled) - if (!s_initialized) return; - for (auto& clr : s_clearCmdPool) - delete clr; - for (auto& drwQuad : s_drawQuadPool) - delete drwQuad; - for (auto& drwLine : s_drawLinePool) - delete drwLine; - for (auto& drwText : s_drawTextPool) - delete drwText; - for (auto& bindUnif : s_bindShaderPool) - delete bindUnif; - - for (auto& upd : s_updUfQueue) - delete upd; - for (auto& upd : s_updUiQueue) - delete upd; - for (auto& upd : s_updUbQueue) - delete upd; - for (auto& upd : s_updUvec2Queue) - delete upd; - for (auto& upd : s_updUvec3Queue) - delete upd; - for (auto& upd : s_updUvec4Queue) - delete upd; - for (auto& upd : s_updUmat4Queue) - delete upd; - for (auto& upd : s_updUcolQueue) - delete upd; - for (auto& upd : s_updUarriQueue) - delete upd; - for (auto& upd : s_updUarrfQueue) - delete upd; - } - - void RenderCommandPool::newFrame(void) - { - s_nextClrCmd = 0; - s_nextDrwQuadCmd = 0; - s_nextDrwLineCmd = 0; - s_nextDrwTextCmd = 0; - s_nextBindShaderCmd = 0; - - s_nextUpdaUfCmd = 0; - s_nextUpdaUiCmd = 0; - s_nextUpdaUbCmd = 0; - s_nextUpdaUvec2Cmd = 0; - s_nextUpdaUvec3Cmd = 0; - s_nextUpdaUvec4Cmd = 0; - s_nextUpdaUmat4Cmd = 0; - s_nextUpdaUcolCmd = 0; - s_nextUpdaUarriCmd = 0; - s_nextUpdaUarrfCmd = 0; - } - - RenderCommand* RenderCommandPool::newClearCommand(const Color& clearColor) - { - if (s_nextClrCmd == s_clearCmdPool.size()) - { - s_clearCmdPool.reserve(s_clearCmdPool.size() + DEFAULT_POOL_BLOCK_SIZE); - for (uint32_t i = 0; i < DEFAULT_POOL_BLOCK_SIZE; i++) - s_clearCmdPool.push_back(new rcom::Clear({ 0, 0, 0, 0 })); - OX_DEBUG("Reallocated ClearCommand pool to size=%d.", s_clearCmdPool.size()); - } - rcom::Clear* cmd = s_clearCmdPool[s_nextClrCmd++]; - cmd->create(clearColor); - return (RenderCommand*)cmd; - } - - RenderCommand* RenderCommandPool::newDrawQuadCommand(const std::vector& vertices, const Color& color, TextureID texture) - { - if (s_nextDrwQuadCmd == s_drawQuadPool.size()) - { - s_drawQuadPool.reserve(s_drawQuadPool.size() + DEFAULT_POOL_BLOCK_SIZE); - for (uint32_t i = 0; i < DEFAULT_POOL_BLOCK_SIZE; i++) - s_drawQuadPool.push_back(new rcom::DrawQuad({}, { 0, 0, 0, 0 }, { 0, 0 })); - OX_DEBUG("Reallocated DrawQuadCommand pool to size=%d.", s_drawQuadPool.size()); - } - rcom::DrawQuad* cmd = s_drawQuadPool[s_nextDrwQuadCmd++]; - cmd->create(vertices, color, texture); - return (RenderCommand*)cmd; - } - - RenderCommand* RenderCommandPool::newDrawLineCommand(const Vec2& start, const Vec2& end, float thikness, const Color& color) - { - if (s_nextDrwLineCmd == s_drawLinePool.size()) - { - s_drawLinePool.reserve(s_drawLinePool.size() + DEFAULT_POOL_BLOCK_SIZE); - for (uint32_t i = 0; i < DEFAULT_POOL_BLOCK_SIZE; i++) - s_drawLinePool.push_back(new rcom::DrawLine({ 0, 0 }, { 0, 0 }, 0.0f, { 0, 0, 0, 0 })); - OX_DEBUG("Reallocated DrawLineCommand pool to size=%d.", s_drawLinePool.size()); - } - rcom::DrawLine* cmd = s_drawLinePool[s_nextDrwLineCmd++]; - cmd->create(start, end, thikness, color); - return (RenderCommand*)cmd; - } - - RenderCommand* RenderCommandPool::newDrawTextCommand(const String& text, ResourceID font, const Vec2& position, const Color& color, float charHeight, float spacing) - { - if (s_nextDrwTextCmd == s_drawTextPool.size()) - { - s_drawTextPool.reserve(s_drawTextPool.size() + DEFAULT_POOL_BLOCK_SIZE); - for (uint32_t i = 0; i < DEFAULT_POOL_BLOCK_SIZE; i++) - s_drawTextPool.push_back(new rcom::DrawText("", 0, Vec2(0.0f, 0.0f), Color(0, 0, 0, 0), 0.0f, 0.0f)); - OX_DEBUG("Reallocated DrawTextCommand pool to size=%d.", s_drawTextPool.size()); - } - rcom::DrawText* cmd = s_drawTextPool[s_nextDrwTextCmd++]; - cmd->create(text, font, position, color, charHeight, spacing); - return (RenderCommand*)cmd; - } - - RenderCommand* RenderCommandPool::newBindSHaderCommand(ResourceID shader) - { - if (s_nextBindShaderCmd == s_bindShaderPool.size()) - { - s_bindShaderPool.reserve(s_bindShaderPool.size() + SMALL_POOL_BLOCK_SIZE); - for (uint32_t i = 0; i < DEFAULT_POOL_BLOCK_SIZE; i++) - s_bindShaderPool.push_back(new rcom::BindShader(0)); - OX_DEBUG("Reallocated BindShaderCommand pool to size=%d.", s_bindShaderPool.size()); - } - rcom::BindShader* cmd = s_bindShaderPool[s_nextBindShaderCmd++]; - cmd->create(shader); - return (RenderCommand*)cmd; - } - - RenderCommand* RenderCommandPool::newUpdateUniform_f_Command(const String& name, ResourceID shader, float value) - { - if (s_nextUpdaUfCmd == s_updUfQueue.size()) - { - s_updUfQueue.reserve(s_updUfQueue.size() + SMALL_POOL_BLOCK_SIZE); - for (uint32_t i = 0; i < SMALL_POOL_BLOCK_SIZE; i++) - s_updUfQueue.push_back(new rcom::UpdateUniform("", 0, 0.0f)); - OX_DEBUG("Reallocated UpdateUniform_f_Command pool to size=%d.", s_updUfQueue.size()); - } - auto cmd = s_updUfQueue[s_nextUpdaUfCmd++]; - cmd->create(name, shader, value); - return (RenderCommand*)cmd; - } - - RenderCommand* RenderCommandPool::newUpdateUniform_i_Command(const String& name, ResourceID shader, int32_t value) - { - if (s_nextUpdaUiCmd == s_updUiQueue.size()) - { - s_updUiQueue.reserve(s_updUiQueue.size() + SMALL_POOL_BLOCK_SIZE); - for (uint32_t i = 0; i < SMALL_POOL_BLOCK_SIZE; i++) - s_updUiQueue.push_back(new rcom::UpdateUniform("", 0, 0)); - OX_DEBUG("Reallocated UpdateUniform_i_Command pool to size=%d.", s_updUiQueue.size()); - } - auto cmd = s_updUiQueue[s_nextUpdaUiCmd++]; - cmd->create(name, shader, value); - return (RenderCommand*)cmd; - } - - RenderCommand* RenderCommandPool::newUpdateUniform_b_Command(const String& name, ResourceID shader, bool value) - { - if (s_nextUpdaUbCmd == s_updUbQueue.size()) - { - s_updUbQueue.reserve(s_updUbQueue.size() + SMALL_POOL_BLOCK_SIZE); - for (uint32_t i = 0; i < SMALL_POOL_BLOCK_SIZE; i++) - s_updUbQueue.push_back(new rcom::UpdateUniform("", 0, false)); - OX_DEBUG("Reallocated UpdateUniform_b_Command pool to size=%d.", s_updUbQueue.size()); - } - auto cmd = s_updUbQueue[s_nextUpdaUbCmd++]; - cmd->create(name, shader, value); - return (RenderCommand*)cmd; - } - - RenderCommand* RenderCommandPool::newUpdateUniform_vec2_Command(const String& name, ResourceID shader, Vec2 value) - { - if (s_nextUpdaUvec2Cmd == s_updUvec2Queue.size()) - { - s_updUvec2Queue.reserve(s_updUvec2Queue.size() + SMALL_POOL_BLOCK_SIZE); - for (uint32_t i = 0; i < SMALL_POOL_BLOCK_SIZE; i++) - s_updUvec2Queue.push_back(new rcom::UpdateUniform("", 0, { 0.0f, 0.0f })); - OX_DEBUG("Reallocated UpdateUniform_vec2_Command pool to size=%d.", s_updUvec2Queue.size()); - } - auto cmd = s_updUvec2Queue[s_nextUpdaUvec2Cmd++]; - cmd->create(name, shader, value); - return (RenderCommand*)cmd; - } - - RenderCommand* RenderCommandPool::newUpdateUniform_vec3_Command(const String& name, ResourceID shader, Vec3 value) - { - if (s_nextUpdaUvec3Cmd == s_updUvec3Queue.size()) - { - s_updUvec3Queue.reserve(s_updUvec3Queue.size() + SMALL_POOL_BLOCK_SIZE); - for (uint32_t i = 0; i < SMALL_POOL_BLOCK_SIZE; i++) - s_updUvec3Queue.push_back(new rcom::UpdateUniform("", 0, { 0.0f, 0.0f })); - OX_DEBUG("Reallocated UpdateUniform_vec3_Command pool to size=%d.", s_updUvec3Queue.size()); - } - auto cmd = s_updUvec3Queue[s_nextUpdaUvec3Cmd++]; - cmd->create(name, shader, value); - return (RenderCommand*)cmd; - } - - RenderCommand* RenderCommandPool::newUpdateUniform_vec4_Command(const String& name, ResourceID shader, Vec4 value) - { - if (s_nextUpdaUvec4Cmd == s_updUvec4Queue.size()) - { - s_updUvec4Queue.reserve(s_updUvec4Queue.size() + SMALL_POOL_BLOCK_SIZE); - for (uint32_t i = 0; i < SMALL_POOL_BLOCK_SIZE; i++) - s_updUvec4Queue.push_back(new rcom::UpdateUniform("", 0, { 0.0f, 0.0f })); - OX_DEBUG("Reallocated UpdateUniform_vec4_Command pool to size=%d.", s_updUvec4Queue.size()); - } - auto cmd = s_updUvec4Queue[s_nextUpdaUvec4Cmd++]; - cmd->create(name, shader, value); - return (RenderCommand*)cmd; - } - - RenderCommand* RenderCommandPool::newUpdateUniform_mat4_Command(const String& name, ResourceID shader, const glm::mat4& value) - { - if (s_nextUpdaUmat4Cmd == s_updUmat4Queue.size()) - { - s_updUmat4Queue.reserve(s_updUmat4Queue.size() + SMALL_POOL_BLOCK_SIZE); - for (uint32_t i = 0; i < SMALL_POOL_BLOCK_SIZE; i++) - s_updUmat4Queue.push_back(new rcom::UpdateUniform("", 0, glm::mat4(0.0f))); - OX_DEBUG("Reallocated UpdateUniform_mat4_Command pool to size=%d.", s_updUmat4Queue.size()); - } - auto cmd = s_updUmat4Queue[s_nextUpdaUmat4Cmd++]; - cmd->create(name, shader, value); - return (RenderCommand*)cmd; - } - - RenderCommand* RenderCommandPool::newUpdateUniform_col_Command(const String& name, ResourceID shader, const Color& value) - { - if (s_nextUpdaUcolCmd == s_updUcolQueue.size()) - { - s_updUcolQueue.reserve(s_updUcolQueue.size() + SMALL_POOL_BLOCK_SIZE); - for (uint32_t i = 0; i < SMALL_POOL_BLOCK_SIZE; i++) - s_updUcolQueue.push_back(new rcom::UpdateUniform("", 0, { 0, 0, 0, 0 })); - OX_DEBUG("Reallocated UpdateUniform_col_Command pool to size=%d.", s_updUcolQueue.size()); - } - auto cmd = s_updUcolQueue[s_nextUpdaUcolCmd++]; - cmd->create(name, shader, value); - return (RenderCommand*)cmd; - } - - RenderCommand* RenderCommandPool::newUpdateUniform_arri_Command(const String& name, ResourceID shader, const std::vector& value) - { - if (s_nextUpdaUarriCmd == s_updUarriQueue.size()) - { - s_updUarriQueue.reserve(s_updUarriQueue.size() + SMALL_POOL_BLOCK_SIZE); - for (uint32_t i = 0; i < SMALL_POOL_BLOCK_SIZE; i++) - s_updUarriQueue.push_back(new rcom::UpdateUniform>("", 0, { })); - OX_DEBUG("Reallocated UpdateUniform_arri_Command pool to size=%d.", s_updUarriQueue.size()); - } - auto cmd = s_updUarriQueue[s_nextUpdaUarriCmd++]; - cmd->create(name, shader, value); - return (RenderCommand*)cmd; - } - - RenderCommand* RenderCommandPool::newUpdateUniform_arrf_Command(const String& name, ResourceID shader, const std::vector& value) - { - if (s_nextUpdaUarrfCmd == s_updUarrfQueue.size()) - { - s_updUarrfQueue.reserve(s_updUarrfQueue.size() + SMALL_POOL_BLOCK_SIZE); - for (uint32_t i = 0; i < SMALL_POOL_BLOCK_SIZE; i++) - s_updUarrfQueue.push_back(new rcom::UpdateUniform>("", 0, { })); - OX_DEBUG("Reallocated UpdateUniform_arrf_Command pool to size=%d.", s_updUarrfQueue.size()); - } - auto cmd = s_updUarrfQueue[s_nextUpdaUarrfCmd++]; - cmd->create(name, shader, value); - return (RenderCommand*)cmd; - } - - - namespace rcom - { - BindShader::BindShader(ResourceID shaderID) - { - setTypeName("ox::rcom::BindShader"); - m_commandID = tRenderCommands::BindShader; - validate(); - create(shaderID); - } - BindShader& BindShader::create(ResourceID shaderID) - { - m_shaderID = shaderID; - return *this; - } - uint8_t BindShader::execute(void) - { - if (isInvalid()) return tRenderCommandErrors::InvalidatedRenderCommand; - if (Renderer2D::bindShader(m_shaderID).isInvalid()) - return tRenderCommandErrors::InvalidShader; - return tRenderCommandErrors::NoError; - } - - - - Clear::Clear(const Color& clearColor) - { - setTypeName("ox::rcom::Clear"); - validate(); - m_commandID = tRenderCommands::Clear; - create(clearColor); - } - Clear& Clear::create(const Color& clearColor) - { - m_clearColor = clearColor; - return *this; - } - uint8_t Clear::execute(void) - { - if (isInvalid()) return tRenderCommandErrors::InvalidatedRenderCommand; - Renderer2D::clear(m_clearColor); - return tRenderCommandErrors::NoError; - } - - - - DrawQuad::DrawQuad(const std::vector& vertices, const Color& color, TextureID texture) - { - setTypeName("ox::rcom::DrawQuad"); - m_commandID = tRenderCommands::DrawQuad; - validate(); - create(vertices, color, texture); - } - DrawQuad& DrawQuad::create(const std::vector& vertices, const Color& color, TextureID texture) - { - m_color = color; - m_texture = texture; - m_vertices = vertices; - return *this; - } - uint8_t DrawQuad::execute(void) - { - if (isInvalid()) return tRenderCommandErrors::InvalidatedRenderCommand; - Renderer2D::drawQuad(m_vertices, m_color, m_texture.texture, m_texture.tile); - return tRenderCommandErrors::NoError; - } - - - - DrawLine::DrawLine(const Vec2& start, const Vec2& end, float thikness, const Color& color) - { - setTypeName("ox::rcom::DrawLine"); - m_commandID = tRenderCommands::DrawLine; - validate(); - create(start, end, thikness, color); - } - DrawLine& DrawLine::create(const Vec2& start, const Vec2& end, float thikness, const Color& color) - { - m_start = start; - m_end = end; - m_thickness = thikness; - m_color = color; - return *this; - } - uint8_t DrawLine::execute(void) - { - if (isInvalid()) return tRenderCommandErrors::InvalidatedRenderCommand; - Renderer2D::drawLine(m_start, m_end, m_thickness, m_color); - return tRenderCommandErrors::NoError; - } - - - DrawText::DrawText(const String& text, ResourceID font, const Vec2& position, const Color& color, float charHeight, float spacing) - { - setTypeName("ox::rcom::DrawText"); - m_commandID = tRenderCommands::DrawText; - validate(); - create(text, font, position, color, charHeight, spacing); - } - DrawText& DrawText::create(const String& text, ResourceID font, const Vec2& position, const Color& color, float charHeight, float spacing) - { - m_text = text; - m_textInfo.font = font; - m_textInfo.characterHeight = charHeight; - m_textInfo.color = color; - m_textInfo.characterSpacing = spacing; - m_position = position; - return *this; - } - uint8_t DrawText::execute(void) - { - if (isInvalid()) return tRenderCommandErrors::InvalidatedRenderCommand; - Renderer2D::Text::draw(m_text, m_position, m_textInfo); - return tRenderCommandErrors::NoError; - } - } -} // namespace ox diff --git a/src/ogfx/RenderCommands.hpp b/src/ogfx/RenderCommands.hpp deleted file mode 100755 index 3d329b7..0000000 --- a/src/ogfx/RenderCommands.hpp +++ /dev/null @@ -1,229 +0,0 @@ -#ifndef __RENDER_COMMANDS_HPP__ -#define __RENDER_COMMANDS_HPP__ - -#include -#include -#include -#include - -namespace ogfx -{ - using namespace ostd; //TODO: Remove from header - - struct tRenderCommands - { - inline static constexpr uint8_t Invalid = 0x00; - inline static constexpr uint8_t BindShader = 0x10; - inline static constexpr uint8_t UpdateUniform = 0x11; - inline static constexpr uint8_t DrawQuad = 0x12; - inline static constexpr uint8_t DrawText = 0x13; - inline static constexpr uint8_t Clear = 0x14; - inline static constexpr uint8_t DrawLine = 0x15; - }; - - struct tRenderCommandErrors - { - inline static constexpr uint8_t NoError = 0x00; - inline static constexpr uint8_t InvalidShader = 0x01; - inline static constexpr uint8_t UnknownUniformType = 0x02; - inline static constexpr uint8_t InvalidatedRenderCommand = 0x03; - }; - - class RenderCommand : public BaseObject - { - public: - inline RenderCommand(void) { m_commandID = tRenderCommands::Invalid; invalidate(); } - inline virtual ~RenderCommand(void) { } - virtual uint8_t execute(void) = 0; - inline uint8_t getCommandID(void) { return m_commandID; } - - protected: - uint8_t m_commandID; - }; - - namespace rcom - { - class Clear; - class DrawQuad; - class DrawLine; - class DrawText; - class BindShader; - template - class UpdateUniform; - } - class RenderCommandPool - { - public: - static void init(void); - static void destroy(void); - static void newFrame(void); - - static RenderCommand* newClearCommand(const Color& clearColor); - static RenderCommand* newDrawQuadCommand(const std::vector& vertices, const Color& color, TextureID texture); - static RenderCommand* newDrawLineCommand(const Vec2& start, const Vec2& end, float thikness, const Color& color); - static RenderCommand* newDrawTextCommand(const String& text, ResourceID font, const Vec2& position, const Color& color, float charHeight, float spacing); - static RenderCommand* newBindSHaderCommand(ResourceID shader); - - static RenderCommand* newUpdateUniform_f_Command(const String& name, ResourceID shader, float value); - static RenderCommand* newUpdateUniform_i_Command(const String& name, ResourceID shader, int32_t value); - static RenderCommand* newUpdateUniform_b_Command(const String& name, ResourceID shader, bool value); - static RenderCommand* newUpdateUniform_vec2_Command(const String& name, ResourceID shader, Vec2 value); - static RenderCommand* newUpdateUniform_vec3_Command(const String& name, ResourceID shader, Vec3 value); - static RenderCommand* newUpdateUniform_vec4_Command(const String& name, ResourceID shader, Vec4 value); - static RenderCommand* newUpdateUniform_mat4_Command(const String& name, ResourceID shader, const glm::mat4& value); - static RenderCommand* newUpdateUniform_col_Command(const String& name, ResourceID shader, const Color& value); - static RenderCommand* newUpdateUniform_arri_Command(const String& name, ResourceID shader, const std::vector& value); - static RenderCommand* newUpdateUniform_arrf_Command(const String& name, ResourceID shader, const std::vector& value); - - private: - inline static std::vector s_clearCmdPool; - inline static uint32_t s_nextClrCmd { 0 }; - inline static std::vector s_drawQuadPool; - inline static uint32_t s_nextDrwQuadCmd { 0 }; - inline static std::vector s_drawTextPool; - inline static uint32_t s_nextDrwTextCmd { 0 }; - inline static std::vector s_drawLinePool; - inline static uint32_t s_nextDrwLineCmd { 0 }; - inline static std::vector s_bindShaderPool; - inline static uint32_t s_nextBindShaderCmd { 0 }; - - inline static std::vector*> s_updUfQueue; - inline static uint32_t s_nextUpdaUfCmd { 0 }; - inline static std::vector*> s_updUiQueue; - inline static uint32_t s_nextUpdaUiCmd { 0 }; - inline static std::vector*> s_updUbQueue; - inline static uint32_t s_nextUpdaUbCmd { 0 }; - inline static std::vector*> s_updUvec2Queue; - inline static uint32_t s_nextUpdaUvec2Cmd { 0 }; - inline static std::vector*> s_updUvec3Queue; - inline static uint32_t s_nextUpdaUvec3Cmd { 0 }; - inline static std::vector*> s_updUvec4Queue; - inline static uint32_t s_nextUpdaUvec4Cmd { 0 }; - inline static std::vector*> s_updUmat4Queue; - inline static uint32_t s_nextUpdaUmat4Cmd { 0 }; - inline static std::vector*> s_updUcolQueue; - inline static uint32_t s_nextUpdaUcolCmd { 0 }; - inline static std::vector>*> s_updUarriQueue; - inline static uint32_t s_nextUpdaUarriCmd { 0 }; - inline static std::vector>*> s_updUarrfQueue; - inline static uint32_t s_nextUpdaUarrfCmd { 0 }; - - inline static bool s_initialized { false }; - }; - - namespace rcom - { - class BindShader : public RenderCommand - { - public: - BindShader(ResourceID shaderID); - BindShader& create(ResourceID shaderID); - uint8_t execute(void) override; - - private: - ResourceID m_shaderID; - }; - class Clear : public RenderCommand - { - public: - Clear(const Color& clearColor); - Clear& create(const Color& clearColor); - uint8_t execute(void) override; - - private: - Color m_clearColor; - }; - class DrawQuad : public RenderCommand - { - public: - DrawQuad(const std::vector& vertices, const Color& color, TextureID texture); - DrawQuad& create(const std::vector& vertices, const Color& color, TextureID texture); - uint8_t execute(void) override; - - private: - Color m_color; - std::vector m_vertices; - TextureID m_texture; - }; - class DrawLine : public RenderCommand - { - public: - DrawLine(const Vec2& start, const Vec2& end, float thikness, const Color& color); - DrawLine& create(const Vec2& start, const Vec2& end, float thikness, const Color& color); - uint8_t execute(void) override; - - private: - Vec2 m_start; - Vec2 m_end; - float m_thickness; - Color m_color; - }; - class DrawText : public RenderCommand - { - public: - DrawText(const String& text, ResourceID font, const Vec2& position, const Color& color, float charHeight, float spacing); - DrawText& create(const String& text, ResourceID font, const Vec2& position, const Color& color, float charHeight, float spacing); - uint8_t execute(void) override; - - private: - Renderer2D::tTextInfo m_textInfo; - String m_text; - Vec2 m_position; - }; - template - class UpdateUniform : public RenderCommand - { - public: - inline UpdateUniform(String name, ResourceID shaderID, T value) - { - m_commandID = tRenderCommands::UpdateUniform; - setTypeName("ox::rcom::UpdateUniform"); - validate(); - create(name, shaderID, value); - } - inline UpdateUniform& create(String name, ResourceID shaderID, T value) - { - m_shaderID = shaderID; - m_value = value; - m_name = name; - return *this; - } - inline uint8_t execute(void) override - { - if (isInvalid()) return tRenderCommandErrors::InvalidatedRenderCommand; - auto& shader = ResourceManager::getShader(m_shaderID); - if (shader.isInvalid()) return tRenderCommandErrors::InvalidShader; - if constexpr(std::is_same_v) - shader.updateUniform_f(m_name, m_value); - else if constexpr(std::is_same_v) - shader.updateUniform_i(m_name, m_value); - else if constexpr(std::is_same_v) - shader.updateUniform_b(m_name, m_value); - else if constexpr(std::is_same_v) - shader.updateUniform_vec2f(m_name, m_value); - else if constexpr(std::is_same_v) - shader.updateUniform_vec3f(m_name, m_value); - else if constexpr(std::is_same_v) - shader.updateUniform_vec4f(m_name, m_value); - else if constexpr(std::is_same_v) - shader.updateUniform_mat4f(m_name, m_value); - else if constexpr(std::is_same_v>) - shader.updateUniform_arri(m_name, m_value.size(), &m_value[0]); - else if constexpr(std::is_same_v>) - shader.updateUniform_arrf(m_name, m_value.size(), &m_value[0]); - else if constexpr(std::is_same_v) - shader.updateUniform_vec4f(m_name, m_value); - else - return tRenderCommandErrors::UnknownUniformType; - return tRenderCommandErrors::NoError; - } - - private: - T m_value; - String m_name; - ResourceID m_shaderID { ResourceManager::InvalidResource }; - }; - } -} - -#endif \ No newline at end of file diff --git a/src/ogfx/RenderCore.cpp b/src/ogfx/RenderCore.cpp deleted file mode 100755 index 31bc8cb..0000000 --- a/src/ogfx/RenderCore.cpp +++ /dev/null @@ -1,336 +0,0 @@ -#include "RenderCore.hpp" -#include -//#include -#include - -namespace ogfx -{ - using namespace ostd; - - void RenderCore::display(void) - { - for (auto& targ : s_renderQueue) - { - targ.exec(); - m_renderCmdCount += targ.cmdList.size(); - targ.cmdList.clear(); - } - } - - // void RenderCore::newFrame(void) - // { - // s_renderQueue.clear(); - // tRComPair default_rtarg; - // default_rtarg.rTarg = &Renderer2D::getDefaultRenderTarget(); - // s_renderQueue.push_back(default_rtarg); - // } - - void RenderCore::initRenderQUeue(void) - { - s_renderQueue.reserve(100); - tRComPair default_rtarg; - default_rtarg.rTarg = &Renderer2D::getDefaultRenderTarget(); - s_renderQueue.push_back(default_rtarg); - } - - RenderCore::RenderCore(void) - { - } - - void RenderCore::init(void) - { - m_textFont = ResourceManager::getDefaultBitmapFont(); - __store_text_parameters(); - } - - void RenderCore::setRenderTarget(const RenderTarget& target, bool follow_camera) - { - bool valid_cam = hasValidCamera(); - for (uint32_t i = 0; i < RenderCore::s_renderQueue.size(); i++) - { - auto& rtarg = RenderCore::s_renderQueue[i]; - if (rtarg.rTarg->getResourceID() == target.getResourceID()) - { - m_currentRenderTarget = i; - if (follow_camera && valid_cam) - updateUniform_mat4f("u_viewProjMatrix", m_camera->getViewProjectionMatrix()); - else if (valid_cam) - updateUniform_mat4f("u_viewProjMatrix", m_camera->getProjectionMatrix()); - return; - } - } - tRComPair rtarg; - rtarg.rTarg = ⌖ - RenderCore::s_renderQueue.push_back(rtarg); - m_currentRenderTarget = RenderCore::s_renderQueue.size() - 1; - if (follow_camera && valid_cam) - updateUniform_mat4f("u_viewProjMatrix", m_camera->getViewProjectionMatrix()); - else if (valid_cam) - updateUniform_mat4f("u_viewProjMatrix", m_camera->getProjectionMatrix()); - } - - void RenderCore::setDefaultRenderTarget(void) - { - m_currentRenderTarget = 0; - if (hasValidCamera()) - updateUniform_mat4f("u_viewProjMatrix", m_camera->getProjectionMatrix()); - } - - void RenderCore::bindShader(ResourceID shader) - { - RenderCore::s_renderQueue[m_currentRenderTarget].cmdList.push_back(RenderCommandPool::newBindSHaderCommand(shader)); - m_currentShader = shader; - } - - void RenderCore::clear(Color clearColor) - { - RenderCore::s_renderQueue[m_currentRenderTarget].cmdList.push_back(RenderCommandPool::newClearCommand(clearColor)); - } - - void RenderCore::updateUniform_f(String uniform_name, float value) - { - RenderCore::s_renderQueue[m_currentRenderTarget].cmdList.push_back(RenderCommandPool::newUpdateUniform_f_Command(uniform_name, m_currentShader, value)); - } - - void RenderCore::updateUniform_i(String uniform_name, int32_t value) - { - RenderCore::s_renderQueue[m_currentRenderTarget].cmdList.push_back(RenderCommandPool::newUpdateUniform_i_Command(uniform_name, m_currentShader, value)); - } - - void RenderCore::updateUniform_b(String uniform_name, bool value) - { - RenderCore::s_renderQueue[m_currentRenderTarget].cmdList.push_back(RenderCommandPool::newUpdateUniform_b_Command(uniform_name, m_currentShader, value)); - } - - void RenderCore::updateUniform_vec2f(String uniform_name, const Vec2& value) - { - RenderCore::s_renderQueue[m_currentRenderTarget].cmdList.push_back(RenderCommandPool::newUpdateUniform_vec2_Command(uniform_name, m_currentShader, value)); - } - - void RenderCore::updateUniform_vec3f(String uniform_name, const Vec3& value) - { - RenderCore::s_renderQueue[m_currentRenderTarget].cmdList.push_back(RenderCommandPool::newUpdateUniform_vec3_Command(uniform_name, m_currentShader, value)); - } - - void RenderCore::updateUniform_vec4f(String uniform_name, const Vec4& value) - { - RenderCore::s_renderQueue[m_currentRenderTarget].cmdList.push_back(RenderCommandPool::newUpdateUniform_vec4_Command(uniform_name, m_currentShader, value)); - } - - void RenderCore::updateUniform_col(String uniform_name, const Color& value) - { - RenderCore::s_renderQueue[m_currentRenderTarget].cmdList.push_back(RenderCommandPool::newUpdateUniform_col_Command(uniform_name, m_currentShader, value)); - } - - void RenderCore::updateUniform_mat4f(String uniform_name, const glm::mat4& value) - { - RenderCore::s_renderQueue[m_currentRenderTarget].cmdList.push_back(RenderCommandPool::newUpdateUniform_mat4_Command(uniform_name, m_currentShader, value)); - } - - void RenderCore::updateUniform_arri(String uniform_name, const std::vector& value) - { - RenderCore::s_renderQueue[m_currentRenderTarget].cmdList.push_back(RenderCommandPool::newUpdateUniform_arri_Command(uniform_name, m_currentShader, value)); - } - - void RenderCore::updateUniform_arrf(String uniform_name, const std::vector& value) - { - RenderCore::s_renderQueue[m_currentRenderTarget].cmdList.push_back(RenderCommandPool::newUpdateUniform_arrf_Command(uniform_name, m_currentShader, value)); - } - - - // void RenderCore::drawGameObject(GameObject& obj) - // { - // obj.draw(*this); - // } - - void RenderCore::drawImage(TextureID texture, Vec2 position, Vec2 size, bool centereOrigin) - { - RenderCore::s_renderQueue[m_currentRenderTarget].cmdList.push_back(RenderCommandPool::newDrawQuadCommand(Renderer2D::getStaticQuad(position, size, centereOrigin), { 255, 255, 255 }, texture)); - } - - void RenderCore::drawImage(ResourceID texture, Vec2 position, Vec2 size, bool centereOrigin) - { - RenderCore::s_renderQueue[m_currentRenderTarget].cmdList.push_back(RenderCommandPool::newDrawQuadCommand(Renderer2D::getStaticQuad(position, size, centereOrigin), { 255, 255, 255 }, { texture, Texture::FullTextureCoords })); - } - - void RenderCore::drawImage(TextureID texture, Vec2 position, Vec2 size, Color tint, bool centereOrigin) - { - RenderCore::s_renderQueue[m_currentRenderTarget].cmdList.push_back(RenderCommandPool::newDrawQuadCommand(Renderer2D::getStaticQuad(position, size, centereOrigin), tint, texture)); - } - - void RenderCore::drawImage(ResourceID texture, Vec2 position, Vec2 size, Color tint, bool centereOrigin) - { - RenderCore::s_renderQueue[m_currentRenderTarget].cmdList.push_back(RenderCommandPool::newDrawQuadCommand(Renderer2D::getStaticQuad(position, size, centereOrigin), tint, { texture, Texture::FullTextureCoords })); - } - - void RenderCore::drawImage(TextureID texture, Color tint, Transform2D& transform) - { - RenderCore::s_renderQueue[m_currentRenderTarget].cmdList.push_back(RenderCommandPool::newDrawQuadCommand(transform.getVertices(), tint, texture)); - } - - void RenderCore::drawImage(ResourceID texture, Color tint, Transform2D& transform) - { - RenderCore::s_renderQueue[m_currentRenderTarget].cmdList.push_back(RenderCommandPool::newDrawQuadCommand(transform.getVertices(), tint, { texture, Texture::FullTextureCoords })); - } - - void RenderCore::drawImage(TextureID texture, Transform2D& transform) - { - RenderCore::s_renderQueue[m_currentRenderTarget].cmdList.push_back(RenderCommandPool::newDrawQuadCommand(transform.getVertices(), { 255, 255, 255 }, texture)); - } - - void RenderCore::drawImage(ResourceID texture, Transform2D& transform) - { - RenderCore::s_renderQueue[m_currentRenderTarget].cmdList.push_back(RenderCommandPool::newDrawQuadCommand(transform.getVertices(), { 255, 255, 255 }, { texture, Texture::FullTextureCoords })); - } - - void RenderCore::drawRenderTarget(const RenderTarget& target) - { - drawImage(target.getResourceID(), { 0.0f, 0.0f }, target.getSize()); - } - - void RenderCore::drawRenderTarget(const RenderTarget& target, Vec2 position, Vec2 size) - { - drawImage(target.getResourceID(), position, size); - } - - void RenderCore::drawRenderTarget(const RenderTarget& target, Vec2 position, Vec2 size, Color tint) - { - drawImage(target.getResourceID(), position, size, tint); - } - - void RenderCore::drawRenderTarget(const RenderTarget& target, Transform2D& transform) - { - drawImage(target.getResourceID(), transform); - } - - void RenderCore::drawRenderTarget(const RenderTarget& target, Color tint, Transform2D& transform) - { - drawImage(target.getResourceID(), tint, transform); - } - - void RenderCore::drawQuad(Vec2 position, Vec2 size, Color color) - { - RenderCore::s_renderQueue[m_currentRenderTarget].cmdList.push_back(RenderCommandPool::newDrawQuadCommand(Renderer2D::getStaticQuad(position, size), color, { 0, 0 })); - } - - void RenderCore::drawQuad(Vec2 position, Vec2 size, Color color, bool centeredOrigin) - { - RenderCore::s_renderQueue[m_currentRenderTarget].cmdList.push_back(RenderCommandPool::newDrawQuadCommand(Renderer2D::getStaticQuad(position, size, centeredOrigin), color, { 0, 0 })); - } - - void RenderCore::drawQuad(Color color, Transform2D& transform) - { - RenderCore::s_renderQueue[m_currentRenderTarget].cmdList.push_back(RenderCommandPool::newDrawQuadCommand(transform.getVertices(), color, { 0, 0 })); - } - - void RenderCore::drawQuad(const std::vector& vertices, const Color& tintColor, TextureID texture) - { - RenderCore::s_renderQueue[m_currentRenderTarget].cmdList.push_back(RenderCommandPool::newDrawQuadCommand(vertices, tintColor, texture)); - } - - void RenderCore::drawLine(const Vec2& start, const Vec2& end, float thikness, const Color& color) - { - RenderCore::s_renderQueue[m_currentRenderTarget].cmdList.push_back(RenderCommandPool::newDrawLineCommand(start, end, thikness, color)); - } - - void RenderCore::drawText(const String& text, Vec2 position) - { - RenderCore::s_renderQueue[m_currentRenderTarget].cmdList.push_back(RenderCommandPool::newDrawTextCommand(text, m_textFont, position, m_textColor, m_textHeight, m_textSpacing)); - } - - void RenderCore::drawText(const String& text, Vec2 position, float fontSize) - { - __store_text_parameters(); - m_textHeight = fontSize; - drawText(text, position); - __restore_text_parameters(); - } - - void RenderCore::drawText(const String& text, Vec2 position, Color color) - { - __store_text_parameters(); - m_textColor = color; - drawText(text, position); - __restore_text_parameters(); - } - - void RenderCore::drawText(const String& text, Vec2 position, float fontSize, Color color) - { - __store_text_parameters(); - m_textHeight = fontSize; - m_textColor = color; - drawText(text, position); - __restore_text_parameters(); - } - - void RenderCore::drawText(const String& text, Vec2 position, ResourceID font, float fontSize) - { - __store_text_parameters(); - m_textHeight = fontSize; - m_textFont = font; - drawText(text, position); - __restore_text_parameters(); - } - - void RenderCore::drawText(const String& text, Vec2 position, ResourceID font, Color color) - { - __store_text_parameters(); - m_textFont = font; - m_textColor = color; - drawText(text, position); - __restore_text_parameters(); - } - - void RenderCore::drawText(const String& text, Vec2 position, ResourceID font, float fontSize, Color color) - { - __store_text_parameters(); - m_textFont = font; - m_textColor = color; - m_textHeight = fontSize; - drawText(text, position); - __restore_text_parameters(); - } - - void RenderCore::drawText(const String& text, Vec2 position, const Renderer2D::tTextInfo& params) - { - __store_text_parameters(); - setTextParameters(params); - drawText(text, position); - __restore_text_parameters(); - } - - void RenderCore::setTextParameters(const Renderer2D::tTextInfo& params) - { - m_textFont = params.font; - m_textColor = params.color; - m_textHeight = params.characterHeight; - m_textSpacing = params.characterSpacing; - } - - void RenderCore::__store_text_parameters(void) - { - m_textHeight_stored = m_textHeight; - m_textSpacing_stored = m_textSpacing; - m_textFont_stored = m_textFont; - m_textColor_stored = m_textColor; - } - - void RenderCore::__restore_text_parameters(void) - { - m_textHeight = m_textHeight_stored; - m_textSpacing = m_textSpacing_stored; - m_textFont = m_textFont_stored; - m_textColor = m_textColor_stored; - } - - bool RenderCore::hasValidCamera(void) - { - return m_camera != nullptr && m_camera->isValid(); - } - - OrthoCamera& RenderCore::getCamera(void) - { - if (hasValidCamera()) return *m_camera; - return ((OrthoCamera&)BaseObject::InvalidRef()); - } -} \ No newline at end of file diff --git a/src/ogfx/RenderCore.hpp b/src/ogfx/RenderCore.hpp deleted file mode 100755 index ad24ca4..0000000 --- a/src/ogfx/RenderCore.hpp +++ /dev/null @@ -1,152 +0,0 @@ -#ifndef __RENDER_CORE_HPP__ -#define __RENDER_CORE_HPP__ - -#include -#include -#include -#include -#include -#include -#include -#include -// #include - -namespace ogfx -{ - using namespace ostd; //TODO: Remove from header - - class RenderTarget; - // class GameObject; - class OrthoCamera; - class RenderCore : public BaseObject - { - private: struct tRComPair - { - std::vector cmdList; - const RenderTarget* rTarg { nullptr }; - - inline tRComPair(void) - { - cmdList.reserve(100); - rTarg = nullptr; - } - - inline void exec(void) - { - if (rTarg == nullptr || cmdList.size() == 0) return; - Renderer2D::setRenderTarget(*rTarg); - uint8_t err = tRenderCommandErrors::NoError; - for (auto& cmd : cmdList) - { - if ((err = cmd->execute()) != tRenderCommandErrors::NoError) - OX_WARN("RenderCommand Error: RenderTarget=%d Command=%d; Result=%d", rTarg->getResourceID(), cmd->getCommandID(), err); - } - // cmdList.clear(); - } - }; - - public: - static void display(void); - // static void newFrame(void); - static void initRenderQUeue(void); - - RenderCore(void); - void init(void); - void setRenderTarget(const RenderTarget& target, bool follow_camera = true); - void setDefaultRenderTarget(void); - void bindShader(ResourceID shader); - void clear(Color clearColor); - - void updateUniform_f(String uniform_name, float value); - void updateUniform_i(String uniform_name, int32_t value); - void updateUniform_b(String uniform_name, bool value); - void updateUniform_vec2f(String uniform_name, const Vec2& value); - void updateUniform_vec3f(String uniform_name, const Vec3& value); - void updateUniform_vec4f(String uniform_name, const Vec4& value); - void updateUniform_col(String uniform_name, const Color& value); - void updateUniform_mat4f(String uniform_name, const glm::mat4& value); - void updateUniform_arri(String uniform_name, const std::vector& value); - void updateUniform_arrf(String uniform_name, const std::vector& value); - - // void drawGameObject(GameObject& obj); - - void drawImage(TextureID texture, Vec2 position, Vec2 size, bool centereOrigin = false); - void drawImage(ResourceID texture, Vec2 position, Vec2 size, bool centereOrigin = false); - void drawImage(TextureID texture, Vec2 position, Vec2 size, Color tint, bool centereOrigin = false); - void drawImage(ResourceID texture, Vec2 position, Vec2 size, Color tint, bool centereOrigin = false); - void drawImage(TextureID texture, Color tint, Transform2D& transform); - void drawImage(ResourceID texture, Color tint, Transform2D& transform); - void drawImage(TextureID texture, Transform2D& transform); - void drawImage(ResourceID texture, Transform2D& transform); - - void drawRenderTarget(const RenderTarget& target); - void drawRenderTarget(const RenderTarget& target, Vec2 position, Vec2 size); - void drawRenderTarget(const RenderTarget& target, Vec2 position, Vec2 size, Color tint); - void drawRenderTarget(const RenderTarget& target, Transform2D& transform); - void drawRenderTarget(const RenderTarget& target, Color tint, Transform2D& transform); - - void drawQuad(Vec2 position, Vec2 size, Color color); - void drawQuad(Vec2 position, Vec2 size, Color color, bool centeredOrigin); - void drawQuad(Color color, Transform2D& transform); - void drawQuad(const std::vector& vertices, const Color& tintColor, TextureID texture); - - void drawLine(const Vec2& start, const Vec2& end, float thikness, const Color& color); - - void drawText(const String& text, Vec2 position); - void drawText(const String& text, Vec2 position, float fontSize); - void drawText(const String& text, Vec2 position, Color color); - void drawText(const String& text, Vec2 position, float fontSize, Color color); - void drawText(const String& text, Vec2 position, ResourceID font, float fontSize); - void drawText(const String& text, Vec2 position, ResourceID font, Color color); - void drawText(const String& text, Vec2 position, ResourceID font, float fontSize, Color color); - void drawText(const String& text, Vec2 position, const Renderer2D::tTextInfo& params); - - void setTextParameters(const Renderer2D::tTextInfo& params); - inline void setFontSize(float size) { m_textHeight = size; } - inline void setTextSpacing(float spacing) { m_textSpacing = spacing; } - inline void setFont(ResourceID font) { m_textFont = font; } - inline void setFont(ResourceID font, float size) { m_textFont = font; m_textHeight = size; } - inline void setFont(ResourceID font, float size, float spacing) { m_textFont = font; m_textHeight = size; m_textSpacing = spacing; } - inline void setFontColor(Color color) { m_textColor = color; } - - inline float getFontSize(void) { return m_textHeight; } - inline float getTextSpacing(void) { return m_textSpacing; } - inline ResourceID getFont(void) { return m_textFont; } - inline Color getTextColor(void) { return m_textColor; } - - inline ResourceID getCurrentShaderID(void) { return m_currentShader; } - inline uint32_t getCurrentRenderTarget(void) { return m_currentRenderTarget; } - inline void setRenderTarget(uint32_t rt) { if (rt < RenderCore::s_renderQueue.size()) m_currentRenderTarget = rt; } - - inline void setCamera(OrthoCamera& camera) { m_camera = &camera; } - inline static void resetRenderCmdCount(void) { m_renderCmdCount = 0; } - inline static uint32_t getRenderCmdCount(void) { return m_renderCmdCount; } - bool hasValidCamera(void); - OrthoCamera& getCamera(void); - - private: - void __store_text_parameters(void); - void __restore_text_parameters(void); - - private: - float m_textHeight { 32.0f }; - float m_textSpacing { 5.0f }; - ResourceID m_textFont { 0 }; - Color m_textColor { 255, 255, 255 }; - - float m_textHeight_stored { 32.0f }; - float m_textSpacing_stored { 5.0f }; - ResourceID m_textFont_stored { 0 }; - Color m_textColor_stored { 255, 255, 255 }; - - inline static std::vector s_renderQueue; - uint32_t m_currentRenderTarget { 0 }; - ResourceID m_currentShader { 0 }; - - inline static uint32_t m_renderCmdCount { 0 }; - - OrthoCamera* m_camera { nullptr }; - }; -} - -#endif \ No newline at end of file diff --git a/src/ogfx/RenderTarget.cpp b/src/ogfx/RenderTarget.cpp deleted file mode 100755 index 804f2d9..0000000 --- a/src/ogfx/RenderTarget.cpp +++ /dev/null @@ -1,87 +0,0 @@ -#include "RenderTarget.hpp" -#include "GLBuffers.hpp" -#include "Errors.hpp" -#include "ResourceManager.hpp" -#include "Signals.hpp" - -namespace ogfx -{ - using namespace ostd; - - RenderTarget::~RenderTarget(void) - { - destroy(); - } - - void RenderTarget::destroy(void) - { - uint32_t id = getOpenGLFrameBufferID(); - GLCall(glDeleteRenderbuffers(1, &m_rbo_gl_id)); - GLCall(glDeleteFramebuffers(1, &id)); - ResourceManager::destroyResource(m_texture, tResourceType::Texture); - setID(id); - invalidate(); - } - - RenderTarget& RenderTarget::create(int32_t width, int32_t height, bool soft) - { - m_texture = ResourceManager::newTexture(width, height); - m_width = width; - m_height = height; - - uint32_t gl_id; - GLCall(glGenFramebuffers(1, &gl_id)); - setID(gl_id); - bind(); - GLCall(glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, ResourceManager::getTexture(m_texture).getOpenGLID(), 0)); - GLCall(glGenRenderbuffers(1, &m_rbo_gl_id)); - GLCall(glBindRenderbuffer(GL_RENDERBUFFER, m_rbo_gl_id)); - GLCall(glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, m_width, m_height)); - GLCall(glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, m_rbo_gl_id)); - if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) - { - ErrorHandler::pushError(RenderTarget::ERR_FAILED_TO_CREATE_FRAMEBUFFER); - String err_str = ErrorHandler::getLastErrorString(); - OX_ERROR("%s", err_str.c_str()); - unbind(); - destroy(); - return *this; - } - unbind(); - - enableSignals(); - if (!soft) - connectSignal(tBuiltinSignals::WindowResized); - - setTypeName("ogfx::RenderTarget"); - validate(); - - return *this; - } - - void RenderTarget::bind(void) const - { - glBindFramebuffer(GL_FRAMEBUFFER, getOpenGLFrameBufferID()); - } - - void RenderTarget::unbind(void) const - { - GLCall(glBindFramebuffer(GL_FRAMEBUFFER, 0)); - } - - void RenderTarget::bindScreenTexture(void) const - { - ResourceManager::getTexture(m_texture).bind(); - } - - void RenderTarget::handleSignal(tSignal& signal) - { - if (signal.ID == tBuiltinSignals::WindowResized) - { - WindowSizeObj wsobj = static_cast(signal.userData); - unbind(); - destroy(); - create(wsobj.width, wsobj.height, true); - } - } -} diff --git a/src/ogfx/RenderTarget.hpp b/src/ogfx/RenderTarget.hpp deleted file mode 100755 index 5276f9b..0000000 --- a/src/ogfx/RenderTarget.hpp +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef __RENDER_TARGET_HPP__ -#define __RENDER_TARGET_HPP__ - -#include -#include -#include -#include - -namespace ogfx -{ - class RenderTarget : public ostd::BaseObject - { - public: - inline RenderTarget(void) { invalidate(); } - inline RenderTarget(int32_t width, int32_t height) { create(width, height); } - virtual ~RenderTarget(void); - void destroy(void); - RenderTarget& create(int32_t width, int32_t height, bool soft = false); - - inline uint32_t getOpenGLFrameBufferID(void) const { return static_cast(getID()); } - inline uint32_t getOpenGLRenderBufferID(void) const { return m_rbo_gl_id; } - inline ostd::ResourceID getResourceID(void) const { return m_texture; } - - void bind(void) const; - void unbind(void) const; - void bindScreenTexture(void) const; - - void handleSignal(ostd::tSignal& signal) override; - - inline ostd::Vec2 getSize(void) const { return { (float)m_width, (float)m_height }; } - - private: - ostd::ResourceID m_texture; - uint32_t m_rbo_gl_id; - int32_t m_width; - int32_t m_height; - bool m_signalConnected { false }; - - public: - inline static constexpr int32_t ERR_FAILED_TO_CREATE_FRAMEBUFFER = OX_RENDERTARGET_ERR_MASK + 0x0001; - }; - - typedef RenderTarget RenderTexture; -} - -#endif diff --git a/src/ogfx/Renderer2D.cpp b/src/ogfx/Renderer2D.cpp deleted file mode 100755 index 637014f..0000000 --- a/src/ogfx/Renderer2D.cpp +++ /dev/null @@ -1,570 +0,0 @@ -#include "Renderer2D.hpp" -#include "GLBuffers.hpp" -#include "Shader.hpp" -#include "Errors.hpp" -#include "DataStructures.hpp" -#include "RenderTarget.hpp" -#include -#include -#include -//#include -#include - -namespace ogfx -{ - using namespace ostd; - - void Renderer2D::Text::init(void) - { - Text::font = ResourceManager::getDefaultBitmapFont(); - } - - void Renderer2D::Text::draw(const String& text, const Vec2& position, const Color& color) - { - if (ResourceManager::getBitmapFont(Renderer2D::Text::font).isInvalid()) - { - ErrorHandler::pushError(Renderer2D::Text::ERR_INVALID_BITMAPFONT); - String err_str = ErrorHandler::getLastErrorString(); - OX_ERROR("Renderer2D::Text::draw(const String&, const Vec2&, const Color&): %s", err_str.c_str()); - return; - } - Renderer2D::drawText(text, Renderer2D::Text::font, position, color, Renderer2D::Text::characterHeight, Renderer2D::Text::characterSpacing); - } - - void Renderer2D::Text::draw(const String& text, const Vec2& position, const tTextInfo& info) - { - tTextInfo oldInfo { Renderer2D::Text::characterHeight, - Renderer2D::Text::characterSpacing, - Renderer2D::Text::font, - { 0, 0, 0, 0 } }; - Renderer2D::Text::characterHeight = info.characterHeight; - Renderer2D::Text::characterSpacing = info.characterSpacing; - Renderer2D::Text::font = info.font; - draw(text, position, info.color); - Renderer2D::Text::characterHeight = oldInfo.characterHeight; - Renderer2D::Text::characterSpacing = oldInfo.characterSpacing; - Renderer2D::Text::font = oldInfo.font; - } - - void Renderer2D::Text::drawCentered(const String& text, const Vec2& position, const Color& color) - { - auto size = Renderer2D::Text::getStringBounds(text); - Vec2 pos = position - (size / 2.0f); - Renderer2D::Text::draw(text, pos, color); - } - - void Renderer2D::Text::drawCentered(const String& text, const Vec2& position, const tTextInfo& info) - { - tTextInfo oldInfo { Renderer2D::Text::characterHeight, - Renderer2D::Text::characterSpacing, - Renderer2D::Text::font, - { 0, 0, 0, 0 } }; - Renderer2D::Text::characterHeight = info.characterHeight; - Renderer2D::Text::characterSpacing = info.characterSpacing; - Renderer2D::Text::font = info.font; - drawCentered(text, position, info.color); - Renderer2D::Text::characterHeight = oldInfo.characterHeight; - Renderer2D::Text::characterSpacing = oldInfo.characterSpacing; - Renderer2D::Text::font = oldInfo.font; - } - - Vec2 Renderer2D::Text::getStringBounds(const String& text, Vec2 padding, float characterHeight, float spacing) - { - auto& _font = ResourceManager::getBitmapFont(Renderer2D::Text::font); - if (_font.isInvalid()) - { - ErrorHandler::pushError(Renderer2D::Text::ERR_INVALID_BITMAPFONT); - String err_str = ErrorHandler::getLastErrorString(); - OX_ERROR("ogfx::Renderer2D::Text::getStringBounds(const String&, const Vec2&, float, float): %s", err_str.c_str()); - return { 0.0f, 0.0f }; - } - if (characterHeight == 0.0f) characterHeight = Renderer2D::Text::characterHeight; - if (spacing == 0.0f) spacing = characterSpacing; - const float baseCharHeight = _font.getBaseCharHeight(); - float scale = characterHeight / baseCharHeight; - Vec2 bounds; - Rectangle cbounds; - if (spacing < 0) spacing = 0; - for (auto& c : text) - { - _font.getChar(c, cbounds); - bounds.x += (cbounds.w * scale) + (spacing * scale); - float ny = cbounds.h * scale; - if (ny > bounds.y) bounds.y = ny; - } - bounds += (padding * 2); - return bounds; - } - - // Vec2 Renderer2D::Text::getStringBounds(const String& text, Vec2 padding, float characterHeight, float spacing) - // { - // auto& _font = ResourceManager::getBitmapFont(Renderer2D::Text::font); - // if (_font.isInvalid()) - // { - // ErrorHandler::pushError(Renderer2D::Text::ERR_INVALID_BITMAPFONT); - // String err_str = ErrorHandler::getLastErrorString(); - // OX_ERROR("ogfx::Renderer2D::Text::getStringBounds(const String&, const Vec2&, float, float): %s", err_str.c_str()); - // return { 0.0f, 0.0f }; - // } - // if (characterHeight == 0.0f) characterHeight = Renderer2D::Text::characterHeight; - // if (spacing == 0.0f) spacing = characterSpacing; - // const float baseCharHeight = _font.getBaseCharHeight(); - // float scale = characterHeight / baseCharHeight; - // Vec2 bounds; - // Rectangle cbounds; - // for (auto& c : text) - // { - // _font.getChar(c, cbounds); - // bounds.x += cbounds.w + spacing; - // } - // bounds.x *= scale; - // bounds.y *= scale; - // bounds += (padding * 2); - // std::cout << bounds << "\n"; - // return bounds; - // } - - static constexpr size_t MaxQuadCount = 16384; - static constexpr size_t MaxVertexCount = MaxQuadCount * 4; - static constexpr size_t MaxIndexCount = MaxQuadCount * 6; - static constexpr size_t MaxTextures = 16; - - struct tRendererData - { - VertexArray vao { false }; - VertexBuffer vbo; - ElementBuffer ebo; - - uint32_t whiteTexture { 0 }; - int32_t whiteTextureSlot { 0 }; - - uint32_t indexCount { 0 }; - - tVertex2D* buffer { nullptr }; - tVertex2D* bufferPtr { nullptr }; - - uint32_t texSlots[MaxTextures]; - uint32_t texSlotIndex { 1 }; - - Texture* currentTex { nullptr }; - ResourceID currentTexResID { ResourceManager::InvalidResource }; - float currentTexIndex { 0.0f }; - Shader* currentShader { nullptr }; - ResourceID currentShaderResID { ResourceManager::InvalidResource }; - - Renderer2D::tRenderStats renderStats; - const RenderTarget* currentRenderTarget { nullptr }; - }; - - static tRendererData s_rendererData; - - void Renderer2D::init(void) - { - s_rendererData.buffer = new tVertex2D[MaxVertexCount]; - s_rendererData.vao.create(); - s_rendererData.vao.bind(); - - s_rendererData.vbo.create(nullptr, MaxVertexCount * sizeof(tVertex2D), true); - s_rendererData.vao.addBuffer(s_rendererData.vbo, tVertex2D::getVertexBufferLayout()); - - int32_t indices[MaxIndexCount]; - uint32_t offset = 0; - for (size_t i = 0; i < MaxIndexCount; i += 6) - { - indices[i + 0] = 0 + offset; - indices[i + 1] = 1 + offset; - indices[i + 2] = 2 + offset; - - indices[i + 3] = 2 + offset; - indices[i + 4] = 3 + offset; - indices[i + 5] = 0 + offset; - - offset += 4; - } - - s_rendererData.ebo.create(indices, MaxIndexCount); - s_rendererData.vao.setElementBuffer(s_rendererData.ebo); - - GLCall(glGenTextures(1, &s_rendererData.whiteTexture)); - GLCall(glBindTexture(GL_TEXTURE_2D, s_rendererData.whiteTexture)); - - GLCall(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)); - GLCall(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)); - GLCall(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)); - GLCall(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE)); - uint32_t color = 0xffffffff; - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, &color); - - s_rendererData.texSlots[0] = s_rendererData.whiteTexture; - for (size_t i = 1; i < MaxTextures; i++) - s_rendererData.texSlots[i] = 0; - - s_rendererData.currentTex = nullptr; - s_rendererData.currentTexResID = ResourceManager::InvalidResource; - s_rendererData.currentTexIndex = 0.0f; - s_rendererData.currentShaderResID = ResourceManager::InvalidResource; - s_rendererData.currentShader = nullptr; - s_rendererData.currentRenderTarget = nullptr; - } - - void Renderer2D::shutdown(void) - { - GLCall(glDeleteTextures(1, &s_rendererData.whiteTexture)); - //delete[] s_rendererData.buffer; //TODO: Fix memory leak (had a crash here, that's why it's currently disabled) - } - - void Renderer2D::beginBatch(void) - { - s_rendererData.bufferPtr = s_rendererData.buffer; - } - - void Renderer2D::endBatch(void) - { - GLsizeiptr size = (uint8_t*)s_rendererData.bufferPtr - (uint8_t*)s_rendererData.buffer; - s_rendererData.vbo.bind(); - GLCall(glBufferSubData(GL_ARRAY_BUFFER, 0, size, s_rendererData.buffer)); - } - - void Renderer2D::flush(void) - { - for (uint32_t i = 0; i < s_rendererData.texSlotIndex; i++) - { - GLCall(glActiveTexture(GL_TEXTURE0 + i)); - GLCall(glBindTexture(GL_TEXTURE_2D, s_rendererData.texSlots[i])); - } - s_rendererData.vao.bind(); - GLCall(glDrawElements(GL_TRIANGLES, s_rendererData.indexCount, GL_UNSIGNED_INT, nullptr)); - s_rendererData.renderStats.drawCalls++; - - s_rendererData.indexCount = 0; - s_rendererData.texSlotIndex = 1; - } - - const Renderer2D::tRenderStats& Renderer2D::getRenderStats(void) - { - return s_rendererData.renderStats; - } - - void Renderer2D::resetStats(void) - { - memset(&s_rendererData.renderStats, 0, sizeof(Renderer2D::tRenderStats)); - } - - void Renderer2D::drawQuad(const Transform2D& transform, const Color& color) - { - Renderer2D::drawQuad(transform.getVertices(), color); - } - - void Renderer2D::drawQuad(const Transform2D& transform, ResourceID texture, TextureAtlasIndex tile_index, const Color& tint) - { - Renderer2D::drawQuad(transform.getVertices(), tint, texture, tile_index); - } - - void Renderer2D::drawQuad(const std::vector& vertices, const Color& tintColor, ResourceID texture, TextureAtlasIndex tile_index) - { - if (vertices.size() != 4) return; - if (s_rendererData.indexCount >= MaxIndexCount) - { - Renderer2D::endBatch(); - Renderer2D::flush(); - Renderer2D::beginBatch(); - } - - float z_val = 0.0f; - float texIndex = 0.0f; - auto texCoords = Texture::tTexCoords { { 0.0f, 0.0f }, { 0.0f, 0.0f }, { 0.0f, 0.0f }, { 0.0f, 0.0f } }; - - if (texture != ResourceManager::InvalidResource) - { - if (s_rendererData.texSlotIndex >= MaxTextures) - { - Renderer2D::endBatch(); - Renderer2D::flush(); - Renderer2D::beginBatch(); - } - if (s_rendererData.currentTexResID != texture || s_rendererData.currentTex == nullptr || s_rendererData.currentTexResID == ResourceManager::InvalidResource) - { - s_rendererData.currentTex = &(ResourceManager::getTexture(texture)); - if (s_rendererData.currentTex->isInvalid()) - { - ErrorHandler::pushError(Renderer2D::ERR_INVALID_TEXTURE); - String err_str = ErrorHandler::getLastErrorString(); - OX_ERROR("ogfx::Renderer2D::drawQuad(const std::vector&, const Color&, ResourceID, TextureAtlasIndex): %s", err_str.c_str()); - return; - } - s_rendererData.currentTexResID = texture; - s_rendererData.currentTexIndex = 0.0f; - for (uint32_t i = 1; i < s_rendererData.texSlotIndex; i++) - { - if (s_rendererData.texSlots[i] == s_rendererData.currentTex->getOpenGLID()) - { - s_rendererData.currentTexIndex = (float)i; - break; - } - } - - if (s_rendererData.currentTexIndex == 0.0f) - { - s_rendererData.currentTexIndex = (float)s_rendererData.texSlotIndex; - s_rendererData.texSlots[s_rendererData.texSlotIndex] = s_rendererData.currentTex->getOpenGLID(); - s_rendererData.texSlotIndex++; - } - } - - texCoords = s_rendererData.currentTex->getTile(tile_index); - texIndex = s_rendererData.currentTexIndex; - } - - s_rendererData.bufferPtr->color = tintColor.getNormalizedColor(); - s_rendererData.bufferPtr->texCoords = texCoords.topLeft; - s_rendererData.bufferPtr->texIndex = texIndex; - s_rendererData.bufferPtr->position = { vertices[0], z_val }; - s_rendererData.bufferPtr++; - - s_rendererData.bufferPtr->color = tintColor.getNormalizedColor(); - s_rendererData.bufferPtr->texCoords = texCoords.topRight; - s_rendererData.bufferPtr->texIndex = texIndex; - s_rendererData.bufferPtr->position = { vertices[1], z_val }; - s_rendererData.bufferPtr++; - - s_rendererData.bufferPtr->color = tintColor.getNormalizedColor(); - s_rendererData.bufferPtr->texCoords = texCoords.bottomRight; - s_rendererData.bufferPtr->texIndex = texIndex; - s_rendererData.bufferPtr->position = { vertices[2], z_val }; - s_rendererData.bufferPtr++; - - s_rendererData.bufferPtr->color = tintColor.getNormalizedColor(); - s_rendererData.bufferPtr->texCoords = texCoords.bottomLeft; - s_rendererData.bufferPtr->texIndex = texIndex; - s_rendererData.bufferPtr->position = { vertices[3], z_val }; - s_rendererData.bufferPtr++; - - s_rendererData.indexCount += 6; - s_rendererData.renderStats.quadCount++; - } - - void Renderer2D::drawLine(const Vec2& start, const Vec2& end, float thickness, const Color& color) - { - if (s_rendererData.indexCount >= MaxIndexCount) - { - Renderer2D::endBatch(); - Renderer2D::flush(); - Renderer2D::beginBatch(); - } - - float texIndex = 0.0f; - float z_val = 0.0f; - - Vec2 unitDirection = (start - end).normalize(); - Vec2 unitPerpendicular(-unitDirection.y, unitDirection.x); - Vec2 offset = unitPerpendicular * (thickness / 2.f); - - s_rendererData.bufferPtr->color = color.getNormalizedColor(); - s_rendererData.bufferPtr->texCoords = { 0.0f, 1.0f }; - s_rendererData.bufferPtr->texIndex = texIndex; - s_rendererData.bufferPtr->position = { start + offset, z_val }; - s_rendererData.bufferPtr++; - - s_rendererData.bufferPtr->color = color.getNormalizedColor(); - s_rendererData.bufferPtr->texCoords = { 1.0f, 1.0f }; - s_rendererData.bufferPtr->texIndex = texIndex; - s_rendererData.bufferPtr->position = { end + offset, z_val }; - s_rendererData.bufferPtr++; - - s_rendererData.bufferPtr->color = color.getNormalizedColor(); - s_rendererData.bufferPtr->texCoords = { 1.0f, 0.0f }; - s_rendererData.bufferPtr->texIndex = texIndex; - s_rendererData.bufferPtr->position = { end - offset, z_val }; - s_rendererData.bufferPtr++; - - s_rendererData.bufferPtr->color = color.getNormalizedColor(); - s_rendererData.bufferPtr->texCoords = { 0.0f, 0.0f }; - s_rendererData.bufferPtr->texIndex = texIndex; - s_rendererData.bufferPtr->position = { start - offset, z_val }; - s_rendererData.bufferPtr++; - - s_rendererData.indexCount += 6; - s_rendererData.renderStats.quadCount++; - } - - void Renderer2D::drawTriangle(const Triangle& triangle, const Color& color) - { - if (s_rendererData.indexCount >= MaxIndexCount) - { - Renderer2D::endBatch(); - Renderer2D::flush(); - Renderer2D::beginBatch(); - } - - float texIndex = 0.0f; - float z_val = 0.0f; - - s_rendererData.bufferPtr->color = color.getNormalizedColor(); - s_rendererData.bufferPtr->texCoords = { 0.0f, 1.0f }; - s_rendererData.bufferPtr->texIndex = texIndex; - s_rendererData.bufferPtr->position = { triangle.vA, z_val }; - s_rendererData.bufferPtr++; - - s_rendererData.bufferPtr->color = color.getNormalizedColor(); - s_rendererData.bufferPtr->texCoords = { 1.0f, 1.0f }; - s_rendererData.bufferPtr->texIndex = texIndex; - s_rendererData.bufferPtr->position = { triangle.vB, z_val }; - s_rendererData.bufferPtr++; - - s_rendererData.bufferPtr->color = color.getNormalizedColor(); - s_rendererData.bufferPtr->texCoords = { 1.0f, 0.0f }; - s_rendererData.bufferPtr->texIndex = texIndex; - s_rendererData.bufferPtr->position = { triangle.vC, z_val }; - s_rendererData.bufferPtr++; - - s_rendererData.bufferPtr->color = color.getNormalizedColor(); - s_rendererData.bufferPtr->texCoords = { 0.0f, 0.0f }; - s_rendererData.bufferPtr->texIndex = texIndex; - s_rendererData.bufferPtr->position = { triangle.vC, z_val }; - s_rendererData.bufferPtr++; - - s_rendererData.indexCount += 6; - s_rendererData.renderStats.quadCount++; - } - - Shader& Renderer2D::bindShader(ResourceID shader) - { - if (shader != s_rendererData.currentShaderResID || s_rendererData.currentShader == nullptr || s_rendererData.currentShaderResID == ResourceManager::InvalidResource) - { - s_rendererData.currentShader = &(ResourceManager::getShader(shader)); - if (s_rendererData.currentShader->isInvalid()) - { - ErrorHandler::pushError(Renderer2D::ERR_INVALID_SHADER); - String err_str = ErrorHandler::getLastErrorString(); - OX_ERROR("ogfx::Renderer2D::bindShader(...): %s", err_str.c_str()); - return (Shader&)BaseObject::InvalidRef(); - } - s_rendererData.currentShaderResID = shader; - if (s_rendererData.indexCount > 0) - { - Renderer2D::endBatch(); - Renderer2D::flush(); - } - s_rendererData.currentShader->bind(); - s_rendererData.renderStats.shaderBinds++; - Renderer2D::beginBatch(); - return *s_rendererData.currentShader; - } - return *s_rendererData.currentShader; - } - - void Renderer2D::drawSingle(const VertexArray& vao, const Shader& shader) - { - shader.bind(); - vao.bind(); - GLCall(glDrawElements(GL_TRIANGLES, vao.getElementCount(), GL_UNSIGNED_INT, 0)); - } - - void Renderer2D::drawText(const String& text, ResourceID font, Vec2 position, Color color, float charHeight, float spacing) - { - auto& _font = ResourceManager::getBitmapFont(font); - const float baseCharHeight = _font.getBaseCharHeight(); - float scale = charHeight / baseCharHeight; - float nextCharX = position.x; - spacing *= scale; - for (uint8_t i = 0; i < text.length(); i++) - { - Rectangle bounds; - TextureAtlasIndex tile = _font.getChar(text[i], bounds); - bounds.mulSize(scale, scale); - bounds.mulPos(scale, scale); - Renderer2D::drawQuad(Renderer2D::getStaticQuad({ nextCharX, position.y + bounds.y }, bounds.getSize(), false), color, _font.getTexture(), tile); - nextCharX += bounds.w + spacing; - } - } - - void Renderer2D::clear(const Color& color, uint32_t gl_mask) - { - const auto fcol = color.getNormalizedColor(); - glClearColor(fcol.r, fcol.g, fcol.b, fcol.a); - glClear(gl_mask); - } - - void Renderer2D::setRenderTarget(const RenderTarget& target) - { - if (target.isInvalid()) - { - if (s_rendererData.currentRenderTarget != nullptr) - setDefaultRenderTarget(); - return; - } - s_rendererData.currentRenderTarget = ⌖ - if (s_rendererData.indexCount > 0) - { - Renderer2D::endBatch(); - Renderer2D::flush(); - } - Renderer2D::beginBatch(); - s_rendererData.currentRenderTarget->bind(); - glViewport(0, 0, s_rendererData.currentRenderTarget->getSize().x, s_rendererData.currentRenderTarget->getSize().y); - s_rendererData.renderStats.renderBufferBinds++; - //Renderer2D::beginBatch(); - } - - void Renderer2D::setDefaultRenderTarget(void) - { - if (s_rendererData.indexCount > 0) - { - Renderer2D::endBatch(); - Renderer2D::flush(); - } - Renderer2D::beginBatch(); - s_rendererData.currentRenderTarget = nullptr; - GLCall(glBindFramebuffer(GL_FRAMEBUFFER, 0)); - //TODO: Fix - //glViewport(0, 0, (float)RTData::windowSize.x, (float)RTData::windowSize.y); - s_rendererData.renderStats.renderBufferBinds++; - //Renderer2D::beginBatch(); - } - - void Renderer2D::enableDepthTest(bool enable) - { - if (enable) glEnable(GL_DEPTH_TEST); - else glDisable(GL_DEPTH_TEST); - } - - const RenderTarget& Renderer2D::getCurrentRenderTarget(void) - { - if (s_rendererData.currentRenderTarget == nullptr) - return (const RenderTarget&)BaseObject::InvalidRef(); - return *s_rendererData.currentRenderTarget; - } - - const Shader& Renderer2D::getCurrentShader(void) - { - if (s_rendererData.currentShader == nullptr) - return (const Shader&)BaseObject::InvalidRef(); - return *s_rendererData.currentShader; - } - - ResourceID Renderer2D::getCurrentShaderID(void) - { - return s_rendererData.currentShaderResID; - } - - std::vector Renderer2D::getStaticQuad(Vec2 position, Vec2 size, bool centered) - { - std::vector vertices; - if (centered) - { - Vec2 s = (size / 2.0f); - vertices.push_back({ position.x - s.x, position.y - s.y }); - vertices.push_back({ position.x + s.x, position.y - s.y }); - vertices.push_back({ position.x + s.x, position.y + s.y }); - vertices.push_back({ position.x - s.x, position.y + s.y }); - } - else - { - vertices.push_back({ position.x, position.y }); - vertices.push_back({ position.x + size.x, position.y }); - vertices.push_back({ position.x + size.x, position.y + size.y }); - vertices.push_back({ position.x, position.y + size.y }); - } - return vertices; - } -} \ No newline at end of file diff --git a/src/ogfx/Renderer2D.hpp b/src/ogfx/Renderer2D.hpp deleted file mode 100755 index 55ade74..0000000 --- a/src/ogfx/Renderer2D.hpp +++ /dev/null @@ -1,96 +0,0 @@ -#ifndef __RENDERER_2D_HPP__ -#define __RENDERER_2D_HPP__ - -#include -#include -#include -#include -#include - -namespace ogfx -{ - using namespace ostd; //TODO: Remove from header - - class VertexArray; - class Shader; - class RenderTarget; - class Renderer2D - { - public: struct tRenderStats - { - uint32_t drawCalls { 0 }; - uint32_t quadCount { 0 }; - uint32_t renderBufferBinds { 0 }; - uint32_t shaderBinds { 0 }; - }; - - public: struct tTextInfo - { - float characterHeight { 32.0f }; - float characterSpacing { 5.0f }; - ResourceID font { ResourceManager::InvalidResource }; - Color color { 255, 255, 255 }; - }; - - public: class Text - { - public: - static void init(void); - static void draw(const String& text, const Vec2& position, const Color& color); - static void draw(const String& text, const Vec2& position, const tTextInfo& info); - static void drawCentered(const String& text, const Vec2& position, const Color& color); - static void drawCentered(const String& text, const Vec2& position, const tTextInfo& info); - static Vec2 getStringBounds(const String& text, Vec2 padding = { 0.0f, 0.0f }, float characterHeight = 0.0f, float spacing = 0.0f); - inline static void setFont(ResourceID _font) { font = _font; } - - public: - inline static ResourceID font { ResourceManager::InvalidResource }; - inline static float characterHeight { 32.0f }; - inline static float characterSpacing { 5.0f }; - - public: - inline static constexpr int32_t ERR_INVALID_BITMAPFONT = OX_RENDERER2D_TEXT_ERR_MASK + 0x0001; - }; - - public: - static void init(void); - static void shutdown(void); - - static void beginBatch(void); - static void endBatch(void); - static void flush(void); - - static const tRenderStats& getRenderStats(void); - static void resetStats(void); - - static void drawQuad(const Transform2D& transform, const Color& color); - static void drawQuad(const Transform2D& transform, ResourceID texture, TextureAtlasIndex tile_index = Texture::FullTextureCoords, const Color& tint = { 255, 255, 255 }); - static void drawQuad(const std::vector& vertices, const Color& tintColor, ResourceID texture = ResourceManager::InvalidResource, TextureAtlasIndex tile_index = Texture::FullTextureCoords); - static void drawLine(const Vec2& start, const Vec2& end, float thickness, const Color& color); - static void drawTriangle(const Triangle& triangle, const Color& color); - static void drawSingle(const VertexArray& vao, const Shader& shader); - static void drawText(const String& text, ResourceID font, Vec2 position, Color color, float charHeight, float spacing = 5.0f); - - static Shader& bindShader(ResourceID shader); - - static void clear(const Color& color, uint32_t gl_mask = GL_COLOR_BUFFER_BIT); - static void setRenderTarget(const RenderTarget& target); - static void setDefaultRenderTarget(void); - static void enableDepthTest(bool enable = true); - - static const RenderTarget& getCurrentRenderTarget(void); - static const Shader& getCurrentShader(void); - static ResourceID getCurrentShaderID(void); - inline static const RenderTarget& getDefaultRenderTarget(void) { return (const RenderTarget&)BaseObject::InvalidRef(); } - - static std::vector getStaticQuad(Vec2 position, Vec2 size, bool centered = true); - - public: - inline static constexpr int32_t ERR_INVALID_TEXTURE = OX_RENDERER2D_ERR_MASK + 0x0001; - inline static constexpr int32_t ERR_INVALID_SHADER = OX_RENDERER2D_ERR_MASK + 0x0002; - }; - - typedef RenderTarget RenderTexture; -} - -#endif \ No newline at end of file diff --git a/src/ogfx/ResourceManager.cpp b/src/ogfx/ResourceManager.cpp deleted file mode 100755 index 673dccd..0000000 --- a/src/ogfx/ResourceManager.cpp +++ /dev/null @@ -1,268 +0,0 @@ -#include "ResourceManager.hpp" -#include -#include -#include -#include -#include -#include - -namespace ogfx -{ - using namespace ostd; - - void ResourceManager::init(void) - { - ResourceManager::s_defaultShader = ResourceManager::newShader(oxres::defaultShader_vert, oxres::defaultShader_frag); - ResourceManager::s_defaultBlendShader = ResourceManager::newShader(oxres::defaultBlendShader_vert, oxres::defaultBlendShader_frag); - ResourceManager::s_defaultBitmapFont = ResourceManager::loadBitmapFont(oxres::default_bitmap_font.data, oxres::default_bitmap_font.size); - ResourceManager::s_defaultBitmapFontMono = ResourceManager::loadBitmapFont(oxres::default_bitmap_font.data, oxres::default_bitmap_font.size, true); - int32_t samplers[16]; - for (uint8_t i = 0; i < 16; i++) - samplers[i] = i; - auto& defShad = ResourceManager::getShader(ResourceManager::s_defaultShader); - defShad.bind(); - defShad.updateUniform_arri("u_textures", 16, samplers); - auto& blendShad = ResourceManager::getShader(ResourceManager::s_defaultBlendShader); - blendShad.bind(); - blendShad.updateUniform_arri("u_textures", 16, samplers); - blendShad.unbind(); - ResourceManager::s_defaultLightTexture = ResourceManager::loadTexture(oxres::default_light_texture.data, oxres::default_light_texture.size); - ResourceManager::s_stateGradientTexture = ResourceManager::loadTexture(oxres::StateGradient.data, oxres::StateGradient.size, true); - ResourceManager::s_basicShadowTexture = ResourceManager::loadTexture(oxres::BasicShadowTexture.data, oxres::BasicShadowTexture.size, true); - } - - ResourceID ResourceManager::loadShader(const String& vertex_file_path, const String& fragment_file_path) - { - auto id = (ResourceManager::s_ghostShader != 0 ? ResourceManager::s_ghostShader : ResourceManager::s_next_id++); - ResourceManager::s_shaders[id].createFromSeparateFiles(vertex_file_path, fragment_file_path); - if (ResourceManager::s_shaders[id].isInvalid()) - { - ResourceManager::s_ghostShader = id; - OX_WARN("ox::ResourceManager::loadShader(const ox::String&, const ox::String&): Failed to load shader:\nVertex Shader path: %s\nFragment Shader path: %s", vertex_file_path.c_str(), fragment_file_path.c_str()); - return ResourceManager::InvalidResource; - } - ResourceManager::s_ghostShader = 0; - return id; - } - - ResourceID ResourceManager::loadShader(const String& shader_name, bool single_file, const String& shader_folder) - { - auto id = (ResourceManager::s_ghostShader != 0 ? ResourceManager::s_ghostShader : ResourceManager::s_next_id++); - ResourceManager::s_shaders[id].createFromName(shader_name, single_file, shader_folder); - if (ResourceManager::s_shaders[id].isInvalid()) - { - ResourceManager::s_ghostShader = id; - OX_WARN("ox::ResourceManager::loadShader(const ox::String&, bool, const String&): Failed to load shader:\nShader name: %s\nShader folder: %s", shader_name.c_str(), shader_folder.c_str()); - return ResourceManager::InvalidResource; - } - ResourceManager::s_ghostShader = 0; - return id; - } - - ResourceID ResourceManager::newShader(const String& vertex_shader_source, const String& fragment_shader_source) - { - auto id = (ResourceManager::s_ghostShader != 0 ? ResourceManager::s_ghostShader : ResourceManager::s_next_id++); - ResourceManager::s_shaders[id].createFromSources(vertex_shader_source, fragment_shader_source); - if (ResourceManager::s_shaders[id].isInvalid()) - { - ResourceManager::s_ghostShader = id; - OX_WARN("ox::ResourceManager::newShader(const ox::String&, const String&): Failed to create shader."); - return ResourceManager::InvalidResource; - } - ResourceManager::s_ghostShader = 0; - return id; - } - - ResourceID ResourceManager::loadTexture(const String& filePath, bool store_data, int32_t min_filter_mode, int32_t mag_filter_mode, int32_t wrap_s_mode, int32_t wrap_t_mode) - { - auto id = (ResourceManager::s_ghostTexture != 0 ? ResourceManager::s_ghostTexture : ResourceManager::s_next_id++); - ResourceManager::s_textures[id].create(filePath, store_data, min_filter_mode, mag_filter_mode, wrap_s_mode, wrap_t_mode); - if (ResourceManager::s_textures[id].isInvalid()) - { - ResourceManager::s_ghostTexture = id; - OX_WARN("ox::ResourceManager::loadTexture(const ox::String&, bool, int32_t, int32_t, int32_t, int32_t): Failed to load texture:\nTexture path: %s", filePath.c_str()); - return ResourceManager::InvalidResource; - } - ResourceManager::s_ghostTexture = 0; - return id; - } - - ResourceID ResourceManager::loadTexture(const unsigned char* data, uint32_t data_size, bool store_data, int32_t min_filter_mode, int32_t mag_filter_mode, int32_t wrap_s_mode, int32_t wrap_t_mode) - { - auto id = (ResourceManager::s_ghostTexture != 0 ? ResourceManager::s_ghostTexture : ResourceManager::s_next_id++); - ResourceManager::s_textures[id].create(data, data_size, store_data, min_filter_mode, mag_filter_mode, wrap_s_mode, wrap_t_mode); - if (ResourceManager::s_textures[id].isInvalid()) - { - ResourceManager::s_ghostTexture = id; - OX_WARN("ox::ResourceManager::loadTexture(const unsigned char*, uint32_t, bool, int32_t, int32_t, int32_t, int32_t): Failed to load texture from memory."); - return ResourceManager::InvalidResource; - } - ResourceManager::s_ghostTexture = 0; - return id; - } - - ResourceID ResourceManager::loadTexture(const unsigned char* rawData, uint32_t data_size, int32_t width, int32_t height, int32_t bpp, int32_t min_filter_mode, int32_t mag_filter_mode, int32_t wrap_s_mode, int32_t wrap_t_mode) - { - auto id = (ResourceManager::s_ghostTexture != 0 ? ResourceManager::s_ghostTexture : ResourceManager::s_next_id++); - ResourceManager::s_textures[id].createFromRawData(rawData, data_size, width, height, bpp, min_filter_mode, mag_filter_mode, wrap_s_mode, wrap_t_mode); - if (ResourceManager::s_textures[id].isInvalid()) - { - ResourceManager::s_ghostTexture = id; - OX_WARN("ox::ResourceManager::loadTexture(const unsigned char*, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t): Failed to load texture from memory."); - return ResourceManager::InvalidResource; - } - ResourceManager::s_ghostTexture = 0; - return id; - } - - ResourceID ResourceManager::newTexture(int32_t width, int32_t height) - { - auto id = (ResourceManager::s_ghostTexture != 0 ? ResourceManager::s_ghostTexture : ResourceManager::s_next_id++); - ResourceManager::s_textures[id].create(width, height); - if (ResourceManager::s_textures[id].isInvalid()) - { - ResourceManager::s_ghostTexture = id; - OX_WARN("ox::ResourceManager::newTexture(int32_t, int32_t): Failed to create texture."); - return ResourceManager::InvalidResource; - } - ResourceManager::s_ghostTexture = 0; - return id; - } - - ResourceID ResourceManager::loadBitmapFont(const String& filePath, bool monospace) - { - auto id = (ResourceManager::s_ghostBitmapFont != 0 ? ResourceManager::s_ghostBitmapFont : ResourceManager::s_next_id++); - ResourceManager::s_bitmapFonts[id].create(filePath, monospace); - if (ResourceManager::s_bitmapFonts[id].isInvalid()) - { - ResourceManager::s_ghostBitmapFont = id; - OX_WARN("ox::ResourceManager::loadBitmapFont(const String&): Failed to load bitmap font:\nFile path: %s", filePath.c_str()); - return ResourceManager::InvalidResource; - } - ResourceManager::s_ghostBitmapFont = 0; - return id; - } - - ResourceID ResourceManager::loadBitmapFont(const unsigned char* data, uint32_t data_size, bool monospace) - { - auto id = (ResourceManager::s_ghostBitmapFont != 0 ? ResourceManager::s_ghostBitmapFont : ResourceManager::s_next_id++); - auto ftex = loadTexture(data, data_size, true, GL_NEAREST, GL_NEAREST); - ResourceManager::s_bitmapFonts[id].create(ftex, monospace); - if (ResourceManager::s_bitmapFonts[id].isInvalid()) - { - ResourceManager::s_ghostBitmapFont = id; - OX_WARN("ox::ResourceManager::loadBitmapFont(const unsigned char*, uint32_t): Failed to load bitmap font from memory."); - return ResourceManager::InvalidResource; - } - ResourceManager::s_ghostBitmapFont = 0; - return id; - } - -// ResourceID ResourceManager::loadSound(const String& filePath) -// { -// auto id = (ResourceManager::s_ghostSoundBuffer != 0 ? ResourceManager::s_ghostSoundBuffer : ResourceManager::s_next_id++); -// ResourceManager::s_soundBuffers[id].create(filePath); -// if (ResourceManager::s_soundBuffers[id].isInvalid()) -// { -// ResourceManager::s_ghostSoundBuffer = id; -// OX_WARN("ox::ResourceManager::loadSoundBuffer(const String&): Failed to load sound buffer:\nFile path: %s", filePath.c_str()); -// return ResourceManager::InvalidResource; -// } -// ResourceManager::s_ghostSoundBuffer = 0; -// return id; -// } - -// SoundInstance ResourceManager::newSoundInstance(ResourceID soundBuffer, float volume, bool loop) -// { -// auto& sbuff = ResourceManager::getSoundBuffer(soundBuffer); -// if (sbuff.isInvalid()) -// { -// //TODO: Error -// return *((SoundInstance*)&BaseObject::InvalidRef()); -// } -// SoundInstance sound(sbuff); -// if (sound.isInvalid()) -// { -// //TODO: Error -// return *((SoundInstance*)&BaseObject::InvalidRef()); -// } -// return sound.setVolume(volume).enableLoop(loop); -// } - - bool ResourceManager::destroyResource(ResourceID resource, uint8_t res_type) - { - if (res_type == tResourceType::Texture) - { - auto it = ResourceManager::s_textures.find(resource); - if (it == ResourceManager::s_textures.end()) - { - OX_WARN("ox::ResourceManager::destroyResource(...): Attempting to destroy an invalid texture."); - return false; - } - ResourceManager::s_textures.erase(it); - return true; - } - else if (res_type == tResourceType::Shader) - { - return false; - } - else if (res_type == tResourceType::BitmapFont) - { - return false; - } - else if (res_type == tResourceType::SoundBuffer) - { - return false; - } - else - { - OX_WARN("ox::ResourceManager::destroyResource(...): Invalid resource type."); - return false; - } - return false; - } - - Shader& ResourceManager::getShader(ResourceID id) - { - if (ResourceManager::s_shaders.find(id) == ResourceManager::s_shaders.end()) - { - OX_WARN("ox::ResourceManager::getShader(...): Attempting to retrieve an invalid shader."); - OX_DEBUG("SHADER_RES_ID: %d", id); - return (Shader&)BaseObject::InvalidRef(); - } - return ResourceManager::s_shaders[id]; - } - - Texture& ResourceManager::getTexture(ResourceID id) - { - if (ResourceManager::s_textures.find(id) == ResourceManager::s_textures.end()) - { - OX_WARN("ox::ResourceManager::getTexture(...): Attempting to retrieve an invalid texture."); - return (Texture&)BaseObject::InvalidRef(); - } - return ResourceManager::s_textures[id]; - } - - BitmapFont& ResourceManager::getBitmapFont(ResourceID id) - { - if (ResourceManager::s_bitmapFonts.find(id) == ResourceManager::s_bitmapFonts.end()) - { - OX_WARN("ox::ResourceManager::getBitmapFont(...): Attempting to retrieve an invalid bitmap font."); - OX_DEBUG("DEFAULT_BITMAP_FONT: %d", s_defaultBitmapFont); - OX_DEBUG("CURRENT_BITMAP_FONT: %d", id); - OX_DEBUG("TOTAL_BITMAP_FONTS: %d", s_bitmapFonts.size()); - return (BitmapFont&)BaseObject::InvalidRef(); - } - return ResourceManager::s_bitmapFonts[id]; - } - -// SoundBuffer& ResourceManager::getSoundBuffer(ResourceID id) -// { -// if (ResourceManager::s_soundBuffers.find(id) == ResourceManager::s_soundBuffers.end()) -// { -// OX_WARN("ox::ResourceManager::getSoundBuffer(...): Attempting to retrieve an invalid sound buffer."); -// return (SoundBuffer&)BaseObject::InvalidRef(); -// } -// return ResourceManager::s_soundBuffers[id]; -// } -} // namespace ox diff --git a/src/ogfx/ResourceManager.hpp b/src/ogfx/ResourceManager.hpp deleted file mode 100755 index a3b34ad..0000000 --- a/src/ogfx/ResourceManager.hpp +++ /dev/null @@ -1,97 +0,0 @@ -#ifndef __RESOURCE_MANAGER_HPP__ -#define __RESOURCE_MANAGER_HPP__ - -#include -#include -#include -//#include -#include -#include - -namespace ogfx -{ - using namespace ostd; //TODO: Remove from header - - struct tResourceType - { - inline static constexpr uint8_t Invalid = 0; - inline static constexpr uint8_t Shader = 1; - inline static constexpr uint8_t Texture = 2; - inline static constexpr uint8_t BitmapFont = 3; - inline static constexpr uint8_t SoundBuffer = 4; - }; - - class ResourceManager - { - public: - static void init(void); - static ResourceID loadShader(const String& vertex_file_path, const String& fragment_file_path); - static ResourceID loadShader(const String& shader_name, bool single_file = true, const String& shader_folder = ""); - static ResourceID newShader(const String& vertex_shader_source, const String& fragment_shader_source); - static ResourceID loadTexture(const String& filePath, - bool store_data = false, - int32_t min_filter_mode = GL_LINEAR, - int32_t mag_filter_mode = GL_LINEAR, - int32_t wrap_s_mode = GL_CLAMP_TO_EDGE, - int32_t wrap_t_mode = GL_CLAMP_TO_EDGE); - static ResourceID loadTexture(const unsigned char* data, - unsigned int data_size, - bool store_data = false, - int32_t min_filter_mode = GL_LINEAR, - int32_t mag_filter_mode = GL_LINEAR, - int32_t wrap_s_mode = GL_CLAMP_TO_EDGE, - int32_t wrap_t_mode = GL_CLAMP_TO_EDGE); - static ResourceID loadTexture(const unsigned char* rawData, - unsigned int data_size, - int32_t width, - int32_t height, - int32_t bpp = 4, - int32_t min_filter_mode = GL_LINEAR, - int32_t mag_filter_mode = GL_LINEAR, - int32_t wrap_s_mode = GL_CLAMP_TO_EDGE, - int32_t wrap_t_mode = GL_CLAMP_TO_EDGE); - static ResourceID newTexture(int32_t width, int32_t height); - static ResourceID loadBitmapFont(const String& filePath, bool monospace = false); - static ResourceID loadBitmapFont(const unsigned char* data, unsigned int data_size, bool monospace = false); - //static ResourceID loadSound(const String& filePath); - //static SoundInstance newSoundInstance(ResourceID soundBuffer, float volume = 100.0f, bool loop = false); - - static bool destroyResource(ResourceID resource, uint8_t res_type); - - static Shader& getShader(ResourceID id); - static Texture& getTexture(ResourceID id); - static BitmapFont& getBitmapFont(ResourceID id); - //static SoundBuffer& getSoundBuffer(ResourceID id); - - inline static ResourceID getDefaultShader(void) { return ResourceManager::s_defaultShader; } - inline static ResourceID getDefaultBlendShader(void) { return ResourceManager::s_defaultBlendShader; } - inline static ResourceID getDefaultBitmapFont(void) { return ResourceManager::s_defaultBitmapFont; } - inline static ResourceID getDefaultBitmapFontMono(void) { return ResourceManager::s_defaultBitmapFontMono; } - inline static ResourceID getDefaultLightTexture(void) { return ResourceManager::s_defaultLightTexture; } - inline static ResourceID getStateGradientTexture(void) { return ResourceManager::s_stateGradientTexture; } - inline static ResourceID getBasicShadowTexture(void) { return ResourceManager::s_basicShadowTexture; } - - private: - inline static std::unordered_map s_shaders; - inline static std::unordered_map s_textures; - inline static std::unordered_map s_bitmapFonts; - //inline static std::unordered_map s_soundBuffers; - inline static ResourceID s_next_id = 1024; - inline static ResourceID s_defaultShader { 0 }; - inline static ResourceID s_defaultBlendShader { 0 }; - inline static ResourceID s_defaultBitmapFont { 0 }; - inline static ResourceID s_defaultBitmapFontMono { 0 }; - inline static ResourceID s_defaultLightTexture { 0 }; - inline static ResourceID s_ghostTexture { 0 }; - inline static ResourceID s_ghostShader { 0 }; - inline static ResourceID s_ghostBitmapFont { 0 }; - inline static ResourceID s_stateGradientTexture { 0 }; - inline static ResourceID s_basicShadowTexture { 0 }; - inline static ResourceID s_ghostSoundBuffer { 0 }; - - public: - inline static const uint8_t InvalidResource = 0; - }; -} // namespace ox - -#endif diff --git a/src/ogfx/Shader.cpp b/src/ogfx/Shader.cpp deleted file mode 100755 index 4605c64..0000000 --- a/src/ogfx/Shader.cpp +++ /dev/null @@ -1,365 +0,0 @@ -#include "Shader.hpp" -#include -#include -#include -#include -#include "Errors.hpp" - -//TODO: Implement Errors - -namespace ogfx -{ - using namespace ostd; - - Shader::~Shader(void) - { - glDeleteProgram(getOpenGLID()); - } - - Shader& Shader::createFromName(String shaderName, bool singleFile, String shaderFolder, bool auto_register_uniforms) - { - StringEditor se = shaderFolder; - se.trim(); - bool use_custom_shader_folder = se.str() != ""; - String tmp_shader_folder = ""; - if (use_custom_shader_folder) - { - tmp_shader_folder = Shader::getShaderFolder(); - Shader::setShaderFolder(se.str()); - } - uint64_t shader_id; - if (!singleFile) shader_id = Shader::gl_loadShader(shaderName); - else shader_id = Shader::gl_loadShaderFromSingleFile(shaderName); - if (use_custom_shader_folder) - Shader::setShaderFolder(tmp_shader_folder); - setID(shader_id); - if (shader_id == 0) return *this; - setTypeName("ox::Shader"); - validate(); - bind(); - Shader::s_auto_register_uniforms = auto_register_uniforms; - __auto_register_uniforms(); - unbind(); - return *this; - } - - Shader& Shader::createFromSources(String vertSource, String fragSource, bool auto_register_uniforms) - { - uint64_t shader_id = Shader::gl_createShaderProgram(vertSource, fragSource); - setID(shader_id); - if (shader_id == 0) return *this; - setTypeName("ox::Shader"); - validate(); - bind(); - Shader::s_auto_register_uniforms = auto_register_uniforms; - __auto_register_uniforms(); - unbind(); - return *this; - } - - Shader& Shader::createFromSeparateFiles(String vertFilePath, String fragFilePath, bool auto_register_uniforms) - { - std::vector vertLines; - std::vector fragLines; - if (!Utils::readFile(vertFilePath, vertLines)) - { - ErrorHandler::pushError(Shader::ERR_SHADER_SOURCE_READ_FILED); - String error_str = ErrorHandler::getLastErrorString(); - OX_ERROR("%s.\nShader path: %s (vertex)", error_str.c_str(), vertFilePath.c_str()); - return *this; - } - if (!Utils::readFile(fragFilePath, fragLines)) - { - ErrorHandler::pushError(Shader::ERR_SHADER_SOURCE_READ_FILED); - String error_str = ErrorHandler::getLastErrorString(); - OX_ERROR("%s.\nShader path: %s (fragment)", error_str.c_str(), fragFilePath.c_str()); - return *this; - }; - String vertSource = Shader::linesToString(vertLines); - String fragSource = Shader::linesToString(fragLines); - createFromSources(vertSource, fragSource); - bind(); - Shader::s_auto_register_uniforms = auto_register_uniforms; - __auto_register_uniforms(); - unbind(); - return *this; - } - - void Shader::bind(void) const { glUseProgram(getOpenGLID()); } - - void Shader::unbind(void) const { glUseProgram(0); } - - int32_t Shader::registerUniform(String uniform_name) - { - int32_t uni_loc = glGetUniformLocation(getOpenGLID(), uniform_name.c_str()); - if (uni_loc == -1) - { - ErrorHandler::pushError(Shader::ERR_FAILED_TO_REGISTER_UNIFORM); - String error_str = ErrorHandler::getLastErrorString(); - OX_ERROR("%s:\nUniform name: <%s>", error_str.c_str(), uniform_name.c_str()); - } - m_uniforms[uniform_name] = uni_loc; - return OX_NO_ERROR; - } - - int32_t Shader::gl_getUniformLocation(String uniform_name) - { - return glGetUniformLocation(getOpenGLID(), uniform_name.c_str()); - } - - int32_t Shader::getRegisteredUniform(String uniform_name) - { - if (m_uniforms.find(uniform_name) == m_uniforms.end()) return -1; - return m_uniforms.at(uniform_name); - } - - - void Shader::updateUniform_f(String uniform_name, float value) - { - if (!__can_update_uniform(uniform_name)) return; - glUniform1f(m_uniforms.at(uniform_name), value); - Shader::s_uniform_updates++; - } - - void Shader::updateUniform_i(String uniform_name, int32_t value) - { - if (!__can_update_uniform(uniform_name)) return; - glUniform1i(m_uniforms.at(uniform_name), value); - Shader::s_uniform_updates++; - } - - void Shader::updateUniform_b(String uniform_name, bool value) - { - if (!__can_update_uniform(uniform_name)) return; - glUniform1i(m_uniforms.at(uniform_name), (int)value); - Shader::s_uniform_updates++; - } - - void Shader::updateUniform_vec2f(String uniform_name, const Vec2& value) - { - if (!__can_update_uniform(uniform_name)) return; - glUniform2f(m_uniforms.at(uniform_name), value.x, value.y); - Shader::s_uniform_updates++; - } - - void Shader::updateUniform_vec3f(String uniform_name, const Vec3& value) - { - if (!__can_update_uniform(uniform_name)) return; - glUniform3f(m_uniforms.at(uniform_name), value.x, value.y, value.z); - Shader::s_uniform_updates++; - } - - void Shader::updateUniform_vec4f(String uniform_name, float x, float y, float z, float w) - { - if (!__can_update_uniform(uniform_name)) return; - glUniform4f(m_uniforms.at(uniform_name), x, y, z, w); - Shader::s_uniform_updates++; - } - - void Shader::updateUniform_vec4f(String uniform_name, const Color& value) - { - if (!__can_update_uniform(uniform_name)) return; - const auto fcol = value.getNormalizedColor(); - glUniform4f(m_uniforms.at(uniform_name), fcol.r, fcol.g, fcol.b, fcol.a); - Shader::s_uniform_updates++; - } - - void Shader::updateUniform_mat4f(String uniform_name, const glm::mat4& value) - { - if (!__can_update_uniform(uniform_name)) return; - glUniformMatrix4fv(m_uniforms.at(uniform_name), 1, GL_FALSE, &value[0][0]); - Shader::s_uniform_updates++; - } - - void Shader::updateUniform_arri(String uniform_name, int32_t array_size, const int32_t* value) - { - if (!__can_update_uniform(uniform_name)) return; - glUniform1iv(m_uniforms.at(uniform_name), array_size, value); - Shader::s_uniform_updates++; - } - - void Shader::updateUniform_arrf(String uniform_name, int32_t array_size, const float* value) - { - if (!__can_update_uniform(uniform_name)) return; - glUniform1fv(m_uniforms.at(uniform_name), array_size, value); - Shader::s_uniform_updates++; - } - - - - - - bool Shader::readShaderSource(String shaderName, String& vertSource, String& fragSource) - { - std::vector vertLines; - std::vector fragLines; - if (!Utils::readFile(Shader::s_shader_folder + "/" + shaderName + "." + Shader::s_vertex_shader_extension, vertLines)) return false; - if (!Utils::readFile(Shader::s_shader_folder + "/" + shaderName + "." + Shader::s_fragment_shader_extension, fragLines)) return false; - vertSource = Shader::linesToString(vertLines); - fragSource = Shader::linesToString(fragLines); - return true; - } - - uint32_t Shader::gl_compileShader(uint32_t gl_shader_type, const String& source) - { - if (Shader::s_auto_register_uniforms) - { - auto tokens = StringEditor(source).tokenize(";", true); - for (auto line : tokens) - { - bool skip_next_uniform = false; - StringEditor se = line; - if (se.startsWith("//@[skip_auto_register]")) - { - skip_next_uniform = true; - } - else if(se.startsWith(("uniform "))) - { - if (skip_next_uniform) continue; - se = se.substr(8); - se.trim(); - if (se.len() == 0) continue; - int32_t index = se.indexOf(" "); - if (index <= 0) continue; - se = se.substr(index + 1); - se.trim(); - index = se.indexOf("["); - if (index > 0) - { - se = se.substr(0, index); - se.trim(); - } - Shader::m_temp_uniform_names.push_back(se.str()); - } - } - } - uint32_t id = glCreateShader(gl_shader_type); - const char* src = source.c_str(); - glShaderSource(id, 1, &src, nullptr); - glCompileShader(id); - int32_t result; - glGetShaderiv(id, GL_COMPILE_STATUS, &result); - if (result == GL_FALSE) - { - int32_t length; - glGetShaderiv(id, GL_INFO_LOG_LENGTH, &length); - char* message = (char*)alloca(length * sizeof(char)); - glGetShaderInfoLog(id, length, &length, message); - String shader_type_str = (gl_shader_type == GL_FRAGMENT_SHADER ? "Fragment" : "Vertex"); - ErrorHandler::pushError(Shader::ERR_SHADER_COMPILE_FAILED); - String error_str = ErrorHandler::getLastErrorString(); - OX_ERROR("%s: <%s shader>.\nGLSL Error:\n%s", error_str.c_str(), shader_type_str.c_str(), message); - glDeleteShader(id); - return 0; - } - return id; - } - - uint32_t Shader::gl_createShaderProgram(const String& vertexShader, const String& fragmentShader) - { - uint32_t program = glCreateProgram(); - uint32_t vs = Shader::gl_compileShader(GL_VERTEX_SHADER, vertexShader); - if (vs == 0) return 0; - uint32_t fs = Shader::gl_compileShader(GL_FRAGMENT_SHADER, fragmentShader); - if (fs == 0) return 0; - glAttachShader(program, vs); - glAttachShader(program, fs); - glLinkProgram(program); - glValidateProgram(program); - glDeleteShader(vs); - glDeleteShader(fs); - return program; - } - - uint32_t Shader::gl_loadShader(String shaderName) - { - String vertSource; - String fragSource; - if (!Shader::readShaderSource(shaderName, vertSource, fragSource)) - { - ErrorHandler::pushError(Shader::ERR_SHADER_SOURCE_READ_FILED); - String error_str = ErrorHandler::getLastErrorString(); - OX_ERROR("%s.\nShader name: %s", error_str.c_str(), shaderName.c_str()); - return 0; - } - return Shader::gl_createShaderProgram(vertSource, fragSource); - } - - uint32_t Shader::gl_loadShaderFromSingleFile(String shaderName) - { - constexpr uint8_t VERTEX = 0; - constexpr uint8_t FRAGMENT = 1; - constexpr uint8_t NONE = 255; - uint8_t mode = NONE; - StringEditor sources[2]; - std::vector lines; - if (!Utils::readFile(Shader::s_shader_folder + "/" + shaderName + "." + Shader::s_single_shader_extension, lines)) - { - ErrorHandler::pushError(Shader::ERR_SHADER_SOURCE_READ_FILED); - String error_str = ErrorHandler::getLastErrorString(); - OX_ERROR("%s.\nShader name: %s (single file)", error_str.c_str(), shaderName.c_str());; - return 0; - } - StringEditor sel; - for (auto& line : lines) - { - sel = line; - sel.trim().toLower(); - if (sel.startsWith("#version ")) - { - sources[VERTEX].add(line); - sources[FRAGMENT].add(line); - continue; - } - else if (sel.startsWith("@shader_type")) - { - sel = sel.substr(12); - sel.trim(); - if (sel.str() == "[vertex]") - mode = VERTEX; - else if (sel.str() == "[fragment]") - mode = FRAGMENT; - else - mode = NONE; - continue; - } - else if (mode != NONE) - { - sources[mode].add(line).add("\n"); - continue; - } - } - return Shader::gl_createShaderProgram(sources[VERTEX].str(), sources[FRAGMENT].str()); - } - - void Shader::__auto_register_uniforms(void) - { - if (Shader::s_auto_register_uniforms) - { - for (auto& unif : Shader::m_temp_uniform_names) - registerUniform(unif); - } - Shader::s_auto_register_uniforms = true; - std::vector().swap(Shader::m_temp_uniform_names); - } - - bool Shader::__can_update_uniform(const String& uniform_name) - { - if (m_uniforms.find(uniform_name) == m_uniforms.end()) - { - ErrorHandler::pushError(Shader::ERR_FAILED_TO_UPDATE_UNIFORM); - String error_str = ErrorHandler::getLastErrorString(); - OX_ERROR("%s:\nUniform name: <%s>", error_str.c_str(), uniform_name.c_str()); - return false; - } - return true; - } - - String Shader::linesToString(const std::vector& lines) - { - String full; - for (auto& line : lines) - full += line + "\n"; - return full; - } -} diff --git a/src/ogfx/Shader.hpp b/src/ogfx/Shader.hpp deleted file mode 100755 index 559dffc..0000000 --- a/src/ogfx/Shader.hpp +++ /dev/null @@ -1,88 +0,0 @@ -#ifndef __SHADER_HPP__ -#define __SHADER_HPP__ - -#include -#include -#include -#include -#include -#include -#include -#include - -namespace ogfx -{ - using namespace ostd; //TODO: Remove this from header - class Shader : public ostd::BaseObject - { - public: - inline Shader(void) { invalidate(); } - inline Shader(String shaderName, bool singleFile = false, String shaderFolder = "", bool auto_register_uniforms = true) { createFromName(shaderName, singleFile, shaderFolder, auto_register_uniforms); } - ~Shader(void); - Shader& createFromName(String shaderName, bool singleFile = false, String shaderFolder = "", bool auto_register_uniforms = true); - Shader& createFromSources(String vertSource, String fragSource, bool auto_register_uniforms = true); - Shader& createFromSeparateFiles(String vertFilePath, String fragFilePath, bool auto_register_uniforms = true); - void bind(void) const; - void unbind(void) const; - inline uint32_t getOpenGLID(void) const { return static_cast(getID()); } - - //TODO: Register struct uniforms automatically - int32_t registerUniform(String uniform_name); - int32_t gl_getUniformLocation(String uniform_name); - int32_t getRegisteredUniform(String uniform_name); - void updateUniform_f(String uniform_name, float value); - void updateUniform_i(String uniform_name, int32_t value); - void updateUniform_b(String uniform_name, bool value); - void updateUniform_vec2f(String uniform_name, const Vec2& value); - void updateUniform_vec3f(String uniform_name, const Vec3& value); - void updateUniform_vec4f(String uniform_name, float x, float y, float z, float w); - inline void updateUniform_vec4f(String uniform_name, const Vec4& value) { updateUniform_vec4f(uniform_name, value.x, value.y, value.z, value.w); } - void updateUniform_vec4f(String uniform_name, const Color& value); - void updateUniform_mat4f(String uniform_name, const glm::mat4& value); - void updateUniform_arri(String uniform_name, int32_t array_size, const int32_t* value); - void updateUniform_arrf(String uniform_name, int32_t array_size, const float* value); - - inline static void setShaderFolder(String folder_path) { Shader::s_shader_folder = folder_path; } - inline static String getShaderFolder(void) { return Shader::s_shader_folder; } - inline static void setFragmentShaderExtension(String frag_ext) { Shader::s_fragment_shader_extension = frag_ext; } - inline static String getFragmentShaderExtension(void) { return Shader::s_fragment_shader_extension; } - inline static void setVertexShaderExtension(String vert_ext) { Shader::s_vertex_shader_extension = vert_ext; } - inline static String getVertexShaderExtension(void) { return Shader::s_vertex_shader_extension; } - inline static void setSingleShaderExtension(String single_ext) { Shader::s_single_shader_extension = single_ext; } - inline static String getSingleShaderExtension(void) { return Shader::s_single_shader_extension; } - static bool readShaderSource(String shaderName, String& vertSource, String& fragSource); - - static uint32_t gl_compileShader(uint32_t gl_shader_type, const String& source); - static uint32_t gl_createShaderProgram(const String& vertexShader, const String& fragmentShader); - static uint32_t gl_loadShader(String shaderName); - static uint32_t gl_loadShaderFromSingleFile(String shaderName); - - inline static uint32_t getUniformUpdateCount(void) { return s_uniform_updates; } - inline static void resetUniformUpdateCount(void) { s_uniform_updates = 0; } - - private: - void __auto_register_uniforms(void); - bool __can_update_uniform(const String& uniform_name); - static String linesToString(const std::vector& lines); - - private: - std::unordered_map m_uniforms; - inline static std::vector m_temp_uniform_names; - inline static bool s_auto_register_uniforms { true }; - inline static uint32_t s_uniform_updates { 0 }; - - private: - inline static String s_shader_folder { "shaders" }; - inline static String s_vertex_shader_extension { "vs" }; - inline static String s_fragment_shader_extension { "fs" }; - inline static String s_single_shader_extension { "shad" }; - - public: - inline static constexpr int32_t ERR_SHADER_COMPILE_FAILED = OX_SHADER_ERR_MASK + 0x0001; - inline static constexpr int32_t ERR_SHADER_SOURCE_READ_FILED = OX_SHADER_ERR_MASK + 0x0002; - inline static constexpr int32_t ERR_FAILED_TO_REGISTER_UNIFORM = OX_SHADER_ERR_MASK + 0x0003; - inline static constexpr int32_t ERR_FAILED_TO_UPDATE_UNIFORM = OX_SHADER_ERR_MASK + 0x0004; - }; -} - -#endif diff --git a/src/ogfx/Texture.cpp b/src/ogfx/Texture.cpp deleted file mode 100755 index a1d451c..0000000 --- a/src/ogfx/Texture.cpp +++ /dev/null @@ -1,387 +0,0 @@ -#include "Texture.hpp" -#ifndef STB_IMAGE_IMPLEMENTATION - #define STB_IMAGE_IMPLEMENTATION -#endif -#include -#include -#include "Errors.hpp" - -//TODO: Implement Errors - -namespace ogfx -{ - using namespace ostd; - - Texture::Texture(const String& path, bool store_data, int32_t min_filter_mode, int32_t mag_filter_mode, int32_t wrap_s_mode, int32_t wrap_t_mode) - { - create(path, store_data, min_filter_mode, mag_filter_mode, wrap_s_mode, wrap_t_mode);; - } - - Texture::Texture(int32_t width, int32_t height) - { - create(width, height); - } - - Texture::~Texture(void) - { - uint32_t id = getOpenGLID(); - GLCall(glDeleteTextures(1, &id)); - setID(id); - invalidate(); - } - - Texture& Texture::create(const String& path, bool store_data, int32_t min_filter_mode, int32_t mag_filter_mode, int32_t wrap_s_mode, int32_t wrap_t_mode) - { - invalidate(); - stbi_set_flip_vertically_on_load(1); - if (m_localData != nullptr) - stbi_image_free(m_localData); - m_localData = nullptr; - m_filePath = ""; - m_bpp = 0; - m_dataStored = false; - setID(0); - m_localData = stbi_load(path.c_str(), &m_width, &m_height, &m_bpp, 4); - if (m_localData == nullptr) - { - ErrorHandler::pushError(Texture::ERR_IMAGE_LOAD_FAILED); - String err_str = ErrorHandler::getLastErrorString(); - OX_ERROR("%s\nFile Path: %s", err_str.c_str(), path.c_str()); - return *this; - } - uint32_t gl_id; - GLCall(glGenTextures(1, &gl_id)); - setID(gl_id); - bind(); - - GLCall(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, min_filter_mode)); - GLCall(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, mag_filter_mode)); - GLCall(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrap_s_mode)); - GLCall(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrap_t_mode)); - - GLCall(glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, m_width, m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, m_localData)); - GLCall(glGenerateMipmap(GL_TEXTURE_2D)); - //unbind(); - - m_dataStored = store_data; - if (!m_dataStored) - { - stbi_image_free(m_localData); - m_localData = nullptr; - } - - m_filePath = path; - setTypeName("ox::Texture"); - validate(); - return *this; - } - - Texture& Texture::create(int32_t width, int32_t height) - { - invalidate(); - if (m_localData != nullptr) - stbi_image_free(m_localData); - m_localData = nullptr; - m_filePath = ""; - m_bpp = 0; - m_dataStored = false; - setID(0); - m_width = width; - m_height = height; - uint32_t gl_id; - GLCall(glGenTextures(1, &gl_id)); - setID(gl_id); - bind(); - - GLCall(glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, m_width, m_height, 0, GL_RGB, GL_UNSIGNED_BYTE, nullptr)); - GLCall(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)); - GLCall(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)); - - GLCall(glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, m_width, m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, m_localData)); - GLCall(glGenerateMipmap(GL_TEXTURE_2D)); - - setTypeName("ox::Texture"); - validate(); - return *this; - } - - Texture& Texture::create(const unsigned char* data, unsigned int data_size, bool store_data, int32_t min_filter_mode, int32_t mag_filter_mode, int32_t wrap_s_mode, int32_t wrap_t_mode) - { - invalidate(); - stbi_set_flip_vertically_on_load(1); - if (m_localData != nullptr) - stbi_image_free(m_localData); - m_localData = nullptr; - m_filePath = ""; - m_bpp = 0; - m_dataStored = false; - setID(0); - m_localData = stbi_load_from_memory(data, data_size, &m_width, &m_height, &m_bpp, 4); - if (m_localData == nullptr) - { - ErrorHandler::pushError(Texture::ERR_IMAGE_LOAD_FAILED); - String err_str = ErrorHandler::getLastErrorString(); - OX_ERROR("%s\nMemory://data", err_str.c_str()); - return *this; - } - uint32_t gl_id; - GLCall(glGenTextures(1, &gl_id)); - setID(gl_id); - bind(); - - GLCall(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, min_filter_mode)); - GLCall(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, mag_filter_mode)); - GLCall(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrap_s_mode)); - GLCall(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrap_t_mode)); - - GLCall(glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, m_width, m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, m_localData)); - GLCall(glGenerateMipmap(GL_TEXTURE_2D)); - //unbind(); - - m_dataStored = store_data; - if (!m_dataStored) - { - stbi_image_free(m_localData); - m_localData = nullptr; - } - - setTypeName("ox::Texture"); - validate(); - return *this; - } - - Texture& Texture::createFromRawData(const unsigned char* rawData, unsigned int data_size, int32_t width, int32_t height, int32_t bpp, int32_t min_filter_mode, int32_t mag_filter_mode, int32_t wrap_s_mode, int32_t wrap_t_mode) - { - invalidate(); - stbi_set_flip_vertically_on_load(1); - if (m_localData != nullptr && m_dataStored) - stbi_image_free(m_localData); - else if (m_localData != nullptr && m_dataCopied) - delete[] m_localData; - m_localData = new uint8_t[data_size]; - for (uint32_t i = 0; i < data_size; i++) - m_localData[i] = rawData[i]; - m_filePath = ""; - m_bpp = bpp; - m_width = width; - m_height = height; - m_dataStored = false; - m_dataCopied = true; - - uint32_t gl_id; - GLCall(glGenTextures(1, &gl_id)); - setID(gl_id); - bind(); - - GLCall(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, min_filter_mode)); - GLCall(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, mag_filter_mode)); - GLCall(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, wrap_s_mode)); - GLCall(glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, wrap_t_mode)); - - GLCall(glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, m_width, m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, m_localData)); - GLCall(glGenerateMipmap(GL_TEXTURE_2D)); - - setTypeName("ox::Texture"); - validate(); - return *this; - } - - - const uint8_t* Texture::getPixelData(void) - { - if (!hasDataStored()) - { - ErrorHandler::pushError(Texture::ERR_NO_DATA_STORED); - String err_str = ErrorHandler::getLastErrorString(); - OX_ERROR("%s", err_str.c_str()); - return nullptr; - } - return m_localData; - } - - void Texture::bind(uint32_t slot) const - { - GLCall(glActiveTexture(GL_TEXTURE0 + slot)); - GLCall(glBindTexture(GL_TEXTURE_2D, getOpenGLID())); - } - - void Texture::unbind(void) const - { - GLCall(glBindTexture(GL_TEXTURE_2D, 0)); - } - - TextureAtlasIndex Texture::addTileInfo(uint32_t x, uint32_t y, uint32_t w, uint32_t h) - { - if (isInvalid() || x + w > m_width || y + h > m_height) - { - OX_WARN("ox::Texture::addTileInfo(...): Invalid texture coordinates."); - return Texture::FullTextureCoords; - } - if (!hasTileData()) - m_tiles.push_back(tTexCoords()); - Vec2 bottomLeft = { (float)x / (float)m_width, 1.0f - ((float)(y + h) / (float)m_height) }; - Vec2 bottomRight = { (float)(x + w) / (float)m_width, 1.0f - ((float)(y + h) / (float)m_height) }; - Vec2 topLeft = { (float)x / (float)m_width, 1.0f - ((float)y / (float)m_height) }; - Vec2 topRight = { (float)(x + w) / (float)m_width, 1.0f - ((float)y / (float)m_height) }; - tTexCoords texc; - texc.bottomLeft = bottomLeft; - texc.bottomRight = bottomRight; - texc.topLeft = topLeft; - texc.topRight = topRight; - m_tiles.push_back(texc); - return m_tiles.size() - 1; - } - - Texture::tTexCoords Texture::getTile(TextureAtlasIndex index) - { - if (!hasTileData() || index >= m_tiles.size()) - { - //OX_WARN("ox::Texture::getTile(...): Unable to retrieve tile."); - return Texture::tTexCoords(); - } - return m_tiles[index]; - } - - - - - CubeTexture::CubeTexture(const std::vector& paths, bool store_data, int32_t min_filter_mode, int32_t mag_filter_mode, int32_t wrap_s_mode, int32_t wrap_t_mode, int32_t wrap_r_mode) - { - create(paths, store_data, min_filter_mode, mag_filter_mode, wrap_s_mode, wrap_t_mode, wrap_r_mode); - } - - CubeTexture::~CubeTexture(void) - { - uint32_t id = getOpenGLID(); - GLCall(glDeleteTextures(1, &id)); - setID(id); - invalidate(); - } - - CubeTexture& CubeTexture::create(const std::vector& paths, bool store_data, int32_t min_filter_mode, int32_t mag_filter_mode, int32_t wrap_s_mode, int32_t wrap_t_mode, int32_t wrap_r_mode) - { - invalidate(); - if (paths.size() != 6) return *this; //TODO: Error - stbi_set_flip_vertically_on_load(0); - for (auto& tex_data : m_localData) - { - if (tex_data != nullptr) - stbi_image_free(tex_data); - } - m_localData.clear(); - m_bpp = 0; - m_dataStored = false; - setID(0); - for (uint32_t i = 0; i < 6; i++) - { - m_localData.push_back(stbi_load(paths[i].c_str(), &m_width, &m_height, &m_bpp, 4)); - //TODO: Check for different sizes and error if not equal - if (m_localData[i] == nullptr) - { - ErrorHandler::pushError(Texture::ERR_IMAGE_LOAD_FAILED); - String err_str = ErrorHandler::getLastErrorString(); - OX_ERROR("%s\nFile Path: %s", err_str.c_str(), paths[i].c_str()); - return *this; - } - } - - uint32_t gl_id; - GLCall(glGenTextures(1, &gl_id)); - setID(gl_id); - bind(); - - GLCall(glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, min_filter_mode)); - GLCall(glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, mag_filter_mode)); - GLCall(glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, wrap_s_mode)); - GLCall(glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, wrap_t_mode)); - GLCall(glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, wrap_r_mode)); - - for (uint32_t i = 0; i < 6; i++) - { - GLCall(glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGBA8, m_width, m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, m_localData[i])); - } - - m_dataStored = store_data; - if (!m_dataStored) - { - for (auto& tex_data : m_localData) - { - stbi_image_free(tex_data); - } - m_localData.clear(); - } - - setTypeName("ox::CubeTexture"); - validate(); - return *this; - } - - CubeTexture& CubeTexture::create(const std::vector& data, unsigned int data_size, bool store_data, int32_t min_filter_mode, int32_t mag_filter_mode, int32_t wrap_s_mode, int32_t wrap_t_mode, int32_t wrap_r_mode) - { - invalidate(); - if (data.size() != 6) return *this; //TODO: Error - stbi_set_flip_vertically_on_load(1); - for (auto& tex_data : m_localData) - { - if (tex_data != nullptr) - stbi_image_free(tex_data); - } - m_localData.clear(); - m_bpp = 0; - m_dataStored = false; - setID(0); - for (uint32_t i = 0; i < 6; i++) - { - m_localData.push_back(stbi_load_from_memory(data[i], data_size, &m_width, &m_height, &m_bpp, 4)); - //TODO: Check for different sizes and error if not equal - if (m_localData[i] == nullptr) - { - ErrorHandler::pushError(Texture::ERR_IMAGE_LOAD_FAILED); - String err_str = ErrorHandler::getLastErrorString(); - OX_ERROR("%s\nMemory://data", err_str.c_str()); - return *this; - } - } - - uint32_t gl_id; - GLCall(glGenTextures(1, &gl_id)); - setID(gl_id); - bind(); - - GLCall(glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, min_filter_mode)); - GLCall(glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, mag_filter_mode)); - GLCall(glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, wrap_s_mode)); - GLCall(glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, wrap_t_mode)); - GLCall(glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, wrap_r_mode)); - - for (uint32_t i = 0; i < 6; i++) - { - GLCall(glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGBA8, m_width, m_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, m_localData[i])); - } - - m_dataStored = store_data; - if (!m_dataStored) - { - for (auto& tex_data : m_localData) - { - stbi_image_free(tex_data); - } - m_localData.clear(); - } - - setTypeName("ox::CubeTexture"); - validate(); - return *this; - } - - void CubeTexture::bind(uint32_t slot) const - { - GLCall(glActiveTexture(GL_TEXTURE0 + slot)); - GLCall(glBindTexture(GL_TEXTURE_CUBE_MAP, getOpenGLID())); - } - - void CubeTexture::unbind(void) const - { - GLCall(glBindTexture(GL_TEXTURE_CUBE_MAP, 0)); - } -} diff --git a/src/ogfx/Texture.hpp b/src/ogfx/Texture.hpp deleted file mode 100755 index 3f32c31..0000000 --- a/src/ogfx/Texture.hpp +++ /dev/null @@ -1,135 +0,0 @@ -#ifndef __TEXTURE_HPP__ -#define __TEXTURE_HPP__ - -#include -#include -#include -#include -#include - -namespace ogfx -{ - using namespace ostd; //TODO: Remove from header - typedef uint32_t TextureAtlasIndex; - - class Texture : public BaseObject - { - public: struct tTexCoords - { - Vec2 topLeft { 0.0f, 1.0f }; - Vec2 topRight { 1.0f, 1.0f }; - Vec2 bottomRight { 1.0f, 0.0f }; - Vec2 bottomLeft { 0.0f, 0.0f }; - }; - public: - inline Texture(void) { invalidate(); } - Texture(const String& path, - bool store_data = false, - int32_t min_filter_mode = GL_LINEAR, - int32_t mag_filter_mode = GL_LINEAR, - int32_t wrap_s_mode = GL_CLAMP_TO_EDGE, - int32_t wrap_t_mode = GL_CLAMP_TO_EDGE); - Texture(int32_t width, int32_t height); - ~Texture(void); - Texture& create(const String& path, - bool store_data = false, - int32_t min_filter_mode = GL_LINEAR, - int32_t mag_filter_mode = GL_LINEAR, - int32_t wrap_s_mode = GL_CLAMP_TO_EDGE, - int32_t wrap_t_mode = GL_CLAMP_TO_EDGE); - Texture& create(int32_t width, int32_t height); - Texture& create(const unsigned char* data, - unsigned int data_size, - bool store_data = false, - int32_t min_filter_mode = GL_LINEAR, - int32_t mag_filter_mode = GL_LINEAR, - int32_t wrap_s_mode = GL_CLAMP_TO_EDGE, - int32_t wrap_t_mode = GL_CLAMP_TO_EDGE); - Texture& createFromRawData(const unsigned char* rawData, - unsigned int data_size, - int32_t width, - int32_t height, - int32_t bpp = 4, - int32_t min_filter_mode = GL_LINEAR, - int32_t mag_filter_mode = GL_LINEAR, - int32_t wrap_s_mode = GL_CLAMP_TO_EDGE, - int32_t wrap_t_mode = GL_CLAMP_TO_EDGE); - const uint8_t* getPixelData(void); - void bind(uint32_t slot = 0) const; - void unbind(void) const; - - inline uint32_t getOpenGLID(void) const { return static_cast(getID()); } - inline String getFilePath(void) const { return m_filePath; } - inline int32_t getWidth(void) const { return m_width; } - inline int32_t getHeight(void) const { return m_height; } - inline int32_t getBitsPerPixel(void) const { return m_bpp; } - inline bool hasDataStored(void) const { return isValid() && m_dataStored; } - inline bool hasTileData(void) { return m_tiles.size() > 0; } - TextureAtlasIndex addTileInfo(uint32_t x, uint32_t y, uint32_t w, uint32_t h); - tTexCoords getTile(TextureAtlasIndex index); - - private: - String m_filePath; - uint8_t* m_localData { nullptr }; - int32_t m_width { 0 }; - int32_t m_height { 0 }; - int32_t m_bpp { 0 }; - bool m_dataStored { false }; - bool m_dataCopied { false }; - std::vector m_tiles; - - public: - inline static constexpr int32_t ERR_IMAGE_LOAD_FAILED = OX_TEXTURE_ERR_MASK + 0x0001; - inline static constexpr int32_t ERR_NO_DATA_STORED = OX_TEXTURE_ERR_MASK + 0x0002; - - inline static constexpr TextureAtlasIndex FullTextureCoords = 0; - }; - - class CubeTexture : public BaseObject - { - public: - inline CubeTexture(void) { invalidate(); } - CubeTexture(const std::vector& paths, - bool store_data = false, - int32_t min_filter_mode = GL_LINEAR, - int32_t mag_filter_mode = GL_LINEAR, - int32_t wrap_s_mode = GL_CLAMP_TO_EDGE, - int32_t wrap_t_mode = GL_CLAMP_TO_EDGE, - int32_t wrap_r_mode = GL_CLAMP_TO_EDGE); - ~CubeTexture(void); - CubeTexture& create(const std::vector& paths, - bool store_data = false, - int32_t min_filter_mode = GL_LINEAR, - int32_t mag_filter_mode = GL_LINEAR, - int32_t wrap_s_mode = GL_CLAMP_TO_EDGE, - int32_t wrap_t_mode = GL_CLAMP_TO_EDGE, - int32_t wrap_r_mode = GL_CLAMP_TO_EDGE); - CubeTexture& create(const std::vector& data, - unsigned int data_size, - bool store_data = false, - int32_t min_filter_mode = GL_LINEAR, - int32_t mag_filter_mode = GL_LINEAR, - int32_t wrap_s_mode = GL_CLAMP_TO_EDGE, - int32_t wrap_t_mode = GL_CLAMP_TO_EDGE, - int32_t wrap_r_mode = GL_CLAMP_TO_EDGE); - - void bind(uint32_t slot = 0) const; - void unbind(void) const; - - inline uint32_t getOpenGLID(void) const { return static_cast(getID()); } - inline int32_t getWidth(void) const { return m_width; } - inline int32_t getHeight(void) const { return m_height; } - inline int32_t getBitsPerPixel(void) const { return m_bpp; } - inline bool hasDataStored(void) const { return isValid() && m_dataStored; } - - private: - std::vector m_localData; - int32_t m_width { 0 }; - int32_t m_height { 0 }; - int32_t m_bpp { 0 }; - bool m_dataStored { false }; - }; - -} - -#endif diff --git a/src/ogfx/Widgets.cpp b/src/ogfx/Widgets.cpp deleted file mode 100644 index bd50a57..0000000 --- a/src/ogfx/Widgets.cpp +++ /dev/null @@ -1,639 +0,0 @@ -#include "Widgets.hpp" -#include -#include "Window.hpp" -#include "RenderCore.hpp" -#include "Utils.hpp" - -namespace ogfx -{ - namespace oxgui - { - using namespace ostd; - - Widget::Widget(void) - { - enableSignals(true); - - setTypeName("ogfx::oxgui::Widget"); - validate(); - } - - void Widget::connectSignals(void) - { - connectSignal(tBuiltinSignals::OnGuiEvent); - connectSignal(tBuiltinSignals::WindowResized); - connectSignal(OnWidgetFocusGainedSignal); - } - - void Widget::handleSignal(ostd::tSignal& signal) - { - if (!isEnabled()) return; - if (m_parent != nullptr) - { - onSignal(signal); - return; - } - if (signal.ID == tBuiltinSignals::OnGuiEvent) - { - Event& evt = static_cast(signal.userData); - sf::Event& event = evt.sf(); - if (event.type == sf::Event::KeyPressed) - { - if (!isFocused()) return; - onKeyPressed(evt); - signal.handled = true; - } - else if (event.type == sf::Event::KeyReleased) - { - if (!isFocused()) return; - onKeyReleased(evt); - signal.handled = true; - } - else if (event.type == sf::Event::MouseButtonPressed) - { - Vec2 mousePos { (float)event.mouseButton.x, (float)event.mouseButton.y }; - if (!contains(mousePos, true)) - { - if (isFocused()) - { - focus(false); - onFocusLost(); - } - return; - } - if (!isFocused()) - { - if (WidgetManager::testForFocus(*this, mousePos)) - { - focus(); - SignalHandler::emitSignal(OnWidgetFocusGainedSignal, tSignalPriority::RealTime, *this); - onFocusGained(); - __on_mouse_pressed(evt); - signal.handled = true; - } - } - else - { - __on_mouse_pressed(evt); - signal.handled = true; - } - } - else if (event.type == sf::Event::MouseButtonReleased) - { - Vec2 mousePos { (float)event.mouseButton.x, (float)event.mouseButton.y }; - if (!contains(mousePos, true) || !isFocused()) return; - onMouseReleased(evt); - signal.handled = true; - } - else if (event.type == sf::Event::MouseMoved) - { - Vec2 mousePos { (float)event.mouseMove.x, (float)event.mouseMove.y }; - if (isFocused()) - { - __on_mouse_moved(evt); - signal.handled = true; - } - } - } - else if (signal.ID == OnWidgetFocusGainedSignal) - { - auto& sender = (Widget&)signal.userData; - if (!sender.compareByOID(*this)) focus(false); - } - onSignal(signal); - } - - void Widget::setx(float x) - { - for (auto& w : m_widgets) - { - float xdiff = w.second->getx() - getx(); - w.second->setx(x + xdiff); - } - this->x = x; - } - - void Widget::sety(float y) - { - for (auto& w : m_widgets) - { - float ydiff = w.second->gety() - gety(); - w.second->sety(y + ydiff); - } - this->y = y; - } - - WidgetID Widget::addWidget(Widget& widget) - { - if (widget.m_parent != nullptr) - return tWidgetState::WidgetHasParent; - for (auto& w : m_widgets) - { - if (w.second->compareByOID(widget)) - return tWidgetState::DuplicatedWidget; - } - m_widgets[s_nextWidgetID++] = &widget; - widget.m_parent = this; - widget.addPos(getPosition()); - __recursize_handle_set(*this); - return s_nextWidgetID - 1; - } - - void Widget::focus(bool value) - { - m_focused = value; - // if (!value) - // { - for (auto& w : m_widgets) - w.second->focus(false); - // } - } - - void Widget::drawOutlinedQuad(ogfx::RenderCore& gfx, const ostd::Vec2& position, const ostd::Vec2& size, const ostd::Color& fill, const ostd::Color& border, float borderWidth) - { - Vec2 pos = position + getPosition(); - gfx.drawQuad(pos, size, fill, false); - gfx.drawQuad(pos, { size.x, borderWidth }, border, false); - gfx.drawQuad({ pos.x, pos.y + size.y - borderWidth }, { size.x, borderWidth }, border, false); - gfx.drawQuad({ pos.x, pos.y + borderWidth }, { borderWidth, size.y - (borderWidth * 2) }, border, false); - gfx.drawQuad({ pos.x + size.x - borderWidth, pos.y + borderWidth }, { borderWidth, size.y - (borderWidth * 2) }, border, false); - } - - void Widget::render(ogfx::RenderCore& gfx) - { - if (!isEnabled()) return; - // if (!ostd::StringEditor(getTypeName()).startsWith("ogfx::oxgui")) - // return; - renderFrame(gfx); - renderContent(gfx); - if (m_disableAutoChildrenRender) - return; - for (auto& w : m_widgets) - w.second->render(gfx); - } - - void Widget::__on_mouse_pressed(ogfx::Event& evt) - { - for (auto& w : m_widgets) - w.second->__on_mouse_pressed(evt); - onMousePressed(evt); - } - - void Widget::__on_mouse_released(ogfx::Event& evt) - { - onMouseReleased(evt); - } - - void Widget::__on_mouse_moved(ogfx::Event& evt) - { - for (auto& w : m_widgets) - w.second->__on_mouse_moved(evt); - onMouseMoved(evt); - } - - void Widget::__on_key_pressed(ogfx::Event& evt) - { - onKeyPressed(evt); - } - - void Widget::__on_key_released(ogfx::Event& evt) - { - onKeyReleased(evt); - } - - void Widget::__recursize_handle_set(Widget& widget) - { - widget.setSubWindowHandle(getSubWindowHandle()); - if (widget.getChildren().size() == 0) return; - for (auto& w : widget.getChildren()) - __recursize_handle_set(*w.second); - } - - - - - - - void WidgetManager::init(void) - { - //SubWindow Theme - s_globalTheme.subWindow.titleBarColor_focused = { 20, 80, 200 }; - s_globalTheme.subWindow.titleBarColor_unfocused = { 50, 50, 50, 255 }; - s_globalTheme.subWindow.backgroundColor = { 0, 0, 0, 225 }; - s_globalTheme.subWindow.borderColor_focused = { 20, 80, 255 }; - s_globalTheme.subWindow.borderColor_unfocused = { 50, 50, 50, 255 }; - s_globalTheme.subWindow.closeButtonColor = { 120, 30, 50 }; - s_globalTheme.subWindow.closeButtonColor_hover = { 170, 30, 50 }; - s_globalTheme.subWindow.closeButtonTextColor = { 200, 200, 200 }; - s_globalTheme.subWindow.titleColor = { 200, 200, 200 }; - - s_globalTheme.subWindow.closeButtonFont = ResourceManager::getDefaultBitmapFont(); - s_globalTheme.subWindow.titleFont = ResourceManager::getDefaultBitmapFont(); - s_globalTheme.subWindow.font = ResourceManager::getDefaultBitmapFont(); - - - //TabPanel Theme - s_globalTheme.tabPanel.backgroundColor = { 30, 30, 30, 255 }; - s_globalTheme.tabPanel.tabBackground_focused = { 30, 30, 30, 255 }; - s_globalTheme.tabPanel.tabBackground_unfocused = { 20, 20, 20, 255 }; - s_globalTheme.tabPanel.focusedTabHighlight = { 255, 140, 35, 255 }; - s_globalTheme.tabPanel.unfocusedTabHighlight = { 255, 140, 35, 60 }; - s_globalTheme.tabPanel.tabBarBackground = { 5, 5, 5, 255 }; - s_globalTheme.tabPanel.tabBackground_hover = { 50, 50, 50, 255 }; - s_globalTheme.tabPanel.focusedTabNameColor = { 220, 220, 220, 225 }; - s_globalTheme.tabPanel.unfocusedTabNameColor = { 100, 100, 100, 255 }; - - s_globalTheme.tabPanel.tabNameFont = ResourceManager::getDefaultBitmapFont(); - s_globalTheme.tabPanel.font = ResourceManager::getDefaultBitmapFont(); - } - - void WidgetManager::addWidget(Widget& widget) - { - int32_t handle = s_widgets.size(); - recursive_handle_set(widget, handle); - s_widgets.push_back(&widget); - s_widgetOrder.push_back(handle); - } - - void WidgetManager::render(RenderCore& gfx) - { - // Renderer2D::tTextInfo textInfo; - // textInfo.font = ResourceManager::getDefaultBitmapFont(); - // textInfo.characterHeight = 30; - // textInfo.color = { 30, 220, 40 }; - // textInfo.characterSpacing = 0 - reorder_widgets(); - for (auto& index : s_widgetOrder) - { - s_widgets[index]->render(gfx); - // StringEditor str; - // str.addi(find_index(index)); - // gfx.drawText(str.str(), s_widgets[index]->getPosition() + Vec2 { 5, 5 }, textInfo); - } - } - - bool WidgetManager::testForFocus(Widget& widget, const ostd::Vec2& mouseClick) - { - if (widget.isFocused()) return true; - - for (int32_t i = s_widgetOrder.size() - 1; i >= 0; i--) - { - uint32_t index = s_widgetOrder[i]; - if (s_widgets[index]->contains(mouseClick)) - { - if (s_widgets[index]->compareByOID(widget)) - return true; - return false; - } - } - return false; - } - - Widget& WidgetManager::getSubWindow(int32_t handle) - { - if (handle < 0 || handle >= s_widgets.size()) - return (Widget&)BaseObject::InvalidRef(); - return *s_widgets[handle]; - } - - int32_t WidgetManager::find_index(uint32_t index) - { - for (int32_t i = 0; i < s_widgetOrder.size(); i++) - { - if (s_widgetOrder[i] == index) return i; - } - return -1; - } - - void WidgetManager::recursive_handle_set(Widget& widget, int32_t handle) - { - widget.setSubWindowHandle(handle); - if (widget.getChildren().size() == 0) return; - for (auto& w : widget.getChildren()) - recursive_handle_set(*w.second, handle); - } - - void WidgetManager::reorder_widgets(void) - { - Widget* focused_widget = nullptr; - int32_t i = 0; - for (i = s_widgetOrder.size() - 1; i >= 0; i--) - { - Widget& w = *s_widgets[s_widgetOrder[i]]; - if (w.isFocused()) - { - focused_widget = &w; - break; - } - } - if (focused_widget == nullptr) return; - if (i == s_widgetOrder.size() - 1) return; - uint32_t index = s_widgetOrder[i]; - s_widgetOrder.erase(s_widgetOrder.begin() + i); - s_widgetOrder.push_back(index); - } - - - - - - SubWindow& SubWindow::create(const ostd::Vec2& position, const ostd::Vec2& size) - { - setPosition(position); - setSize(size); - - connectSignals(); - - m_title = "Window Title"; - - setTypeName("ogfx::oxgui::SubWindow"); - validate(); - return *this; - } - - void SubWindow::renderFrame(ogfx::RenderCore& gfx) - { - WidgetTheme* theme = &WidgetManager::getGlobalTheme(); - if (m_overrideGlobalTheme) - theme = &m_theme; - float closeBtnX = getx() + getw() - m_closeBtnWidth - 1; - m_closeBtnRect = Rectangle({ closeBtnX, gety() }, { m_closeBtnWidth, m_titleBarHeight - 3 }); - float border_width = 1; - Color col; - if (isFocused()) col = theme->subWindow.borderColor_focused; - else col = theme->subWindow.borderColor_unfocused; - if (theme->subWindow.enableShadow) - gfx.drawImage(ResourceManager::getBasicShadowTexture(), getPosition() - Vec2 { 50, 50 }, getSize() + Vec2 { 100, 100 }, { 255, 255, 255, (uint8_t)(isFocused() ? 255 : 100) }, false); - drawOutlinedQuad(gfx, { 0, 0 }, getSize(), theme->subWindow.backgroundColor, col, border_width); - if (isFocused()) col = theme->subWindow.titleBarColor_focused; - else col = theme->subWindow.titleBarColor_unfocused; - gfx.drawQuad(getPosition(), { getw(), m_titleBarHeight }, col, false); - Color closeBtnCol = theme->subWindow.closeButtonColor; - if (m_hoverCloseBtn) - closeBtnCol = theme->subWindow.closeButtonColor_hover; - gfx.drawQuad(m_closeBtnRect.getPosition(), m_closeBtnRect.getSize(), closeBtnCol, false); - Renderer2D::Text::font = theme->subWindow.closeButtonFont; - Renderer2D::Text::characterHeight = 20; - Renderer2D::Text::characterSpacing = 0; - float closeBtnTxtw = Renderer2D::Text::getStringBounds("X").x; - gfx.drawText("X", Vec2 { closeBtnX + ((m_closeBtnWidth / 2.0f) - (closeBtnTxtw / 2.0f)), gety() - 2 }, theme->subWindow.closeButtonFont, (float)20, theme->subWindow.closeButtonTextColor); - Vec2 titleBounds = Renderer2D::Text::getStringBounds(m_title); - Renderer2D::Text::font = theme->subWindow.titleFont; - gfx.drawText(m_title, Vec2 { getx() + ((getw() / 2.0f) - (titleBounds.x / 2.0f)) - (m_closeBtnWidth / 2.0f), gety() }, theme->subWindow.titleFont, (float)20, theme->subWindow.titleColor); - } - - void SubWindow::onMousePressed(ogfx::Event& evt) - { - auto& sfevt = evt.sf(); - Vec2 mpos = { (float)sfevt.mouseButton.x, (float)sfevt.mouseButton.y }; - if (Rectangle(getPosition(), { getw(), m_titleBarHeight }).contains(mpos, false)) - { - m_mousePressed = true; - m_clickPos = mpos; - } - } - - void SubWindow::onMouseReleased(ogfx::Event& evt) - { - m_mousePressed = false; - } - - void SubWindow::onMouseMoved(ogfx::Event& evt) - { - auto& sfevt = evt.sf(); - Vec2 mpos = { (float)sfevt.mouseMove.x, (float)sfevt.mouseMove.y }; - if (m_closeBtnRect.contains(mpos, true)) - m_hoverCloseBtn = true; - else - m_hoverCloseBtn = false; - if (!isFocused() && !m_mousePressed) return; - if (m_mousePressed && contains(mpos, true)) - { - Vec2 diff = mpos - m_clickPos; - addPos(diff); - m_clickPos = mpos; - } - else if (m_mousePressed) - m_mousePressed = false; - } - - void SubWindow::onSignal(tSignal& signal) - { - if (signal.ID == tBuiltinSignals::WindowResized) - { - WindowSizeObj& wsobj = static_cast(signal.userData); - if (getx() + getw() > wsobj.width) - { - float xdiff = wsobj.width - getx(); - xdiff = getw() - xdiff; - subx(xdiff); - } - if (gety() + geth() > wsobj.height) - { - float ydiff = wsobj.height - gety(); - ydiff = geth() - ydiff; - suby(ydiff); - } - } - } - - - - - - - TabWidget& TabWidget::create(TabPanel& parent, const ostd::String& text) - { - if (parent.isInvalid()) - { - invalidate(); - return *this; - } - m_text = text; - - setPosition({ 0, 5 }); - setSize(parent.getContentSize()); - - m_disableAutoChildrenRender = true; - - setTypeName("ogfx::oxgui::TabWidget"); - validate(); - enable(); - parent.addWidget(*this); - return *this; - } - - void TabWidget::onMousePressed(ogfx::Event& evt) - { - - } - - void TabWidget::onMouseReleased(ogfx::Event& evt) - { - - } - - - - - - TabPanel& TabPanel::create(Widget& parent, const ostd::Vec2& subPosition, const ostd::Vec2& size) - { - if (parent.isInvalid()) - { - invalidate(); - return *this; - } - setPosition(parent.getContentOffset() + subPosition); - if (size == Vec2 { 0, 0 }) - setSize(parent.getContentSize()); - else - setSize(size); - - m_enableTabBarColorBlend = true; - - setTypeName("ogfx::oxgui::TabPanel"); - connectSignals(); - validate(); - enable(); - parent.addWidget(*this); - return *this; - } - - void TabPanel::renderFrame(ogfx::RenderCore& gfx) - { - WidgetTheme* theme = &WidgetManager::getGlobalTheme(); - if (m_overrideGlobalTheme) - theme = &m_theme; - - drawOutlinedQuad(gfx, { 0, 0 }, getSize(), theme->tabPanel.backgroundColor, theme->tabPanel.backgroundColor); - - Color tabBarColor = theme->tabPanel.tabBarBackground; - if (m_enableTabBarColorBlend) - { - Widget& baseWin = WidgetManager::getSubWindow(getSubWindowHandle()); - if (baseWin.isValid()) - { - if (baseWin.isFocused()) - tabBarColor = theme->subWindow.titleBarColor_focused; - else - tabBarColor = theme->subWindow.titleBarColor_unfocused; - } - } - - gfx.drawQuad(getPosition() - Vec2 { 0, 1 }, { getw(), theme->tabPanel.tabBarHeight }, tabBarColor, false); - - if (m_selectedTab < 0) return; - - Renderer2D::tTextInfo textInfo; - textInfo.characterHeight = theme->tabPanel.tabNameFontSize; - textInfo.characterSpacing = 3; - textInfo.font = theme->tabPanel.tabNameFont; - Renderer2D::Text::characterHeight = textInfo.characterHeight; - Renderer2D::Text::characterSpacing = textInfo.characterSpacing; - Renderer2D::Text::font = textInfo.font; - - - float tabx = 0; - m_hoverTab = -1; - for (uint32_t i = 0; i < m_tabs.size(); i++) - { - auto& tab = m_tabs[i]; - float tabw = theme->tabPanel.fixedTabWidth; - Vec2 tabPos = getPosition() + Vec2 { tabx, 0 }; - Vec2 tabSize = { tabw, theme->tabPanel.tabBarHeight }; - Color col = theme->tabPanel.tabBackground_unfocused; - - if (i == m_selectedTab) - col = theme->tabPanel.tabBackground_focused; - else if (Rectangle(tabPos, tabSize).contains(m_mousePos, true)) - { - m_hoverTab = i; - col = theme->tabPanel.tabBackground_hover; - } - gfx.drawQuad(tabPos, tabSize, col, false); - if (i == m_selectedTab) - { - gfx.drawQuad(getPosition() + Vec2 { tabx, 0 }, { tabw, theme->tabPanel.tabHighlightHeight }, theme->tabPanel.focusedTabHighlight, false); - gfx.drawQuad(tabPos, { theme->tabPanel.tabHighlightHeight, tabSize.y }, theme->tabPanel.focusedTabHighlight, false); - gfx.drawQuad(tabPos + Vec2 { tabw - theme->tabPanel.tabHighlightHeight, 0 }, { theme->tabPanel.tabHighlightHeight, tabSize.y }, theme->tabPanel.focusedTabHighlight, false); - } - else - { - gfx.drawQuad(getPosition() + Vec2 { tabx, theme->tabPanel.tabBarHeight - theme->tabPanel.tabHighlightHeight }, { tabw, theme->tabPanel.tabHighlightHeight }, theme->tabPanel.focusedTabHighlight, false); - - gfx.drawQuad(tabPos, { theme->tabPanel.tabHighlightHeight, tabSize.y - theme->tabPanel.tabHighlightHeight }, { 50, 50, 50 }, false); - } - Vec2 nameBounds = Renderer2D::Text::getStringBounds(tab->getText()); - if (i == m_selectedTab) - textInfo.color = theme->tabPanel.focusedTabNameColor; - else - textInfo.color = theme->tabPanel.unfocusedTabNameColor; - gfx.drawText(tab->getText(), getPosition() + Vec2 { tabx, 0 } + ((Vec2 { tabw, 0 } / 2.0f) - Vec2 { nameBounds.x / 2.0f, -2 }), textInfo); - tabx += tabw; - } - } - - void TabPanel::renderContent(ogfx::RenderCore& gfx) - { - if (m_selectedTab == -1) return; - auto& tab = m_tabs[m_selectedTab]; - - for (auto& w : tab->getChildren()) - w.second->render(gfx); - } - - ostd::Vec2 TabPanel::getContentSize(void) - { - float tabBarHeight = WidgetManager::getGlobalTheme().tabPanel.tabBarHeight; - if (isGlobalThemeOverrideEnabled()) - tabBarHeight = m_theme.tabPanel.tabBarHeight; - return getSize() - ostd::Vec2 { 0, tabBarHeight }; - } - - ostd::Vec2 TabPanel::getContentOffset(void) - { - float tabBarHeight = WidgetManager::getGlobalTheme().tabPanel.tabBarHeight; - if (isGlobalThemeOverrideEnabled()) - tabBarHeight = m_theme.tabPanel.tabBarHeight; - return ostd::Vec2 { 0, tabBarHeight }; - } - - void TabPanel::onMousePressed(ogfx::Event& evt) - { - if (m_hoverTab != -1) - { - m_selectedTab = m_hoverTab; - m_hoverTab = -1; - } - } - - void TabPanel::onMouseReleased(ogfx::Event& evt) - { - - } - - - void TabPanel::onMouseMoved(ogfx::Event& evt) - { - auto& sfmpos = evt.sf().mouseMove; - m_mousePos = { (float)sfmpos.x, (float)sfmpos.y }; - } - - // TabWidget& TabPanel::newTab(const ostd::String& text) - // { - // TabWidget tab; - // m_tabs.push_back(tab); - // m_tabs[m_tabs.size() - 1].create(*this, text); - // m_selectedTab = m_tabs.size() - 1; - // return m_tabs[m_tabs.size() - 1]; - // } - - void TabPanel::addTab(TabWidget& tab) - { - tab.create(*this, ""); - m_tabs.push_back(&tab); - m_selectedTab = m_tabs.size() - 1; - } - } -} \ No newline at end of file diff --git a/src/ogfx/Widgets.hpp b/src/ogfx/Widgets.hpp deleted file mode 100644 index 525b0d9..0000000 --- a/src/ogfx/Widgets.hpp +++ /dev/null @@ -1,258 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include - -#include - -namespace ogfx -{ - class RenderCore; - class Event; - - namespace oxgui - { - struct tWidgetState - { - inline static constexpr ostd::WidgetID DuplicatedWidget = 0x00000001; - inline static constexpr ostd::WidgetID WidgetHasParent = 0x00000002; - - inline static constexpr ostd::WidgetID ValidWidgetBase = 0x00000400; - - inline static bool check(ostd::WidgetID result) { return result >= ValidWidgetBase; } - }; - - class WidgetTheme - { - using Col = ostd::Color; - using Font = ostd::ResourceID; - public: struct tSubWindowTheme { - Col titleBarColor_focused; - Col titleBarColor_unfocused; - Col titleColor; - Col closeButtonColor; - Col closeButtonColor_hover; - Col closeButtonTextColor; - Col borderColor_focused; - Col borderColor_unfocused; - Col backgroundColor; - - Font titleFont { 0 }; - Font closeButtonFont { 0 }; - Font font { 0 }; - - bool enableShadow { true }; - }; - - public: struct tTabPanel { - Col backgroundColor; - Col tabBackground_focused; - Col tabBackground_unfocused; - Col focusedTabHighlight; - Col unfocusedTabHighlight; - Col tabBarBackground; - Col tabBackground_hover; - Col focusedTabNameColor; - Col unfocusedTabNameColor; - - Font tabNameFont { 0 }; - Font font { 0 }; - - float fixedTabWidth { 130 }; - float tabBarHeight { 25 }; - float tabHighlightHeight { 1 }; - float tabNameFontSize { 20 }; - }; - - public: - tSubWindowTheme subWindow; - tTabPanel tabPanel; - }; - - class Widget : public ostd::BaseObject, public ostd::Rectangle - { - public: - ~Widget(void) = default; - void connectSignals(void); - void handleSignal(ostd::tSignal& signal) override; - - inline void enableGlobalThemeOverride(bool enable = true) { m_overrideGlobalTheme = enable; } - inline bool isGlobalThemeOverrideEnabled(void) { return m_overrideGlobalTheme; } - inline void setTheme(WidgetTheme theme) { m_theme = theme; } - inline WidgetTheme& getTheme(void) { return m_theme; } - inline std::unordered_map& getChildren(void) { return m_widgets; } - inline void setSubWindowHandle(int32_t handle) { m_subWindowHandle = handle; } - inline int32_t getSubWindowHandle(void) { return m_subWindowHandle; } - - void setx(float x) override; - void sety(float y) override; - - ostd::WidgetID addWidget(Widget& widget); - - inline void enable(bool enabled = true) { m_enabled = enabled; } - inline bool isEnabled(void) { return m_enabled; } - void focus(bool value = true); - inline bool isFocused(void) { return m_focused; } - - inline virtual ostd::Vec2 getContentSize(void) { return getSize(); } - inline virtual ostd::Vec2 getContentOffset(void) { return { 0, 0 }; } - - inline virtual void onSignal(ostd::tSignal& signal) { } - inline virtual void onKeyPressed(ogfx::Event& evt) { } - inline virtual void onKeyReleased(ogfx::Event& evt) { } - inline virtual void onMousePressed(ogfx::Event& evt) { } - inline virtual void onMouseReleased(ogfx::Event& evt) { } - inline virtual void onMouseMoved(ogfx::Event& evt) { } - inline virtual void onFocusGained(void) { } - inline virtual void onFocusLost(void) { } - - inline virtual void renderFrame(ogfx::RenderCore& gfx) { } - inline virtual void renderContent(ogfx::RenderCore& gfx) { } - - void render(ogfx::RenderCore& gfx); - - private: - void __on_mouse_pressed(ogfx::Event& evt); - void __on_mouse_released(ogfx::Event& evt); - void __on_mouse_moved(ogfx::Event& evt); - void __on_key_pressed(ogfx::Event& evt); - void __on_key_released(ogfx::Event& evt); - - void __recursize_handle_set(Widget& widget); - - protected: - Widget(void); - void drawOutlinedQuad(ogfx::RenderCore& gfx, const ostd::Vec2& position, const ostd::Vec2& size, const ostd::Color& fill, const ostd::Color& border, float borderWidth = 2); - - private: - bool m_enabled { false }; - bool m_focused { false }; - int32_t m_subWindowHandle { -1 }; - - std::unordered_map m_widgets; - - inline static ostd::WidgetID s_nextWidgetID = tWidgetState::ValidWidgetBase; - - protected: - inline static const uint32_t OnWidgetFocusGainedSignal = ostd::SignalHandler::newCustomSignal(1200); - WidgetTheme m_theme; - bool m_overrideGlobalTheme { false }; - Widget* m_parent { nullptr }; - bool m_disableAutoChildrenRender { false }; - }; - - class WidgetManager : public ostd::BaseObject - { - public: - static void init(void); - static void addWidget(Widget& widget); - static void render(RenderCore& gfx); - static bool testForFocus(Widget& widget, const ostd::Vec2& mouseClick); - static Widget& getSubWindow(int32_t handle); - - inline static void setGlobalTheme(WidgetTheme theme) { s_globalTheme = theme; } - inline static WidgetTheme& getGlobalTheme(void) { return s_globalTheme; } - - private: - static void reorder_widgets(void); - static int32_t find_index(uint32_t index); - static void recursive_handle_set(Widget& widget, int32_t handle); - - private: - inline static std::vector s_widgets; - inline static std::vector s_widgetOrder; - inline static WidgetTheme s_globalTheme; - }; - - class SubWindow : public Widget - { - public: - inline SubWindow(void) : Widget() { invalidate(); } - inline SubWindow(const ostd::Vec2& position, const ostd::Vec2& size) : Widget() { create(position, size); } - virtual ~SubWindow(void) = default; - SubWindow& create(const ostd::Vec2& position, const ostd::Vec2& size); - inline ostd::String getTitle(void) { return m_title; } - inline void setTitle(const ostd::String& title) { m_title = title; } - inline ostd::Vec2 getContentSize(void) override { return getSize() - ostd::Vec2 { m_borderWidth * 2, m_titleBarHeight + (m_borderWidth * 2) }; } - inline ostd::Vec2 getContentOffset(void) override { return ostd::Vec2 { m_borderWidth, m_titleBarHeight + m_borderWidth }; } - - virtual void renderFrame(ogfx::RenderCore& gfx) override; - - void onMousePressed(ogfx::Event& evt) override; - void onMouseReleased(ogfx::Event& evt) override; - void onMouseMoved(ogfx::Event& evt) override; - - void onSignal(ostd::tSignal& signal) override; - - // inline virtual void onSignal(ostd::tSignal& signal) { } - // inline virtual void onFocusGained(void) { } - // inline virtual void onFocusLost(void) { } - // void onKeyPressed(ogfx::Event& evt) override; - // void onKeyReleased(ogfx::Event& evt) override; - - private: - bool m_mousePressed { false }; - ostd::Vec2 m_clickPos { 0, 0 }; - float m_titleBarHeight { 20 }; - float m_closeBtnWidth { 24 }; - float m_borderWidth { 1 }; - Rectangle m_closeBtnRect; - bool m_hoverCloseBtn { false }; - ostd::String m_title { "" }; - }; - - class TabPanel; - class TabWidget : public Widget - { - public: - inline TabWidget(void) : Widget() { invalidate(); } - inline TabWidget(TabPanel& parent, const ostd::String& text) { create(parent, text); } - TabWidget& create(TabPanel& parent, const ostd::String& text); - - void onMousePressed(ogfx::Event& evt) override; - void onMouseReleased(ogfx::Event& evt) override; - - inline ostd::Vec2 getContentOffset(void) override { return m_parent->getContentOffset(); } - inline ostd::Vec2 getContentSize(void) override { return getSize(); } - - inline void setText(const ostd::String& text) { m_text = text; } - inline ostd::String getText(void) { return m_text; } - - private: - ostd::String m_text { "" }; - }; - - class TabPanel : public Widget - { - public: - inline TabPanel(void) : Widget() { invalidate(); } - inline TabPanel(Widget& parent, const ostd::Vec2& subPosition = { 0, 0 }, const ostd::Vec2& size = { 0, 0 }) { create(parent, subPosition, size); } - TabPanel& create(Widget& parent, const ostd::Vec2& subPosition = { 0, 0 }, const ostd::Vec2& size = { 0, 0 }); - - virtual void renderFrame(ogfx::RenderCore& gfx) override; - virtual void renderContent(ogfx::RenderCore& gfx) override; - - ostd::Vec2 getContentSize(void) override; - ostd::Vec2 getContentOffset(void) override; - - void onMousePressed(ogfx::Event& evt) override; - void onMouseReleased(ogfx::Event& evt) override; - void onMouseMoved(ogfx::Event& evt) override; - - // TabWidget& newTab(const ostd::String& text); - void addTab(TabWidget& tab); - inline bool selectTab(uint32_t tabIndex) { if (tabIndex >= m_tabs.size()) return false; m_selectedTab = tabIndex; return true; } - inline int32_t getSelectedTab(void) { return m_selectedTab; } - - private: - std::vector m_tabs; - int32_t m_selectedTab { -1 }; - ostd::Vec2 m_mousePos { -10000, -10000 }; - int32_t m_hoverTab { -1 }; - bool m_enableTabBarColorBlend { false }; - }; - } -} \ No newline at end of file diff --git a/src/ogfx/Window.cpp b/src/ogfx/Window.cpp deleted file mode 100755 index b3b23d0..0000000 --- a/src/ogfx/Window.cpp +++ /dev/null @@ -1,93 +0,0 @@ -#include "Window.hpp" -#include "Logger.hpp" -#include "Signals.hpp" - -namespace ogfx -{ - - Window& Window::create(ostd::UI16Point size, ostd::String title, tContextSettings contextSettings) - { - sf::ContextSettings settings; - settings.depthBits = contextSettings.depthBits; - settings.stencilBits = contextSettings.stencilBits; - settings.antialiasingLevel = contextSettings.antiAliasLevel; - settings.majorVersion = contextSettings.GLMajorVersion; - settings.minorVersion = contextSettings.GLMinorVersion; - settings.attributeFlags = (contextSettings.GLProfile == tContextSettings::tGLProfile::Core ? settings.Core : settings.Default); - - m_sfml_window.create(sf::VideoMode(size.x, size.y), title, sf::Style::Default, settings); - m_sfml_window.setActive(true); - m_sfml_window.setKeyRepeatEnabled(false); - enableVSync(); - - if (!gladLoadGLLoader(reinterpret_cast(sf::Context::getFunction))) - { - OX_FATAL("Failed to initialize GLAD."); - return *this; - } - - glViewport(0, 0, size.x, size.y); - glEnable(GL_BLEND); - - glBlendEquationSeparate(GL_FUNC_ADD, GL_FUNC_ADD); - glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA); - - setTypeName("ogfx::Window"); - validate(); - __calc_win_deco_sizes(); - return *this; - } - - void Window::handleEvents(void) - { - sf::Event event; - while (m_sfml_window.pollEvent(event)) - { - Event evt(event); - if (event.type == sf::Event::Resized) - { - WindowSizeObj wsobj(event.size.width, event.size.height); - SignalHandler::emitSignal(tBuiltinSignals::WindowResized, tSignalPriority::RealTime, wsobj); - } - else - SignalHandler::emitSignal(tBuiltinSignals::OnGuiEvent, tSignalPriority::RealTime, evt); - } - } - - Window& Window::centerMouse(void) - { - m_disable_mouse_moved_event = true; - sf::Vector2i mpos = m_sfml_window.getPosition(); - sf::Vector2i deco(getBorderSize(), getTitleBarSize()); - mpos += sf::Vector2i(m_sfml_window.getSize().x / 2, m_sfml_window.getSize().y / 2); - sf::Mouse::setPosition(mpos + deco); - return *this; - } - - void Window::printOpenGLInfo(void) - { - OX_INFO("OpenGL Version: %s", glGetString(GL_VERSION)); - int nrAttributes; - glGetIntegerv(GL_MAX_VERTEX_ATTRIBS, &nrAttributes); - OX_INFO("Maximum number of vertex attributes supported: %d", nrAttributes); - int nTexUnits; - glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &nTexUnits); - OX_INFO("Maximum number of Texture Units (per Stage): %d", nTexUnits); - glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &nTexUnits); - OX_INFO("Maximum number of Texture Units (Total): %d", nTexUnits); - } - - void Window::__calc_win_deco_sizes(void) - { - if (isInvalid()) return; - auto mousePos = sf::Mouse::getPosition(); - sf::Vector2i deco { 0, 0 }; - sf::Vector2i offset { 100, 100 }; - sf::Vector2i npos = m_sfml_window.getPosition() + offset; - sf::Mouse::setPosition(npos); - auto mposr = sf::Mouse::getPosition(m_sfml_window); - deco = offset - mposr; - sf::Mouse::setPosition(mousePos); - m_win_deco_sizes = deco; - } -} diff --git a/src/ogfx/Window.hpp b/src/ogfx/Window.hpp deleted file mode 100755 index 769470f..0000000 --- a/src/ogfx/Window.hpp +++ /dev/null @@ -1,64 +0,0 @@ -#ifndef __WINDOW_HPP__ -#define __WINDOW_HPP__ - -#include -#include -#include - -namespace ogfx -{ - class Event : public ostd::BaseObject - { - public: - inline Event(sf::Event& evt) { m_handled = false; setTypeName("ogfx::Event"); validate(); m_event = evt; } - inline sf::Event& sf(void) { return m_event; } - inline bool isHandled(void) { return m_handled; } - inline void markAsHandled(void) { m_handled = true; } - - private: - sf::Event m_event; - bool m_handled; //TODO: Add more stuff (type, key and such) to this class in order to avoid using the SFML event directly if possible - }; - - class Window : public ostd::BaseObject - { - public: - inline Window(void) { invalidate(); } - inline Window(ostd::UI16Point size) { create(size, "OmniaX Window", tContextSettings()); } - inline Window(ostd::UI16Point size, ostd::String title) { create(size, title, tContextSettings()); } - inline Window(ostd::UI16Point size, ostd::String title, tContextSettings contextSettings) { create(size, title, contextSettings); } - Window& create(ostd::UI16Point size, ostd::String title, tContextSettings contextSettings); - - inline Window& enableVSync(bool v = true) { m_sfml_window.setVerticalSyncEnabled(v); return *this; } - inline Window& hideMouseCursor(bool v = true) { m_sfml_window.setMouseCursorVisible(!v); return *this; } - inline Window& disableMouseMove(bool v = true) { m_disable_mouse_moved_event = v; return *this; } - inline Window& close(void) { m_running = false; return *this; } - inline Window& renderFrame(void) { m_sfml_window.display(); return *this; } - - inline bool isRunning(void) { return m_running; } - inline uint32_t getTitleBarSize(void) { return m_win_deco_sizes.y; } - inline uint32_t getBorderSize(void) { return m_win_deco_sizes.x; } - inline sf::Window& sf(void) { return m_sfml_window; } - inline sf::Vector2i getSize(void) { return (sf::Vector2i)m_sfml_window.getSize(); } - inline sf::Vector2i getPosition(void) { return (sf::Vector2i)m_sfml_window.getPosition(); } - inline bool isMouseMoveEnabled(void) { return !m_disable_mouse_moved_event; } - - void handleEvents(void); - Window& centerMouse(void); - - void printOpenGLInfo(void); - - inline Window& initialize(void) { __calc_win_deco_sizes(); return *this; } - - private: - void __calc_win_deco_sizes(void); - - private: - sf::Window m_sfml_window; - bool m_running { true }; - sf::Vector2i m_win_deco_sizes { 0, 0 }; - bool m_disable_mouse_moved_event { false }; - }; -} - -#endif diff --git a/src/ogfx/static_resources/BasicShadowTexture.hpp b/src/ogfx/static_resources/BasicShadowTexture.hpp deleted file mode 100644 index 88cb608..0000000 --- a/src/ogfx/static_resources/BasicShadowTexture.hpp +++ /dev/null @@ -1,785 +0,0 @@ -#ifndef __BasicShadowTexture_HPP__ - #define __BasicShadowTexture_HPP__ - namespace oxres - { - struct BasicShadowTexture_t { - const unsigned int size = 15442; - const unsigned char data[15442] = { - 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 2, - 0, 0, 0, 2, 0, 8, 6, 0, 0, 0, 244, 120, 212, 250, 0, 0, 1, 132, 105, 67, - 67, 80, 73, 67, 67, 32, 112, 114, 111, 102, 105, 108, 101, 0, 0, 40, 145, 125, 145, 61, - 72, 195, 64, 28, 197, 95, 211, 74, 69, 42, 14, 22, 145, 226, 144, 161, 117, 178, 139, 138, - 56, 214, 42, 20, 161, 66, 168, 21, 90, 117, 48, 185, 244, 11, 154, 180, 36, 41, 46, 142, - 130, 107, 193, 193, 143, 197, 170, 131, 139, 179, 174, 14, 174, 130, 32, 248, 1, 226, 232, 228, - 164, 232, 34, 37, 254, 47, 41, 180, 136, 241, 224, 184, 31, 239, 238, 61, 238, 222, 1, 66, - 171, 202, 52, 51, 144, 0, 52, 221, 50, 50, 169, 164, 152, 203, 175, 138, 193, 87, 132, 16, - 193, 8, 2, 136, 201, 204, 172, 207, 73, 82, 26, 158, 227, 235, 30, 62, 190, 222, 197, 121, - 150, 247, 185, 63, 199, 160, 90, 48, 25, 224, 19, 137, 19, 172, 110, 88, 196, 27, 196, 51, - 155, 86, 157, 243, 62, 113, 152, 149, 101, 149, 248, 156, 120, 194, 160, 11, 18, 63, 114, 93, - 113, 249, 141, 115, 201, 97, 129, 103, 134, 141, 108, 102, 158, 56, 76, 44, 150, 122, 88, 233, - 97, 86, 54, 52, 226, 105, 226, 168, 170, 233, 148, 47, 228, 92, 86, 57, 111, 113, 214, 170, - 13, 214, 185, 39, 127, 97, 168, 160, 175, 44, 115, 157, 230, 24, 82, 88, 196, 18, 36, 136, - 80, 208, 64, 5, 85, 88, 136, 211, 170, 147, 98, 34, 67, 251, 73, 15, 127, 196, 241, 75, - 228, 82, 200, 85, 1, 35, 199, 2, 106, 208, 32, 59, 126, 240, 63, 248, 221, 173, 89, 156, - 154, 116, 147, 66, 73, 160, 239, 197, 182, 63, 98, 64, 112, 23, 104, 55, 109, 251, 251, 216, - 182, 219, 39, 128, 255, 25, 184, 210, 187, 254, 90, 11, 152, 253, 36, 189, 217, 213, 162, 71, - 192, 208, 54, 112, 113, 221, 213, 148, 61, 224, 114, 7, 24, 125, 170, 203, 134, 236, 72, 126, - 154, 66, 177, 8, 188, 159, 209, 55, 229, 129, 225, 91, 96, 96, 205, 237, 173, 179, 143, 211, - 7, 32, 75, 93, 165, 111, 128, 131, 67, 96, 188, 68, 217, 235, 30, 239, 238, 239, 237, 237, - 223, 51, 157, 254, 126, 0, 149, 74, 114, 180, 110, 138, 64, 17, 0, 0, 0, 6, 98, 75, - 71, 68, 0, 0, 0, 0, 0, 0, 249, 67, 187, 127, 0, 0, 0, 9, 112, 72, 89, 115, - 0, 0, 46, 35, 0, 0, 46, 35, 1, 120, 165, 63, 118, 0, 0, 0, 7, 116, 73, 77, - 69, 7, 230, 12, 26, 22, 33, 46, 190, 127, 207, 43, 0, 0, 0, 25, 116, 69, 88, 116, - 67, 111, 109, 109, 101, 110, 116, 0, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, 104, - 32, 71, 73, 77, 80, 87, 129, 14, 23, 0, 0, 32, 0, 73, 68, 65, 84, 120, 218, 237, - 157, 231, 146, 35, 45, 211, 109, 19, 77, 221, 255, 29, 143, 248, 254, 156, 57, 161, 183, 30, - 32, 13, 73, 217, 181, 34, 58, 90, 173, 150, 41, 3, 236, 157, 137, 43, 178, 150, 114, 226, - 231, 148, 147, 143, 25, 0, 0, 174, 69, 61, 240, 125, 245, 2, 199, 125, 138, 216, 157, 37, - 252, 229, 2, 231, 143, 129, 0, 0, 184, 150, 128, 103, 126, 102, 61, 233, 152, 211, 207, 253, - 170, 2, 88, 46, 240, 90, 68, 29, 0, 128, 104, 255, 140, 215, 30, 98, 2, 178, 133, 173, - 28, 248, 254, 114, 226, 103, 98, 28, 0, 0, 238, 25, 245, 175, 16, 237, 91, 26, 129, 76, - 129, 58, 74, 252, 203, 129, 175, 65, 208, 1, 0, 158, 111, 24, 234, 129, 175, 185, 140, 9, - 56, 115, 144, 94, 182, 240, 151, 131, 190, 7, 147, 0, 0, 112, 207, 108, 64, 150, 64, 215, - 131, 190, 103, 233, 251, 207, 22, 187, 140, 72, 189, 220, 192, 20, 96, 26, 0, 0, 242, 163, - 224, 179, 197, 62, 195, 8, 156, 102, 2, 142, 136, 220, 87, 8, 255, 138, 255, 121, 207, 9, - 209, 6, 0, 184, 159, 153, 88, 37, 248, 117, 242, 248, 234, 65, 231, 63, 45, 98, 43, 197, - 63, 34, 224, 217, 239, 137, 158, 35, 166, 0, 0, 224, 122, 153, 131, 168, 232, 215, 131, 222, - 115, 138, 9, 56, 90, 228, 162, 162, 155, 241, 252, 81, 153, 1, 12, 1, 0, 192, 185, 130, - 191, 34, 210, 247, 10, 126, 157, 56, 159, 67, 140, 192, 81, 11, 231, 100, 71, 253, 51, 207, - 29, 157, 21, 192, 12, 0, 0, 28, 35, 250, 43, 162, 253, 58, 241, 220, 140, 17, 88, 110, - 2, 174, 176, 136, 206, 108, 20, 95, 146, 205, 1, 25, 1, 0, 0, 34, 126, 203, 115, 171, - 204, 193, 33, 38, 96, 245, 40, 248, 172, 190, 249, 136, 240, 175, 200, 28, 204, 92, 15, 196, - 31, 0, 96, 157, 9, 136, 136, 105, 150, 240, 95, 213, 8, 212, 89, 81, 58, 83, 252, 51, - 132, 63, 98, 20, 102, 51, 4, 8, 63, 0, 192, 177, 70, 32, 99, 192, 94, 246, 223, 214, - 215, 156, 98, 2, 206, 72, 117, 175, 136, 240, 87, 152, 128, 50, 121, 77, 16, 126, 0, 128, - 99, 141, 192, 76, 63, 254, 204, 223, 171, 51, 4, 75, 76, 64, 86, 148, 59, 99, 40, 102, - 196, 186, 4, 94, 55, 99, 0, 86, 14, 18, 196, 64, 0, 0, 145, 252, 252, 103, 173, 136, - 246, 173, 255, 203, 200, 24, 68, 179, 25, 167, 26, 128, 236, 168, 63, 34, 252, 71, 27, 130, - 236, 235, 4, 0, 128, 81, 152, 127, 253, 108, 196, 31, 17, 252, 26, 252, 236, 72, 54, 32, - 197, 4, 28, 33, 106, 153, 233, 253, 213, 143, 173, 102, 224, 232, 108, 0, 38, 2, 0, 222, - 20, 229, 159, 17, 245, 31, 249, 216, 154, 13, 88, 106, 2, 34, 105, 238, 179, 197, 127, 246, - 255, 51, 102, 32, 195, 52, 33, 222, 0, 0, 115, 162, 150, 21, 249, 71, 31, 71, 95, 235, - 53, 5, 75, 77, 128, 53, 218, 61, 66, 252, 61, 143, 71, 207, 101, 155, 130, 136, 81, 98, - 154, 32, 0, 192, 194, 232, 245, 64, 225, 31, 61, 55, 107, 14, 78, 53, 1, 101, 145, 104, - 101, 136, 127, 84, 248, 103, 62, 235, 10, 70, 0, 99, 0, 0, 111, 22, 250, 51, 133, 63, - 106, 0, 102, 62, 43, 250, 247, 180, 9, 40, 39, 136, 127, 79, 84, 103, 5, 127, 133, 73, - 184, 146, 17, 192, 20, 0, 192, 211, 197, 126, 149, 240, 103, 71, 247, 214, 223, 51, 153, 129, - 229, 38, 32, 106, 0, 50, 196, 223, 154, 1, 88, 245, 219, 243, 92, 212, 20, 172, 16, 108, - 196, 31, 0, 222, 96, 2, 60, 98, 103, 253, 123, 54, 194, 207, 250, 125, 9, 19, 80, 46, - 36, 254, 94, 19, 80, 18, 94, 107, 53, 8, 103, 25, 0, 196, 30, 0, 222, 106, 10, 178, - 12, 192, 76, 148, 239, 17, 246, 85, 89, 129, 101, 38, 192, 107, 0, 86, 139, 127, 228, 183, - 215, 28, 100, 152, 1, 143, 1, 96, 118, 0, 0, 64, 76, 164, 50, 167, 247, 121, 35, 126, - 175, 200, 175, 204, 10, 44, 49, 1, 30, 3, 112, 5, 241, 247, 8, 255, 108, 214, 192, 146, - 161, 176, 94, 3, 4, 127, 29, 92, 71, 184, 99, 116, 11, 190, 235, 24, 29, 236, 23, 77, - 239, 107, 207, 101, 24, 6, 111, 86, 192, 99, 2, 78, 51, 0, 89, 226, 239, 17, 120, 239, - 99, 175, 33, 176, 62, 206, 200, 4, 32, 108, 0, 240, 118, 163, 20, 137, 252, 189, 105, 127, - 143, 200, 207, 60, 182, 154, 129, 195, 77, 128, 213, 0, 28, 37, 254, 51, 162, 175, 253, 109, - 53, 5, 89, 70, 64, 19, 241, 59, 9, 60, 102, 4, 128, 236, 196, 89, 199, 170, 69, 255, - 71, 10, 127, 244, 127, 86, 51, 112, 168, 9, 216, 110, 32, 254, 154, 232, 123, 141, 128, 119, - 172, 192, 106, 35, 128, 200, 2, 0, 230, 100, 157, 240, 91, 34, 240, 150, 152, 151, 221, 255, - 122, 127, 75, 231, 239, 222, 57, 149, 193, 115, 191, 223, 91, 6, 223, 213, 210, 143, 234, 120, - 222, 100, 0, 34, 226, 175, 153, 130, 217, 40, 191, 247, 92, 134, 57, 200, 202, 6, 96, 4, - 0, 0, 214, 8, 255, 17, 81, 127, 203, 4, 244, 140, 128, 245, 188, 123, 34, 47, 3, 241, - 239, 153, 128, 150, 176, 187, 77, 192, 22, 184, 129, 214, 209, 240, 154, 248, 91, 140, 192, 72, - 236, 181, 255, 89, 141, 130, 246, 24, 19, 0, 0, 240, 108, 241, 239, 25, 128, 150, 9, 232, - 9, 111, 196, 16, 244, 196, 94, 130, 38, 192, 197, 150, 44, 66, 35, 193, 211, 140, 65, 36, - 226, 207, 52, 6, 86, 99, 98, 49, 58, 24, 0, 0, 128, 227, 12, 64, 239, 57, 171, 248, - 143, 12, 64, 43, 242, 31, 25, 2, 75, 22, 160, 103, 6, 122, 34, 111, 53, 1, 174, 44, - 192, 230, 20, 160, 232, 122, 254, 71, 68, 251, 145, 31, 113, 102, 6, 60, 217, 0, 171, 33, - 64, 248, 185, 38, 240, 110, 209, 227, 154, 216, 5, 63, 18, 245, 71, 35, 255, 168, 208, 143, - 50, 2, 173, 174, 128, 222, 227, 104, 138, 223, 108, 2, 60, 93, 0, 103, 138, 255, 234, 31, - 111, 70, 192, 98, 0, 86, 77, 15, 68, 28, 1, 224, 41, 38, 39, 107, 186, 95, 86, 186, - 63, 235, 199, 115, 254, 154, 9, 240, 152, 1, 23, 219, 34, 65, 58, 82, 252, 63, 139, 13, - 193, 138, 76, 0, 217, 0, 0, 192, 36, 140, 255, 191, 58, 242, 207, 248, 249, 6, 175, 69, - 105, 156, 203, 40, 245, 191, 164, 43, 96, 11, 70, 169, 158, 109, 132, 179, 197, 255, 147, 244, - 124, 102, 183, 192, 140, 17, 152, 17, 123, 76, 2, 0, 220, 53, 3, 48, 19, 253, 91, 250, - 252, 51, 34, 255, 175, 34, 252, 159, 160, 33, 136, 76, 7, 76, 55, 1, 145, 117, 0, 188, - 169, 255, 214, 227, 214, 223, 17, 225, 255, 56, 255, 214, 158, 23, 71, 70, 192, 123, 206, 86, - 225, 126, 178, 168, 99, 88, 0, 214, 9, 234, 221, 207, 109, 117, 218, 95, 123, 190, 37, 246, - 165, 243, 188, 24, 12, 193, 215, 120, 45, 202, 164, 9, 8, 179, 37, 53, 206, 222, 57, 254, - 51, 194, 63, 250, 251, 19, 48, 3, 51, 89, 129, 25, 19, 224, 201, 158, 0, 0, 60, 213, - 208, 68, 22, 252, 209, 196, 63, 18, 237, 151, 142, 25, 216, 155, 128, 111, 67, 232, 63, 13, - 209, 255, 56, 140, 192, 168, 75, 192, 179, 8, 144, 43, 11, 224, 93, 8, 72, 75, 121, 143, - 132, 48, 35, 221, 223, 18, 120, 235, 115, 217, 70, 224, 40, 19, 128, 17, 0, 128, 167, 102, - 50, 86, 136, 255, 72, 248, 69, 250, 105, 253, 95, 225, 47, 141, 191, 191, 141, 207, 223, 139, - 127, 207, 8, 204, 100, 3, 180, 113, 1, 81, 19, 240, 255, 51, 0, 25, 27, 213, 140, 230, - 247, 123, 163, 126, 75, 100, 63, 122, 238, 35, 190, 236, 128, 167, 91, 64, 36, 62, 38, 128, - 76, 0, 0, 96, 0, 108, 226, 223, 18, 121, 77, 240, 45, 89, 128, 79, 199, 4, 124, 141, - 194, 223, 250, 190, 239, 78, 232, 63, 1, 19, 208, 50, 2, 158, 65, 129, 94, 138, 103, 33, - 160, 232, 34, 63, 210, 17, 85, 73, 16, 255, 214, 111, 139, 9, 136, 102, 5, 44, 226, 79, - 87, 0, 0, 192, 113, 169, 255, 200, 104, 255, 150, 9, 40, 29, 35, 80, 58, 191, 127, 51, - 10, 159, 78, 54, 32, 98, 2, 122, 70, 32, 189, 43, 96, 19, 127, 10, 186, 56, 95, 219, - 19, 60, 75, 151, 192, 94, 188, 189, 194, 63, 147, 17, 200, 234, 14, 208, 174, 223, 91, 7, - 4, 114, 206, 128, 40, 114, 206, 25, 3, 255, 162, 83, 252, 74, 39, 250, 111, 137, 127, 235, - 187, 255, 137, 188, 12, 178, 1, 123, 209, 47, 70, 193, 151, 78, 6, 64, 50, 179, 0, 222, - 149, 0, 61, 209, 191, 53, 245, 47, 98, 27, 237, 175, 9, 188, 229, 177, 214, 77, 96, 53, - 3, 158, 76, 128, 55, 27, 112, 164, 8, 34, 182, 0, 80, 79, 254, 158, 232, 214, 190, 17, - 19, 240, 237, 100, 1, 180, 136, 191, 52, 12, 65, 203, 28, 180, 196, 255, 179, 123, 79, 235, - 252, 75, 231, 26, 105, 93, 1, 50, 120, 94, 205, 2, 120, 167, 1, 106, 130, 53, 211, 231, - 223, 139, 254, 61, 66, 175, 253, 237, 49, 2, 45, 67, 32, 11, 51, 1, 94, 81, 70, 188, - 1, 224, 110, 38, 34, 106, 2, 102, 214, 244, 223, 139, 126, 107, 176, 95, 235, 247, 72, 240, - 247, 199, 249, 155, 13, 104, 137, 255, 191, 246, 250, 211, 248, 140, 98, 184, 94, 189, 174, 128, - 169, 85, 2, 163, 43, 1, 122, 231, 250, 183, 222, 175, 137, 190, 214, 5, 240, 81, 158, 27, - 153, 129, 158, 41, 152, 93, 56, 72, 36, 182, 82, 160, 8, 93, 1, 156, 59, 16, 93, 191, - 231, 220, 173, 253, 255, 25, 169, 255, 79, 195, 12, 124, 6, 66, 93, 27, 81, 255, 94, 252, - 91, 231, 208, 51, 1, 101, 144, 5, 40, 206, 107, 233, 237, 10, 24, 102, 1, 60, 211, 0, - 75, 224, 53, 25, 27, 251, 124, 58, 70, 192, 106, 2, 172, 102, 32, 106, 4, 68, 242, 103, - 5, 204, 10, 31, 162, 9, 0, 87, 51, 51, 71, 140, 250, 215, 82, 255, 31, 37, 250, 223, - 139, 126, 75, 248, 123, 207, 183, 76, 64, 105, 100, 1, 70, 154, 89, 149, 54, 221, 186, 21, - 176, 41, 11, 96, 93, 10, 56, 18, 253, 207, 174, 243, 111, 21, 126, 203, 143, 150, 53, 152, - 49, 1, 34, 177, 69, 130, 60, 102, 0, 97, 199, 0, 1, 209, 252, 83, 174, 147, 117, 183, - 191, 172, 197, 126, 122, 163, 243, 123, 81, 127, 235, 239, 162, 8, 255, 222, 4, 148, 129, 17, - 232, 101, 3, 70, 221, 1, 189, 40, 126, 42, 11, 96, 221, 13, 48, 18, 253, 107, 89, 1, - 17, 251, 226, 63, 171, 126, 86, 152, 0, 17, 223, 160, 192, 222, 181, 35, 3, 0, 0, 79, - 49, 64, 25, 155, 253, 68, 7, 253, 105, 226, 255, 49, 68, 253, 17, 190, 59, 29, 249, 14, - 116, 161, 42, 217, 0, 109, 243, 160, 16, 91, 80, 148, 172, 209, 255, 204, 194, 63, 31, 37, - 51, 208, 250, 249, 115, 49, 19, 160, 101, 1, 200, 0, 112, 174, 128, 120, 146, 1, 240, 71, - 255, 43, 197, 223, 218, 245, 27, 53, 3, 154, 46, 212, 193, 115, 158, 44, 128, 58, 35, 32, - 178, 25, 144, 39, 250, 247, 68, 254, 86, 177, 47, 70, 241, 247, 154, 129, 140, 129, 129, 34, - 199, 45, 14, 132, 96, 2, 192, 93, 12, 205, 170, 69, 127, 172, 83, 254, 190, 63, 191, 127, - 77, 128, 71, 252, 173, 231, 169, 105, 154, 55, 19, 48, 186, 158, 83, 89, 0, 207, 58, 0, - 179, 209, 191, 229, 53, 214, 168, 191, 12, 196, 254, 79, 82, 70, 224, 104, 19, 160, 137, 248, - 29, 5, 30, 83, 2, 240, 206, 236, 193, 236, 226, 63, 25, 226, 63, 138, 254, 163, 194, 175, - 77, 217, 251, 4, 50, 1, 251, 168, 221, 122, 207, 181, 233, 128, 234, 107, 162, 123, 1, 120, - 27, 249, 158, 32, 122, 162, 126, 75, 228, 255, 199, 96, 2, 254, 56, 50, 0, 209, 233, 129, - 154, 9, 200, 204, 0, 32, 178, 0, 112, 117, 115, 50, 155, 1, 240, 174, 246, 183, 143, 254, - 123, 169, 255, 253, 207, 95, 233, 47, 91, 47, 206, 115, 136, 234, 68, 47, 11, 160, 237, 26, - 216, 50, 20, 67, 237, 136, 238, 6, 104, 157, 238, 55, 59, 19, 64, 91, 228, 231, 51, 16, - 255, 104, 86, 192, 50, 38, 192, 99, 2, 60, 89, 128, 179, 87, 6, 36, 178, 7, 32, 83, - 176, 250, 120, 50, 182, 250, 181, 26, 128, 125, 212, 175, 101, 0, 100, 208, 142, 203, 224, 88, - 247, 207, 125, 12, 102, 64, 11, 20, 45, 11, 252, 120, 179, 0, 210, 202, 0, 104, 141, 251, - 108, 132, 218, 139, 254, 45, 153, 0, 207, 108, 128, 63, 78, 51, 224, 49, 2, 163, 101, 131, - 69, 230, 186, 2, 44, 127, 35, 196, 0, 112, 87, 227, 49, 51, 245, 79, 91, 241, 239, 43, - 227, 244, 191, 39, 245, 47, 226, 239, 243, 255, 21, 253, 95, 241, 175, 242, 191, 211, 1, 235, - 224, 187, 122, 131, 248, 100, 96, 6, 68, 17, 124, 117, 74, 224, 38, 115, 131, 205, 138, 18, - 181, 70, 163, 127, 235, 10, 128, 150, 110, 128, 136, 25, 176, 102, 1, 62, 226, 223, 58, 88, - 139, 250, 239, 144, 5, 192, 120, 0, 144, 1, 152, 141, 254, 45, 25, 0, 203, 220, 255, 111, - 32, 250, 239, 165, 253, 37, 33, 250, 223, 27, 130, 178, 51, 2, 255, 248, 138, 158, 53, 214, - 54, 9, 82, 163, 252, 17, 179, 219, 1, 203, 64, 224, 101, 16, 249, 90, 215, 1, 176, 172, - 245, 175, 153, 0, 139, 17, 136, 204, 12, 232, 117, 11, 136, 204, 119, 5, 68, 178, 44, 0, - 0, 87, 52, 28, 89, 203, 254, 246, 50, 1, 35, 3, 96, 141, 254, 255, 42, 162, 175, 29, - 247, 254, 113, 47, 27, 48, 250, 25, 101, 1, 162, 219, 0, 15, 13, 130, 101, 37, 192, 168, - 48, 69, 82, 255, 61, 241, 47, 98, 91, 238, 119, 111, 2, 44, 70, 160, 151, 13, 152, 89, - 31, 64, 100, 205, 242, 192, 119, 23, 123, 140, 10, 192, 189, 34, 249, 204, 99, 95, 181, 236, - 239, 126, 192, 223, 199, 16, 253, 255, 117, 4, 106, 189, 99, 111, 29, 211, 167, 241, 216, 147, - 253, 30, 205, 227, 247, 92, 115, 83, 55, 192, 230, 188, 185, 90, 250, 223, 35, 130, 51, 59, - 3, 106, 153, 128, 150, 17, 136, 142, 11, 88, 157, 5, 176, 100, 2, 86, 138, 39, 162, 12, - 128, 217, 56, 234, 115, 163, 115, 255, 71, 209, 255, 39, 24, 253, 127, 59, 145, 191, 69, 248, - 71, 199, 244, 233, 100, 2, 170, 216, 6, 200, 139, 204, 79, 11, 52, 97, 93, 7, 192, 154, - 254, 183, 152, 5, 175, 224, 123, 103, 3, 180, 132, 223, 147, 9, 240, 174, 15, 224, 25, 11, - 224, 49, 2, 17, 129, 70, 204, 1, 224, 74, 166, 97, 101, 250, 191, 37, 254, 222, 249, 254, - 189, 182, 88, 20, 225, 239, 9, 126, 149, 255, 29, 252, 183, 31, 3, 80, 59, 66, 47, 210, - 222, 135, 64, 12, 70, 192, 186, 81, 80, 119, 29, 0, 143, 248, 120, 55, 12, 202, 222, 20, - 40, 186, 63, 128, 102, 4, 60, 131, 2, 163, 51, 2, 188, 6, 128, 153, 0, 100, 52, 224, - 29, 17, 243, 147, 175, 71, 198, 210, 191, 173, 145, 255, 31, 177, 143, 252, 215, 6, 253, 181, - 218, 142, 106, 200, 0, 212, 142, 200, 143, 140, 128, 150, 254, 247, 118, 5, 84, 37, 35, 208, - 237, 6, 216, 130, 55, 221, 58, 242, 127, 198, 12, 68, 68, 255, 143, 242, 99, 237, 18, 136, - 154, 128, 204, 53, 1, 44, 98, 246, 6, 177, 67, 208, 1, 195, 112, 239, 115, 204, 52, 0, - 173, 168, 123, 47, 254, 150, 53, 254, 173, 131, 254, 246, 194, 255, 199, 144, 17, 40, 131, 168, - 223, 98, 2, 68, 108, 187, 252, 137, 37, 202, 31, 225, 49, 0, 150, 197, 127, 196, 32, 114, - 45, 209, 243, 110, 10, 20, 221, 253, 239, 207, 132, 1, 136, 238, 19, 96, 49, 70, 100, 0, - 56, 71, 64, 252, 201, 0, 248, 87, 255, 235, 45, 249, 59, 147, 250, 183, 44, 52, 244, 17, - 251, 162, 68, 163, 244, 127, 230, 140, 128, 148, 49, 0, 154, 88, 71, 140, 130, 37, 226, 247, - 108, 10, 100, 53, 2, 214, 108, 128, 214, 21, 80, 20, 19, 48, 179, 38, 64, 134, 9, 64, - 36, 185, 22, 128, 160, 95, 241, 90, 88, 196, 223, 34, 252, 34, 237, 145, 255, 45, 241, 239, - 45, 245, 251, 87, 244, 57, 254, 163, 232, 127, 100, 0, 34, 59, 10, 142, 198, 207, 69, 102, - 4, 84, 131, 25, 248, 207, 66, 64, 189, 15, 140, 52, 162, 145, 141, 130, 188, 230, 192, 187, - 52, 176, 119, 76, 128, 101, 44, 128, 119, 137, 96, 79, 22, 96, 213, 253, 0, 0, 56, 202, - 248, 84, 195, 115, 51, 209, 255, 103, 103, 4, 202, 46, 218, 254, 138, 127, 149, 191, 222, 119, - 253, 17, 123, 23, 68, 203, 16, 104, 221, 0, 34, 227, 110, 0, 111, 132, 111, 221, 27, 160, - 68, 198, 0, 140, 28, 75, 47, 234, 215, 62, 43, 50, 24, 208, 51, 35, 224, 227, 204, 2, - 120, 87, 8, 204, 152, 13, 96, 205, 182, 176, 34, 32, 0, 92, 53, 51, 113, 196, 244, 191, - 239, 78, 136, 247, 209, 191, 182, 246, 190, 231, 92, 44, 99, 14, 62, 3, 209, 175, 78, 241, - 215, 140, 64, 201, 188, 223, 86, 3, 80, 20, 241, 150, 142, 248, 91, 133, 94, 22, 10, 255, - 72, 208, 123, 227, 1, 178, 179, 0, 158, 12, 192, 236, 204, 139, 55, 128, 241, 0, 132, 248, - 250, 231, 58, 51, 5, 112, 148, 1, 136, 70, 255, 34, 190, 126, 255, 63, 157, 199, 31, 25, - 143, 63, 136, 238, 26, 219, 211, 216, 234, 48, 1, 203, 6, 1, 122, 26, 102, 205, 109, 89, - 211, 255, 163, 8, 219, 186, 82, 224, 31, 209, 7, 2, 122, 150, 10, 142, 206, 6, 208, 76, - 192, 157, 50, 0, 8, 48, 0, 6, 100, 85, 6, 192, 186, 251, 95, 217, 101, 1, 188, 209, - 127, 85, 162, 254, 158, 216, 183, 178, 14, 31, 135, 9, 16, 99, 0, 60, 74, 227, 239, 23, - 43, 106, 13, 16, 84, 205, 128, 182, 20, 176, 103, 0, 160, 38, 246, 154, 27, 139, 76, 17, - 204, 200, 4, 120, 199, 2, 156, 49, 29, 48, 42, 186, 8, 53, 0, 156, 97, 44, 50, 23, - 0, 210, 12, 64, 107, 254, 252, 72, 111, 70, 162, 255, 167, 99, 0, 246, 70, 224, 211, 48, - 31, 30, 19, 96, 201, 2, 104, 131, 1, 67, 81, 191, 236, 150, 2, 206, 16, 27, 111, 255, - 127, 180, 43, 96, 36, 254, 17, 67, 48, 50, 2, 51, 43, 3, 122, 179, 0, 154, 1, 160, - 11, 0, 51, 3, 68, 227, 119, 59, 191, 172, 25, 0, 154, 1, 248, 21, 219, 175, 163, 253, - 176, 12, 250, 251, 52, 126, 247, 162, 255, 189, 94, 125, 39, 179, 0, 51, 105, 126, 211, 64, - 192, 200, 94, 0, 150, 44, 129, 214, 255, 47, 146, 187, 71, 192, 200, 16, 88, 6, 5, 106, - 187, 10, 30, 105, 0, 34, 134, 236, 9, 226, 136, 192, 3, 6, 225, 89, 231, 48, 202, 2, - 100, 26, 128, 81, 234, 191, 56, 142, 171, 26, 133, 191, 247, 56, 26, 253, 123, 179, 0, 145, - 168, 191, 137, 197, 0, 120, 6, 0, 90, 26, 244, 34, 177, 129, 130, 150, 197, 130, 180, 199, - 150, 232, 95, 51, 2, 150, 93, 2, 35, 55, 156, 21, 1, 49, 2, 128, 240, 63, 217, 0, - 140, 50, 0, 222, 46, 128, 239, 79, 196, 255, 27, 249, 123, 196, 95, 75, 253, 127, 59, 98, - 95, 12, 25, 0, 173, 235, 219, 170, 131, 35, 193, 119, 109, 253, 27, 53, 0, 222, 134, 91, - 219, 4, 72, 58, 66, 56, 19, 253, 207, 136, 127, 75, 244, 45, 93, 1, 222, 177, 0, 34, - 235, 103, 2, 188, 81, 64, 49, 12, 128, 160, 95, 239, 124, 87, 205, 0, 248, 21, 255, 186, - 51, 1, 163, 46, 0, 45, 226, 247, 244, 243, 71, 197, 191, 56, 244, 177, 39, 232, 218, 218, - 0, 174, 181, 3, 178, 12, 128, 55, 66, 45, 131, 76, 194, 168, 95, 196, 178, 21, 111, 134, - 17, 24, 153, 131, 214, 98, 68, 71, 13, 4, 204, 20, 60, 132, 19, 0, 178, 141, 140, 103, - 22, 64, 116, 0, 224, 63, 161, 175, 13, 225, 215, 22, 250, 17, 209, 151, 20, 238, 165, 253, - 247, 98, 175, 253, 173, 117, 111, 139, 162, 127, 150, 217, 0, 251, 182, 60, 188, 20, 240, 236, - 18, 192, 61, 33, 19, 71, 70, 32, 210, 37, 160, 237, 23, 16, 53, 5, 214, 217, 0, 214, - 110, 0, 79, 70, 196, 42, 212, 87, 23, 113, 76, 6, 192, 243, 179, 12, 213, 241, 191, 222, - 24, 128, 72, 6, 224, 43, 255, 221, 74, 247, 171, 68, 252, 214, 232, 255, 59, 16, 253, 143, - 248, 231, 252, 91, 187, 5, 142, 108, 155, 235, 150, 244, 65, 35, 177, 215, 166, 99, 148, 164, - 159, 143, 140, 183, 14, 142, 206, 18, 136, 174, 10, 120, 149, 169, 128, 8, 49, 0, 28, 105, - 60, 86, 79, 1, 220, 247, 253, 91, 82, 255, 35, 3, 160, 205, 241, 47, 1, 209, 23, 241, - 205, 136, 179, 232, 169, 119, 89, 96, 117, 208, 160, 101, 51, 32, 175, 32, 89, 187, 3, 180, - 81, 143, 34, 241, 153, 2, 214, 141, 131, 102, 119, 23, 28, 69, 255, 159, 193, 49, 123, 197, - 255, 169, 131, 0, 49, 38, 0, 247, 29, 71, 176, 106, 27, 224, 214, 50, 192, 223, 206, 243, - 214, 12, 196, 104, 89, 225, 86, 223, 255, 55, 57, 218, 159, 13, 138, 179, 150, 5, 110, 110, - 6, 148, 209, 120, 123, 230, 170, 143, 78, 54, 34, 248, 222, 61, 4, 178, 50, 6, 61, 3, - 224, 221, 25, 176, 119, 109, 188, 134, 12, 33, 7, 192, 56, 92, 233, 88, 162, 93, 0, 251, - 191, 203, 206, 4, 88, 12, 192, 191, 136, 94, 164, 191, 46, 191, 182, 155, 224, 140, 200, 71, - 3, 94, 147, 120, 103, 16, 93, 7, 32, 50, 232, 207, 186, 227, 157, 22, 53, 103, 204, 26, - 200, 136, 254, 61, 6, 64, 27, 3, 112, 245, 229, 128, 17, 120, 0, 12, 66, 134, 9, 176, - 206, 255, 31, 101, 3, 60, 6, 224, 215, 8, 140, 198, 20, 140, 250, 253, 51, 34, 253, 145, - 174, 137, 248, 54, 43, 178, 100, 1, 76, 102, 97, 51, 124, 145, 71, 32, 138, 193, 44, 104, - 209, 191, 53, 83, 144, 97, 2, 180, 191, 71, 102, 97, 52, 6, 192, 155, 1, 184, 170, 1, - 64, 248, 1, 48, 2, 103, 24, 128, 253, 82, 191, 35, 3, 240, 253, 137, 244, 165, 33, 250, - 191, 219, 241, 238, 119, 245, 27, 45, 225, 59, 234, 54, 142, 238, 251, 98, 233, 54, 47, 78, - 65, 15, 103, 6, 182, 131, 11, 162, 119, 150, 64, 84, 248, 71, 55, 109, 148, 242, 215, 102, - 9, 88, 186, 10, 50, 7, 2, 94, 41, 11, 128, 41, 0, 184, 167, 216, 151, 131, 190, 183, - 24, 158, 175, 187, 231, 247, 211, 218, 90, 81, 255, 63, 122, 35, 245, 69, 218, 75, 241, 202, - 192, 88, 104, 105, 254, 222, 255, 178, 86, 125, 245, 142, 3, 208, 22, 1, 242, 172, 21, 144, - 106, 0, 162, 130, 21, 217, 36, 72, 12, 159, 225, 217, 85, 240, 35, 190, 177, 3, 25, 51, - 1, 68, 124, 187, 2, 106, 21, 248, 202, 130, 140, 89, 0, 56, 54, 130, 47, 39, 29, 155, - 85, 252, 75, 67, 152, 101, 16, 245, 87, 233, 119, 5, 244, 162, 127, 105, 68, 252, 218, 220, - 125, 107, 255, 191, 71, 119, 196, 152, 1, 176, 4, 199, 214, 76, 128, 171, 188, 28, 149, 1, - 136, 236, 42, 104, 89, 23, 192, 243, 188, 69, 236, 173, 89, 131, 34, 190, 46, 128, 140, 213, - 0, 223, 184, 18, 32, 6, 2, 222, 38, 224, 87, 175, 7, 213, 120, 108, 154, 248, 247, 118, - 185, 27, 153, 128, 239, 79, 38, 96, 20, 253, 239, 51, 0, 251, 212, 255, 111, 38, 33, 186, - 172, 175, 182, 228, 176, 103, 185, 223, 114, 214, 253, 94, 177, 20, 176, 37, 197, 225, 25, 13, - 57, 51, 232, 194, 58, 16, 48, 186, 229, 176, 39, 163, 144, 217, 5, 176, 186, 128, 32, 188, - 0, 207, 171, 79, 117, 241, 185, 212, 65, 52, 106, 17, 255, 34, 237, 212, 191, 252, 8, 127, - 111, 196, 126, 207, 128, 180, 178, 0, 214, 29, 251, 188, 131, 248, 180, 5, 126, 60, 131, 231, - 45, 227, 0, 166, 103, 5, 108, 147, 55, 188, 76, 22, 164, 104, 186, 68, 140, 55, 38, 210, - 61, 224, 233, 42, 184, 82, 6, 128, 181, 0, 0, 222, 151, 29, 56, 171, 174, 105, 99, 13, - 234, 192, 8, 140, 196, 95, 18, 51, 0, 117, 32, 254, 25, 163, 251, 173, 1, 170, 22, 252, - 90, 2, 189, 244, 157, 0, 127, 13, 192, 17, 41, 8, 139, 11, 242, 100, 0, 122, 14, 203, - 187, 231, 114, 246, 207, 71, 230, 198, 0, 92, 121, 16, 32, 98, 13, 112, 143, 58, 85, 15, - 62, 238, 94, 215, 128, 39, 3, 160, 137, 219, 71, 254, 119, 205, 255, 35, 218, 115, 143, 182, - 88, 117, 205, 186, 32, 208, 239, 107, 179, 178, 55, 255, 147, 65, 216, 46, 84, 152, 189, 3, - 223, 172, 11, 7, 137, 193, 76, 204, 46, 57, 28, 237, 2, 240, 78, 3, 44, 23, 106, 96, - 200, 42, 0, 209, 250, 243, 235, 64, 13, 124, 159, 37, 77, 29, 221, 227, 190, 55, 104, 79, - 118, 6, 35, 67, 236, 101, 32, 244, 158, 189, 107, 86, 223, 231, 26, 253, 127, 214, 74, 128, - 209, 221, 0, 181, 207, 138, 68, 255, 86, 177, 143, 24, 130, 79, 240, 245, 35, 7, 41, 146, - 55, 8, 240, 206, 194, 135, 104, 195, 155, 202, 104, 189, 241, 57, 123, 214, 160, 23, 137, 47, - 92, 243, 239, 185, 239, 32, 162, 222, 63, 206, 72, 249, 139, 33, 234, 239, 25, 129, 81, 192, - 106, 9, 108, 15, 109, 11, 55, 99, 1, 47, 73, 149, 196, 226, 170, 196, 121, 65, 69, 230, - 210, 253, 171, 210, 72, 214, 197, 128, 44, 6, 224, 9, 253, 255, 8, 60, 128, 189, 62, 212, - 27, 28, 123, 56, 242, 116, 70, 182, 159, 157, 9, 200, 90, 50, 94, 196, 215, 151, 239, 205, - 18, 136, 248, 6, 193, 103, 68, 252, 174, 207, 216, 22, 21, 222, 140, 134, 127, 148, 194, 215, - 156, 149, 199, 201, 101, 45, 243, 88, 146, 10, 145, 55, 250, 103, 29, 0, 128, 103, 27, 132, - 122, 225, 99, 172, 19, 175, 245, 102, 3, 44, 6, 32, 187, 109, 23, 227, 119, 137, 193, 12, - 136, 162, 73, 158, 182, 51, 101, 92, 192, 182, 176, 96, 120, 79, 108, 36, 126, 30, 103, 85, - 140, 199, 16, 93, 113, 208, 250, 30, 145, 120, 6, 0, 3, 0, 0, 79, 199, 179, 122, 160, - 167, 189, 63, 106, 187, 94, 79, 87, 64, 100, 42, 160, 85, 244, 15, 89, 10, 120, 182, 127, - 194, 35, 98, 22, 231, 164, 101, 0, 68, 41, 24, 154, 64, 143, 196, 94, 100, 222, 44, 104, - 194, 255, 20, 19, 128, 33, 0, 240, 11, 227, 29, 234, 77, 149, 216, 66, 64, 158, 207, 174, - 131, 182, 176, 53, 66, 222, 211, 246, 102, 100, 110, 139, 65, 159, 86, 104, 102, 10, 219, 73, - 7, 84, 156, 143, 173, 175, 213, 82, 51, 22, 35, 33, 6, 243, 16, 17, 250, 149, 203, 1, - 63, 69, 96, 49, 8, 240, 70, 129, 191, 91, 61, 168, 11, 142, 179, 37, 244, 163, 231, 60, - 3, 253, 180, 182, 95, 20, 193, 246, 232, 142, 69, 191, 34, 107, 1, 68, 162, 124, 245, 61, - 153, 123, 1, 148, 192, 251, 172, 131, 253, 138, 241, 38, 120, 50, 0, 214, 116, 190, 246, 154, - 72, 118, 64, 130, 89, 128, 232, 117, 126, 11, 24, 8, 184, 130, 128, 63, 169, 156, 122, 55, - 23, 106, 153, 3, 203, 50, 192, 94, 147, 48, 50, 1, 209, 118, 93, 6, 102, 96, 102, 247, - 86, 111, 64, 87, 188, 66, 126, 84, 6, 224, 10, 141, 184, 85, 32, 35, 11, 52, 136, 196, - 86, 112, 178, 246, 73, 105, 105, 42, 79, 161, 98, 75, 96, 0, 140, 230, 85, 204, 74, 47, - 43, 208, 18, 255, 72, 102, 161, 245, 57, 69, 49, 40, 158, 238, 87, 111, 6, 32, 218, 46, - 71, 103, 122, 77, 71, 251, 103, 26, 0, 207, 28, 200, 72, 97, 180, 12, 162, 243, 186, 192, - 76, 55, 57, 114, 149, 214, 232, 255, 238, 99, 0, 48, 18, 0, 199, 138, 247, 234, 122, 87, - 7, 223, 211, 91, 1, 208, 146, 5, 24, 137, 186, 165, 11, 96, 36, 230, 226, 204, 0, 88, - 131, 77, 77, 111, 196, 16, 64, 30, 206, 118, 209, 130, 111, 73, 125, 107, 162, 47, 18, 27, - 153, 233, 29, 201, 111, 113, 156, 214, 247, 120, 50, 28, 136, 47, 6, 3, 238, 45, 206, 119, - 40, 211, 213, 121, 124, 209, 46, 0, 203, 184, 130, 209, 123, 60, 139, 194, 89, 131, 82, 79, - 244, 127, 228, 189, 106, 93, 131, 91, 27, 0, 207, 128, 63, 107, 52, 172, 185, 50, 49, 186, - 64, 237, 111, 239, 20, 190, 204, 105, 128, 229, 194, 247, 15, 0, 195, 249, 14, 19, 210, 203, - 4, 120, 119, 2, 108, 125, 86, 29, 8, 95, 111, 22, 128, 85, 91, 44, 153, 93, 205, 4, - 68, 183, 186, 95, 105, 12, 196, 106, 14, 182, 139, 21, 112, 45, 13, 99, 185, 145, 214, 44, - 192, 204, 242, 140, 158, 12, 128, 39, 107, 48, 99, 124, 222, 34, 204, 152, 13, 120, 123, 102, - 224, 232, 186, 224, 157, 181, 48, 187, 19, 96, 43, 115, 96, 201, 0, 104, 109, 182, 87, 140, - 35, 3, 252, 74, 210, 61, 61, 228, 222, 30, 177, 25, 80, 246, 78, 131, 101, 225, 69, 204, - 26, 39, 96, 249, 142, 140, 12, 192, 213, 4, 17, 113, 6, 50, 3, 207, 50, 25, 150, 115, - 202, 216, 9, 208, 179, 188, 112, 47, 3, 160, 181, 217, 150, 126, 125, 143, 166, 149, 139, 149, - 139, 211, 13, 192, 145, 21, 198, 42, 158, 61, 113, 23, 199, 251, 102, 178, 4, 87, 24, 3, - 240, 86, 113, 198, 144, 192, 29, 5, 247, 110, 38, 99, 180, 19, 224, 76, 6, 160, 151, 85, - 208, 250, 191, 189, 35, 245, 181, 65, 123, 153, 217, 130, 163, 202, 134, 233, 254, 109, 23, 44, - 192, 89, 209, 110, 116, 81, 33, 237, 239, 200, 88, 2, 237, 123, 51, 210, 255, 172, 6, 8, - 112, 255, 50, 91, 111, 114, 206, 154, 248, 106, 187, 1, 122, 183, 3, 110, 101, 17, 44, 237, - 177, 40, 209, 255, 236, 248, 42, 111, 192, 121, 169, 118, 112, 59, 185, 128, 29, 181, 169, 144, - 245, 127, 150, 77, 30, 188, 199, 21, 153, 87, 122, 165, 117, 0, 16, 111, 128, 123, 213, 177, - 51, 6, 7, 90, 186, 1, 70, 81, 124, 81, 178, 7, 189, 99, 208, 150, 77, 142, 164, 253, - 189, 193, 218, 109, 219, 208, 237, 192, 194, 90, 22, 124, 86, 73, 184, 57, 171, 187, 0, 188, - 5, 145, 105, 128, 152, 19, 184, 62, 245, 5, 117, 33, 210, 13, 48, 218, 241, 207, 178, 153, - 205, 104, 252, 64, 207, 60, 172, 104, 211, 87, 104, 220, 153, 109, 88, 243, 122, 109, 23, 45, - 136, 101, 225, 231, 148, 164, 27, 149, 209, 141, 241, 246, 189, 0, 16, 109, 192, 112, 94, 123, - 187, 95, 239, 241, 174, 236, 2, 168, 193, 246, 216, 211, 166, 71, 62, 107, 85, 54, 160, 56, - 175, 195, 225, 25, 128, 59, 53, 234, 51, 166, 194, 179, 121, 81, 89, 112, 227, 153, 5, 0, - 128, 153, 184, 138, 97, 40, 134, 99, 41, 50, 158, 211, 31, 17, 54, 205, 52, 204, 140, 235, - 242, 156, 247, 161, 83, 245, 86, 178, 93, 188, 82, 88, 251, 225, 103, 69, 200, 178, 30, 180, - 136, 63, 37, 111, 93, 10, 114, 244, 57, 103, 141, 1, 64, 204, 1, 158, 147, 125, 168, 139, - 143, 197, 179, 79, 189, 39, 141, 239, 49, 25, 90, 27, 237, 105, 191, 51, 198, 13, 96, 0, - 46, 18, 225, 151, 192, 123, 102, 156, 97, 239, 179, 206, 26, 3, 240, 70, 65, 199, 192, 64, - 38, 245, 101, 245, 161, 6, 63, 63, 123, 12, 64, 239, 51, 172, 169, 240, 114, 161, 118, 225, - 114, 109, 210, 246, 128, 2, 125, 197, 93, 241, 86, 245, 33, 149, 187, 22, 52, 4, 28, 94, - 94, 30, 235, 3, 206, 215, 42, 184, 153, 175, 139, 188, 62, 75, 27, 202, 129, 215, 249, 148, - 246, 110, 187, 112, 133, 57, 234, 56, 178, 230, 131, 70, 142, 167, 4, 255, 247, 4, 193, 68, - 224, 1, 3, 113, 47, 131, 80, 140, 199, 91, 12, 17, 188, 39, 67, 112, 7, 209, 157, 89, - 8, 232, 246, 187, 1, 94, 41, 205, 114, 84, 69, 32, 181, 132, 200, 3, 28, 81, 87, 234, - 69, 143, 183, 94, 228, 187, 143, 216, 82, 247, 113, 3, 0, 87, 103, 0, 158, 42, 40, 25, - 125, 244, 89, 179, 0, 216, 13, 16, 224, 189, 230, 224, 42, 179, 1, 44, 3, 0, 51, 103, - 1, 200, 32, 131, 144, 25, 212, 173, 106, 251, 46, 147, 205, 189, 218, 118, 192, 101, 113, 133, - 17, 185, 222, 66, 58, 119, 26, 212, 135, 208, 3, 96, 12, 178, 178, 1, 43, 179, 8, 103, - 175, 65, 67, 6, 224, 130, 2, 181, 186, 239, 103, 198, 89, 178, 228, 47, 0, 188, 193, 24, - 88, 163, 125, 237, 152, 35, 3, 3, 105, 239, 30, 108, 0, 50, 93, 96, 198, 20, 188, 217, - 149, 253, 142, 40, 176, 136, 61, 192, 123, 141, 65, 77, 252, 236, 154, 244, 222, 153, 129, 129, - 214, 117, 0, 86, 27, 130, 85, 171, 217, 98, 0, 146, 46, 146, 119, 243, 157, 163, 110, 214, - 234, 254, 161, 183, 10, 62, 70, 7, 60, 212, 23, 215, 139, 44, 33, 207, 52, 9, 153, 159, - 1, 47, 201, 0, 156, 41, 0, 217, 25, 4, 196, 15, 113, 135, 107, 149, 169, 250, 240, 115, - 175, 73, 159, 53, 59, 223, 127, 54, 187, 0, 24, 128, 165, 133, 135, 105, 120, 156, 19, 208, - 62, 60, 205, 20, 148, 11, 159, 19, 153, 128, 23, 27, 128, 71, 205, 197, 92, 36, 126, 229, - 165, 231, 13, 112, 149, 178, 90, 31, 116, 78, 117, 193, 107, 175, 208, 150, 188, 186, 109, 33, - 3, 128, 81, 224, 28, 0, 48, 3, 68, 220, 47, 228, 67, 5, 189, 132, 232, 48, 170, 255, - 127, 143, 31, 241, 135, 39, 182, 53, 79, 168, 155, 111, 105, 167, 202, 27, 142, 233, 67, 189, - 60, 252, 70, 33, 110, 8, 63, 80, 206, 97, 93, 187, 89, 78, 56, 62, 50, 0, 47, 46, - 156, 87, 49, 10, 229, 166, 215, 149, 6, 17, 48, 2, 207, 109, 7, 223, 18, 16, 221, 238, - 92, 48, 0, 100, 14, 168, 48, 0, 212, 1, 218, 177, 23, 222, 91, 12, 0, 80, 57, 0, - 168, 11, 212, 221, 117, 231, 123, 217, 235, 133, 1, 160, 144, 114, 172, 0, 212, 9, 174, 233, - 11, 193, 0, 0, 149, 18, 128, 186, 1, 47, 188, 79, 24, 0, 42, 37, 215, 18, 128, 58, - 2, 100, 0, 168, 24, 0, 0, 180, 117, 180, 199, 24, 0, 42, 20, 231, 199, 61, 0, 0, - 192, 0, 0, 32, 254, 0, 212, 25, 192, 0, 0, 208, 144, 1, 80, 119, 0, 3, 0, 0, - 0, 0, 119, 49, 113, 24, 0, 32, 130, 1, 160, 14, 1, 25, 0, 184, 97, 69, 45, 92, - 15, 0, 218, 22, 218, 60, 202, 6, 6, 128, 155, 12, 0, 240, 166, 54, 139, 246, 17, 3, - 128, 40, 115, 109, 0, 168, 83, 0, 24, 0, 42, 51, 231, 6, 64, 221, 122, 203, 185, 21, - 238, 199, 245, 13, 64, 161, 176, 210, 64, 1, 0, 117, 140, 107, 72, 6, 0, 168, 84, 0, - 64, 93, 59, 227, 188, 95, 223, 102, 97, 0, 174, 89, 72, 11, 5, 24, 0, 30, 212, 222, - 209, 125, 129, 1, 224, 198, 115, 29, 0, 128, 58, 199, 117, 192, 0, 172, 45, 16, 133, 130, - 68, 5, 4, 160, 238, 1, 144, 1, 0, 26, 32, 0, 234, 32, 0, 6, 128, 10, 196, 117, - 3, 160, 46, 2, 6, 0, 128, 6, 7, 128, 58, 201, 53, 120, 209, 53, 197, 0, 220, 183, - 144, 177, 14, 55, 0, 220, 185, 77, 160, 45, 57, 153, 141, 75, 0, 84, 86, 128, 199, 213, - 211, 202, 165, 0, 50, 0, 247, 23, 216, 114, 225, 99, 3, 0, 12, 251, 29, 219, 52, 192, - 0, 0, 226, 15, 64, 221, 5, 12, 0, 0, 13, 8, 192, 243, 234, 48, 245, 24, 48, 0, - 64, 163, 1, 128, 153, 127, 197, 57, 209, 126, 189, 204, 0, 148, 139, 22, 180, 21, 98, 90, - 110, 122, 29, 1, 224, 125, 109, 36, 65, 200, 69, 97, 22, 0, 32, 252, 0, 239, 171, 231, - 204, 18, 0, 186, 0, 0, 241, 7, 160, 206, 115, 44, 24, 0, 56, 178, 96, 23, 42, 31, - 0, 156, 92, 247, 203, 13, 142, 17, 22, 177, 189, 224, 134, 35, 180, 84, 44, 174, 15, 144, - 242, 30, 151, 245, 202, 241, 188, 175, 45, 98, 12, 192, 59, 133, 7, 113, 227, 58, 112, 175, - 49, 7, 71, 139, 46, 194, 78, 6, 0, 16, 61, 206, 29, 46, 93, 46, 234, 139, 175, 67, - 61, 241, 253, 128, 1, 128, 133, 34, 86, 184, 86, 0, 24, 130, 7, 139, 56, 117, 222, 1, - 131, 0, 175, 93, 184, 10, 21, 35, 124, 174, 52, 4, 64, 121, 162, 221, 1, 50, 0, 175, - 119, 159, 133, 107, 15, 144, 90, 198, 234, 11, 206, 181, 62, 232, 184, 74, 210, 107, 48, 0, - 0, 8, 63, 80, 238, 94, 97, 4, 222, 210, 70, 188, 178, 29, 161, 11, 96, 93, 97, 96, - 250, 33, 231, 6, 180, 21, 156, 27, 215, 24, 3, 0, 20, 228, 228, 235, 200, 181, 4, 202, - 35, 109, 36, 188, 192, 0, 20, 10, 34, 149, 137, 6, 2, 40, 155, 156, 19, 101, 139, 12, - 0, 80, 9, 0, 40, 163, 0, 47, 55, 0, 76, 207, 121, 254, 117, 33, 197, 10, 148, 87, - 218, 29, 244, 4, 3, 64, 161, 225, 218, 2, 80, 118, 185, 182, 83, 239, 41, 220, 203, 107, - 24, 128, 163, 111, 4, 149, 146, 6, 20, 128, 50, 76, 93, 124, 61, 31, 42, 37, 231, 199, - 57, 0, 80, 150, 1, 3, 0, 84, 86, 0, 0, 218, 124, 12, 0, 0, 21, 18, 128, 50, - 13, 79, 188, 207, 24, 128, 231, 21, 26, 70, 225, 2, 80, 182, 105, 167, 0, 3, 64, 97, - 228, 62, 0, 80, 198, 185, 222, 128, 1, 0, 0, 0, 192, 80, 96, 0, 128, 138, 5, 64, - 89, 7, 50, 0, 20, 120, 42, 42, 215, 25, 128, 50, 15, 24, 0, 160, 81, 1, 0, 160, - 141, 193, 0, 192, 209, 149, 169, 112, 13, 0, 40, 251, 180, 115, 128, 1, 160, 210, 3, 0, - 208, 54, 2, 6, 128, 2, 6, 0, 64, 219, 141, 102, 188, 211, 0, 92, 121, 83, 32, 140, - 6, 215, 9, 128, 58, 0, 24, 0, 160, 161, 0, 0, 218, 42, 192, 0, 0, 21, 135, 70, - 2, 128, 122, 15, 24, 0, 0, 0, 0, 192, 0, 0, 0, 0, 81, 60, 96, 0, 128, 74, - 9, 0, 0, 24, 0, 192, 172, 0, 80, 39, 128, 251, 141, 1, 0, 0, 0, 0, 12, 0, - 0, 0, 0, 96, 0, 0, 0, 0, 0, 3, 0, 215, 128, 190, 78, 0, 234, 6, 96, 0, - 0, 0, 0, 0, 3, 0, 0, 0, 240, 92, 46, 149, 229, 193, 0, 0, 0, 0, 144, 1, - 0, 0, 0, 0, 12, 0, 0, 0, 0, 96, 0, 0, 0, 0, 30, 206, 107, 102, 99, 96, - 0, 128, 138, 5, 64, 29, 1, 50, 0, 0, 0, 0, 128, 1, 0, 0, 0, 0, 12, 0, - 0, 0, 0, 96, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 24, 0, 0, 0, 0, 192, - 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 48, 0, 0, 0, 0, 128, 1, 0, 0, 0, - 0, 12, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 24, 0, 0, - 0, 0, 192, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 48, 0, 0, 0, 0, 24, 0, - 0, 0, 0, 192, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 48, 0, 0, 0, 0, 128, - 1, 0, 0, 0, 0, 12, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 3, 0, 0, 0, - 0, 24, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 48, 0, 0, - 0, 0, 128, 1, 0, 0, 0, 0, 12, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 3, - 0, 0, 0, 0, 24, 0, 0, 0, 0, 12, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 0, 24, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 6, 0, 0, 0, - 0, 48, 0, 0, 0, 0, 128, 1, 0, 0, 0, 0, 12, 0, 0, 0, 0, 96, 0, 0, - 0, 0, 0, 3, 0, 0, 0, 0, 24, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 6, - 0, 0, 0, 0, 48, 0, 0, 0, 0, 128, 1, 0, 0, 0, 0, 12, 0, 0, 0, 0, - 6, 0, 0, 0, 0, 48, 0, 0, 0, 0, 128, 1, 0, 0, 0, 0, 12, 0, 0, 0, - 0, 96, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 24, 0, 0, 0, 0, 192, 0, 0, - 0, 0, 0, 6, 0, 0, 0, 0, 48, 0, 0, 0, 0, 128, 1, 0, 0, 0, 0, 12, - 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 24, 0, 0, 0, 0, - 192, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 3, 0, 0, 0, 0, 24, 0, 0, 0, - 0, 192, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 48, 0, 0, 0, 0, 128, 1, 0, - 0, 0, 0, 12, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 24, - 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 48, 0, 0, 0, 0, - 128, 1, 0, 0, 0, 0, 12, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 3, 0, 0, - 0, 0, 24, 0, 0, 0, 0, 12, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 3, 0, - 0, 0, 0, 24, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 48, - 0, 0, 0, 0, 128, 1, 0, 0, 0, 0, 12, 0, 0, 0, 0, 96, 0, 0, 0, 0, - 0, 3, 0, 0, 0, 0, 24, 0, 0, 0, 0, 192, 0, 0, 0, 0, 0, 6, 0, 0, - 0, 0, 48, 0, 0, 0, 0, 128, 1, 0, 0, 0, 0, 12, 0, 0, 0, 0, 6, 0, - 0, 0, 0, 48, 0, 0, 0, 0, 128, 1, 0, 0, 0, 0, 12, 0, 0, 0, 0, 96, - 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 24, 0, 0, 0, 0, 192, 0, 0, 0, 0, - 0, 6, 0, 0, 0, 0, 48, 0, 0, 0, 0, 128, 1, 0, 0, 0, 0, 12, 0, 0, - 0, 0, 96, 0, 224, 94, 84, 46, 1, 0, 117, 4, 48, 0, 0, 0, 0, 152, 48, 12, - 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 24, 0, 0, 0, 128, - 187, 113, 169, 241, 5, 24, 0, 0, 0, 0, 50, 0, 0, 239, 114, 192, 0, 212, 13, 192, - 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 48, 0, 0, 0, 0, 128, 1, 0, 152, 130, - 190, 78, 0, 234, 4, 247, 27, 3, 0, 52, 32, 0, 0, 128, 1, 0, 0, 0, 130, 13, - 192, 0, 0, 0, 0, 0, 6, 0, 103, 205, 185, 2, 80, 23, 56, 87, 192, 0, 208, 72, - 0, 0, 208, 86, 193, 219, 12, 64, 189, 112, 33, 165, 2, 112, 157, 0, 168, 3, 128, 1, - 160, 178, 1, 0, 192, 13, 219, 238, 71, 107, 6, 93, 0, 20, 40, 0, 0, 218, 70, 50, - 0, 112, 161, 2, 95, 185, 6, 0, 148, 125, 218, 57, 192, 0, 0, 13, 10, 0, 208, 198, - 192, 237, 12, 64, 165, 176, 3, 215, 25, 128, 50, 15, 100, 0, 0, 104, 16, 129, 178, 14, - 128, 1, 0, 0, 0, 192, 188, 97, 0, 184, 169, 220, 7, 0, 202, 56, 112, 189, 49, 0, - 20, 210, 87, 21, 120, 42, 44, 80, 207, 105, 167, 0, 3, 0, 52, 148, 0, 148, 105, 224, - 62, 99, 0, 184, 129, 0, 0, 64, 155, 143, 1, 224, 134, 63, 250, 252, 48, 98, 64, 125, - 4, 120, 184, 1, 168, 7, 87, 38, 42, 35, 13, 39, 0, 101, 152, 186, 136, 1, 224, 18, - 80, 57, 184, 182, 0, 148, 221, 23, 92, 219, 122, 98, 224, 137, 1, 160, 146, 29, 122, 174, - 245, 97, 231, 77, 99, 10, 148, 87, 218, 29, 244, 4, 3, 0, 184, 126, 0, 202, 40, 192, - 27, 12, 64, 165, 34, 211, 24, 209, 192, 2, 101, 147, 115, 162, 108, 145, 1, 224, 38, 114, - 29, 185, 150, 64, 121, 164, 141, 4, 12, 192, 37, 11, 97, 165, 66, 113, 110, 64, 91, 193, - 185, 113, 141, 175, 202, 198, 37, 128, 135, 52, 82, 133, 75, 1, 136, 18, 4, 239, 213, 43, - 239, 39, 6, 32, 191, 160, 21, 142, 235, 244, 74, 142, 25, 0, 68, 255, 153, 231, 90, 23, - 190, 239, 117, 38, 128, 46, 128, 107, 87, 10, 54, 223, 136, 159, 43, 17, 26, 80, 158, 104, - 119, 128, 12, 192, 227, 42, 103, 57, 225, 189, 79, 104, 200, 200, 12, 0, 162, 245, 236, 115, - 199, 112, 96, 0, 0, 19, 128, 33, 0, 68, 227, 224, 235, 192, 117, 196, 0, 192, 13, 4, - 250, 205, 38, 192, 218, 96, 113, 125, 16, 29, 193, 190, 48, 0, 0, 26, 30, 73, 68, 65, - 84, 55, 174, 15, 247, 0, 3, 112, 243, 130, 120, 165, 169, 44, 229, 98, 215, 25, 145, 163, - 177, 2, 168, 28, 207, 59, 239, 15, 131, 0, 223, 93, 144, 25, 44, 7, 240, 238, 246, 233, - 14, 109, 20, 96, 0, 48, 7, 84, 50, 0, 160, 253, 129, 44, 24, 3, 0, 251, 74, 72, - 183, 0, 0, 194, 15, 100, 0, 40, 216, 134, 207, 174, 134, 247, 214, 135, 156, 43, 0, 208, - 70, 30, 241, 217, 116, 79, 98, 0, 224, 196, 134, 130, 202, 7, 128, 248, 223, 245, 156, 104, - 191, 48, 0, 64, 163, 1, 128, 153, 231, 50, 0, 6, 0, 48, 1, 0, 212, 93, 0, 12, - 192, 77, 42, 107, 189, 240, 177, 1, 0, 226, 79, 123, 130, 1, 128, 23, 52, 40, 84, 92, - 0, 196, 31, 161, 199, 0, 80, 185, 78, 254, 188, 74, 165, 6, 128, 11, 152, 244, 187, 181, - 97, 128, 1, 0, 76, 0, 0, 117, 146, 107, 240, 222, 107, 138, 1, 160, 226, 112, 221, 0, - 168, 139, 64, 6, 0, 128, 134, 7, 128, 58, 8, 24, 128, 123, 87, 136, 74, 69, 162, 1, - 2, 160, 238, 1, 144, 1, 160, 2, 114, 29, 0, 128, 182, 7, 48, 0, 143, 40, 212, 20, - 126, 0, 218, 8, 218, 42, 238, 5, 6, 128, 194, 192, 121, 3, 80, 215, 56, 111, 174, 227, - 53, 13, 64, 165, 32, 82, 65, 1, 128, 58, 198, 53, 36, 3, 64, 1, 228, 220, 0, 128, - 186, 85, 111, 120, 109, 110, 127, 63, 48, 0, 84, 70, 0, 0, 32, 3, 0, 152, 13, 204, - 17, 0, 117, 234, 86, 199, 75, 123, 131, 1, 120, 109, 5, 173, 92, 15, 0, 218, 22, 218, - 60, 202, 6, 6, 0, 104, 32, 0, 168, 67, 0, 24, 0, 0, 0, 0, 192, 0, 0, 17, - 12, 0, 117, 7, 184, 135, 24, 0, 160, 18, 0, 80, 103, 128, 12, 0, 149, 137, 243, 3, - 0, 0, 12, 0, 34, 7, 220, 63, 0, 234, 10, 245, 25, 3, 64, 101, 4, 174, 37, 0, - 117, 4, 48, 0, 0, 52, 112, 0, 212, 13, 238, 19, 6, 0, 128, 134, 14, 128, 58, 193, - 53, 197, 0, 0, 133, 157, 202, 9, 64, 221, 229, 254, 92, 249, 122, 97, 0, 238, 83, 208, - 42, 21, 11, 128, 58, 64, 59, 198, 189, 197, 0, 60, 255, 102, 214, 39, 22, 184, 206, 49, - 99, 4, 224, 141, 237, 201, 93, 235, 43, 38, 231, 33, 231, 137, 1, 56, 215, 1, 35, 124, - 24, 1, 160, 156, 211, 86, 230, 102, 14, 234, 1, 199, 250, 8, 62, 20, 190, 75, 220, 224, - 74, 33, 165, 129, 4, 132, 159, 8, 151, 115, 61, 242, 152, 200, 0, 80, 120, 105, 48, 1, - 40, 199, 71, 183, 41, 212, 237, 11, 176, 221, 188, 48, 190, 113, 52, 106, 89, 240, 218, 59, - 53, 60, 133, 106, 11, 152, 239, 203, 158, 83, 189, 217, 185, 188, 218, 136, 108, 212, 215, 148, - 194, 124, 85, 177, 173, 15, 20, 205, 214, 61, 193, 20, 0, 98, 255, 174, 243, 35, 131, 128, - 1, 184, 116, 129, 105, 153, 2, 175, 81, 200, 50, 22, 79, 52, 2, 158, 123, 139, 65, 0, - 68, 230, 156, 243, 174, 9, 175, 175, 220, 67, 12, 64, 246, 77, 174, 134, 199, 25, 162, 159, - 253, 25, 51, 223, 241, 214, 116, 58, 141, 0, 192, 250, 250, 81, 15, 248, 30, 234, 50, 6, - 96, 121, 97, 169, 73, 78, 244, 87, 172, 247, 194, 61, 43, 228, 101, 225, 245, 33, 98, 6, - 160, 61, 60, 235, 184, 102, 2, 178, 81, 187, 189, 98, 202, 97, 228, 156, 46, 115, 207, 182, - 151, 21, 240, 21, 131, 7, 45, 17, 251, 140, 168, 158, 49, 190, 0, 99, 0, 128, 208, 103, - 9, 111, 102, 16, 182, 226, 154, 188, 54, 171, 176, 93, 172, 192, 214, 139, 222, 236, 186, 248, - 220, 139, 156, 55, 62, 0, 99, 0, 128, 208, 31, 121, 28, 89, 237, 253, 10, 81, 127, 213, - 44, 129, 141, 2, 63, 117, 12, 209, 129, 126, 222, 126, 254, 222, 235, 175, 50, 184, 15, 99, - 0, 240, 124, 161, 247, 28, 155, 87, 72, 107, 240, 187, 50, 199, 111, 29, 21, 28, 214, 171, - 220, 239, 45, 177, 16, 148, 183, 184, 166, 159, 194, 146, 213, 167, 159, 125, 253, 175, 222, 56, - 96, 12, 0, 238, 37, 244, 87, 58, 214, 154, 36, 222, 145, 239, 124, 212, 26, 52, 219, 11, - 10, 243, 236, 184, 128, 21, 43, 96, 89, 6, 6, 122, 13, 70, 189, 145, 192, 90, 174, 41, - 38, 1, 16, 247, 123, 158, 131, 103, 80, 223, 25, 123, 163, 172, 26, 11, 22, 61, 143, 211, - 202, 198, 246, 128, 194, 88, 47, 88, 129, 87, 245, 231, 123, 94, 119, 119, 65, 157, 189, 175, - 24, 8, 64, 192, 143, 63, 223, 186, 232, 243, 35, 171, 17, 214, 27, 220, 243, 83, 51, 10, - 219, 131, 11, 172, 197, 145, 85, 231, 223, 154, 48, 107, 17, 188, 12, 254, 111, 201, 2, 180, - 62, 103, 85, 97, 46, 15, 43, 15, 0, 24, 152, 227, 63, 191, 6, 94, 99, 105, 203, 51, - 178, 17, 175, 111, 147, 182, 139, 23, 216, 42, 107, 6, 147, 88, 10, 160, 117, 90, 203, 40, - 42, 183, 164, 229, 181, 89, 0, 103, 13, 0, 140, 92, 71, 162, 110, 128, 119, 137, 73, 100, - 36, 126, 53, 190, 183, 6, 62, 191, 58, 191, 111, 198, 184, 220, 62, 240, 216, 22, 21, 136, - 59, 12, 72, 139, 222, 212, 170, 68, 235, 71, 206, 2, 176, 154, 140, 171, 54, 74, 24, 6, - 128, 251, 101, 171, 34, 35, 246, 143, 158, 5, 224, 201, 238, 122, 179, 9, 143, 25, 8, 184, - 93, 180, 96, 215, 133, 159, 147, 49, 98, 180, 26, 68, 217, 242, 191, 189, 105, 240, 116, 33, - 120, 174, 119, 185, 113, 67, 130, 153, 0, 68, 251, 62, 231, 104, 21, 233, 153, 213, 249, 86, - 204, 2, 168, 19, 250, 176, 106, 188, 68, 93, 93, 238, 182, 132, 139, 86, 22, 158, 108, 212, - 145, 101, 14, 24, 177, 166, 171, 90, 2, 46, 202, 223, 71, 141, 1, 200, 42, 52, 87, 22, - 89, 250, 252, 1, 206, 171, 11, 171, 198, 0, 84, 241, 143, 1, 200, 104, 211, 35, 215, 242, - 202, 131, 14, 235, 25, 25, 0, 139, 227, 138, 156, 64, 214, 77, 25, 57, 73, 235, 248, 131, - 200, 82, 192, 90, 215, 193, 200, 72, 244, 142, 165, 220, 164, 97, 33, 82, 7, 184, 191, 145, - 245, 6, 116, 154, 136, 71, 162, 250, 106, 252, 222, 12, 237, 200, 74, 255, 95, 234, 254, 110, - 23, 44, 60, 89, 203, 59, 86, 71, 65, 241, 246, 23, 253, 254, 180, 132, 124, 36, 116, 171, - 186, 0, 238, 178, 37, 238, 145, 21, 0, 179, 1, 111, 18, 229, 43, 156, 243, 202, 46, 128, - 106, 104, 143, 189, 70, 96, 118, 253, 151, 170, 28, 111, 214, 198, 114, 143, 50, 0, 153, 5, - 173, 58, 110, 104, 157, 40, 8, 209, 46, 128, 158, 40, 245, 196, 95, 139, 254, 163, 145, 255, - 17, 5, 238, 106, 130, 75, 183, 0, 32, 206, 231, 29, 79, 13, 180, 217, 181, 243, 227, 109, - 143, 189, 199, 53, 18, 108, 207, 119, 158, 125, 127, 92, 153, 245, 109, 193, 151, 23, 99, 33, - 88, 89, 248, 163, 105, 154, 94, 65, 168, 3, 23, 57, 18, 240, 209, 177, 21, 197, 4, 136, - 232, 221, 0, 218, 57, 150, 7, 54, 76, 68, 245, 128, 56, 95, 251, 188, 60, 233, 255, 234, - 16, 46, 107, 123, 220, 123, 77, 164, 59, 192, 59, 173, 240, 86, 229, 98, 115, 138, 249, 209, - 133, 204, 58, 15, 84, 155, 231, 169, 61, 239, 117, 147, 163, 244, 127, 145, 255, 78, 205, 171, - 73, 25, 0, 111, 244, 127, 84, 161, 43, 23, 109, 136, 0, 48, 27, 247, 205, 0, 136, 18, - 140, 137, 34, 236, 213, 113, 44, 51, 81, 125, 102, 244, 127, 232, 20, 195, 237, 194, 5, 200, - 211, 71, 111, 185, 128, 150, 148, 146, 119, 101, 64, 75, 6, 96, 212, 151, 239, 205, 0, 136, - 196, 54, 93, 42, 47, 104, 136, 200, 12, 0, 145, 254, 249, 231, 25, 29, 3, 224, 105, 127, - 103, 218, 236, 209, 231, 88, 198, 19, 68, 199, 48, 28, 33, 238, 110, 35, 178, 221, 168, 208, - 89, 221, 228, 76, 6, 193, 234, 64, 61, 25, 128, 158, 80, 89, 196, 191, 151, 57, 240, 138, - 223, 217, 141, 213, 93, 102, 40, 0, 96, 50, 114, 142, 47, 210, 13, 48, 18, 227, 72, 214, - 96, 20, 252, 89, 197, 216, 58, 254, 160, 158, 112, 221, 167, 191, 115, 187, 208, 1, 207, 204, - 201, 212, 110, 170, 181, 64, 89, 251, 147, 90, 51, 1, 44, 179, 0, 90, 93, 3, 154, 248, - 91, 210, 255, 43, 11, 95, 121, 65, 67, 6, 128, 137, 88, 243, 61, 158, 72, 186, 138, 62, - 136, 219, 26, 185, 91, 70, 224, 107, 153, 4, 235, 76, 50, 239, 160, 66, 79, 144, 186, 148, - 237, 134, 5, 214, 115, 83, 34, 41, 153, 200, 44, 1, 45, 122, 183, 68, 241, 210, 17, 255, - 26, 248, 140, 76, 1, 191, 147, 120, 211, 13, 0, 68, 230, 231, 158, 235, 76, 23, 128, 38, - 160, 218, 58, 45, 22, 115, 225, 201, 36, 120, 179, 0, 51, 250, 117, 202, 34, 66, 91, 82, - 1, 177, 174, 129, 239, 117, 62, 145, 62, 25, 75, 97, 138, 184, 73, 81, 162, 127, 77, 252, - 71, 98, 63, 219, 5, 32, 198, 172, 195, 211, 5, 156, 76, 3, 96, 32, 174, 113, 252, 222, - 46, 0, 173, 29, 182, 116, 201, 206, 182, 235, 50, 48, 3, 213, 168, 53, 145, 235, 49, 243, - 218, 67, 51, 0, 89, 51, 3, 170, 243, 177, 39, 157, 100, 205, 0, 88, 94, 91, 141, 63, - 163, 254, 127, 235, 115, 25, 194, 121, 245, 134, 229, 234, 99, 21, 0, 48, 8, 57, 199, 57, - 51, 21, 176, 58, 162, 119, 203, 143, 214, 246, 71, 50, 0, 22, 3, 161, 101, 38, 36, 225, - 61, 83, 229, 104, 115, 126, 88, 36, 210, 95, 225, 142, 188, 174, 44, 234, 38, 37, 248, 218, - 94, 132, 239, 17, 202, 106, 52, 12, 229, 194, 13, 70, 185, 105, 195, 6, 128, 33, 88, 215, - 174, 91, 12, 128, 71, 232, 53, 113, 183, 24, 11, 107, 230, 65, 148, 54, 223, 58, 14, 225, - 18, 247, 125, 91, 88, 40, 188, 75, 32, 90, 6, 84, 88, 28, 165, 117, 16, 200, 140, 155, - 220, 167, 254, 91, 199, 110, 21, 241, 34, 8, 35, 0, 188, 207, 0, 104, 194, 26, 21, 108, - 79, 59, 46, 98, 31, 124, 104, 9, 52, 181, 107, 81, 19, 175, 231, 116, 249, 216, 38, 110, - 250, 234, 37, 104, 173, 35, 51, 173, 3, 249, 50, 10, 148, 72, 172, 111, 104, 116, 205, 122, - 171, 39, 150, 5, 247, 226, 204, 198, 129, 1, 122, 0, 207, 16, 125, 235, 49, 122, 231, 210, - 175, 104, 163, 103, 223, 103, 53, 42, 214, 0, 120, 164, 73, 209, 107, 155, 150, 1, 240, 136, - 84, 68, 144, 180, 254, 22, 143, 75, 26, 101, 0, 60, 5, 97, 198, 93, 142, 12, 192, 87, - 68, 62, 73, 34, 29, 217, 113, 240, 110, 141, 5, 6, 1, 16, 248, 231, 28, 123, 230, 24, - 128, 239, 130, 12, 64, 164, 155, 193, 186, 214, 128, 245, 188, 35, 229, 161, 102, 222, 191, 109, - 242, 67, 180, 189, 237, 45, 133, 193, 146, 86, 241, 186, 50, 239, 13, 181, 254, 124, 229, 191, - 163, 254, 71, 253, 65, 255, 94, 111, 141, 240, 181, 221, 0, 35, 131, 232, 202, 203, 26, 68, - 140, 4, 32, 220, 231, 158, 239, 204, 32, 186, 89, 81, 207, 48, 11, 162, 24, 18, 79, 234, - 95, 211, 8, 9, 4, 192, 105, 28, 177, 25, 80, 70, 161, 17, 37, 197, 162, 13, 206, 147, - 164, 194, 245, 175, 128, 253, 227, 243, 243, 220, 103, 23, 245, 123, 140, 147, 53, 243, 18, 73, - 169, 191, 77, 88, 25, 79, 1, 112, 124, 61, 200, 216, 15, 192, 98, 2, 190, 13, 161, 255, - 254, 252, 100, 101, 5, 44, 217, 106, 207, 116, 243, 179, 238, 115, 181, 24, 128, 72, 180, 25, - 61, 208, 153, 165, 121, 173, 89, 128, 35, 7, 147, 236, 143, 121, 100, 2, 180, 229, 131, 61, - 59, 1, 70, 183, 5, 190, 90, 131, 66, 196, 14, 8, 245, 243, 142, 123, 118, 71, 192, 85, - 209, 125, 214, 248, 0, 113, 136, 188, 165, 187, 97, 116, 221, 234, 162, 123, 86, 55, 227, 155, - 202, 162, 136, 223, 187, 57, 143, 37, 11, 224, 21, 251, 239, 79, 36, 223, 75, 249, 239, 83, - 255, 251, 108, 192, 62, 250, 255, 77, 253, 239, 127, 52, 241, 183, 236, 4, 184, 122, 193, 31, - 118, 247, 3, 192, 108, 172, 200, 2, 120, 166, 2, 90, 178, 0, 95, 71, 166, 96, 181, 9, - 176, 8, 123, 100, 13, 0, 145, 220, 85, 3, 255, 147, 1, 200, 186, 249, 197, 33, 238, 50, - 112, 58, 171, 250, 242, 127, 197, 126, 36, 252, 45, 241, 255, 54, 142, 185, 213, 5, 80, 12, - 25, 128, 200, 78, 128, 214, 181, 255, 159, 180, 118, 63, 217, 1, 64, 120, 239, 121, 46, 171, - 51, 0, 189, 46, 128, 150, 41, 248, 74, 78, 70, 65, 211, 54, 75, 134, 218, 122, 205, 170, - 243, 154, 158, 110, 0, 102, 78, 76, 12, 25, 0, 239, 212, 141, 72, 164, 191, 255, 233, 13, - 254, 155, 201, 0, 104, 38, 64, 196, 191, 16, 208, 83, 197, 155, 236, 0, 192, 245, 235, 130, - 183, 255, 63, 34, 254, 145, 12, 192, 183, 243, 247, 87, 49, 19, 51, 3, 7, 91, 122, 101, - 9, 106, 79, 185, 215, 153, 123, 1, 244, 254, 30, 21, 6, 107, 55, 128, 182, 72, 131, 55, - 205, 191, 31, 180, 167, 153, 130, 58, 200, 0, 124, 119, 130, 87, 12, 63, 117, 247, 250, 253, - 111, 235, 2, 66, 103, 52, 12, 229, 1, 13, 22, 0, 70, 225, 92, 19, 144, 213, 5, 160, - 101, 0, 180, 108, 192, 215, 105, 2, 60, 186, 163, 5, 181, 163, 235, 18, 185, 191, 238, 241, - 2, 219, 73, 133, 36, 99, 203, 71, 173, 128, 252, 254, 124, 20, 51, 80, 228, 127, 211, 249, - 255, 132, 250, 219, 16, 230, 81, 244, 63, 234, 2, 248, 141, 252, 165, 147, 5, 216, 11, 236, - 153, 171, 7, 150, 139, 53, 48, 0, 112, 109, 99, 48, 179, 37, 176, 37, 19, 240, 117, 100, - 1, 190, 18, 239, 26, 200, 232, 54, 16, 71, 6, 192, 18, 36, 71, 178, 43, 234, 189, 223, - 12, 55, 180, 24, 111, 124, 107, 16, 155, 101, 97, 4, 235, 88, 129, 172, 41, 124, 31, 131, - 240, 91, 198, 0, 140, 162, 255, 86, 38, 64, 148, 199, 162, 60, 142, 68, 225, 71, 70, 252, - 0, 240, 238, 140, 192, 89, 6, 160, 118, 132, 222, 58, 101, 240, 59, 200, 14, 140, 12, 132, - 87, 252, 61, 98, 62, 179, 123, 224, 178, 12, 128, 117, 30, 122, 171, 91, 192, 186, 91, 82, - 214, 6, 14, 214, 1, 128, 189, 254, 122, 233, 8, 116, 75, 28, 103, 13, 192, 232, 187, 174, - 96, 2, 48, 8, 0, 8, 252, 172, 248, 107, 193, 93, 166, 1, 104, 153, 1, 237, 255, 218, - 184, 130, 217, 149, 101, 189, 65, 175, 229, 90, 79, 237, 15, 144, 181, 18, 160, 53, 91, 96, - 77, 135, 100, 175, 12, 213, 18, 255, 95, 225, 111, 117, 9, 104, 51, 0, 70, 6, 160, 254, - 191, 207, 212, 204, 128, 24, 178, 0, 22, 145, 189, 163, 8, 99, 28, 0, 174, 39, 228, 153, - 199, 188, 114, 57, 96, 235, 56, 0, 45, 130, 255, 138, 127, 28, 128, 119, 175, 24, 45, 250, - 207, 232, 255, 79, 203, 0, 204, 110, 90, 99, 93, 22, 56, 178, 83, 159, 213, 16, 124, 59, - 194, 191, 79, 235, 183, 178, 0, 34, 253, 244, 188, 213, 0, 236, 71, 251, 91, 197, 95, 75, - 255, 71, 68, 19, 161, 5, 128, 35, 141, 137, 117, 78, 251, 234, 129, 128, 150, 159, 106, 124, - 188, 98, 29, 1, 207, 18, 248, 158, 232, 223, 124, 111, 86, 204, 2, 144, 132, 147, 157, 29, - 248, 247, 233, 100, 0, 90, 191, 181, 84, 253, 232, 188, 63, 141, 223, 69, 17, 254, 172, 46, - 128, 171, 139, 59, 198, 3, 224, 29, 25, 130, 35, 182, 4, 214, 196, 191, 101, 2, 254, 138, - 173, 43, 160, 74, 191, 75, 32, 186, 212, 176, 37, 216, 21, 209, 7, 2, 90, 178, 41, 150, - 107, 95, 181, 12, 192, 40, 165, 63, 51, 24, 80, 12, 55, 122, 244, 183, 55, 197, 223, 19, - 254, 189, 232, 107, 125, 255, 69, 185, 97, 159, 134, 112, 87, 209, 167, 0, 90, 197, 63, 43, - 3, 128, 48, 3, 192, 145, 70, 195, 155, 1, 176, 10, 191, 182, 30, 192, 239, 223, 127, 13, - 134, 32, 50, 30, 32, 115, 223, 1, 239, 166, 66, 233, 247, 121, 75, 252, 176, 200, 110, 128, - 218, 138, 74, 34, 254, 101, 124, 71, 194, 223, 234, 223, 31, 165, 232, 123, 81, 255, 222, 8, - 252, 59, 127, 111, 6, 32, 91, 252, 223, 34, 238, 152, 24, 32, 74, 191, 246, 121, 206, 116, - 3, 88, 51, 0, 85, 108, 3, 253, 60, 194, 111, 201, 14, 88, 215, 24, 240, 44, 88, 39, - 202, 235, 122, 198, 169, 167, 163, 38, 86, 44, 5, 220, 154, 10, 88, 196, 182, 216, 207, 204, - 82, 190, 22, 225, 215, 12, 128, 231, 92, 63, 187, 243, 254, 24, 50, 0, 34, 177, 233, 127, - 79, 28, 4, 136, 160, 3, 134, 225, 217, 199, 191, 114, 91, 96, 171, 9, 248, 155, 156, 5, - 208, 22, 26, 138, 236, 50, 168, 101, 0, 60, 115, 252, 93, 93, 5, 209, 205, 128, 170, 161, - 225, 182, 118, 3, 72, 130, 17, 24, 9, 255, 199, 96, 0, 52, 49, 218, 127, 255, 103, 103, - 110, 44, 226, 111, 201, 2, 32, 254, 0, 152, 128, 183, 153, 128, 153, 193, 222, 214, 129, 128, - 127, 21, 19, 240, 87, 236, 3, 5, 163, 51, 6, 122, 17, 123, 100, 145, 32, 145, 201, 41, - 128, 145, 12, 128, 182, 81, 141, 182, 32, 80, 198, 8, 127, 45, 35, 96, 77, 251, 255, 109, - 8, 145, 117, 48, 99, 111, 35, 159, 168, 1, 232, 153, 129, 183, 152, 0, 204, 1, 32, 242, - 207, 23, 127, 25, 136, 94, 182, 1, 168, 74, 244, 255, 119, 247, 19, 157, 49, 48, 179, 251, - 160, 72, 124, 154, 96, 74, 153, 218, 36, 54, 149, 111, 20, 237, 239, 83, 254, 69, 41, 4, - 214, 53, 0, 70, 35, 249, 123, 207, 89, 210, 254, 69, 124, 219, 235, 238, 179, 0, 214, 232, - 127, 118, 5, 64, 207, 253, 64, 56, 1, 224, 76, 35, 19, 217, 222, 54, 99, 32, 160, 214, - 13, 96, 17, 124, 237, 255, 22, 193, 215, 140, 128, 24, 179, 3, 209, 251, 96, 202, 24, 108, - 138, 240, 123, 102, 2, 120, 167, 3, 106, 139, 39, 104, 27, 245, 104, 130, 255, 237, 68, 253, - 150, 126, 255, 81, 74, 102, 111, 110, 254, 29, 67, 118, 250, 255, 74, 43, 0, 98, 40, 0, - 200, 60, 204, 124, 167, 69, 252, 189, 38, 192, 51, 24, 240, 111, 227, 183, 53, 242, 215, 196, - 63, 18, 253, 107, 70, 64, 6, 153, 130, 217, 76, 76, 237, 25, 128, 140, 155, 223, 74, 141, - 139, 241, 196, 172, 187, 248, 105, 25, 129, 95, 225, 223, 139, 254, 95, 135, 192, 85, 131, 1, - 176, 116, 1, 104, 226, 63, 51, 6, 224, 201, 2, 141, 241, 0, 132, 248, 222, 231, 53, 179, - 26, 160, 102, 2, 162, 179, 1, 70, 93, 1, 127, 197, 191, 156, 176, 119, 41, 97, 145, 216, - 34, 65, 150, 217, 114, 174, 251, 179, 57, 110, 244, 104, 223, 249, 50, 48, 1, 34, 254, 53, - 147, 91, 219, 242, 182, 54, 241, 25, 69, 251, 214, 41, 127, 154, 19, 237, 25, 128, 223, 200, - 191, 151, 5, 16, 137, 173, 2, 120, 181, 12, 0, 98, 12, 128, 233, 200, 202, 0, 104, 226, - 111, 17, 200, 200, 190, 0, 127, 7, 70, 96, 166, 43, 32, 154, 1, 232, 9, 183, 53, 107, - 50, 125, 223, 183, 137, 27, 92, 6, 207, 89, 199, 1, 120, 7, 252, 89, 141, 128, 54, 224, - 207, 114, 126, 90, 70, 162, 52, 76, 192, 153, 107, 0, 32, 214, 0, 112, 37, 83, 177, 114, - 45, 128, 153, 110, 128, 86, 87, 128, 150, 9, 248, 43, 190, 37, 131, 173, 11, 6, 137, 248, - 167, 14, 166, 177, 41, 17, 126, 9, 220, 240, 210, 121, 28, 185, 0, 35, 35, 176, 23, 127, - 75, 127, 191, 165, 239, 127, 228, 56, 63, 142, 232, 223, 155, 1, 136, 138, 63, 139, 255, 0, - 16, 129, 95, 245, 60, 103, 77, 128, 22, 144, 205, 12, 6, 156, 25, 11, 224, 217, 116, 104, - 102, 64, 96, 164, 76, 89, 119, 25, 172, 150, 205, 128, 188, 75, 2, 107, 239, 143, 174, 243, - 175, 237, 220, 215, 138, 194, 255, 58, 47, 216, 239, 119, 254, 217, 137, 125, 111, 55, 193, 207, - 194, 232, 255, 174, 251, 0, 32, 238, 0, 239, 50, 9, 145, 253, 0, 50, 178, 0, 35, 19, - 48, 90, 26, 248, 175, 35, 19, 96, 93, 60, 40, 99, 73, 224, 214, 185, 183, 174, 153, 246, - 25, 166, 123, 177, 57, 111, 112, 81, 110, 120, 111, 61, 0, 79, 87, 192, 87, 254, 183, 159, - 189, 236, 62, 99, 36, 182, 95, 177, 141, 198, 23, 131, 235, 172, 59, 225, 111, 13, 60, 244, - 124, 103, 246, 10, 128, 79, 17, 77, 196, 31, 48, 1, 24, 128, 136, 248, 207, 236, 14, 152, - 53, 43, 192, 106, 10, 190, 226, 203, 124, 107, 166, 200, 26, 249, 15, 217, 38, 110, 246, 104, - 238, 124, 25, 152, 0, 111, 212, 111, 17, 254, 72, 95, 127, 235, 194, 254, 145, 113, 223, 127, - 111, 39, 193, 143, 216, 82, 255, 44, 1, 140, 49, 0, 132, 254, 109, 231, 150, 101, 0, 68, - 108, 107, 241, 71, 102, 4, 244, 50, 1, 81, 193, 143, 110, 39, 172, 101, 70, 82, 203, 217, - 166, 136, 122, 116, 108, 64, 77, 50, 1, 145, 44, 192, 108, 228, 255, 71, 17, 254, 189, 224, - 91, 183, 21, 94, 97, 0, 16, 75, 204, 7, 32, 194, 87, 191, 158, 25, 6, 64, 196, 215, - 5, 208, 51, 2, 214, 174, 128, 209, 52, 193, 191, 162, 15, 252, 155, 93, 19, 160, 39, 254, - 158, 212, 191, 186, 118, 192, 102, 140, 240, 71, 162, 111, 153, 14, 40, 78, 19, 176, 31, 213, - 223, 18, 125, 139, 17, 176, 94, 152, 94, 234, 127, 180, 230, 128, 214, 255, 223, 19, 253, 200, - 244, 191, 168, 32, 33, 100, 0, 112, 150, 113, 178, 44, 90, 99, 157, 14, 40, 226, 31, 7, - 16, 237, 10, 248, 78, 100, 1, 180, 99, 25, 9, 183, 37, 243, 33, 202, 251, 68, 28, 123, - 4, 68, 246, 2, 232, 237, 3, 208, 50, 3, 251, 46, 129, 217, 238, 128, 175, 140, 83, 237, - 218, 230, 62, 189, 194, 245, 71, 198, 105, 255, 25, 241, 207, 28, 252, 119, 69, 65, 199, 100, - 0, 144, 213, 176, 28, 211, 204, 96, 192, 168, 9, 136, 76, 11, 140, 44, 31, 156, 181, 54, - 128, 117, 35, 160, 20, 180, 165, 128, 61, 207, 245, 110, 118, 111, 48, 160, 214, 239, 111, 89, - 218, 87, 38, 132, 95, 6, 81, 127, 43, 250, 111, 165, 254, 61, 131, 254, 86, 164, 255, 17, - 95, 174, 9, 32, 184, 119, 184, 38, 43, 187, 1, 102, 179, 0, 35, 193, 215, 118, 17, 244, - 110, 22, 20, 221, 32, 200, 58, 123, 160, 167, 121, 205, 215, 109, 198, 104, 95, 19, 253, 170, - 136, 239, 42, 19, 32, 13, 241, 47, 198, 194, 56, 26, 244, 215, 234, 255, 183, 26, 128, 153, - 232, 127, 117, 228, 143, 56, 2, 192, 81, 38, 39, 99, 95, 0, 107, 22, 96, 102, 64, 160, - 37, 27, 96, 93, 61, 48, 83, 252, 69, 108, 253, 252, 161, 244, 255, 63, 3, 48, 187, 243, - 159, 136, 190, 76, 176, 215, 217, 236, 77, 128, 40, 98, 58, 218, 74, 215, 210, 223, 255, 71, - 254, 155, 242, 111, 13, 252, 251, 42, 6, 192, 35, 254, 140, 254, 199, 176, 0, 130, 250, 166, - 243, 140, 118, 1, 88, 76, 192, 200, 0, 212, 129, 72, 255, 21, 223, 184, 0, 205, 4, 104, - 251, 2, 120, 7, 8, 182, 196, 190, 102, 149, 49, 203, 66, 64, 158, 231, 70, 55, 221, 147, - 5, 216, 11, 255, 62, 27, 32, 138, 232, 139, 98, 4, 106, 199, 8, 236, 163, 255, 34, 237, - 244, 255, 204, 212, 63, 175, 240, 207, 138, 32, 34, 10, 0, 103, 153, 23, 207, 64, 64, 45, - 2, 142, 78, 9, 156, 237, 14, 176, 252, 30, 205, 2, 24, 13, 16, 244, 140, 250, 31, 69, - 254, 163, 160, 183, 123, 237, 55, 195, 205, 211, 54, 250, 177, 20, 146, 72, 22, 160, 101, 4, - 190, 13, 97, 179, 70, 255, 145, 180, 127, 111, 222, 255, 175, 9, 16, 57, 126, 237, 127, 68, - 157, 107, 0, 68, 249, 119, 207, 0, 120, 178, 0, 61, 173, 144, 65, 68, 109, 153, 22, 104, - 217, 4, 200, 147, 254, 255, 202, 220, 58, 0, 222, 213, 253, 194, 233, 255, 95, 3, 16, 89, - 247, 223, 147, 9, 24, 101, 1, 100, 32, 250, 251, 12, 128, 52, 204, 64, 49, 94, 152, 145, - 115, 28, 165, 253, 181, 1, 127, 163, 113, 0, 30, 241, 63, 114, 228, 63, 226, 9, 0, 71, - 152, 152, 204, 113, 0, 90, 176, 104, 49, 0, 189, 165, 130, 181, 93, 0, 61, 131, 1, 103, - 133, 95, 140, 231, 106, 185, 126, 195, 123, 99, 93, 7, 160, 23, 253, 183, 198, 3, 120, 179, - 0, 210, 16, 254, 79, 199, 12, 88, 4, 108, 212, 111, 210, 27, 241, 175, 173, 246, 231, 49, - 0, 34, 115, 163, 255, 201, 0, 0, 192, 155, 51, 0, 163, 232, 223, 99, 2, 102, 103, 6, - 88, 51, 3, 163, 148, 191, 197, 16, 244, 206, 45, 59, 250, 15, 173, 3, 48, 90, 246, 215, - 187, 73, 208, 200, 8, 88, 7, 5, 246, 76, 129, 24, 132, 95, 75, 253, 71, 54, 251, 89, - 189, 241, 207, 217, 98, 143, 217, 0, 32, 170, 95, 153, 1, 240, 100, 1, 178, 76, 192, 140, - 17, 176, 12, 4, 180, 204, 84, 152, 217, 29, 55, 229, 254, 142, 150, 2, 94, 157, 5, 216, - 223, 216, 239, 32, 242, 255, 4, 68, 223, 106, 8, 90, 27, 252, 124, 22, 138, 191, 38, 252, - 44, 255, 11, 0, 79, 53, 26, 213, 248, 247, 153, 38, 192, 178, 112, 80, 214, 166, 64, 214, - 46, 0, 75, 100, 111, 30, 252, 39, 202, 82, 192, 171, 179, 0, 90, 38, 96, 31, 145, 207, - 20, 202, 214, 40, 255, 214, 247, 20, 177, 13, 252, 139, 26, 0, 235, 227, 43, 139, 60, 166, - 3, 128, 168, 127, 69, 22, 192, 51, 38, 96, 102, 60, 128, 197, 4, 204, 100, 6, 162, 131, - 1, 69, 252, 83, 0, 235, 108, 57, 176, 172, 4, 40, 201, 89, 0, 237, 38, 183, 210, 241, - 158, 212, 255, 168, 96, 20, 25, 167, 253, 203, 34, 241, 207, 140, 254, 17, 97, 0, 184, 179, - 249, 56, 35, 11, 224, 49, 1, 85, 244, 149, 254, 172, 209, 190, 119, 206, 255, 236, 138, 127, - 174, 105, 151, 158, 105, 128, 145, 44, 64, 29, 8, 152, 118, 18, 191, 66, 252, 143, 81, 87, - 192, 62, 218, 111, 61, 223, 90, 131, 160, 213, 5, 224, 217, 234, 247, 14, 125, 255, 152, 6, - 0, 56, 51, 147, 112, 212, 88, 0, 17, 61, 229, 254, 149, 185, 89, 2, 214, 174, 3, 235, - 166, 64, 214, 157, 253, 82, 163, 255, 158, 1, 200, 204, 2, 20, 227, 129, 253, 206, 231, 108, - 205, 193, 223, 207, 16, 248, 54, 222, 255, 25, 152, 129, 214, 227, 223, 227, 31, 141, 250, 215, - 182, 250, 157, 77, 255, 91, 4, 26, 1, 231, 58, 192, 59, 133, 243, 201, 215, 33, 178, 63, - 192, 200, 0, 104, 25, 129, 175, 196, 183, 17, 214, 140, 65, 239, 239, 154, 244, 19, 141, 254, - 135, 215, 220, 59, 11, 64, 203, 2, 212, 65, 148, 63, 106, 212, 189, 217, 128, 189, 9, 40, - 29, 51, 160, 9, 127, 221, 9, 253, 103, 32, 250, 179, 27, 254, 100, 173, 250, 135, 8, 2, - 192, 157, 205, 79, 100, 155, 96, 205, 0, 104, 226, 239, 157, 34, 104, 49, 2, 218, 99, 75, - 212, 47, 226, 91, 6, 88, 12, 153, 0, 115, 166, 192, 179, 14, 128, 37, 11, 32, 131, 12, - 128, 55, 5, 212, 203, 6, 124, 7, 34, 187, 23, 127, 77, 248, 191, 141, 104, 223, 186, 201, - 207, 149, 6, 254, 97, 10, 0, 224, 14, 153, 142, 163, 6, 4, 138, 248, 54, 13, 178, 118, - 13, 68, 68, 95, 219, 24, 104, 116, 173, 170, 216, 22, 250, 177, 152, 131, 230, 58, 0, 30, - 177, 183, 102, 1, 90, 25, 0, 235, 78, 130, 223, 31, 17, 31, 153, 128, 150, 25, 40, 13, - 241, 223, 255, 222, 71, 254, 117, 39, 234, 90, 244, 47, 18, 219, 237, 239, 236, 121, 255, 152, - 4, 0, 88, 41, 238, 89, 6, 192, 146, 1, 16, 137, 117, 3, 68, 54, 17, 154, 249, 125, - 149, 212, 191, 43, 3, 16, 205, 2, 204, 206, 12, 104, 157, 108, 111, 106, 158, 40, 191, 123, - 226, 255, 81, 12, 64, 84, 248, 53, 209, 191, 195, 194, 63, 152, 4, 0, 4, 254, 140, 239, - 245, 238, 109, 111, 89, 69, 111, 198, 0, 68, 179, 3, 209, 173, 128, 181, 181, 0, 44, 247, - 204, 21, 253, 255, 26, 128, 140, 44, 64, 235, 255, 145, 49, 1, 251, 44, 128, 200, 120, 117, - 190, 158, 240, 239, 159, 107, 137, 255, 199, 96, 0, 68, 142, 157, 242, 183, 82, 132, 17, 120, - 0, 56, 211, 28, 68, 12, 128, 22, 253, 139, 196, 7, 6, 106, 51, 5, 60, 34, 255, 117, - 124, 166, 71, 248, 45, 231, 31, 186, 23, 209, 221, 0, 69, 198, 59, 3, 246, 186, 2, 60, - 70, 160, 101, 2, 138, 193, 8, 244, 132, 127, 244, 119, 182, 248, 91, 31, 103, 137, 51, 194, - 14, 0, 119, 50, 10, 217, 99, 1, 102, 77, 128, 199, 8, 104, 98, 31, 17, 127, 77, 248, - 53, 209, 119, 71, 255, 191, 25, 0, 107, 22, 64, 51, 10, 173, 223, 34, 255, 29, 233, 111, - 53, 2, 123, 19, 208, 51, 2, 123, 113, 254, 205, 2, 244, 254, 142, 166, 252, 163, 187, 253, - 245, 132, 154, 165, 127, 1, 224, 173, 230, 192, 181, 112, 205, 226, 76, 128, 87, 196, 173, 203, - 252, 90, 230, 253, 247, 142, 213, 98, 150, 106, 224, 62, 152, 151, 2, 182, 100, 1, 196, 144, - 1, 232, 13, 12, 180, 152, 128, 223, 148, 125, 239, 249, 175, 34, 224, 214, 190, 126, 111, 159, - 127, 36, 234, 103, 222, 255, 181, 224, 122, 35, 82, 112, 254, 245, 246, 174, 11, 32, 98, 223, - 53, 208, 107, 0, 172, 34, 30, 17, 125, 109, 189, 255, 106, 52, 58, 211, 101, 218, 186, 20, - 112, 164, 43, 160, 101, 8, 102, 178, 1, 86, 51, 48, 154, 182, 231, 17, 252, 140, 168, 63, - 51, 3, 128, 104, 1, 192, 211, 204, 84, 52, 3, 48, 147, 13, 200, 202, 8, 68, 94, 99, - 57, 30, 235, 249, 141, 30, 155, 76, 66, 116, 37, 64, 45, 91, 224, 237, 18, 176, 102, 3, - 68, 17, 125, 171, 1, 176, 254, 111, 214, 0, 16, 253, 19, 233, 3, 153, 1, 200, 201, 2, - 100, 24, 0, 145, 248, 86, 188, 25, 83, 251, 44, 226, 95, 197, 191, 198, 127, 168, 203, 101, - 115, 222, 56, 75, 87, 128, 102, 2, 90, 175, 143, 154, 0, 143, 65, 240, 24, 2, 175, 240, - 211, 239, 15, 0, 48, 103, 168, 86, 140, 7, 24, 137, 255, 140, 25, 200, 50, 0, 61, 193, - 183, 94, 143, 169, 107, 238, 93, 9, 112, 118, 60, 64, 43, 3, 80, 156, 39, 85, 2, 63, - 51, 17, 191, 119, 145, 159, 149, 211, 253, 48, 4, 0, 240, 196, 12, 74, 230, 250, 0, 158, - 44, 128, 44, 48, 0, 214, 207, 180, 70, 251, 233, 169, 127, 75, 6, 32, 210, 21, 48, 138, - 246, 173, 38, 160, 12, 156, 79, 153, 48, 7, 85, 114, 211, 253, 179, 3, 254, 232, 251, 7, - 0, 196, 127, 222, 0, 204, 102, 3, 36, 96, 0, 34, 255, 215, 190, 223, 242, 59, 77, 252, - 53, 3, 96, 53, 6, 214, 108, 129, 200, 120, 177, 160, 189, 200, 85, 199, 119, 148, 206, 49, - 121, 211, 252, 136, 63, 0, 0, 38, 192, 99, 10, 44, 175, 61, 66, 252, 67, 130, 18, 29, - 148, 54, 18, 187, 81, 154, 220, 242, 123, 244, 216, 34, 232, 179, 162, 159, 177, 192, 207, 236, - 136, 127, 196, 30, 0, 222, 104, 10, 50, 102, 6, 204, 24, 128, 136, 25, 176, 254, 157, 37, - 254, 211, 209, 191, 213, 0, 172, 52, 1, 86, 17, 214, 12, 129, 85, 232, 61, 98, 127, 228, - 84, 63, 196, 30, 0, 48, 5, 249, 70, 192, 155, 13, 176, 70, 238, 145, 40, 127, 70, 244, - 211, 197, 95, 36, 214, 5, 160, 221, 48, 235, 204, 0, 145, 156, 233, 128, 173, 239, 41, 202, - 241, 236, 199, 5, 204, 10, 191, 71, 244, 179, 196, 30, 211, 0, 0, 119, 140, 240, 35, 159, - 227, 153, 6, 151, 109, 4, 102, 132, 190, 6, 142, 35, 75, 252, 77, 34, 50, 59, 37, 205, - 51, 239, 221, 50, 146, 222, 147, 158, 143, 102, 14, 34, 191, 61, 25, 15, 175, 80, 35, 230, - 0, 128, 105, 136, 27, 130, 12, 3, 160, 137, 191, 245, 255, 30, 147, 161, 137, 255, 232, 241, - 84, 244, 239, 53, 0, 103, 153, 0, 175, 41, 240, 62, 103, 61, 38, 239, 121, 102, 136, 60, - 198, 0, 0, 222, 152, 29, 240, 172, 111, 159, 49, 85, 208, 146, 13, 152, 21, 251, 200, 224, - 190, 101, 226, 31, 49, 0, 87, 49, 1, 17, 97, 47, 129, 239, 246, 26, 128, 21, 38, 0, - 163, 0, 0, 79, 17, 246, 108, 241, 159, 201, 6, 100, 155, 129, 200, 239, 222, 115, 203, 197, - 63, 219, 0, 68, 77, 128, 55, 18, 207, 24, 200, 231, 53, 35, 89, 6, 224, 237, 98, 141, - 81, 1, 56, 79, 88, 159, 112, 238, 94, 3, 224, 17, 221, 217, 110, 130, 136, 208, 71, 70, - 251, 167, 136, 255, 72, 232, 174, 96, 2, 102, 178, 2, 153, 38, 0, 241, 199, 36, 0, 32, - 238, 207, 48, 1, 81, 241, 159, 137, 242, 163, 253, 253, 75, 197, 95, 19, 188, 51, 77, 64, - 84, 212, 179, 4, 63, 123, 113, 159, 179, 68, 13, 49, 5, 128, 187, 154, 150, 240, 62, 247, - 6, 113, 141, 26, 130, 149, 130, 63, 35, 254, 145, 251, 84, 189, 59, 213, 173, 50, 1, 30, - 81, 142, 118, 29, 120, 133, 63, 35, 234, 159, 21, 96, 4, 28, 0, 222, 110, 32, 50, 199, - 4, 204, 26, 129, 85, 130, 127, 184, 248, 123, 162, 219, 163, 77, 64, 84, 184, 51, 162, 252, - 25, 209, 207, 52, 80, 0, 0, 24, 132, 120, 244, 63, 155, 17, 152, 21, 249, 168, 216, 175, - 22, 255, 174, 1, 56, 194, 4, 68, 132, 223, 251, 120, 86, 232, 75, 240, 60, 16, 121, 0, - 128, 99, 205, 65, 13, 60, 151, 221, 85, 144, 21, 233, 31, 38, 254, 153, 145, 108, 182, 9, - 88, 97, 10, 188, 145, 254, 17, 233, 126, 204, 1, 0, 32, 242, 185, 239, 89, 209, 45, 144, - 45, 246, 25, 75, 249, 78, 95, 183, 35, 5, 109, 214, 4, 100, 71, 246, 43, 83, 253, 119, - 23, 118, 140, 9, 0, 66, 123, 183, 227, 95, 209, 53, 112, 68, 148, 127, 138, 248, 175, 18, - 178, 89, 19, 224, 17, 241, 172, 255, 173, 48, 1, 8, 42, 0, 192, 49, 134, 101, 70, 252, - 179, 12, 65, 36, 202, 175, 129, 243, 78, 203, 152, 172, 234, 195, 142, 100, 22, 202, 197, 254, - 158, 57, 23, 12, 1, 0, 192, 49, 25, 138, 236, 233, 130, 103, 252, 125, 184, 248, 123, 132, - 232, 44, 19, 144, 37, 228, 87, 78, 247, 99, 6, 0, 0, 209, 95, 243, 254, 149, 153, 129, - 168, 208, 31, 149, 242, 87, 223, 183, 210, 0, 204, 136, 103, 150, 136, 31, 145, 230, 207, 20, - 112, 204, 0, 0, 32, 250, 185, 159, 181, 218, 4, 204, 70, 248, 117, 209, 245, 82, 223, 247, - 231, 0, 113, 90, 105, 2, 86, 60, 119, 150, 248, 3, 0, 96, 0, 142, 53, 1, 51, 70, - 96, 246, 185, 83, 197, 63, 34, 96, 51, 130, 183, 218, 8, 100, 69, 247, 68, 253, 0, 0, - 239, 202, 6, 172, 18, 243, 153, 180, 126, 93, 125, 77, 143, 158, 187, 62, 211, 159, 190, 82, - 244, 103, 143, 13, 177, 7, 0, 184, 142, 41, 152, 17, 215, 154, 240, 252, 108, 127, 126, 61, - 226, 218, 157, 49, 138, 125, 54, 194, 206, 140, 232, 203, 5, 175, 15, 0, 0, 28, 39, 138, - 153, 102, 32, 250, 158, 12, 243, 51, 181, 27, 224, 157, 76, 192, 42, 193, 247, 158, 23, 66, - 15, 0, 112, 47, 99, 112, 180, 33, 184, 164, 248, 103, 9, 216, 85, 141, 64, 118, 132, 127, - 180, 216, 99, 46, 0, 224, 237, 209, 251, 17, 223, 183, 194, 16, 28, 37, 252, 83, 239, 207, - 18, 153, 35, 50, 9, 101, 241, 255, 179, 174, 9, 194, 13, 0, 112, 77, 35, 81, 147, 94, - 87, 15, 250, 158, 165, 239, 191, 210, 104, 246, 76, 129, 62, 99, 133, 67, 0, 0, 184, 167, - 73, 168, 7, 190, 38, 67, 248, 83, 62, 35, 91, 208, 142, 140, 158, 203, 137, 159, 137, 97, - 0, 0, 184, 71, 212, 63, 243, 121, 245, 196, 207, 92, 126, 77, 86, 8, 212, 209, 227, 10, - 142, 16, 120, 132, 28, 0, 224, 29, 198, 161, 94, 224, 181, 135, 152, 161, 85, 194, 118, 214, - 216, 130, 114, 129, 243, 199, 44, 0, 0, 220, 35, 27, 16, 249, 204, 122, 210, 49, 167, 159, - 251, 255, 1, 67, 190, 69, 189, 21, 93, 150, 173, 0, 0, 0, 0, 73, 69, 78, 68, 174, - 66, 96, 130 - }; - }; - BasicShadowTexture_t BasicShadowTexture; -} -#endif diff --git a/src/ogfx/static_resources/StateGradient.hpp b/src/ogfx/static_resources/StateGradient.hpp deleted file mode 100644 index 903accf..0000000 --- a/src/ogfx/static_resources/StateGradient.hpp +++ /dev/null @@ -1,44 +0,0 @@ -#ifndef __StateGradient_HPP__ -#define __StateGradient_HPP__ -namespace oxres -{ - struct StateGradient_t { - const unsigned int size = 632; - const unsigned char data[632] = { - 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, - 200, 0, 0, 0, 1, 8, 2, 0, 0, 0, 20, 221, 118, 181, 0, 0, 1, 131, 105, 67, - 67, 80, 73, 67, 67, 32, 112, 114, 111, 102, 105, 108, 101, 0, 0, 40, 145, 125, 145, 61, - 72, 195, 64, 28, 197, 95, 83, 69, 145, 138, 67, 59, 20, 113, 8, 82, 157, 236, 162, 34, - 142, 181, 10, 69, 168, 16, 106, 133, 86, 29, 76, 46, 253, 130, 38, 13, 73, 138, 139, 163, - 224, 90, 112, 240, 99, 177, 234, 224, 226, 172, 171, 131, 171, 32, 8, 126, 128, 56, 58, 57, - 41, 186, 72, 137, 255, 75, 10, 45, 98, 60, 56, 238, 199, 187, 123, 143, 187, 119, 128, 208, - 172, 50, 205, 234, 73, 0, 154, 110, 155, 153, 84, 82, 204, 229, 87, 197, 190, 87, 132, 16, - 69, 24, 163, 136, 201, 204, 50, 230, 36, 41, 13, 223, 241, 117, 143, 0, 95, 239, 226, 60, - 203, 255, 220, 159, 99, 80, 45, 88, 12, 8, 136, 196, 9, 102, 152, 54, 241, 6, 241, 204, - 166, 109, 112, 222, 39, 142, 176, 178, 172, 18, 159, 19, 79, 152, 116, 65, 226, 71, 174, 43, - 30, 191, 113, 46, 185, 44, 240, 204, 136, 153, 205, 204, 19, 71, 136, 197, 82, 23, 43, 93, - 204, 202, 166, 70, 60, 77, 28, 83, 53, 157, 242, 133, 156, 199, 42, 231, 45, 206, 90, 181, - 206, 218, 247, 228, 47, 12, 21, 244, 149, 101, 174, 211, 28, 65, 10, 139, 88, 130, 4, 17, - 10, 234, 168, 160, 10, 27, 113, 90, 117, 82, 44, 100, 104, 63, 233, 227, 31, 118, 253, 18, - 185, 20, 114, 85, 192, 200, 177, 128, 26, 52, 200, 174, 31, 252, 15, 126, 119, 107, 21, 167, - 38, 189, 164, 80, 18, 232, 125, 113, 156, 143, 49, 160, 111, 23, 104, 53, 28, 231, 251, 216, - 113, 90, 39, 64, 240, 25, 184, 210, 59, 254, 90, 19, 152, 253, 36, 189, 209, 209, 98, 71, - 192, 208, 54, 112, 113, 221, 209, 148, 61, 224, 114, 7, 136, 62, 25, 178, 41, 187, 82, 144, - 166, 80, 44, 2, 239, 103, 244, 77, 121, 32, 124, 11, 12, 172, 121, 189, 181, 247, 113, 250, - 0, 100, 169, 171, 244, 13, 112, 112, 8, 140, 151, 40, 123, 221, 231, 221, 253, 221, 189, 253, - 123, 166, 221, 223, 15, 209, 38, 114, 204, 181, 133, 24, 137, 0, 0, 0, 9, 112, 72, 89, - 115, 0, 0, 46, 35, 0, 0, 46, 35, 1, 120, 165, 63, 118, 0, 0, 0, 7, 116, 73, - 77, 69, 7, 230, 12, 24, 21, 25, 24, 206, 21, 144, 155, 0, 0, 0, 25, 116, 69, 88, - 116, 67, 111, 109, 109, 101, 110, 116, 0, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, - 104, 32, 71, 73, 77, 80, 87, 129, 14, 23, 0, 0, 0, 99, 73, 68, 65, 84, 40, 207, - 141, 144, 65, 18, 192, 32, 8, 3, 23, 253, 122, 191, 141, 244, 64, 157, 98, 69, 235, 76, - 14, 17, 67, 32, 200, 101, 20, 30, 84, 16, 222, 231, 10, 2, 53, 16, 9, 237, 179, 166, - 116, 193, 71, 121, 50, 104, 51, 215, 77, 104, 96, 208, 38, 236, 139, 78, 52, 19, 27, 216, - 248, 165, 153, 161, 215, 109, 228, 154, 185, 157, 47, 118, 210, 222, 254, 204, 117, 17, 54, 10, - 180, 199, 220, 24, 198, 56, 154, 93, 38, 189, 73, 32, 55, 250, 88, 138, 3, 247, 50, 102, - 231, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130 - }; - }; - StateGradient_t StateGradient; -} -#endif diff --git a/src/ogfx/static_resources/default_bitmap_font.hpp b/src/ogfx/static_resources/default_bitmap_font.hpp deleted file mode 100644 index 39d388e..0000000 --- a/src/ogfx/static_resources/default_bitmap_font.hpp +++ /dev/null @@ -1,4077 +0,0 @@ -#ifndef __default_bitmap_font_HPP__ -#define __default_bitmap_font_HPP__ - -namespace oxres -{ - struct default_bitmap_font_t { - const unsigned int size = 81252; - const unsigned char data[81252] = { - 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 3, - 48, 0, 0, 3, 240, 8, 6, 0, 0, 0, 238, 224, 155, 175, 0, 0, 128, 0, 73, 68, - 65, 84, 120, 94, 236, 221, 7, 212, 44, 85, 149, 54, 224, 95, 81, 130, 40, 162, 160, 40, - 42, 65, 16, 81, 49, 131, 1, 3, 45, 38, 80, 17, 69, 204, 152, 19, 42, 138, 89, 212, - 81, 49, 231, 8, 230, 132, 17, 71, 197, 156, 48, 33, 138, 57, 231, 132, 130, 105, 12, 99, - 22, 195, 204, 56, 243, 254, 123, 179, 187, 47, 245, 189, 125, 170, 186, 171, 43, 246, 185, 239, - 179, 214, 89, 226, 237, 93, 85, 103, 127, 213, 161, 78, 213, 9, 255, 239, 255, 137, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 200, - 176, 0, 108, 101, 229, 136, 142, 203, 78, 124, 220, 46, 64, 185, 212, 45, 202, 165, 38, 40, - 151, 186, 69, 185, 212, 132, 140, 114, 145, 113, 66, 70, 239, 49, 100, 148, 75, 78, 144, 209, - 121, 65, 70, 185, 100, 197, 254, 104, 59, 162, 123, 19, 62, 110, 23, 160, 92, 234, 154, 240, - 113, 187, 0, 229, 82, 215, 132, 143, 219, 5, 40, 151, 186, 38, 124, 220, 46, 32, 163, 92, - 100, 156, 144, 209, 123, 12, 25, 229, 146, 19, 100, 116, 94, 144, 81, 46, 89, 65, 70, 39, - 6, 202, 165, 174, 9, 31, 183, 11, 80, 46, 117, 77, 248, 184, 93, 128, 114, 169, 107, 194, - 199, 237, 2, 50, 202, 69, 198, 9, 25, 189, 199, 144, 81, 46, 57, 65, 70, 231, 5, 25, - 229, 146, 21, 100, 116, 98, 160, 92, 234, 154, 240, 113, 187, 0, 229, 82, 215, 132, 143, 219, - 5, 40, 151, 186, 38, 124, 220, 46, 32, 163, 92, 100, 156, 144, 209, 123, 12, 25, 229, 146, - 19, 100, 116, 94, 144, 81, 46, 89, 193, 252, 137, 57, 141, 99, 234, 178, 125, 28, 79, 251, - 156, 112, 76, 23, 160, 92, 42, 65, 185, 52, 6, 229, 82, 9, 202, 165, 49, 100, 148, 139, - 140, 19, 50, 122, 143, 33, 163, 92, 114, 130, 140, 206, 11, 50, 202, 37, 43, 200, 232, 196, - 64, 185, 84, 130, 114, 105, 12, 202, 165, 18, 148, 75, 99, 200, 40, 23, 25, 39, 100, 244, - 30, 67, 70, 185, 228, 4, 25, 157, 23, 100, 148, 75, 86, 144, 209, 137, 129, 114, 169, 4, - 229, 210, 24, 148, 75, 37, 40, 151, 198, 144, 81, 46, 50, 78, 200, 232, 61, 134, 140, 114, - 201, 9, 50, 58, 47, 200, 40, 151, 172, 32, 163, 19, 3, 229, 82, 9, 202, 165, 49, 40, - 151, 74, 80, 46, 141, 33, 163, 92, 100, 156, 144, 209, 123, 12, 25, 229, 146, 19, 100, 116, - 94, 144, 81, 46, 89, 65, 70, 39, 6, 202, 165, 18, 148, 75, 99, 80, 46, 149, 160, 92, - 26, 67, 70, 185, 200, 56, 33, 163, 247, 24, 50, 202, 37, 39, 200, 232, 188, 32, 163, 92, - 178, 130, 140, 78, 12, 148, 75, 37, 40, 151, 198, 160, 92, 42, 65, 185, 52, 134, 140, 114, - 145, 113, 66, 70, 239, 49, 100, 148, 75, 78, 144, 209, 121, 65, 70, 185, 100, 5, 25, 157, - 24, 40, 151, 74, 80, 46, 141, 65, 185, 84, 130, 114, 105, 12, 25, 229, 34, 227, 132, 140, - 222, 99, 200, 40, 151, 156, 32, 163, 243, 130, 140, 114, 201, 10, 50, 58, 49, 80, 46, 149, - 160, 92, 26, 131, 114, 169, 4, 229, 210, 24, 50, 202, 69, 198, 9, 25, 189, 199, 144, 81, - 46, 57, 65, 70, 231, 5, 25, 229, 146, 21, 100, 116, 98, 160, 92, 42, 65, 185, 52, 6, - 229, 82, 9, 202, 165, 49, 100, 148, 139, 140, 19, 50, 122, 143, 33, 163, 92, 114, 130, 140, - 206, 11, 50, 202, 37, 43, 200, 232, 196, 64, 185, 84, 130, 114, 105, 12, 202, 165, 18, 148, - 75, 99, 200, 40, 23, 25, 39, 100, 244, 30, 67, 70, 185, 228, 4, 25, 157, 23, 100, 148, - 75, 86, 144, 209, 137, 129, 114, 169, 4, 229, 210, 24, 148, 75, 37, 40, 151, 198, 144, 81, - 46, 50, 78, 200, 232, 61, 134, 140, 114, 201, 9, 50, 58, 47, 200, 40, 151, 172, 32, 163, - 19, 3, 229, 82, 9, 202, 165, 49, 40, 151, 74, 80, 46, 141, 33, 163, 92, 100, 156, 144, - 209, 123, 12, 25, 229, 146, 19, 100, 116, 94, 144, 81, 46, 89, 65, 70, 39, 6, 202, 165, - 18, 148, 75, 99, 80, 46, 149, 160, 92, 26, 67, 70, 185, 200, 56, 33, 163, 247, 24, 50, - 202, 37, 39, 200, 232, 188, 32, 163, 92, 178, 130, 140, 78, 12, 148, 75, 37, 40, 151, 198, - 160, 92, 42, 65, 185, 52, 134, 140, 114, 145, 113, 66, 70, 239, 49, 100, 148, 75, 78, 144, - 209, 121, 65, 70, 185, 100, 5, 25, 157, 24, 40, 151, 74, 80, 46, 141, 65, 185, 84, 130, - 114, 105, 12, 25, 229, 34, 227, 132, 140, 222, 99, 200, 40, 151, 156, 32, 163, 243, 130, 140, - 114, 201, 10, 50, 58, 49, 80, 46, 149, 160, 92, 26, 131, 114, 169, 4, 229, 210, 24, 50, - 202, 69, 198, 9, 25, 189, 199, 144, 81, 46, 57, 65, 70, 231, 5, 25, 229, 146, 21, 100, - 116, 98, 160, 92, 42, 65, 185, 52, 6, 229, 82, 9, 202, 165, 49, 100, 148, 139, 140, 19, - 50, 122, 143, 33, 163, 92, 114, 130, 140, 206, 11, 50, 202, 37, 43, 200, 232, 196, 64, 185, - 84, 130, 114, 105, 12, 202, 165, 18, 148, 75, 99, 200, 40, 23, 25, 39, 100, 244, 30, 67, - 70, 185, 228, 4, 25, 157, 23, 100, 148, 75, 86, 144, 209, 137, 129, 114, 169, 4, 229, 210, - 24, 148, 75, 37, 40, 151, 198, 144, 81, 46, 50, 78, 200, 232, 61, 134, 140, 114, 201, 9, - 50, 58, 47, 200, 40, 151, 172, 32, 163, 19, 3, 229, 82, 9, 202, 165, 49, 40, 151, 74, - 80, 46, 141, 33, 163, 92, 100, 156, 144, 209, 123, 12, 25, 229, 146, 19, 100, 116, 94, 144, - 81, 46, 89, 65, 70, 39, 6, 202, 165, 18, 148, 75, 99, 80, 46, 149, 160, 92, 26, 67, - 70, 185, 200, 56, 33, 163, 247, 24, 50, 202, 37, 39, 200, 232, 188, 32, 163, 92, 178, 130, - 140, 78, 12, 148, 75, 37, 40, 151, 198, 160, 92, 42, 65, 185, 52, 134, 140, 114, 145, 113, - 66, 70, 239, 49, 100, 148, 75, 78, 144, 209, 121, 65, 70, 185, 100, 5, 25, 157, 24, 40, - 151, 74, 80, 46, 141, 65, 185, 84, 130, 114, 105, 12, 25, 229, 34, 227, 132, 140, 222, 99, - 200, 40, 151, 156, 32, 163, 243, 130, 140, 114, 201, 10, 50, 58, 49, 80, 46, 149, 160, 92, - 26, 131, 114, 169, 4, 229, 210, 24, 50, 202, 69, 198, 9, 25, 189, 199, 144, 81, 46, 57, - 65, 70, 231, 5, 25, 229, 146, 21, 100, 116, 98, 160, 92, 42, 65, 185, 52, 6, 229, 82, - 9, 202, 165, 49, 100, 148, 139, 140, 19, 50, 122, 143, 33, 163, 92, 114, 130, 140, 206, 11, - 50, 202, 37, 43, 200, 232, 196, 64, 185, 84, 130, 114, 105, 12, 202, 165, 18, 148, 75, 99, - 200, 40, 23, 25, 39, 100, 244, 30, 67, 70, 185, 228, 4, 25, 157, 23, 100, 148, 75, 86, - 48, 127, 98, 126, 96, 229, 136, 134, 229, 35, 216, 104, 194, 199, 237, 2, 148, 203, 162, 162, - 92, 26, 130, 114, 89, 84, 148, 75, 67, 200, 40, 23, 25, 39, 100, 244, 30, 67, 70, 185, - 228, 4, 25, 157, 23, 100, 148, 75, 86, 48, 127, 98, 186, 48, 225, 227, 118, 1, 202, 165, - 174, 9, 31, 183, 11, 80, 46, 117, 77, 248, 184, 93, 128, 114, 169, 107, 194, 199, 237, 2, - 50, 202, 69, 198, 9, 25, 189, 199, 144, 81, 46, 57, 65, 70, 231, 5, 25, 229, 146, 21, - 100, 116, 98, 160, 92, 234, 154, 240, 113, 187, 0, 229, 82, 215, 132, 143, 219, 5, 40, 151, - 186, 38, 124, 220, 46, 32, 163, 92, 100, 156, 144, 209, 123, 12, 25, 229, 146, 19, 100, 116, - 94, 144, 81, 46, 89, 65, 70, 39, 6, 202, 165, 174, 9, 31, 183, 11, 80, 46, 117, 77, - 248, 184, 93, 128, 114, 169, 107, 194, 199, 237, 2, 50, 202, 69, 198, 9, 25, 189, 199, 144, - 81, 46, 57, 65, 70, 231, 5, 25, 229, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 0, 182, 178, 114, 68, 199, 101, - 39, 62, 110, 23, 160, 92, 234, 22, 229, 82, 19, 148, 75, 221, 162, 92, 106, 130, 114, 169, - 91, 148, 75, 77, 80, 46, 117, 139, 114, 217, 140, 33, 163, 243, 130, 140, 114, 241, 100, 118, - 68, 247, 38, 124, 220, 46, 64, 185, 212, 53, 225, 227, 118, 1, 202, 165, 174, 9, 31, 183, - 11, 80, 46, 117, 77, 248, 184, 93, 128, 114, 169, 107, 194, 199, 237, 2, 148, 75, 93, 19, - 62, 110, 23, 160, 92, 234, 154, 240, 113, 165, 26, 50, 58, 47, 200, 40, 151, 172, 146, 129, - 114, 169, 107, 194, 199, 237, 2, 148, 75, 93, 19, 62, 110, 23, 160, 92, 234, 154, 240, 113, - 187, 0, 229, 82, 215, 132, 143, 219, 5, 40, 151, 186, 38, 124, 220, 46, 64, 185, 212, 53, - 225, 227, 74, 53, 100, 116, 94, 144, 81, 46, 89, 37, 3, 229, 82, 215, 132, 143, 219, 5, - 40, 151, 186, 38, 124, 220, 46, 64, 185, 212, 53, 225, 227, 118, 1, 202, 165, 174, 9, 31, - 183, 11, 80, 46, 117, 77, 248, 184, 93, 128, 114, 169, 107, 194, 199, 149, 106, 200, 232, 188, - 32, 163, 92, 82, 201, 156, 198, 49, 117, 217, 62, 142, 167, 125, 78, 56, 166, 11, 80, 46, - 149, 160, 92, 26, 131, 114, 169, 4, 229, 210, 24, 148, 75, 37, 40, 151, 198, 160, 92, 42, - 65, 185, 72, 1, 50, 58, 47, 200, 40, 151, 172, 146, 129, 114, 169, 4, 229, 210, 24, 148, - 75, 37, 40, 151, 198, 160, 92, 42, 65, 185, 52, 6, 229, 82, 9, 202, 69, 10, 144, 209, - 121, 65, 70, 185, 100, 149, 12, 148, 75, 37, 40, 151, 198, 160, 92, 42, 65, 185, 52, 6, - 229, 82, 9, 202, 165, 49, 40, 151, 74, 80, 46, 82, 128, 140, 206, 11, 50, 202, 37, 171, - 100, 160, 92, 42, 65, 185, 52, 6, 229, 82, 9, 202, 165, 49, 40, 151, 74, 80, 46, 141, - 65, 185, 84, 130, 114, 145, 2, 100, 116, 94, 144, 81, 46, 89, 37, 3, 229, 82, 9, 202, - 165, 49, 40, 151, 74, 80, 46, 141, 65, 185, 84, 130, 114, 105, 12, 202, 165, 18, 148, 139, - 20, 32, 163, 243, 130, 140, 114, 201, 42, 25, 40, 151, 74, 80, 46, 141, 65, 185, 84, 130, - 114, 105, 12, 202, 165, 18, 148, 75, 99, 80, 46, 149, 160, 92, 164, 0, 25, 157, 23, 100, - 148, 75, 86, 201, 64, 185, 84, 130, 114, 105, 12, 202, 165, 18, 148, 75, 99, 80, 46, 149, - 160, 92, 26, 131, 114, 169, 4, 229, 34, 5, 200, 232, 188, 32, 163, 92, 178, 74, 6, 202, - 165, 18, 148, 75, 99, 80, 46, 149, 160, 92, 26, 131, 114, 169, 4, 229, 210, 24, 148, 75, - 37, 40, 23, 41, 64, 70, 231, 5, 25, 229, 146, 85, 50, 80, 46, 149, 160, 92, 26, 131, - 114, 169, 4, 229, 210, 24, 148, 75, 37, 40, 151, 198, 160, 92, 42, 65, 185, 72, 1, 50, - 58, 47, 200, 40, 151, 172, 146, 129, 114, 169, 4, 229, 210, 24, 148, 75, 37, 40, 151, 198, - 160, 92, 42, 65, 185, 52, 6, 229, 82, 9, 202, 69, 10, 144, 209, 121, 65, 70, 185, 100, - 149, 12, 148, 75, 37, 40, 151, 198, 160, 92, 42, 65, 185, 52, 6, 229, 82, 9, 202, 165, - 49, 40, 151, 74, 80, 46, 82, 128, 140, 206, 11, 50, 202, 37, 171, 100, 160, 92, 42, 65, - 185, 52, 6, 229, 82, 9, 202, 165, 49, 40, 151, 74, 80, 46, 141, 65, 185, 84, 130, 114, - 145, 2, 100, 116, 94, 144, 81, 46, 89, 37, 3, 229, 82, 9, 202, 165, 49, 40, 151, 74, - 80, 46, 141, 65, 185, 84, 130, 114, 105, 12, 202, 165, 18, 148, 139, 20, 32, 163, 243, 130, - 140, 114, 201, 42, 25, 40, 151, 74, 80, 46, 141, 65, 185, 84, 130, 114, 105, 12, 202, 165, - 18, 148, 75, 99, 80, 46, 149, 160, 92, 164, 0, 25, 157, 23, 100, 148, 75, 86, 201, 64, - 185, 84, 130, 114, 105, 12, 202, 165, 18, 148, 75, 99, 80, 46, 149, 160, 92, 26, 131, 114, - 169, 4, 229, 34, 5, 200, 232, 188, 32, 163, 92, 178, 74, 6, 202, 165, 18, 148, 75, 99, - 80, 46, 149, 160, 92, 26, 131, 114, 169, 4, 229, 210, 24, 148, 75, 37, 40, 23, 41, 64, - 70, 231, 5, 25, 229, 146, 85, 50, 80, 46, 149, 160, 92, 26, 131, 114, 169, 4, 229, 210, - 24, 148, 75, 37, 40, 151, 198, 160, 92, 42, 65, 185, 72, 1, 50, 58, 47, 200, 40, 151, - 172, 146, 129, 114, 169, 4, 229, 210, 24, 148, 75, 37, 40, 151, 198, 160, 92, 42, 65, 185, - 52, 6, 229, 82, 9, 202, 69, 10, 144, 209, 121, 65, 70, 185, 100, 149, 12, 148, 75, 37, - 40, 151, 198, 160, 92, 42, 65, 185, 52, 6, 229, 82, 9, 202, 165, 49, 40, 151, 74, 80, - 46, 82, 128, 140, 206, 11, 50, 202, 37, 171, 100, 160, 92, 42, 65, 185, 52, 6, 229, 82, - 9, 202, 165, 49, 40, 151, 74, 80, 46, 141, 65, 185, 84, 130, 114, 145, 2, 100, 116, 94, - 144, 81, 46, 89, 37, 3, 229, 82, 9, 202, 165, 49, 40, 151, 74, 80, 46, 141, 65, 185, - 84, 130, 114, 105, 12, 202, 165, 18, 148, 139, 20, 32, 163, 243, 130, 140, 114, 201, 42, 25, - 40, 151, 74, 80, 46, 141, 65, 185, 84, 130, 114, 105, 12, 202, 165, 18, 148, 75, 99, 80, - 46, 149, 160, 92, 164, 0, 25, 157, 23, 100, 148, 75, 86, 201, 64, 185, 84, 130, 114, 105, - 12, 202, 165, 18, 148, 75, 99, 80, 46, 149, 160, 92, 26, 131, 114, 169, 4, 229, 34, 5, - 200, 232, 188, 32, 163, 92, 178, 74, 6, 202, 165, 18, 148, 75, 99, 80, 46, 149, 160, 92, - 26, 131, 114, 169, 4, 229, 210, 24, 148, 75, 37, 40, 23, 41, 64, 70, 231, 5, 25, 229, - 146, 85, 50, 80, 46, 149, 160, 92, 26, 131, 114, 169, 4, 229, 210, 24, 148, 75, 37, 40, - 151, 198, 160, 92, 42, 65, 185, 72, 1, 50, 58, 47, 200, 40, 151, 172, 146, 129, 114, 169, - 4, 229, 210, 24, 148, 75, 37, 40, 151, 198, 160, 92, 42, 65, 185, 52, 6, 229, 82, 9, - 202, 69, 10, 144, 209, 121, 65, 70, 185, 164, 146, 249, 129, 149, 35, 26, 150, 143, 96, 163, - 9, 31, 183, 11, 80, 46, 139, 138, 114, 105, 8, 202, 101, 81, 81, 46, 13, 65, 185, 44, - 42, 202, 165, 33, 40, 151, 69, 69, 185, 200, 38, 200, 232, 188, 32, 163, 92, 82, 201, 116, - 97, 194, 199, 237, 2, 148, 75, 93, 19, 62, 110, 23, 160, 92, 234, 154, 240, 113, 187, 0, - 229, 82, 215, 132, 143, 219, 5, 40, 151, 186, 38, 124, 220, 46, 64, 185, 212, 53, 225, 227, - 118, 1, 202, 165, 174, 9, 31, 87, 170, 33, 163, 243, 130, 140, 114, 201, 42, 25, 40, 151, - 186, 38, 124, 220, 46, 64, 185, 212, 53, 225, 227, 118, 1, 202, 165, 174, 9, 31, 183, 11, - 80, 46, 117, 77, 248, 184, 93, 128, 114, 169, 107, 194, 199, 237, 2, 148, 75, 93, 19, 62, - 174, 84, 67, 70, 231, 5, 25, 229, 146, 85, 50, 80, 46, 117, 77, 248, 184, 93, 128, 114, - 169, 107, 194, 199, 237, 2, 148, 75, 93, 19, 62, 110, 23, 160, 92, 234, 154, 240, 113, 187, - 0, 229, 82, 215, 132, 143, 219, 5, 40, 151, 186, 38, 124, 92, 169, 134, 140, 206, 11, 50, - 202, 69, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 214, 30, 128, 195, 172, 28, 89, 40, 87, 224, 24, 17, 17, 17, 17, 17, 145, 81, - 176, 6, 203, 151, 177, 209, 81, 28, 35, 34, 34, 34, 34, 34, 50, 10, 106, 192, 136, 136, - 136, 72, 110, 236, 122, 102, 75, 43, 127, 162, 107, 156, 143, 113, 156, 136, 172, 33, 168, 1, - 35, 34, 34, 34, 153, 177, 235, 153, 91, 210, 245, 141, 187, 47, 199, 137, 200, 26, 130, 26, - 48, 34, 34, 34, 146, 25, 187, 158, 121, 51, 93, 223, 252, 143, 149, 29, 57, 78, 68, 214, - 16, 212, 128, 17, 89, 137, 125, 86, 118, 181, 242, 55, 250, 252, 156, 97, 101, 107, 142, 29, - 154, 213, 233, 252, 86, 126, 177, 177, 170, 248, 171, 149, 75, 112, 236, 58, 178, 60, 206, 99, - 101, 223, 105, 185, 28, 191, 46, 34, 155, 23, 251, 30, 216, 218, 202, 95, 10, 223, 119, 238, - 100, 142, 19, 145, 53, 99, 31, 228, 115, 89, 217, 195, 202, 15, 232, 3, 254, 18, 43, 123, - 90, 57, 55, 111, 35, 34, 231, 176, 207, 200, 187, 232, 179, 227, 110, 197, 113, 99, 97, 117, - 187, 35, 87, 214, 188, 149, 227, 214, 145, 229, 177, 83, 33, 167, 47, 242, 235, 34, 178, 121, - 65, 204, 176, 202, 238, 201, 113, 210, 17, 251, 99, 159, 201, 127, 125, 115, 36, 199, 141, 145, - 213, 115, 55, 174, 184, 185, 100, 225, 245, 143, 209, 107, 199, 22, 54, 31, 21, 171, 219, 239, - 168, 174, 123, 115, 76, 145, 189, 126, 7, 138, 31, 197, 160, 49, 196, 29, 137, 35, 172, 156, - 140, 249, 129, 109, 236, 31, 86, 62, 99, 229, 223, 172, 92, 157, 247, 213, 21, 59, 214, 206, - 211, 99, 126, 218, 202, 175, 172, 252, 23, 226, 239, 255, 85, 43, 207, 181, 114, 37, 222, 102, - 21, 182, 159, 3, 172, 252, 47, 206, 241, 103, 43, 187, 115, 92, 95, 236, 216, 231, 182, 114, - 107, 43, 175, 181, 242, 93, 43, 127, 176, 242, 47, 196, 29, 164, 239, 88, 57, 193, 202, 205, - 172, 156, 139, 183, 29, 51, 44, 248, 30, 88, 87, 150, 195, 13, 56, 41, 115, 42, 199, 141, - 141, 213, 241, 11, 92, 105, 115, 29, 142, 91, 55, 150, 195, 142, 133, 124, 62, 199, 175, 139, - 200, 230, 197, 190, 7, 222, 90, 248, 78, 112, 255, 109, 229, 66, 28, 39, 29, 129, 26, 48, - 131, 179, 122, 157, 143, 234, 233, 206, 199, 113, 69, 246, 250, 163, 40, 254, 53, 28, 211, 39, - 196, 211, 150, 7, 34, 46, 138, 87, 245, 117, 43, 247, 70, 71, 221, 99, 16, 117, 124, 130, - 149, 191, 111, 56, 234, 188, 255, 179, 242, 70, 43, 231, 231, 125, 44, 203, 182, 221, 1, 243, - 221, 105, 238, 200, 113, 125, 177, 99, 95, 213, 202, 247, 168, 62, 101, 78, 179, 178, 27, 239, - 99, 172, 188, 174, 156, 0, 242, 104, 192, 124, 138, 147, 50, 55, 228, 184, 177, 177, 58, 222, - 130, 43, 109, 62, 202, 113, 99, 103, 117, 190, 171, 149, 155, 20, 254, 255, 133, 11, 249, 124, - 166, 240, 239, 126, 99, 224, 254, 86, 46, 51, 251, 55, 17, 201, 27, 226, 186, 237, 172, 194, - 119, 130, 251, 0, 199, 73, 135, 160, 6, 204, 224, 172, 94, 151, 163, 122, 254, 150, 99, 24, - 162, 27, 86, 209, 19, 56, 166, 47, 118, 236, 237, 173, 124, 132, 234, 211, 196, 79, 172, 28, - 202, 199, 105, 194, 246, 183, 133, 149, 119, 210, 113, 22, 249, 54, 86, 28, 140, 103, 219, 189, - 155, 246, 245, 58, 142, 233, 139, 29, 251, 250, 136, 167, 93, 117, 248, 211, 179, 181, 88, 112, - 20, 11, 190, 7, 214, 17, 210, 79, 95, 62, 207, 113, 99, 101, 117, 253, 26, 87, 222, 236, - 207, 113, 99, 133, 248, 78, 251, 253, 180, 222, 111, 183, 114, 73, 43, 23, 220, 148, 137, 53, - 46, 167, 113, 251, 35, 158, 220, 186, 44, 186, 202, 137, 200, 98, 246, 121, 191, 221, 57, 95, - 7, 155, 220, 141, 227, 164, 67, 80, 3, 102, 112, 86, 175, 131, 168, 158, 95, 226, 24, 102, - 49, 239, 167, 109, 6, 249, 224, 32, 6, 182, 242, 223, 185, 13, 254, 148, 164, 181, 71, 177, - 182, 175, 103, 240, 1, 204, 71, 173, 28, 133, 232, 199, 122, 15, 68, 215, 42, 126, 58, 227, - 49, 181, 198, 234, 32, 246, 89, 228, 99, 128, 182, 229, 184, 62, 32, 186, 189, 252, 39, 213, - 199, 121, 151, 57, 111, 100, 189, 218, 202, 219, 172, 252, 116, 227, 203, 103, 251, 17, 6, 170, - 119, 29, 88, 240, 61, 176, 142, 144, 30, 251, 50, 200, 103, 124, 21, 86, 215, 251, 113, 229, - 205, 137, 28, 55, 86, 152, 255, 190, 240, 201, 8, 142, 45, 252, 255, 111, 88, 121, 61, 226, - 105, 237, 140, 255, 247, 85, 121, 95, 34, 146, 31, 251, 172, 191, 163, 240, 217, 119, 222, 21, - 253, 130, 28, 39, 29, 130, 26, 48, 131, 195, 252, 143, 253, 59, 56, 134, 89, 204, 183, 104, - 155, 9, 199, 244, 1, 49, 102, 164, 11, 47, 225, 99, 173, 202, 246, 181, 59, 98, 172, 199, - 140, 255, 247, 157, 57, 206, 217, 191, 95, 214, 202, 47, 11, 177, 238, 182, 28, 87, 198, 98, - 175, 136, 141, 79, 59, 252, 75, 237, 106, 28, 215, 23, 59, 246, 243, 10, 117, 153, 241, 115, - 182, 161, 155, 30, 162, 123, 157, 55, 188, 138, 23, 100, 110, 244, 223, 5, 88, 240, 61, 176, - 110, 16, 99, 180, 124, 42, 206, 34, 127, 34, 86, 217, 173, 116, 76, 172, 174, 23, 192, 124, - 247, 10, 255, 44, 92, 132, 99, 199, 8, 241, 57, 254, 16, 213, 191, 138, 223, 248, 120, 186, - 149, 237, 120, 95, 34, 146, 23, 196, 140, 139, 124, 179, 243, 189, 28, 39, 29, 131, 26, 48, - 131, 67, 252, 240, 21, 61, 143, 99, 24, 230, 167, 238, 235, 125, 112, 184, 29, 243, 226, 136, - 139, 146, 50, 31, 182, 114, 39, 68, 163, 96, 59, 43, 219, 34, 102, 37, 187, 145, 149, 167, - 89, 249, 252, 57, 161, 27, 248, 192, 247, 61, 248, 120, 171, 178, 125, 61, 159, 246, 255, 44, - 142, 41, 178, 215, 111, 72, 241, 155, 250, 187, 87, 177, 184, 109, 16, 131, 225, 139, 30, 198, - 113, 125, 65, 52, 74, 124, 146, 130, 162, 119, 115, 92, 17, 230, 187, 217, 157, 198, 49, 99, - 131, 5, 223, 3, 235, 6, 243, 227, 219, 220, 107, 57, 110, 236, 48, 191, 62, 130, 123, 48, - 199, 141, 25, 226, 187, 42, 213, 29, 110, 198, 191, 171, 78, 192, 26, 191, 223, 68, 164, 30, - 164, 103, 91, 76, 222, 20, 149, 14, 65, 13, 152, 193, 97, 254, 135, 190, 242, 71, 222, 94, - 191, 16, 197, 251, 143, 232, 121, 57, 174, 107, 152, 239, 42, 85, 116, 39, 142, 79, 65, 140, - 255, 121, 17, 98, 134, 174, 153, 133, 79, 160, 234, 192, 198, 70, 133, 223, 217, 94, 120, 23, - 24, 27, 27, 87, 254, 247, 93, 120, 103, 213, 98, 94, 89, 216, 198, 249, 29, 220, 193, 102, - 244, 66, 250, 243, 177, 105, 80, 114, 10, 230, 207, 233, 194, 241, 88, 67, 67, 58, 207, 181, - 189, 160, 68, 122, 22, 175, 86, 199, 132, 245, 1, 233, 62, 226, 163, 159, 69, 141, 33, 158, - 136, 241, 84, 240, 51, 47, 179, 178, 5, 111, 35, 34, 249, 194, 252, 24, 87, 239, 117, 113, - 1, 142, 147, 142, 65, 13, 152, 193, 33, 102, 125, 42, 170, 92, 231, 193, 94, 191, 10, 197, - 255, 130, 99, 250, 128, 152, 169, 43, 229, 20, 142, 93, 4, 49, 107, 215, 11, 16, 79, 116, - 174, 197, 175, 175, 10, 49, 240, 182, 216, 45, 234, 236, 193, 183, 139, 88, 220, 163, 11, 219, - 184, 27, 113, 76, 145, 189, 126, 56, 197, 255, 218, 202, 69, 57, 174, 79, 118, 252, 253, 168, - 78, 238, 242, 28, 87, 132, 152, 73, 174, 232, 239, 28, 51, 54, 88, 240, 61, 176, 78, 16, - 23, 203, 220, 141, 207, 127, 28, 215, 166, 251, 216, 12, 162, 27, 153, 79, 43, 90, 228, 55, - 3, 22, 222, 64, 24, 3, 171, 231, 86, 86, 142, 193, 252, 211, 110, 230, 147, 125, 220, 152, - 183, 23, 145, 252, 32, 122, 147, 252, 147, 190, 3, 222, 201, 113, 210, 3, 251, 195, 255, 152, - 78, 132, 187, 55, 199, 141, 17, 22, 92, 184, 96, 68, 13, 24, 68, 215, 41, 111, 120, 164, - 10, 143, 185, 240, 110, 87, 28, 83, 44, 15, 58, 39, 244, 108, 223, 44, 188, 198, 101, 7, - 174, 75, 91, 108, 223, 159, 56, 167, 10, 27, 28, 199, 177, 203, 178, 109, 47, 206, 255, 214, - 4, 230, 103, 120, 123, 17, 199, 164, 88, 220, 77, 105, 187, 210, 1, 212, 136, 213, 210, 255, - 88, 136, 245, 11, 208, 202, 39, 29, 125, 176, 58, 236, 85, 168, 211, 204, 132, 227, 138, 16, - 3, 147, 139, 126, 196, 49, 99, 131, 5, 223, 3, 235, 196, 234, 125, 23, 78, 4, 75, 54, - 186, 199, 8, 233, 110, 162, 135, 115, 220, 216, 32, 166, 130, 246, 217, 16, 235, 120, 159, 149, - 93, 121, 95, 99, 132, 104, 116, 205, 172, 205, 236, 118, 34, 67, 67, 250, 59, 250, 14, 28, - 39, 61, 64, 186, 127, 239, 210, 131, 150, 135, 132, 5, 23, 46, 24, 87, 3, 230, 43, 84, - 151, 190, 44, 213, 149, 107, 21, 136, 133, 32, 83, 254, 157, 99, 135, 130, 152, 230, 180, 232, - 24, 142, 73, 65, 172, 155, 82, 244, 16, 142, 113, 136, 233, 153, 249, 9, 218, 115, 56, 110, - 8, 136, 121, 234, 121, 48, 248, 19, 57, 110, 6, 49, 217, 1, 223, 89, 122, 37, 199, 141, - 13, 22, 124, 15, 172, 19, 171, 247, 171, 56, 17, 243, 12, 142, 91, 23, 72, 79, 34, 177, - 212, 77, 132, 33, 89, 29, 143, 166, 58, 251, 5, 255, 161, 133, 255, 239, 159, 249, 135, 96, - 99, 215, 87, 127, 122, 220, 251, 88, 196, 85, 64, 13, 24, 145, 149, 96, 126, 6, 216, 191, - 97, 13, 102, 235, 204, 18, 210, 119, 209, 215, 226, 113, 56, 22, 92, 184, 96, 92, 13, 24, - 126, 202, 210, 151, 206, 158, 4, 216, 190, 223, 195, 7, 155, 242, 41, 71, 119, 226, 248, 33, - 88, 61, 174, 71, 117, 75, 54, 68, 24, 226, 233, 85, 209, 35, 57, 198, 217, 191, 63, 133, - 226, 190, 132, 1, 198, 35, 149, 177, 186, 156, 66, 245, 251, 33, 18, 125, 246, 17, 139, 244, - 241, 205, 140, 181, 152, 22, 22, 11, 190, 7, 214, 9, 54, 94, 88, 206, 84, 118, 41, 29, - 51, 164, 199, 193, 44, 156, 38, 126, 104, 86, 199, 243, 34, 166, 17, 247, 6, 202, 67, 17, - 211, 197, 111, 95, 200, 225, 211, 211, 56, 159, 200, 228, 45, 211, 127, 91, 249, 201, 115, 223, - 160, 6, 140, 72, 109, 136, 239, 0, 158, 184, 232, 237, 28, 39, 61, 193, 252, 172, 67, 110, - 95, 142, 27, 35, 171, 231, 165, 16, 235, 89, 20, 203, 166, 46, 72, 246, 223, 39, 209, 107, - 143, 42, 110, 223, 23, 196, 108, 80, 124, 39, 188, 47, 157, 77, 225, 107, 251, 126, 42, 31, - 172, 192, 87, 17, 95, 56, 240, 189, 107, 136, 233, 80, 139, 158, 196, 49, 41, 22, 119, 99, - 218, 110, 174, 91, 165, 253, 219, 1, 136, 62, 253, 51, 222, 112, 219, 147, 227, 134, 100, 245, - 57, 178, 80, 191, 153, 187, 82, 204, 149, 172, 124, 159, 131, 204, 241, 197, 184, 177, 194, 130, - 239, 129, 117, 129, 184, 104, 78, 125, 79, 236, 197, 177, 235, 194, 234, 190, 15, 39, 131, 184, - 99, 57, 216, 228, 22, 203, 178, 58, 238, 139, 194, 141, 24, 68, 35, 127, 102, 195, 204, 132, - 136, 133, 71, 71, 113, 211, 102, 25, 80, 3, 70, 164, 54, 196, 122, 113, 108, 244, 93, 98, - 179, 133, 88, 188, 143, 141, 234, 34, 108, 221, 33, 22, 19, 28, 202, 46, 92, 159, 182, 216, - 190, 175, 195, 7, 35, 63, 179, 114, 123, 212, 92, 8, 178, 77, 118, 236, 157, 168, 78, 111, - 227, 152, 20, 68, 247, 144, 162, 91, 210, 235, 126, 49, 243, 115, 138, 185, 75, 49, 102, 12, - 172, 78, 91, 99, 254, 233, 159, 79, 48, 224, 239, 73, 191, 155, 244, 108, 204, 223, 81, 114, - 31, 192, 136, 158, 36, 109, 14, 236, 239, 125, 5, 62, 9, 136, 115, 115, 30, 142, 93, 23, - 136, 129, 240, 197, 53, 152, 102, 214, 162, 171, 85, 145, 213, 249, 34, 133, 250, 175, 245, 69, - 63, 212, 128, 17, 169, 13, 243, 107, 67, 249, 90, 87, 219, 112, 156, 244, 4, 243, 107, 100, - 184, 206, 6, 126, 203, 70, 152, 239, 130, 244, 66, 142, 97, 216, 56, 96, 220, 13, 214, 224, - 180, 99, 127, 153, 234, 146, 226, 131, 97, 143, 197, 130, 25, 176, 186, 130, 141, 13, 13, 191, - 59, 191, 240, 130, 208, 98, 222, 91, 216, 198, 237, 76, 175, 191, 155, 94, 127, 83, 241, 245, - 25, 196, 44, 104, 87, 67, 60, 209, 185, 182, 149, 75, 113, 76, 215, 48, 191, 80, 170, 251, - 58, 98, 113, 196, 20, 31, 135, 161, 198, 75, 207, 176, 113, 140, 197, 204, 233, 28, 183, 110, - 44, 135, 159, 114, 82, 88, 147, 110, 202, 69, 216, 120, 51, 228, 139, 252, 250, 58, 129, 26, - 48, 34, 181, 32, 110, 90, 242, 19, 242, 19, 57, 78, 122, 100, 39, 224, 9, 116, 66, 220, - 92, 31, 121, 233, 6, 98, 17, 180, 162, 202, 133, 15, 17, 43, 192, 22, 249, 56, 133, 173, - 56, 174, 47, 118, 236, 171, 99, 126, 69, 218, 42, 103, 90, 57, 14, 177, 88, 228, 194, 134, - 68, 27, 236, 56, 111, 218, 88, 133, 234, 5, 167, 16, 131, 217, 139, 211, 191, 110, 152, 137, - 11, 243, 83, 13, 159, 142, 194, 28, 240, 136, 46, 131, 183, 69, 76, 114, 144, 186, 251, 236, - 125, 235, 253, 115, 215, 75, 23, 59, 68, 125, 62, 190, 177, 10, 73, 255, 9, 205, 166, 50, - 24, 164, 187, 251, 141, 126, 33, 209, 69, 44, 135, 47, 114, 82, 160, 110, 140, 210, 47, 168, - 1, 35, 82, 139, 125, 78, 238, 93, 248, 204, 204, 220, 154, 227, 164, 71, 118, 2, 30, 76, - 39, 228, 175, 28, 35, 221, 193, 252, 133, 229, 109, 56, 166, 8, 243, 211, 2, 255, 138, 99, - 250, 134, 24, 11, 242, 123, 170, 215, 50, 124, 155, 231, 90, 217, 131, 247, 217, 38, 204, 119, - 117, 243, 213, 233, 147, 79, 66, 236, 223, 183, 177, 114, 42, 197, 63, 180, 240, 186, 143, 169, - 241, 117, 57, 102, 188, 161, 179, 95, 225, 117, 239, 102, 242, 201, 194, 235, 85, 188, 43, 215, - 117, 103, 219, 118, 9, 49, 45, 108, 25, 239, 166, 228, 141, 202, 11, 243, 118, 210, 31, 196, - 83, 74, 118, 18, 199, 173, 27, 204, 63, 205, 116, 131, 140, 71, 148, 0, 53, 96, 68, 106, - 177, 207, 201, 71, 11, 159, 25, 231, 235, 67, 109, 205, 113, 210, 35, 59, 1, 119, 165, 147, - 242, 51, 142, 145, 238, 32, 102, 133, 42, 218, 116, 49, 156, 98, 175, 223, 132, 226, 191, 192, - 49, 67, 176, 122, 236, 130, 249, 15, 248, 178, 252, 41, 210, 27, 172, 92, 130, 247, 219, 22, - 204, 79, 125, 248, 27, 43, 15, 64, 212, 219, 7, 79, 123, 195, 227, 112, 196, 154, 58, 69, - 222, 253, 237, 252, 211, 125, 120, 227, 230, 59, 244, 250, 166, 11, 49, 251, 239, 11, 33, 158, - 174, 212, 225, 13, 160, 3, 207, 169, 105, 187, 16, 143, 189, 125, 156, 91, 113, 178, 129, 34, - 127, 36, 62, 250, 153, 198, 54, 7, 118, 30, 94, 200, 39, 199, 188, 134, 227, 214, 13, 210, - 11, 222, 174, 237, 212, 208, 99, 103, 127, 219, 3, 17, 13, 148, 170, 82, 156, 46, 221, 159, - 160, 243, 235, 92, 174, 196, 199, 17, 217, 92, 32, 174, 15, 184, 55, 69, 178, 219, 184, 244, - 200, 78, 194, 33, 116, 82, 190, 201, 49, 210, 29, 204, 119, 191, 170, 92, 189, 221, 94, 191, - 23, 197, 47, 53, 40, 189, 47, 86, 159, 131, 173, 124, 4, 243, 171, 137, 47, 195, 103, 39, - 170, 236, 222, 181, 42, 196, 133, 188, 119, 245, 170, 195, 103, 21, 219, 52, 139, 155, 253, 247, - 43, 233, 117, 111, 176, 109, 154, 77, 9, 243, 227, 98, 124, 10, 214, 71, 33, 22, 49, 221, - 18, 241, 37, 120, 75, 43, 159, 43, 6, 153, 223, 98, 193, 121, 95, 5, 162, 155, 158, 63, - 109, 90, 228, 11, 152, 54, 210, 202, 32, 86, 31, 190, 16, 255, 187, 180, 199, 254, 190, 175, - 216, 120, 90, 206, 246, 82, 142, 91, 55, 150, 195, 171, 57, 41, 243, 2, 142, 147, 118, 216, - 223, 246, 86, 252, 199, 110, 193, 181, 248, 56, 210, 12, 98, 18, 21, 159, 253, 113, 217, 242, - 90, 222, 135, 244, 3, 233, 238, 189, 135, 112, 156, 244, 12, 243, 235, 100, 156, 202, 49, 210, - 13, 204, 207, 78, 246, 15, 142, 97, 152, 239, 102, 242, 92, 142, 25, 3, 196, 234, 244, 199, - 32, 214, 69, 169, 219, 152, 121, 28, 239, 175, 13, 136, 191, 55, 119, 217, 43, 227, 79, 82, - 174, 88, 216, 246, 54, 244, 186, 55, 58, 46, 86, 120, 221, 199, 2, 21, 121, 227, 101, 211, - 246, 69, 136, 197, 47, 185, 91, 205, 211, 56, 174, 9, 219, 223, 221, 49, 63, 224, 208, 121, - 35, 43, 53, 243, 224, 41, 168, 152, 77, 197, 94, 123, 52, 98, 48, 246, 117, 248, 53, 105, - 7, 230, 199, 195, 185, 181, 191, 208, 71, 116, 79, 100, 47, 227, 56, 105, 7, 212, 128, 89, - 11, 152, 255, 253, 95, 228, 99, 188, 15, 233, 7, 230, 215, 83, 243, 9, 112, 182, 228, 56, - 233, 25, 230, 215, 201, 120, 15, 199, 72, 55, 48, 191, 218, 251, 15, 57, 134, 89, 204, 107, - 104, 155, 7, 115, 204, 216, 88, 29, 47, 97, 229, 190, 86, 222, 133, 249, 39, 78, 41, 222, - 224, 185, 1, 239, 167, 45, 136, 217, 158, 78, 198, 198, 177, 44, 206, 187, 89, 249, 128, 99, - 31, 164, 191, 233, 203, 9, 209, 205, 172, 56, 243, 155, 215, 239, 102, 180, 79, 159, 185, 171, - 104, 209, 100, 12, 62, 163, 145, 63, 113, 154, 241, 217, 209, 90, 89, 27, 3, 145, 31, 119, - 25, 243, 6, 215, 217, 117, 70, 12, 234, 127, 61, 189, 238, 252, 201, 217, 92, 159, 94, 196, - 34, 126, 179, 153, 220, 188, 81, 244, 88, 12, 56, 53, 118, 174, 144, 111, 3, 230, 120, 78, - 10, 106, 192, 116, 6, 106, 192, 172, 5, 168, 1, 179, 22, 236, 239, 126, 49, 204, 255, 158, - 158, 192, 113, 50, 0, 196, 34, 112, 58, 49, 3, 64, 116, 39, 42, 250, 40, 199, 48, 196, - 69, 102, 209, 161, 28, 51, 102, 136, 89, 212, 124, 226, 8, 31, 91, 82, 229, 236, 149, 174, - 187, 132, 88, 35, 229, 50, 86, 174, 129, 152, 28, 97, 110, 86, 48, 196, 211, 146, 211, 10, - 245, 114, 115, 23, 149, 216, 56, 150, 201, 251, 151, 95, 144, 99, 24, 98, 220, 79, 209, 62, - 28, 83, 23, 162, 97, 196, 19, 42, 156, 105, 101, 87, 138, 243, 188, 222, 78, 113, 206, 27, - 118, 27, 26, 49, 246, 255, 239, 196, 65, 230, 182, 197, 24, 105, 14, 234, 66, 38, 61, 65, - 140, 107, 153, 209, 32, 254, 1, 64, 13, 152, 181, 96, 127, 247, 163, 248, 68, 128, 110, 96, - 202, 64, 236, 68, 92, 128, 78, 204, 194, 117, 72, 100, 121, 136, 117, 64, 174, 82, 82, 120, - 37, 123, 239, 86, 196, 49, 92, 120, 28, 135, 95, 92, 114, 140, 151, 203, 113, 93, 198, 4, - 113, 1, 125, 52, 210, 139, 40, 206, 116, 182, 8, 231, 178, 172, 14, 79, 166, 58, 125, 13, - 244, 232, 24, 243, 159, 161, 165, 166, 190, 181, 184, 59, 211, 118, 119, 227, 152, 186, 108, 31, - 207, 163, 125, 250, 19, 147, 171, 112, 156, 67, 76, 94, 240, 110, 138, 119, 222, 72, 62, 187, - 59, 25, 98, 33, 194, 31, 211, 235, 190, 64, 169, 30, 159, 183, 12, 26, 196, 47, 61, 129, - 26, 48, 34, 75, 65, 44, 135, 80, 244, 7, 104, 157, 180, 241, 176, 147, 241, 41, 196, 93, - 102, 47, 247, 226, 215, 101, 117, 246, 247, 188, 71, 241, 157, 223, 163, 175, 113, 93, 198, 200, - 234, 121, 79, 174, 120, 65, 227, 11, 250, 38, 236, 248, 215, 199, 198, 71, 199, 103, 89, 185, - 108, 34, 238, 210, 133, 24, 247, 10, 142, 73, 193, 252, 184, 153, 71, 112, 76, 29, 136, 174, - 97, 190, 150, 75, 209, 91, 56, 174, 8, 49, 185, 192, 251, 104, 27, 119, 138, 149, 109, 173, - 252, 27, 253, 187, 187, 63, 239, 71, 154, 195, 252, 248, 54, 167, 105, 148, 165, 117, 80, 3, - 70, 100, 33, 68, 247, 119, 30, 195, 187, 246, 55, 149, 68, 150, 98, 111, 246, 199, 208, 155, - 191, 47, 31, 226, 186, 140, 17, 226, 162, 251, 12, 170, 251, 204, 83, 57, 190, 47, 136, 89, - 203, 102, 227, 62, 102, 238, 201, 113, 14, 243, 99, 153, 150, 170, 55, 98, 193, 204, 162, 70, - 3, 249, 109, 251, 189, 104, 127, 238, 238, 28, 199, 16, 141, 152, 15, 240, 134, 230, 243, 216, - 56, 78, 199, 249, 64, 254, 193, 22, 78, 205, 153, 253, 93, 239, 71, 127, 107, 183, 212, 211, - 188, 49, 67, 122, 33, 203, 187, 112, 156, 244, 7, 106, 192, 136, 44, 100, 159, 141, 135, 20, - 62, 39, 51, 55, 225, 56, 145, 44, 217, 155, 253, 69, 252, 238, 239, 201, 235, 184, 46, 109, - 179, 99, 60, 200, 202, 132, 255, 189, 46, 164, 187, 49, 185, 193, 238, 116, 32, 38, 28, 40, - 122, 43, 199, 204, 96, 126, 34, 140, 167, 112, 76, 138, 197, 237, 77, 219, 29, 203, 49, 117, - 96, 126, 70, 65, 119, 24, 199, 165, 32, 186, 138, 189, 159, 55, 78, 184, 5, 111, 43, 237, - 192, 252, 152, 56, 247, 35, 142, 91, 55, 136, 70, 47, 187, 17, 199, 73, 127, 160, 6, 140, - 200, 66, 246, 217, 248, 108, 225, 115, 226, 124, 178, 157, 243, 112, 156, 72, 150, 236, 205, 254, - 86, 250, 0, 244, 165, 211, 62, 230, 136, 117, 65, 188, 47, 168, 47, 196, 248, 48, 52, 152, - 65, 203, 182, 253, 112, 177, 226, 5, 199, 115, 108, 31, 16, 11, 92, 22, 157, 129, 138, 65, - 249, 152, 159, 8, 227, 229, 28, 147, 98, 113, 7, 208, 118, 71, 115, 76, 29, 152, 127, 18, - 228, 30, 196, 113, 101, 16, 79, 98, 82, 221, 125, 102, 74, 27, 113, 210, 156, 253, 125, 47, - 207, 127, 112, 196, 24, 177, 45, 56, 118, 93, 32, 222, 83, 188, 0, 156, 219, 141, 99, 165, - 63, 80, 3, 70, 164, 18, 226, 119, 157, 187, 143, 45, 213, 61, 92, 36, 107, 136, 217, 184, - 138, 252, 131, 50, 55, 133, 109, 17, 230, 187, 163, 189, 146, 99, 250, 130, 249, 177, 17, 190, - 168, 227, 158, 28, 183, 8, 98, 113, 199, 178, 169, 149, 43, 167, 34, 238, 130, 29, 115, 31, - 108, 156, 94, 217, 7, 193, 95, 155, 227, 138, 16, 23, 105, 197, 201, 8, 62, 203, 49, 41, - 152, 159, 221, 228, 54, 28, 83, 7, 98, 6, 50, 246, 97, 142, 171, 130, 200, 229, 7, 188, - 147, 41, 77, 165, 218, 33, 196, 164, 10, 126, 67, 128, 93, 134, 99, 215, 133, 213, 253, 10, - 156, 12, 98, 44, 217, 202, 55, 60, 164, 57, 168, 1, 35, 82, 201, 62, 23, 15, 47, 124, - 70, 102, 110, 200, 113, 50, 48, 196, 162, 131, 62, 155, 213, 77, 160, 199, 99, 189, 192, 124, - 183, 163, 95, 114, 12, 195, 252, 52, 171, 199, 112, 76, 31, 16, 179, 110, 241, 84, 189, 206, - 167, 15, 126, 129, 149, 157, 121, 155, 20, 139, 219, 6, 209, 240, 41, 115, 13, 222, 166, 75, - 136, 250, 20, 127, 216, 221, 82, 139, 106, 34, 198, 139, 204, 248, 29, 231, 139, 114, 12, 179, - 152, 15, 22, 182, 113, 75, 253, 221, 170, 32, 22, 224, 100, 75, 77, 249, 136, 104, 188, 188, - 142, 182, 45, 242, 217, 199, 214, 246, 98, 122, 29, 216, 223, 247, 91, 252, 71, 55, 183, 228, - 184, 117, 97, 117, 63, 156, 147, 49, 95, 228, 56, 233, 23, 50, 107, 192, 88, 14, 23, 71, - 60, 129, 214, 236, 80, 35, 225, 231, 2, 113, 77, 233, 215, 150, 131, 207, 40, 90, 23, 230, - 199, 238, 253, 6, 107, 252, 52, 60, 75, 118, 66, 238, 131, 141, 43, 118, 127, 221, 202, 133, - 57, 78, 218, 101, 127, 227, 67, 10, 127, 115, 183, 112, 221, 19, 204, 175, 1, 115, 59, 142, - 233, 131, 29, 247, 113, 84, 15, 230, 239, 39, 31, 67, 114, 23, 36, 190, 184, 236, 223, 46, - 138, 88, 41, 190, 184, 118, 10, 251, 46, 111, 215, 53, 204, 55, 16, 79, 193, 146, 11, 54, - 90, 220, 147, 104, 219, 202, 1, 249, 136, 59, 211, 197, 174, 53, 223, 226, 152, 85, 96, 190, - 30, 206, 159, 112, 85, 14, 154, 182, 215, 111, 128, 244, 197, 51, 251, 149, 149, 203, 243, 246, - 210, 14, 204, 191, 7, 93, 229, 123, 105, 204, 172, 238, 207, 225, 100, 160, 169, 250, 7, 135, - 248, 126, 246, 70, 140, 151, 55, 243, 235, 235, 2, 177, 200, 110, 113, 154, 238, 95, 160, 231, - 27, 95, 50, 15, 209, 179, 226, 155, 133, 243, 226, 79, 150, 215, 102, 134, 91, 204, 79, 176, - 227, 214, 126, 77, 174, 172, 216, 9, 185, 16, 230, 87, 35, 119, 207, 230, 88, 105, 23, 98, - 0, 124, 209, 27, 56, 134, 97, 254, 130, 127, 95, 142, 233, 131, 29, 247, 64, 204, 79, 215, - 91, 229, 175, 136, 197, 20, 125, 61, 17, 31, 4, 183, 136, 119, 167, 59, 136, 143, 219, 37, - 59, 222, 97, 84, 7, 175, 231, 37, 56, 174, 12, 98, 181, 222, 98, 55, 50, 255, 194, 78, - 62, 110, 182, 127, 223, 1, 27, 191, 220, 93, 114, 134, 179, 186, 108, 63, 219, 91, 249, 37, - 237, 123, 230, 171, 86, 30, 97, 229, 134, 86, 246, 179, 114, 11, 43, 143, 182, 242, 149, 98, - 16, 249, 2, 255, 131, 249, 173, 149, 43, 243, 177, 165, 57, 251, 187, 30, 193, 127, 108, 243, - 73, 142, 91, 23, 152, 31, 4, 235, 26, 117, 149, 20, 153, 65, 172, 37, 198, 124, 173, 180, - 165, 110, 60, 73, 55, 144, 94, 211, 202, 103, 180, 156, 91, 44, 122, 140, 16, 191, 139, 236, - 0, 142, 147, 1, 217, 9, 217, 159, 207, 208, 212, 39, 56, 86, 218, 133, 249, 5, 7, 143, - 229, 152, 34, 196, 116, 195, 222, 69, 171, 104, 176, 39, 101, 136, 110, 135, 85, 23, 190, 77, - 60, 156, 143, 215, 37, 59, 222, 46, 136, 9, 9, 138, 106, 119, 219, 193, 252, 147, 41, 127, - 194, 242, 114, 43, 7, 89, 185, 146, 149, 235, 88, 57, 198, 202, 175, 139, 65, 136, 139, 188, - 214, 186, 62, 32, 30, 219, 87, 45, 16, 186, 12, 223, 222, 215, 232, 241, 247, 93, 234, 169, - 128, 255, 189, 246, 227, 99, 75, 51, 136, 174, 48, 60, 112, 212, 159, 160, 85, 142, 143, 27, - 35, 196, 58, 66, 252, 62, 244, 207, 196, 142, 28, 43, 178, 10, 204, 207, 22, 57, 115, 73, - 142, 149, 254, 32, 214, 22, 76, 89, 139, 167, 99, 136, 155, 125, 69, 255, 1, 53, 138, 199, - 197, 78, 200, 101, 232, 36, 205, 104, 182, 161, 142, 217, 223, 248, 36, 250, 155, 87, 46, 218, - 136, 88, 80, 169, 232, 79, 28, 211, 55, 196, 212, 187, 126, 167, 226, 79, 84, 183, 85, 121, - 215, 179, 94, 199, 245, 216, 241, 182, 192, 252, 74, 187, 43, 205, 126, 134, 184, 216, 127, 19, - 237, 107, 17, 127, 170, 182, 244, 147, 158, 101, 33, 26, 77, 127, 161, 99, 45, 235, 251, 40, - 52, 78, 16, 121, 29, 79, 49, 238, 207, 86, 174, 82, 60, 174, 52, 103, 127, 211, 207, 241, - 31, 26, 107, 56, 125, 181, 213, 249, 54, 156, 132, 57, 133, 227, 68, 86, 101, 239, 167, 183, - 241, 27, 12, 113, 3, 224, 252, 28, 43, 253, 193, 252, 245, 205, 204, 110, 28, 59, 54, 86, - 199, 61, 185, 210, 230, 197, 28, 39, 3, 67, 92, 152, 100, 241, 99, 185, 110, 48, 255, 244, - 226, 122, 28, 83, 100, 175, 95, 151, 226, 191, 202, 49, 67, 65, 116, 137, 242, 39, 74, 169, - 129, 253, 203, 250, 26, 6, 232, 18, 135, 249, 49, 35, 222, 181, 171, 209, 221, 110, 219, 254, - 81, 136, 153, 150, 22, 121, 187, 149, 237, 121, 251, 182, 32, 26, 189, 39, 34, 61, 141, 109, - 138, 63, 25, 242, 153, 87, 146, 11, 85, 34, 38, 104, 40, 250, 164, 149, 243, 113, 156, 52, - 99, 127, 211, 71, 210, 223, 217, 189, 138, 227, 198, 206, 234, 252, 6, 78, 2, 53, 166, 245, - 22, 89, 196, 222, 79, 55, 229, 55, 152, 57, 153, 227, 164, 95, 118, 14, 110, 197, 39, 5, - 113, 163, 112, 244, 179, 15, 98, 190, 39, 133, 187, 46, 199, 201, 8, 32, 46, 114, 222, 137, - 184, 139, 238, 125, 71, 239, 195, 49, 210, 62, 204, 143, 5, 169, 124, 228, 141, 249, 190, 241, - 239, 224, 152, 161, 33, 102, 29, 241, 201, 9, 222, 140, 244, 226, 117, 204, 31, 203, 250, 0, - 204, 65, 190, 28, 236, 184, 215, 199, 198, 139, 123, 239, 170, 211, 202, 0, 117, 196, 32, 70, - 239, 46, 230, 23, 249, 62, 240, 221, 199, 196, 120, 183, 171, 111, 32, 250, 7, 95, 157, 183, - 233, 10, 226, 51, 238, 99, 95, 188, 187, 133, 143, 67, 242, 39, 51, 158, 183, 127, 230, 189, - 225, 232, 93, 196, 14, 197, 18, 221, 216, 44, 230, 217, 8, 254, 99, 180, 45, 191, 46, 205, - 217, 223, 117, 103, 108, 156, 88, 197, 249, 123, 167, 81, 195, 186, 79, 136, 238, 99, 252, 4, - 208, 187, 192, 170, 251, 152, 180, 202, 222, 83, 79, 164, 247, 89, 175, 227, 39, 37, 205, 206, - 195, 145, 136, 223, 27, 255, 157, 241, 39, 50, 23, 231, 152, 49, 66, 252, 70, 23, 249, 196, - 16, 163, 111, 120, 137, 72, 139, 16, 3, 202, 15, 176, 242, 147, 13, 95, 7, 192, 113, 232, - 160, 219, 148, 244, 195, 206, 221, 125, 173, 92, 128, 255, 93, 218, 131, 184, 169, 196, 142, 224, - 184, 177, 178, 186, 222, 155, 43, 143, 53, 158, 237, 74, 198, 203, 222, 87, 111, 41, 188, 199, - 190, 204, 175, 139, 44, 203, 222, 63, 123, 23, 222, 75, 51, 47, 224, 56, 17, 217, 76, 216, - 23, 192, 151, 233, 11, 225, 40, 142, 17, 145, 115, 32, 26, 254, 236, 51, 28, 55, 86, 152, - 255, 204, 59, 45, 132, 42, 173, 178, 247, 212, 249, 176, 177, 187, 238, 161, 28, 35, 178, 44, - 204, 63, 205, 115, 250, 222, 18, 217, 92, 97, 254, 98, 70, 13, 24, 145, 5, 16, 221, 15, - 217, 13, 56, 110, 108, 172, 142, 7, 115, 165, 161, 113, 9, 210, 1, 123, 95, 221, 177, 240, - 30, 243, 241, 139, 234, 234, 35, 43, 179, 247, 207, 119, 10, 239, 39, 231, 93, 225, 245, 158, - 18, 217, 92, 65, 13, 24, 145, 218, 144, 126, 10, 51, 250, 89, 188, 144, 158, 24, 102, 127, - 142, 19, 105, 202, 222, 87, 239, 45, 188, 199, 6, 89, 216, 89, 242, 96, 239, 159, 125, 10, - 239, 165, 153, 231, 112, 156, 136, 108, 70, 160, 6, 140, 200, 74, 144, 158, 142, 244, 86, 28, - 55, 22, 216, 120, 71, 124, 230, 45, 28, 39, 210, 20, 98, 33, 238, 217, 58, 67, 223, 131, - 214, 233, 144, 6, 236, 253, 243, 228, 77, 223, 88, 231, 208, 90, 103, 34, 155, 51, 168, 1, - 35, 178, 18, 251, 172, 92, 10, 177, 222, 142, 207, 26, 55, 43, 62, 91, 228, 232, 102, 36, - 67, 204, 60, 230, 93, 46, 138, 117, 245, 25, 136, 118, 230, 88, 17, 145, 49, 65, 172, 127, - 86, 244, 19, 142, 17, 145, 205, 12, 212, 128, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 201, 21, 128, 243, 89, 185, 179, - 149, 215, 90, 249, 134, 149, 255, 180, 242, 223, 86, 206, 178, 242, 11, 43, 159, 176, 242, 76, - 43, 251, 241, 182, 67, 179, 58, 253, 9, 171, 57, 134, 247, 53, 54, 86, 199, 43, 90, 121, - 152, 149, 119, 88, 249, 166, 149, 63, 32, 206, 203, 223, 173, 252, 202, 202, 215, 173, 188, 222, - 202, 3, 173, 236, 196, 219, 15, 97, 90, 151, 46, 188, 149, 143, 53, 6, 86, 175, 195, 185, - 162, 230, 95, 86, 246, 230, 216, 161, 89, 157, 174, 197, 21, 109, 201, 197, 248, 88, 67, 177, - 186, 156, 203, 202, 1, 86, 158, 99, 229, 20, 43, 63, 71, 124, 143, 253, 151, 149, 223, 88, - 249, 46, 226, 243, 244, 56, 43, 55, 180, 114, 30, 222, 71, 95, 236, 216, 31, 70, 247, 78, - 231, 227, 246, 9, 113, 62, 174, 106, 229, 81, 86, 62, 104, 229, 91, 136, 239, 46, 63, 31, - 254, 221, 125, 186, 149, 207, 89, 57, 222, 202, 161, 86, 182, 227, 125, 140, 133, 213, 109, 123, - 43, 119, 197, 57, 191, 147, 255, 49, 205, 227, 31, 211, 255, 62, 205, 202, 243, 173, 220, 216, - 202, 22, 188, 189, 136, 200, 152, 216, 247, 212, 197, 112, 206, 119, 243, 207, 172, 252, 13, 113, - 125, 233, 255, 253, 121, 43, 207, 181, 114, 144, 149, 115, 243, 182, 131, 179, 74, 109, 101, 229, - 177, 86, 254, 140, 229, 125, 217, 202, 117, 121, 95, 67, 65, 102, 13, 24, 196, 57, 185, 191, - 149, 239, 80, 125, 23, 249, 31, 196, 133, 217, 165, 121, 159, 125, 66, 212, 189, 11, 163, 107, - 192, 88, 157, 182, 64, 92, 16, 179, 215, 115, 236, 24, 32, 227, 6, 140, 213, 225, 220, 86, - 238, 110, 229, 140, 141, 85, 91, 200, 111, 10, 188, 193, 202, 254, 188, 207, 174, 33, 243, 6, - 12, 226, 166, 216, 247, 185, 66, 11, 120, 99, 224, 101, 86, 46, 194, 251, 27, 138, 213, 229, - 130, 136, 27, 120, 117, 126, 39, 127, 106, 229, 62, 86, 206, 197, 251, 19, 17, 25, 146, 125, - 47, 109, 99, 229, 69, 136, 27, 48, 203, 240, 235, 156, 91, 243, 126, 6, 99, 149, 217, 13, - 113, 87, 127, 85, 79, 195, 8, 190, 156, 145, 73, 3, 198, 234, 179, 181, 149, 135, 88, 249, - 37, 213, 179, 46, 191, 0, 184, 31, 239, 191, 47, 118, 236, 251, 114, 133, 90, 50, 198, 6, - 204, 61, 184, 146, 136, 39, 100, 131, 54, 34, 203, 32, 211, 6, 140, 29, 255, 82, 136, 187, - 248, 77, 125, 218, 202, 246, 188, 255, 174, 32, 211, 6, 140, 29, 243, 252, 86, 222, 195, 21, - 169, 201, 123, 1, 28, 192, 251, 238, 27, 226, 233, 145, 63, 37, 90, 213, 167, 48, 240, 231, - 67, 68, 100, 198, 191, 143, 144, 190, 241, 186, 140, 225, 175, 155, 173, 18, 151, 182, 242, 107, - 174, 217, 10, 94, 197, 251, 238, 27, 50, 104, 192, 88, 93, 246, 179, 242, 61, 174, 96, 67, - 15, 231, 227, 244, 193, 142, 123, 111, 174, 72, 75, 94, 200, 199, 26, 18, 226, 73, 153, 223, - 101, 101, 47, 231, 216, 177, 64, 134, 13, 24, 196, 5, 166, 95, 236, 182, 225, 84, 222, 127, - 151, 144, 97, 3, 198, 142, 119, 30, 43, 31, 231, 74, 172, 200, 187, 50, 92, 131, 143, 209, - 23, 196, 123, 203, 187, 31, 54, 229, 223, 19, 187, 243, 254, 69, 68, 250, 132, 24, 46, 226, - 221, 95, 155, 184, 55, 239, 183, 55, 118, 240, 109, 81, 253, 88, 255, 175, 86, 62, 100, 229, - 149, 86, 222, 100, 229, 11, 27, 95, 158, 243, 8, 62, 70, 159, 16, 93, 173, 124, 156, 78, - 89, 41, 107, 168, 141, 162, 1, 99, 245, 56, 22, 209, 253, 171, 109, 62, 14, 163, 247, 49, - 75, 118, 204, 123, 114, 69, 90, 224, 119, 115, 183, 228, 99, 13, 201, 234, 115, 52, 87, 210, - 252, 211, 202, 37, 57, 118, 44, 144, 89, 3, 198, 142, 123, 89, 43, 191, 229, 202, 144, 191, - 32, 190, 176, 125, 124, 130, 255, 175, 143, 191, 40, 115, 61, 62, 70, 151, 208, 79, 3, 230, - 83, 124, 220, 46, 217, 241, 30, 205, 21, 152, 242, 174, 10, 111, 182, 114, 132, 149, 125, 173, - 236, 105, 229, 10, 86, 110, 132, 232, 198, 92, 118, 71, 240, 7, 24, 224, 179, 111, 199, 220, - 9, 203, 61, 13, 247, 39, 222, 254, 155, 185, 200, 143, 172, 156, 159, 143, 35, 34, 210, 23, - 251, 14, 122, 60, 127, 49, 77, 253, 47, 226, 59, 216, 127, 39, 191, 134, 24, 11, 83, 230, - 247, 86, 182, 230, 125, 247, 194, 14, 252, 2, 174, 205, 148, 95, 240, 250, 15, 201, 220, 151, - 44, 226, 66, 161, 236, 174, 154, 95, 180, 237, 197, 219, 140, 133, 213, 109, 111, 174, 240, 212, - 88, 26, 48, 239, 228, 138, 21, 120, 159, 107, 31, 48, 122, 91, 43, 123, 32, 90, 207, 231, - 181, 114, 81, 43, 19, 43, 207, 70, 244, 225, 47, 243, 97, 62, 94, 215, 16, 227, 66, 188, - 59, 92, 221, 114, 48, 226, 98, 128, 157, 100, 229, 188, 124, 156, 33, 33, 186, 200, 248, 128, - 112, 54, 170, 167, 68, 12, 229, 13, 152, 189, 16, 143, 149, 87, 45, 189, 15, 240, 67, 188, - 103, 202, 186, 192, 250, 197, 242, 113, 136, 59, 232, 115, 221, 92, 237, 223, 46, 142, 152, 124, - 225, 109, 136, 187, 252, 238, 100, 142, 235, 26, 210, 13, 152, 7, 97, 254, 239, 187, 76, 57, - 213, 55, 78, 184, 21, 31, 183, 43, 136, 239, 166, 212, 231, 226, 43, 88, 240, 4, 2, 49, - 134, 233, 145, 86, 254, 111, 227, 166, 103, 187, 19, 199, 119, 205, 142, 249, 82, 174, 68, 129, - 255, 22, 222, 209, 202, 14, 133, 120, 31, 39, 179, 191, 149, 215, 33, 126, 19, 83, 94, 86, - 60, 134, 136, 72, 95, 16, 227, 94, 252, 134, 94, 145, 55, 92, 158, 137, 194, 119, 217, 52, - 214, 191, 203, 253, 59, 46, 245, 125, 238, 122, 251, 93, 217, 196, 14, 186, 59, 162, 161, 194, - 252, 71, 163, 178, 66, 136, 174, 1, 239, 166, 237, 102, 78, 226, 248, 177, 192, 248, 27, 48, - 126, 23, 210, 223, 68, 69, 254, 166, 241, 241, 48, 231, 227, 120, 102, 49, 59, 88, 249, 228, - 198, 205, 55, 241, 115, 189, 225, 141, 57, 70, 136, 187, 176, 179, 11, 201, 34, 191, 192, 28, - 108, 150, 168, 50, 72, 223, 197, 240, 174, 38, 163, 152, 9, 174, 12, 202, 27, 48, 189, 141, - 251, 104, 139, 213, 249, 89, 156, 196, 148, 63, 145, 189, 44, 199, 151, 65, 220, 105, 247, 193, - 140, 67, 60, 173, 76, 53, 96, 106, 95, 172, 219, 54, 87, 225, 157, 76, 125, 27, 137, 6, - 92, 87, 236, 88, 215, 230, 10, 152, 223, 161, 198, 128, 124, 196, 77, 25, 118, 34, 199, 117, - 201, 142, 119, 9, 196, 88, 54, 230, 223, 211, 11, 187, 79, 88, 204, 53, 16, 179, 146, 165, - 28, 200, 241, 34, 50, 46, 136, 155, 148, 189, 125, 119, 246, 1, 49, 203, 35, 123, 36, 199, - 21, 33, 158, 150, 243, 245, 169, 123, 42, 199, 118, 206, 14, 250, 98, 174, 197, 212, 75, 56, - 54, 197, 226, 118, 68, 186, 203, 134, 39, 184, 39, 199, 143, 1, 70, 222, 128, 113, 86, 151, - 183, 76, 235, 228, 13, 201, 151, 88, 185, 32, 199, 84, 65, 52, 98, 184, 101, 61, 115, 109, - 142, 31, 19, 171, 223, 77, 145, 126, 242, 226, 127, 147, 209, 77, 69, 106, 117, 186, 48, 210, - 179, 17, 61, 131, 99, 199, 6, 153, 52, 96, 172, 190, 187, 32, 125, 151, 219, 199, 145, 93, - 152, 227, 199, 10, 233, 6, 204, 237, 57, 110, 17, 68, 67, 63, 229, 206, 28, 219, 37, 59, - 222, 221, 184, 2, 230, 197, 28, 87, 5, 209, 120, 96, 223, 224, 184, 46, 217, 241, 238, 199, - 21, 152, 90, 122, 92, 33, 226, 135, 63, 117, 179, 176, 247, 39, 125, 178, 121, 64, 124, 191, - 159, 104, 229, 234, 252, 154, 212, 99, 127, 195, 91, 33, 186, 125, 250, 19, 241, 11, 240, 235, - 235, 8, 49, 85, 125, 145, 143, 205, 91, 120, 131, 24, 177, 140, 10, 235, 119, 252, 59, 226, - 9, 138, 247, 93, 99, 62, 254, 98, 103, 142, 47, 99, 177, 79, 230, 29, 76, 29, 203, 177, - 99, 128, 245, 104, 192, 92, 6, 209, 55, 255, 166, 252, 218, 178, 16, 93, 173, 82, 14, 225, - 216, 177, 176, 186, 221, 12, 233, 11, 81, 159, 214, 118, 116, 141, 23, 135, 88, 95, 132, 121, - 131, 102, 244, 23, 206, 200, 167, 1, 227, 141, 124, 230, 221, 198, 246, 225, 216, 49, 67, 186, - 1, 115, 56, 199, 85, 65, 116, 255, 75, 221, 33, 251, 49, 122, 254, 12, 33, 61, 3, 225, - 145, 28, 183, 8, 230, 111, 16, 156, 193, 49, 93, 66, 76, 71, 207, 124, 93, 132, 90, 127, - 79, 139, 127, 53, 239, 4, 113, 147, 106, 148, 55, 251, 100, 253, 224, 156, 174, 62, 197, 177, - 202, 215, 226, 56, 169, 7, 209, 128, 153, 241, 239, 35, 31, 122, 49, 202, 217, 69, 151, 101, - 245, 255, 104, 33, 39, 183, 84, 151, 86, 204, 55, 124, 220, 171, 57, 174, 83, 136, 69, 219, - 82, 222, 197, 177, 85, 16, 119, 63, 83, 122, 189, 75, 182, 44, 172, 65, 3, 198, 33, 49, - 246, 168, 14, 219, 254, 85, 156, 224, 212, 40, 159, 192, 88, 189, 14, 65, 122, 14, 114, 31, - 243, 211, 251, 152, 138, 101, 32, 238, 14, 167, 186, 186, 61, 129, 99, 199, 8, 25, 52, 96, - 16, 253, 120, 255, 200, 9, 152, 227, 56, 118, 236, 16, 79, 25, 127, 77, 229, 96, 142, 171, - 130, 248, 188, 164, 244, 62, 149, 58, 54, 254, 232, 207, 60, 132, 227, 170, 32, 22, 190, 228, - 155, 26, 95, 227, 184, 46, 33, 22, 8, 102, 207, 230, 184, 69, 108, 155, 3, 121, 39, 83, - 253, 119, 191, 144, 172, 32, 122, 195, 248, 98, 188, 169, 137, 38, 212, 128, 105, 8, 233, 239, - 50, 191, 81, 228, 19, 10, 221, 128, 227, 215, 1, 162, 123, 174, 79, 204, 53, 43, 55, 231, - 152, 20, 196, 98, 233, 236, 105, 28, 215, 41, 59, 224, 83, 184, 6, 83, 15, 224, 216, 69, - 108, 155, 31, 242, 78, 166, 70, 55, 222, 2, 107, 210, 128, 105, 202, 242, 249, 44, 39, 136, - 232, 199, 189, 112, 28, 77, 223, 172, 78, 183, 158, 214, 141, 249, 204, 119, 163, 237, 119, 106, - 117, 123, 5, 87, 24, 209, 199, 127, 45, 30, 49, 35, 143, 6, 204, 109, 184, 242, 83, 155, - 221, 93, 109, 196, 250, 55, 169, 207, 145, 95, 212, 108, 197, 241, 93, 67, 140, 39, 226, 167, - 65, 239, 225, 184, 42, 22, 127, 29, 218, 222, 189, 134, 227, 186, 132, 244, 69, 97, 237, 6, - 161, 109, 115, 17, 222, 201, 212, 41, 28, 43, 178, 12, 123, 239, 92, 9, 241, 100, 47, 213, - 237, 122, 70, 13, 152, 134, 144, 110, 192, 20, 249, 4, 50, 247, 194, 80, 179, 113, 245, 8, - 49, 43, 25, 59, 148, 227, 58, 101, 7, 60, 153, 107, 48, 85, 187, 219, 5, 202, 239, 250, - 29, 196, 177, 67, 195, 102, 208, 128, 177, 92, 46, 143, 244, 236, 61, 181, 158, 174, 245, 1, - 49, 251, 83, 106, 218, 104, 159, 245, 103, 204, 141, 23, 159, 246, 53, 85, 239, 71, 113, 236, - 88, 33, 143, 6, 76, 170, 251, 216, 215, 57, 110, 115, 128, 242, 49, 141, 15, 227, 216, 190, - 96, 126, 86, 69, 255, 94, 186, 9, 199, 165, 32, 102, 150, 75, 45, 72, 218, 235, 29, 79, - 164, 215, 22, 187, 29, 199, 45, 130, 88, 178, 32, 197, 167, 93, 30, 229, 83, 102, 25, 31, - 127, 175, 32, 6, 96, 167, 198, 34, 20, 249, 68, 50, 126, 147, 109, 144, 27, 201, 88, 124, - 209, 191, 138, 65, 26, 99, 136, 39, 253, 247, 70, 250, 226, 189, 200, 215, 32, 123, 42, 106, - 12, 195, 88, 39, 136, 177, 124, 204, 199, 193, 247, 123, 131, 204, 14, 248, 115, 174, 5, 226, - 199, 165, 246, 28, 251, 40, 159, 235, 127, 176, 31, 206, 50, 216, 60, 26, 48, 190, 110, 79, - 74, 175, 63, 252, 139, 88, 125, 238, 128, 116, 35, 160, 214, 64, 223, 33, 32, 6, 71, 50, - 31, 183, 52, 247, 132, 11, 49, 165, 234, 191, 37, 202, 32, 63, 44, 51, 40, 111, 192, 164, - 248, 157, 125, 159, 162, 219, 239, 52, 249, 32, 241, 163, 172, 236, 198, 251, 236, 27, 210, 139, - 112, 109, 232, 62, 102, 255, 255, 2, 136, 31, 31, 31, 23, 230, 3, 49, 253, 130, 209, 7, - 84, 251, 133, 169, 207, 117, 255, 239, 136, 245, 138, 182, 43, 110, 183, 78, 16, 119, 247, 83, - 221, 25, 253, 137, 224, 182, 28, 223, 23, 196, 76, 151, 60, 214, 210, 239, 22, 251, 172, 138, - 165, 119, 43, 237, 181, 43, 90, 249, 204, 198, 205, 206, 246, 78, 142, 237, 26, 210, 191, 149, - 171, 244, 84, 240, 156, 202, 92, 158, 227, 69, 138, 236, 61, 178, 29, 226, 115, 227, 227, 217, - 170, 120, 143, 24, 143, 171, 53, 249, 79, 219, 144, 81, 3, 166, 200, 234, 112, 93, 43, 111, - 69, 250, 105, 247, 140, 191, 230, 93, 130, 175, 201, 219, 175, 43, 203, 101, 75, 43, 95, 218, - 152, 230, 217, 238, 206, 177, 157, 66, 12, 224, 79, 205, 136, 242, 11, 142, 93, 6, 226, 66, - 52, 101, 116, 235, 96, 32, 243, 6, 12, 226, 139, 43, 101, 84, 179, 221, 88, 125, 238, 140, - 244, 123, 240, 249, 28, 59, 54, 86, 199, 43, 35, 253, 132, 235, 65, 28, 235, 236, 223, 119, - 227, 192, 169, 189, 57, 182, 79, 168, 215, 128, 73, 241, 238, 65, 31, 176, 114, 85, 222, 119, - 31, 16, 227, 35, 82, 93, 39, 238, 59, 125, 221, 239, 84, 62, 12, 233, 59, 232, 41, 62, - 56, 211, 27, 150, 163, 90, 103, 104, 25, 86, 231, 167, 83, 46, 51, 131, 143, 199, 66, 76, - 235, 236, 13, 41, 230, 127, 239, 247, 34, 250, 98, 251, 223, 253, 73, 136, 59, 198, 101, 119, - 57, 79, 65, 226, 6, 65, 215, 236, 152, 159, 166, 122, 184, 183, 112, 220, 34, 136, 252, 202, - 140, 110, 58, 101, 171, 211, 195, 17, 147, 21, 120, 195, 216, 63, 231, 187, 113, 204, 186, 88, - 231, 92, 16, 79, 251, 253, 233, 106, 213, 2, 169, 254, 93, 236, 159, 37, 159, 197, 115, 20, - 61, 23, 144, 105, 3, 102, 6, 177, 126, 152, 127, 166, 171, 22, 67, 118, 254, 20, 217, 175, - 145, 23, 206, 240, 53, 86, 94, 119, 196, 56, 25, 246, 82, 142, 237, 28, 210, 83, 83, 186, - 47, 115, 236, 50, 108, 187, 235, 243, 142, 166, 222, 198, 177, 67, 67, 198, 13, 24, 68, 127, - 241, 212, 93, 1, 95, 69, 117, 52, 51, 102, 88, 93, 246, 193, 124, 223, 248, 25, 191, 187, - 228, 51, 168, 248, 19, 142, 39, 32, 198, 56, 12, 122, 39, 137, 89, 125, 222, 95, 172, 240, - 148, 255, 56, 38, 31, 163, 34, 223, 6, 204, 140, 159, 75, 95, 252, 170, 215, 47, 104, 196, - 152, 143, 148, 131, 16, 139, 188, 166, 206, 211, 50, 62, 111, 229, 162, 124, 188, 177, 66, 60, - 225, 227, 153, 186, 156, 79, 165, 126, 33, 142, 31, 2, 98, 241, 227, 143, 81, 253, 150, 229, - 239, 175, 151, 99, 160, 39, 73, 72, 47, 246, 236, 13, 231, 75, 112, 108, 25, 196, 226, 162, - 169, 37, 7, 102, 14, 227, 109, 134, 132, 244, 20, 216, 254, 244, 117, 20, 23, 199, 117, 96, - 77, 115, 65, 172, 135, 246, 62, 164, 111, 150, 205, 248, 141, 1, 95, 3, 107, 87, 222, 126, - 104, 136, 73, 43, 124, 237, 169, 54, 203, 149, 248, 56, 67, 195, 57, 51, 191, 165, 158, 24, - 23, 253, 2, 177, 56, 252, 160, 61, 47, 234, 66, 172, 129, 243, 193, 141, 169, 156, 237, 221, - 168, 57, 19, 99, 43, 16, 83, 109, 166, 124, 138, 99, 151, 129, 116, 191, 56, 247, 1, 142, - 29, 26, 50, 109, 192, 32, 238, 114, 166, 102, 99, 114, 247, 228, 248, 33, 33, 30, 193, 214, - 225, 23, 11, 111, 183, 114, 35, 222, 87, 223, 144, 30, 84, 236, 238, 195, 177, 51, 200, 191, - 1, 51, 243, 46, 244, 248, 244, 2, 229, 223, 59, 254, 254, 242, 47, 215, 38, 190, 138, 129, - 46, 152, 235, 66, 204, 62, 148, 242, 44, 142, 29, 18, 162, 11, 140, 223, 253, 174, 203, 239, - 114, 246, 255, 67, 57, 133, 242, 25, 59, 79, 65, 201, 77, 139, 34, 68, 3, 51, 245, 20, - 167, 232, 94, 188, 221, 144, 144, 158, 210, 219, 93, 129, 99, 199, 14, 107, 148, 11, 98, 172, - 133, 79, 63, 238, 23, 235, 85, 190, 136, 104, 152, 149, 118, 195, 148, 254, 33, 174, 195, 94, - 131, 116, 119, 222, 25, 127, 205, 103, 137, 29, 125, 67, 6, 49, 187, 157, 255, 22, 50, 239, - 66, 215, 235, 13, 203, 77, 16, 93, 96, 82, 62, 204, 177, 203, 64, 172, 30, 159, 50, 186, - 217, 85, 144, 97, 3, 6, 241, 247, 47, 187, 187, 247, 74, 142, 31, 26, 234, 55, 96, 138, - 252, 49, 249, 210, 43, 121, 183, 205, 142, 253, 41, 174, 144, 57, 29, 21, 31, 102, 108, 62, - 13, 24, 119, 60, 31, 167, 43, 118, 172, 3, 248, 224, 83, 39, 240, 63, 32, 186, 95, 248, - 93, 36, 255, 225, 240, 59, 150, 62, 195, 157, 95, 4, 164, 186, 49, 206, 244, 150, 203, 170, - 16, 79, 154, 82, 159, 125, 111, 244, 239, 196, 241, 67, 64, 244, 157, 126, 12, 202, 23, 215, - 93, 198, 15, 208, 96, 93, 172, 38, 16, 93, 21, 191, 79, 245, 153, 241, 62, 225, 251, 242, - 54, 206, 254, 125, 11, 43, 183, 176, 242, 147, 141, 155, 36, 29, 197, 219, 15, 9, 229, 79, - 203, 174, 194, 177, 99, 135, 53, 202, 5, 213, 221, 174, 124, 58, 113, 159, 194, 246, 26, 188, - 157, 140, 11, 98, 129, 235, 71, 162, 250, 179, 63, 154, 238, 112, 41, 136, 198, 244, 87, 184, - 210, 230, 105, 24, 114, 210, 17, 68, 43, 49, 101, 213, 6, 140, 119, 15, 72, 249, 4, 199, - 14, 13, 153, 53, 96, 16, 141, 151, 223, 112, 50, 83, 62, 211, 92, 233, 133, 245, 80, 172, - 78, 87, 67, 92, 16, 20, 139, 95, 160, 252, 7, 170, 239, 92, 204, 120, 55, 179, 93, 120, - 191, 93, 179, 99, 30, 204, 21, 153, 58, 130, 99, 139, 48, 222, 6, 204, 30, 136, 174, 95, - 62, 128, 253, 198, 86, 246, 71, 220, 220, 240, 46, 126, 179, 226, 3, 143, 189, 161, 227, 185, - 123, 63, 114, 127, 178, 145, 234, 166, 88, 116, 125, 62, 86, 23, 16, 93, 197, 22, 241, 241, - 47, 126, 71, 51, 249, 52, 197, 254, 253, 210, 72, 47, 84, 232, 188, 235, 210, 30, 188, 205, - 152, 88, 253, 142, 230, 74, 79, 189, 132, 99, 135, 128, 232, 39, 158, 154, 73, 108, 85, 253, - 174, 55, 48, 133, 88, 167, 170, 202, 183, 16, 141, 99, 31, 139, 244, 34, 196, 19, 99, 255, - 62, 99, 101, 221, 76, 198, 246, 148, 220, 103, 82, 98, 62, 137, 199, 54, 28, 59, 118, 88, - 163, 92, 144, 110, 192, 156, 105, 229, 24, 43, 59, 114, 188, 140, 27, 98, 28, 166, 127, 119, - 248, 181, 24, 119, 5, 28, 123, 3, 38, 53, 195, 231, 209, 28, 215, 59, 148, 55, 56, 78, - 229, 216, 101, 216, 118, 87, 229, 29, 77, 169, 11, 89, 135, 16, 23, 152, 169, 187, 175, 238, - 52, 52, 92, 12, 115, 40, 136, 197, 81, 111, 143, 120, 218, 194, 31, 250, 25, 31, 232, 91, - 123, 198, 188, 85, 33, 238, 194, 166, 30, 165, 126, 7, 11, 238, 70, 96, 164, 13, 152, 85, - 89, 189, 119, 70, 244, 205, 46, 243, 113, 222, 166, 11, 118, 156, 9, 31, 152, 248, 221, 175, - 221, 121, 187, 20, 139, 123, 62, 111, 60, 245, 28, 142, 29, 11, 68, 223, 107, 31, 123, 197, - 124, 102, 191, 193, 251, 196, 35, 186, 31, 124, 143, 234, 54, 227, 79, 191, 30, 108, 101, 63, - 196, 221, 74, 31, 36, 234, 125, 173, 253, 179, 114, 75, 68, 99, 160, 108, 208, 242, 51, 249, - 88, 125, 176, 227, 30, 199, 21, 169, 233, 167, 86, 174, 193, 255, 56, 85, 123, 90, 230, 46, - 33, 102, 238, 43, 206, 56, 228, 79, 244, 110, 203, 113, 235, 96, 157, 114, 193, 124, 3, 198, - 127, 95, 174, 200, 113, 178, 62, 16, 223, 107, 71, 98, 254, 187, 122, 180, 13, 24, 196, 141, - 61, 30, 167, 60, 142, 73, 185, 80, 62, 136, 255, 75, 28, 187, 12, 148, 143, 11, 208, 32, - 254, 142, 32, 238, 140, 151, 53, 94, 252, 142, 231, 218, 78, 9, 91, 132, 120, 90, 147, 154, - 198, 212, 61, 156, 227, 187, 130, 104, 80, 165, 220, 134, 99, 25, 50, 107, 192, 56, 68, 247, - 152, 178, 113, 38, 222, 232, 188, 36, 111, 211, 54, 148, 63, 73, 118, 254, 148, 232, 106, 188, - 77, 25, 196, 157, 50, 31, 216, 203, 190, 199, 177, 99, 129, 88, 56, 45, 229, 4, 142, 29, - 2, 98, 149, 106, 230, 221, 200, 150, 186, 120, 68, 52, 148, 203, 198, 47, 28, 204, 241, 93, - 67, 188, 71, 124, 125, 170, 85, 156, 129, 184, 113, 232, 55, 157, 82, 14, 224, 227, 13, 13, - 209, 168, 244, 39, 179, 119, 176, 114, 41, 126, 125, 157, 172, 75, 46, 152, 111, 192, 204, 248, - 154, 47, 135, 97, 192, 177, 96, 82, 15, 226, 243, 238, 179, 199, 165, 38, 88, 113, 99, 110, - 192, 60, 145, 234, 234, 147, 69, 140, 227, 137, 37, 226, 195, 204, 173, 43, 247, 51, 142, 93, - 6, 202, 31, 175, 143, 163, 197, 86, 128, 12, 26, 48, 136, 198, 139, 47, 152, 148, 114, 42, - 214, 100, 37, 248, 101, 33, 158, 200, 248, 35, 127, 246, 19, 142, 237, 2, 226, 243, 226, 93, - 220, 152, 207, 183, 239, 51, 97, 93, 114, 65, 41, 27, 107, 114, 0, 230, 99, 71, 215, 229, - 175, 12, 98, 102, 165, 212, 52, 198, 174, 243, 59, 202, 40, 111, 24, 186, 19, 57, 126, 17, - 68, 87, 51, 230, 141, 177, 100, 247, 179, 33, 33, 46, 166, 83, 239, 73, 255, 94, 31, 188, - 97, 108, 117, 184, 1, 87, 12, 241, 183, 172, 213, 189, 16, 241, 148, 41, 53, 238, 236, 27, - 28, 219, 23, 59, 246, 109, 17, 221, 122, 150, 225, 231, 227, 4, 76, 7, 236, 162, 188, 27, - 234, 210, 51, 154, 73, 190, 236, 125, 112, 19, 126, 99, 16, 191, 139, 239, 51, 89, 13, 54, - 14, 84, 202, 33, 110, 236, 121, 35, 244, 163, 27, 206, 218, 60, 239, 6, 63, 154, 153, 97, - 153, 213, 237, 203, 84, 223, 81, 77, 8, 227, 21, 76, 221, 213, 246, 47, 219, 218, 221, 114, - 80, 190, 246, 136, 22, 178, 108, 153, 213, 243, 74, 40, 111, 188, 124, 4, 3, 172, 147, 208, - 7, 203, 235, 41, 156, 236, 84, 231, 95, 2, 118, 140, 187, 240, 65, 59, 52, 248, 197, 103, - 29, 40, 159, 170, 248, 209, 28, 219, 54, 196, 0, 246, 212, 141, 24, 87, 123, 90, 90, 219, - 230, 114, 188, 147, 169, 209, 45, 50, 136, 242, 39, 130, 239, 224, 216, 33, 88, 61, 222, 204, - 21, 51, 39, 113, 220, 50, 80, 222, 69, 121, 144, 245, 135, 28, 226, 166, 134, 95, 168, 248, - 140, 67, 222, 157, 213, 111, 176, 120, 215, 61, 111, 208, 251, 116, 169, 126, 1, 227, 179, 195, - 109, 232, 194, 136, 24, 71, 198, 188, 171, 220, 168, 167, 244, 149, 254, 32, 198, 181, 250, 36, - 35, 85, 227, 65, 125, 64, 255, 27, 48, 226, 1, 253, 216, 76, 166, 81, 118, 136, 133, 132, - 125, 162, 18, 239, 38, 90, 229, 20, 43, 135, 98, 65, 183, 243, 161, 97, 254, 26, 179, 246, - 239, 105, 167, 16, 131, 138, 82, 46, 199, 177, 139, 160, 188, 111, 240, 65, 28, 59, 52, 172, - 113, 3, 6, 49, 192, 58, 181, 32, 156, 243, 49, 9, 11, 167, 244, 92, 87, 136, 199, 255, - 41, 55, 225, 216, 182, 33, 22, 217, 235, 203, 186, 53, 96, 202, 198, 142, 60, 153, 99, 187, - 128, 24, 60, 157, 114, 101, 142, 93, 196, 182, 217, 129, 119, 50, 53, 186, 213, 148, 81, 190, - 216, 227, 210, 221, 230, 186, 132, 244, 13, 178, 149, 167, 10, 70, 52, 10, 216, 168, 102, 238, - 90, 6, 98, 170, 113, 246, 65, 142, 19, 65, 140, 13, 243, 193, 251, 169, 207, 82, 145, 175, - 155, 230, 55, 217, 70, 245, 251, 143, 242, 238, 112, 77, 140, 170, 219, 149, 213, 231, 154, 136, - 134, 164, 55, 40, 203, 248, 77, 13, 191, 209, 49, 202, 198, 23, 67, 140, 247, 125, 142, 149, - 231, 22, 202, 224, 99, 42, 55, 64, 122, 102, 14, 119, 63, 142, 93, 196, 182, 249, 6, 239, - 100, 106, 116, 243, 92, 99, 77, 27, 48, 40, 95, 205, 218, 249, 140, 55, 189, 173, 191, 49, - 4, 148, 119, 195, 186, 5, 199, 182, 13, 106, 192, 148, 66, 244, 241, 77, 121, 48, 199, 118, - 193, 142, 243, 106, 62, 240, 84, 237, 31, 58, 196, 138, 215, 41, 251, 112, 236, 144, 172, 62, - 55, 231, 10, 78, 125, 136, 99, 135, 128, 232, 70, 145, 154, 124, 227, 102, 28, 187, 44, 164, - 103, 50, 123, 6, 199, 141, 153, 213, 119, 91, 196, 162, 194, 236, 17, 28, 43, 50, 131, 120, - 218, 231, 79, 92, 63, 75, 239, 27, 230, 99, 98, 125, 138, 219, 81, 140, 241, 65, 166, 13, - 24, 171, 195, 214, 86, 238, 142, 249, 110, 86, 236, 151, 136, 107, 7, 205, 30, 215, 54, 148, - 47, 206, 85, 171, 11, 130, 197, 95, 20, 233, 31, 171, 111, 114, 236, 24, 96, 13, 27, 48, - 136, 198, 203, 239, 185, 194, 83, 111, 196, 102, 48, 176, 15, 177, 210, 109, 202, 126, 28, 219, - 54, 168, 1, 83, 10, 209, 109, 49, 229, 246, 28, 219, 5, 196, 15, 73, 202, 125, 57, 118, - 17, 148, 247, 63, 191, 40, 199, 14, 9, 49, 195, 96, 202, 245, 56, 118, 8, 136, 174, 125, - 41, 43, 143, 139, 66, 250, 73, 219, 243, 56, 110, 204, 172, 190, 15, 226, 4, 16, 93, 32, - 71, 113, 193, 41, 227, 135, 152, 181, 239, 77, 168, 158, 202, 254, 95, 86, 78, 178, 114, 3, - 222, 190, 79, 200, 172, 1, 99, 199, 222, 221, 202, 179, 81, 126, 45, 54, 227, 79, 196, 238, - 132, 204, 111, 42, 15, 10, 209, 170, 79, 157, 8, 255, 96, 92, 156, 227, 203, 160, 252, 226, - 238, 73, 28, 59, 6, 88, 179, 6, 12, 162, 255, 119, 234, 60, 57, 239, 39, 59, 234, 190, - 148, 14, 45, 60, 218, 70, 249, 90, 29, 23, 227, 216, 182, 161, 252, 61, 222, 133, 222, 26, - 48, 136, 73, 4, 86, 110, 252, 34, 102, 137, 250, 175, 13, 181, 63, 71, 231, 99, 147, 28, - 98, 138, 202, 212, 2, 137, 181, 23, 209, 69, 116, 5, 96, 190, 142, 204, 104, 62, 99, 40, - 95, 188, 243, 211, 28, 59, 36, 164, 223, 23, 43, 13, 4, 69, 76, 131, 155, 234, 162, 241, - 88, 142, 29, 43, 171, 235, 133, 172, 252, 138, 19, 128, 186, 143, 201, 10, 16, 235, 43, 249, - 184, 208, 178, 153, 72, 103, 124, 220, 200, 110, 188, 189, 212, 131, 184, 225, 95, 54, 222, 210, - 249, 248, 55, 95, 157, 254, 218, 188, 173, 116, 4, 229, 221, 63, 94, 204, 177, 41, 136, 62, - 154, 169, 69, 20, 253, 68, 239, 201, 241, 99, 128, 53, 106, 192, 160, 186, 241, 226, 139, 165, - 141, 126, 224, 39, 98, 166, 42, 239, 191, 126, 23, 126, 109, 89, 136, 245, 62, 82, 95, 30, - 95, 227, 216, 49, 66, 249, 108, 89, 189, 53, 86, 24, 206, 153, 65, 204, 239, 22, 213, 174, - 7, 98, 22, 172, 84, 127, 126, 247, 93, 142, 239, 146, 29, 239, 101, 92, 129, 169, 133, 83, - 92, 207, 88, 236, 190, 72, 95, 116, 175, 52, 240, 188, 43, 40, 31, 187, 56, 170, 241, 134, - 72, 175, 224, 236, 11, 59, 214, 158, 33, 209, 182, 121, 40, 239, 104, 170, 243, 238, 163, 109, - 64, 220, 44, 252, 0, 87, 126, 74, 23, 60, 178, 50, 123, 255, 108, 101, 229, 30, 86, 190, - 78, 239, 171, 162, 193, 158, 90, 228, 2, 229, 79, 147, 188, 91, 191, 47, 94, 171, 89, 4, - 251, 134, 120, 36, 230, 143, 27, 153, 119, 9, 59, 132, 227, 139, 16, 253, 156, 125, 161, 193, - 148, 81, 253, 232, 23, 97, 77, 26, 48, 136, 245, 79, 82, 83, 7, 187, 65, 22, 114, 91, - 133, 213, 245, 248, 66, 189, 125, 77, 135, 235, 114, 76, 21, 196, 106, 235, 169, 59, 236, 110, - 84, 231, 172, 12, 198, 217, 128, 41, 14, 190, 247, 187, 219, 175, 192, 146, 55, 29, 16, 119, - 196, 83, 179, 76, 205, 244, 58, 251, 160, 29, 111, 47, 164, 239, 208, 251, 252, 251, 55, 229, - 120, 134, 248, 172, 165, 86, 77, 119, 119, 230, 248, 161, 88, 93, 174, 206, 149, 155, 250, 10, - 199, 14, 13, 229, 179, 6, 122, 163, 119, 233, 153, 46, 45, 246, 250, 86, 206, 162, 125, 56, - 159, 185, 171, 118, 99, 168, 9, 68, 215, 56, 111, 44, 47, 245, 57, 113, 136, 39, 47, 101, - 141, 151, 183, 115, 252, 152, 32, 166, 176, 246, 110, 149, 222, 29, 102, 23, 126, 125, 221, 32, - 158, 90, 248, 77, 193, 44, 187, 246, 32, 110, 244, 249, 231, 139, 111, 246, 169, 1, 211, 16, - 230, 27, 48, 222, 165, 245, 62, 24, 203, 218, 40, 45, 67, 252, 198, 223, 218, 202, 225, 86, - 46, 196, 175, 143, 134, 85, 238, 5, 133, 147, 82, 228, 143, 196, 124, 202, 199, 173, 19, 219, - 120, 195, 231, 227, 27, 195, 55, 241, 11, 137, 189, 120, 155, 177, 192, 26, 52, 96, 16, 23, - 42, 101, 141, 151, 39, 114, 252, 88, 89, 93, 119, 69, 250, 174, 246, 231, 17, 239, 45, 31, - 219, 51, 247, 20, 201, 254, 109, 123, 196, 7, 167, 106, 181, 247, 51, 177, 38, 83, 70, 99, - 100, 13, 24, 196, 184, 181, 212, 96, 98, 191, 153, 225, 99, 90, 30, 134, 152, 174, 251, 130, - 133, 109, 182, 68, 188, 47, 31, 143, 24, 156, 88, 198, 231, 183, 95, 250, 2, 181, 45, 118, - 204, 71, 114, 69, 166, 60, 39, 95, 124, 208, 251, 142, 111, 90, 99, 199, 255, 219, 202, 117, - 167, 175, 249, 119, 93, 138, 175, 34, 191, 114, 23, 187, 182, 33, 250, 181, 167, 28, 206, 177, - 67, 67, 172, 143, 84, 54, 13, 172, 79, 250, 226, 235, 161, 148, 118, 205, 179, 215, 118, 66, - 220, 217, 76, 125, 127, 184, 222, 215, 24, 67, 204, 8, 229, 252, 253, 242, 126, 196, 204, 79, - 201, 241, 43, 136, 181, 171, 30, 141, 249, 233, 72, 103, 188, 59, 217, 104, 215, 242, 240, 186, - 97, 227, 194, 174, 222, 181, 124, 229, 89, 228, 134, 132, 248, 172, 251, 88, 209, 25, 239, 17, - 48, 218, 233, 135, 155, 66, 92, 159, 249, 13, 42, 239, 254, 234, 212, 128, 105, 8, 209, 128, - 241, 134, 161, 223, 180, 191, 33, 191, 158, 19, 196, 117, 89, 177, 103, 149, 95, 139, 94, 135, - 227, 70, 1, 49, 51, 74, 106, 65, 180, 25, 239, 194, 228, 179, 92, 249, 7, 194, 239, 62, - 157, 130, 249, 22, 126, 209, 35, 249, 24, 125, 65, 220, 49, 242, 153, 33, 170, 138, 247, 9, - 77, 241, 47, 53, 142, 245, 210, 235, 10, 201, 136, 169, 146, 255, 120, 78, 181, 54, 240, 31, - 115, 174, 223, 170, 165, 243, 129, 201, 136, 5, 220, 22, 241, 6, 175, 47, 206, 245, 85, 43, - 223, 69, 244, 233, 173, 122, 127, 57, 255, 49, 189, 49, 31, 111, 172, 48, 190, 6, 140, 15, - 68, 92, 150, 159, 31, 191, 219, 189, 12, 239, 146, 54, 200, 64, 114, 68, 151, 54, 95, 196, - 181, 138, 191, 111, 252, 194, 209, 223, 99, 169, 137, 71, 138, 188, 225, 115, 35, 62, 206, 80, - 16, 55, 94, 82, 159, 11, 111, 100, 149, 54, 4, 134, 132, 242, 70, 229, 140, 159, 139, 119, - 34, 222, 143, 62, 206, 236, 201, 136, 223, 24, 159, 109, 41, 213, 51, 96, 230, 76, 43, 219, - 243, 241, 186, 100, 199, 219, 14, 229, 221, 121, 253, 253, 228, 211, 90, 127, 18, 209, 37, 179, - 236, 105, 222, 140, 55, 236, 106, 45, 232, 217, 55, 171, 223, 11, 185, 210, 136, 155, 30, 219, - 113, 236, 216, 89, 157, 143, 230, 68, 204, 233, 24, 233, 231, 166, 45, 136, 241, 129, 71, 97, - 196, 55, 148, 215, 5, 162, 81, 184, 244, 147, 215, 117, 134, 248, 30, 99, 163, 156, 148, 235, - 108, 86, 185, 61, 144, 30, 203, 82, 215, 107, 121, 223, 125, 66, 52, 96, 218, 118, 43, 62, - 78, 151, 80, 190, 40, 104, 219, 46, 201, 199, 110, 19, 98, 46, 241, 183, 241, 65, 91, 224, - 119, 63, 151, 30, 219, 48, 6, 24, 95, 3, 198, 87, 18, 95, 180, 224, 86, 93, 126, 94, - 110, 205, 199, 234, 19, 162, 187, 142, 55, 132, 219, 240, 0, 222, 255, 144, 172, 62, 175, 231, - 10, 78, 221, 141, 99, 199, 4, 209, 53, 177, 77, 254, 59, 213, 251, 180, 214, 118, 204, 99, - 185, 34, 43, 242, 238, 112, 163, 26, 175, 148, 98, 117, 252, 20, 87, 124, 106, 237, 158, 92, - 160, 124, 172, 94, 167, 191, 129, 34, 235, 8, 229, 93, 246, 123, 239, 89, 177, 52, 171, 220, - 165, 173, 124, 135, 107, 92, 195, 179, 48, 240, 29, 13, 196, 184, 156, 182, 169, 1, 211, 0, - 98, 1, 202, 212, 20, 168, 171, 248, 17, 6, 186, 195, 223, 4, 70, 214, 128, 113, 136, 185, - 236, 31, 131, 197, 179, 216, 44, 227, 39, 24, 73, 55, 5, 196, 93, 199, 38, 13, 103, 191, - 192, 60, 130, 247, 59, 36, 68, 87, 204, 84, 55, 183, 51, 81, 232, 22, 55, 86, 136, 238, - 162, 254, 116, 174, 169, 207, 96, 160, 25, 149, 16, 83, 215, 46, 122, 106, 183, 136, 63, 45, - 235, 189, 241, 181, 10, 148, 119, 87, 220, 141, 99, 199, 14, 233, 239, 3, 63, 151, 231, 231, - 88, 145, 205, 29, 162, 27, 56, 251, 35, 199, 141, 142, 85, 114, 27, 43, 79, 196, 242, 93, - 70, 156, 63, 58, 159, 240, 190, 134, 194, 149, 107, 129, 26, 48, 45, 64, 12, 198, 245, 126, - 200, 171, 92, 200, 248, 133, 154, 95, 108, 175, 229, 128, 57, 140, 176, 1, 51, 131, 120, 106, - 233, 79, 100, 124, 236, 75, 170, 139, 82, 21, 239, 2, 228, 99, 98, 70, 215, 173, 196, 234, - 116, 40, 202, 23, 216, 77, 241, 46, 75, 39, 98, 132, 221, 45, 172, 78, 47, 161, 186, 206, - 60, 144, 99, 199, 10, 241, 148, 255, 53, 88, 237, 243, 239, 99, 49, 142, 192, 240, 55, 200, - 46, 143, 24, 51, 181, 168, 139, 24, 243, 167, 70, 222, 136, 91, 155, 193, 227, 152, 31, 180, - 236, 62, 141, 196, 152, 197, 177, 179, 58, 223, 148, 19, 49, 39, 115, 156, 136, 156, 253, 121, - 57, 150, 63, 44, 88, 114, 102, 226, 81, 64, 140, 139, 241, 1, 138, 39, 32, 126, 60, 126, - 135, 232, 63, 238, 125, 119, 125, 0, 239, 39, 17, 253, 150, 175, 201, 219, 14, 13, 245, 47, - 194, 22, 81, 3, 166, 69, 136, 70, 242, 1, 86, 30, 139, 24, 16, 231, 13, 96, 31, 3, - 227, 119, 190, 253, 61, 230, 131, 94, 127, 104, 229, 131, 136, 198, 244, 129, 24, 248, 194, 165, - 41, 140, 184, 1, 83, 100, 245, 217, 17, 177, 96, 168, 79, 175, 238, 227, 73, 188, 155, 153, - 247, 123, 247, 207, 148, 15, 8, 245, 39, 45, 126, 17, 227, 159, 253, 91, 96, 204, 143, 148, - 167, 172, 142, 215, 68, 12, 6, 255, 4, 226, 125, 230, 223, 97, 254, 52, 195, 223, 103, 223, - 71, 220, 105, 246, 5, 6, 119, 227, 109, 199, 0, 49, 152, 61, 117, 209, 255, 107, 36, 38, - 88, 25, 59, 196, 19, 178, 219, 89, 57, 14, 231, 188, 199, 252, 179, 239, 239, 49, 31, 227, - 231, 227, 76, 252, 55, 231, 29, 136, 49, 52, 87, 228, 125, 12, 13, 209, 61, 214, 223, 87, - 94, 63, 159, 141, 207, 235, 235, 141, 121, 31, 47, 230, 197, 255, 219, 39, 42, 241, 25, 24, - 15, 193, 26, 60, 37, 75, 177, 122, 31, 137, 184, 27, 235, 159, 125, 255, 156, 44, 189, 62, - 220, 216, 32, 126, 75, 138, 70, 223, 141, 79, 100, 8, 136, 155, 154, 207, 68, 124, 143, 249, - 205, 23, 95, 178, 99, 45, 111, 30, 139, 136, 136, 136, 172, 45, 187, 0, 123, 75, 161, 241, - 242, 101, 126, 93, 68, 68, 68, 68, 68, 100, 20, 16, 235, 247, 20, 215, 18, 58, 148, 99, - 68, 68, 68, 68, 68, 68, 70, 1, 209, 45, 118, 198, 187, 251, 173, 221, 56, 30, 17, 17, - 17, 17, 17, 217, 76, 32, 198, 90, 206, 220, 142, 95, 23, 17, 17, 17, 17, 17, 25, 5, - 196, 218, 80, 62, 57, 132, 27, 237, 162, 175, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 155, 53, 0, 231, 179, 114, 83, 43, 199, 90, 121, 151, 149, 175, 91, 249, 173, - 149, 191, 89, 249, 63, 43, 255, 101, 229, 15, 86, 78, 183, 242, 49, 43, 47, 181, 114, 87, - 43, 187, 243, 190, 198, 198, 234, 120, 7, 164, 253, 204, 202, 121, 56, 126, 8, 86, 143, 227, - 185, 114, 53, 248, 185, 249, 79, 43, 223, 181, 242, 14, 43, 143, 177, 114, 57, 62, 198, 216, - 88, 29, 247, 176, 242, 0, 43, 111, 180, 242, 37, 43, 191, 177, 242, 119, 43, 255, 99, 229, - 143, 211, 124, 222, 105, 229, 161, 86, 246, 230, 237, 187, 134, 213, 207, 201, 191, 172, 252, 217, - 202, 143, 17, 159, 149, 231, 88, 185, 165, 149, 109, 248, 24, 67, 192, 234, 121, 45, 235, 40, - 62, 102, 151, 208, 93, 62, 127, 231, 99, 13, 193, 234, 113, 17, 43, 119, 177, 242, 50, 43, - 159, 70, 124, 111, 253, 21, 241, 62, 243, 207, 203, 175, 172, 124, 222, 202, 235, 172, 220, 215, - 202, 46, 188, 143, 174, 161, 252, 28, 236, 200, 177, 117, 217, 62, 46, 201, 59, 157, 122, 46, - 199, 14, 1, 29, 230, 222, 5, 175, 23, 87, 116, 69, 19, 222, 119, 31, 208, 193, 223, 27, - 113, 141, 224, 215, 57, 204, 255, 237, 246, 28, 223, 21, 116, 144, 91, 23, 80, 94, 79, 119, - 61, 142, 111, 131, 237, 119, 79, 196, 119, 94, 202, 251, 57, 126, 21, 40, 207, 235, 142, 28, - 91, 151, 237, 227, 60, 188, 211, 169, 193, 190, 199, 236, 216, 187, 90, 185, 159, 149, 19, 16, - 191, 33, 254, 91, 226, 215, 252, 254, 119, 62, 203, 202, 47, 16, 191, 57, 47, 71, 92, 239, - 95, 132, 247, 49, 24, 171, 204, 185, 172, 28, 108, 229, 36, 196, 15, 225, 170, 190, 102, 229, - 145, 86, 182, 231, 99, 140, 1, 226, 196, 148, 185, 45, 199, 15, 1, 229, 31, 156, 38, 60, - 239, 155, 240, 177, 134, 100, 245, 57, 47, 226, 98, 204, 27, 44, 117, 125, 1, 241, 67, 115, - 110, 222, 111, 23, 208, 254, 57, 241, 47, 132, 215, 90, 185, 2, 31, 171, 79, 104, 63, 47, - 150, 75, 3, 230, 44, 62, 86, 95, 16, 223, 205, 55, 183, 114, 50, 202, 127, 180, 171, 248, - 103, 255, 110, 86, 182, 228, 125, 119, 1, 229, 231, 160, 241, 133, 23, 212, 128, 105, 149, 215, - 139, 43, 186, 162, 9, 239, 187, 15, 104, 249, 239, 109, 219, 29, 136, 184, 9, 152, 114, 52, - 199, 119, 9, 45, 231, 214, 21, 148, 215, 211, 157, 194, 241, 109, 64, 220, 232, 44, 211, 117, - 3, 198, 111, 72, 94, 154, 227, 235, 192, 72, 26, 48, 136, 122, 220, 201, 202, 231, 168, 30, - 203, 240, 223, 162, 15, 91, 57, 152, 247, 219, 43, 171, 192, 225, 86, 190, 183, 177, 110, 141, - 249, 5, 218, 51, 173, 92, 128, 143, 55, 20, 171, 203, 53, 169, 142, 236, 52, 222, 102, 8, - 40, 255, 224, 180, 225, 69, 86, 182, 224, 99, 246, 13, 209, 88, 254, 1, 213, 109, 21, 223, - 176, 114, 77, 222, 127, 219, 208, 221, 57, 249, 95, 43, 175, 182, 178, 3, 31, 179, 15, 232, - 46, 175, 153, 92, 26, 48, 127, 230, 99, 245, 1, 241, 157, 85, 117, 211, 165, 142, 51, 173, - 220, 149, 143, 209, 54, 148, 159, 131, 198, 23, 94, 80, 3, 166, 85, 94, 47, 174, 232, 138, - 38, 188, 239, 62, 160, 197, 191, 183, 109, 115, 21, 196, 197, 105, 202, 179, 56, 190, 107, 104, - 49, 183, 46, 161, 188, 158, 51, 7, 242, 54, 77, 216, 254, 46, 139, 234, 27, 57, 93, 55, - 96, 220, 23, 173, 156, 151, 183, 89, 22, 70, 208, 128, 177, 99, 29, 132, 246, 174, 251, 79, - 179, 114, 85, 62, 70, 167, 16, 221, 118, 78, 165, 138, 84, 249, 111, 43, 127, 153, 254, 239, - 178, 126, 109, 229, 80, 62, 246, 16, 172, 30, 39, 114, 229, 18, 174, 198, 219, 245, 13, 213, - 31, 156, 54, 188, 154, 143, 217, 23, 59, 246, 86, 136, 238, 47, 109, 242, 70, 192, 83, 209, - 225, 211, 24, 116, 127, 78, 252, 241, 108, 39, 143, 219, 171, 160, 251, 188, 114, 105, 192, 252, - 145, 143, 213, 37, 59, 222, 22, 86, 158, 130, 234, 31, 234, 85, 125, 220, 202, 174, 124, 204, - 182, 160, 252, 28, 52, 190, 240, 130, 26, 48, 173, 242, 122, 113, 69, 87, 52, 225, 125, 247, - 1, 45, 253, 189, 45, 126, 55, 43, 255, 193, 59, 153, 242, 187, 253, 231, 226, 109, 186, 134, - 150, 114, 235, 26, 202, 235, 57, 243, 25, 222, 166, 9, 219, 223, 91, 248, 0, 164, 143, 6, - 140, 123, 14, 111, 179, 44, 12, 216, 128, 177, 99, 108, 141, 246, 175, 193, 156, 183, 11, 142, - 65, 31, 159, 21, 68, 31, 54, 239, 59, 93, 198, 239, 142, 63, 207, 202, 97, 86, 46, 103, - 101, 107, 218, 222, 47, 68, 189, 31, 162, 143, 149, 121, 188, 149, 83, 80, 253, 99, 251, 98, - 12, 120, 231, 223, 142, 125, 9, 196, 120, 138, 69, 94, 207, 219, 246, 13, 139, 63, 56, 109, - 232, 189, 81, 105, 199, 188, 48, 162, 15, 101, 87, 252, 113, 230, 249, 249, 184, 109, 64, 63, - 231, 196, 187, 46, 244, 214, 199, 218, 161, 251, 188, 114, 105, 192, 252, 158, 143, 213, 21, 59, - 214, 182, 86, 222, 199, 21, 104, 217, 239, 173, 92, 155, 143, 221, 6, 148, 159, 131, 198, 23, - 94, 80, 3, 166, 85, 94, 47, 174, 232, 138, 38, 188, 239, 62, 160, 133, 191, 183, 197, 238, - 96, 229, 251, 188, 131, 41, 239, 182, 185, 242, 157, 246, 38, 208, 66, 110, 125, 64, 121, 61, - 139, 14, 226, 237, 86, 129, 184, 22, 245, 27, 150, 85, 250, 106, 192, 248, 152, 168, 149, 242, - 194, 64, 13, 24, 196, 123, 253, 51, 124, 208, 150, 189, 25, 93, 117, 87, 70, 244, 167, 126, - 6, 29, 112, 198, 27, 32, 222, 186, 221, 151, 183, 91, 6, 98, 128, 233, 99, 17, 131, 127, - 82, 252, 71, 249, 124, 188, 93, 31, 236, 184, 79, 231, 202, 148, 248, 167, 149, 139, 242, 246, - 125, 66, 249, 7, 199, 27, 139, 215, 90, 80, 188, 15, 239, 17, 86, 142, 67, 76, 188, 80, - 230, 227, 124, 220, 46, 217, 241, 46, 104, 229, 43, 92, 9, 226, 45, 248, 83, 16, 173, 248, - 67, 16, 249, 236, 109, 229, 26, 136, 156, 94, 133, 152, 160, 160, 202, 167, 208, 193, 29, 0, - 148, 159, 147, 253, 16, 13, 249, 178, 114, 69, 43, 55, 178, 114, 79, 196, 103, 235, 119, 177, - 89, 41, 255, 12, 222, 154, 143, 223, 21, 172, 158, 215, 178, 229, 130, 124, 204, 46, 161, 187, - 124, 122, 153, 160, 4, 49, 129, 202, 162, 167, 226, 254, 195, 233, 221, 202, 252, 9, 141, 119, - 197, 188, 170, 149, 93, 172, 236, 99, 229, 134, 86, 142, 68, 76, 120, 241, 167, 217, 6, 9, - 63, 177, 114, 97, 62, 126, 27, 80, 126, 14, 26, 95, 120, 65, 13, 152, 86, 89, 189, 206, - 141, 249, 247, 122, 85, 41, 187, 118, 152, 240, 190, 251, 128, 134, 127, 111, 196, 231, 173, 172, - 255, 255, 151, 209, 209, 13, 177, 101, 160, 97, 110, 125, 65, 121, 61, 139, 190, 200, 219, 173, - 194, 246, 243, 239, 188, 227, 132, 190, 26, 48, 206, 39, 27, 186, 24, 111, 187, 8, 6, 104, - 192, 216, 190, 47, 132, 24, 163, 190, 200, 233, 136, 235, 71, 31, 159, 124, 19, 196, 111, 167, - 95, 123, 222, 13, 49, 128, 255, 167, 155, 34, 203, 249, 228, 95, 237, 79, 138, 133, 242, 71, - 71, 126, 103, 252, 74, 28, 191, 10, 196, 29, 196, 167, 33, 253, 196, 227, 67, 232, 34, 177, - 10, 118, 188, 109, 144, 190, 112, 244, 63, 114, 202, 19, 120, 31, 125, 66, 249, 7, 167, 214, - 23, 151, 197, 111, 103, 229, 61, 188, 147, 41, 191, 139, 209, 203, 68, 11, 136, 238, 48, 31, - 163, 227, 23, 121, 163, 209, 115, 222, 153, 183, 101, 136, 39, 127, 62, 83, 70, 89, 35, 249, - 94, 188, 77, 27, 208, 222, 57, 241, 250, 31, 101, 229, 151, 180, 159, 162, 127, 160, 165, 207, - 226, 34, 104, 41, 175, 177, 192, 26, 231, 131, 184, 185, 244, 110, 174, 120, 129, 55, 110, 189, - 59, 203, 82, 19, 63, 88, 220, 150, 86, 238, 131, 248, 65, 42, 58, 203, 202, 21, 57, 190, - 45, 232, 240, 28, 64, 13, 152, 65, 89, 30, 143, 224, 196, 166, 38, 28, 219, 7, 52, 248, - 123, 35, 126, 151, 202, 158, 116, 250, 172, 145, 99, 189, 145, 185, 48, 183, 62, 161, 188, 158, - 236, 16, 222, 182, 14, 196, 13, 154, 212, 236, 112, 172, 207, 6, 140, 251, 40, 106, 222, 52, - 69, 207, 13, 24, 196, 241, 62, 201, 7, 35, 167, 88, 185, 62, 111, 155, 130, 24, 63, 227, - 13, 252, 42, 47, 227, 237, 26, 177, 29, 62, 151, 143, 128, 120, 67, 60, 1, 29, 140, 31, - 176, 125, 94, 27, 233, 11, 181, 94, 199, 96, 32, 166, 19, 101, 62, 61, 156, 119, 105, 74, - 181, 72, 253, 226, 120, 144, 199, 198, 14, 229, 31, 156, 218, 95, 92, 182, 205, 249, 17, 119, - 9, 82, 58, 187, 136, 41, 66, 220, 41, 46, 243, 35, 43, 251, 240, 54, 139, 32, 238, 38, - 240, 221, 152, 231, 113, 92, 91, 208, 226, 57, 113, 136, 39, 82, 126, 151, 188, 140, 119, 105, - 216, 138, 183, 107, 27, 90, 206, 107, 104, 88, 227, 124, 172, 142, 143, 230, 74, 23, 252, 194, - 202, 1, 188, 205, 50, 16, 23, 106, 126, 225, 233, 55, 10, 220, 225, 28, 211, 38, 116, 120, - 14, 160, 6, 204, 160, 144, 87, 3, 198, 159, 232, 167, 120, 207, 133, 61, 57, 190, 111, 104, - 144, 91, 159, 80, 94, 79, 230, 215, 90, 181, 46, 244, 139, 16, 203, 66, 44, 163, 239, 6, - 140, 59, 134, 183, 175, 130, 254, 27, 48, 101, 79, 78, 157, 95, 11, 31, 193, 219, 44, 195, - 182, 123, 56, 170, 135, 142, 220, 153, 183, 89, 9, 226, 113, 16, 235, 188, 207, 61, 162, 107, - 67, 106, 182, 169, 206, 103, 195, 153, 177, 99, 125, 155, 15, 110, 94, 57, 125, 205, 187, 246, - 164, 180, 243, 135, 95, 1, 202, 63, 56, 43, 125, 113, 33, 230, 245, 78, 105, 117, 118, 144, - 20, 196, 93, 147, 178, 73, 31, 78, 67, 195, 167, 64, 182, 253, 227, 166, 251, 250, 32, 58, - 28, 99, 133, 150, 207, 201, 12, 170, 187, 54, 62, 150, 227, 219, 134, 142, 242, 26, 10, 214, - 52, 31, 171, 223, 94, 56, 167, 129, 193, 252, 251, 171, 241, 156, 251, 182, 143, 43, 89, 121, - 32, 255, 123, 219, 208, 225, 57, 128, 26, 48, 131, 66, 38, 13, 24, 123, 253, 201, 188, 193, - 212, 89, 88, 177, 11, 125, 219, 176, 98, 110, 125, 67, 186, 158, 101, 179, 185, 221, 134, 183, - 95, 134, 109, 119, 101, 164, 159, 190, 164, 142, 51, 68, 3, 198, 123, 27, 93, 139, 247, 81, - 6, 61, 54, 96, 16, 127, 187, 84, 111, 40, 231, 15, 24, 150, 122, 162, 95, 198, 182, 191, - 1, 226, 115, 147, 226, 61, 159, 154, 189, 95, 109, 7, 187, 35, 90, 89, 69, 149, 125, 237, - 17, 179, 114, 28, 141, 184, 75, 236, 125, 68, 127, 136, 88, 208, 210, 91, 193, 15, 6, 245, - 251, 179, 255, 127, 123, 43, 119, 167, 114, 241, 233, 107, 222, 136, 241, 59, 136, 69, 254, 198, - 171, 221, 119, 176, 46, 59, 198, 141, 233, 184, 51, 103, 119, 209, 65, 204, 200, 144, 234, 94, - 214, 74, 159, 205, 85, 160, 252, 131, 179, 210, 27, 193, 182, 123, 54, 239, 104, 170, 243, 25, - 215, 236, 24, 239, 229, 131, 78, 249, 147, 151, 86, 166, 14, 70, 140, 143, 217, 142, 255, 189, - 77, 104, 249, 156, 20, 217, 62, 94, 207, 59, 157, 242, 5, 60, 59, 157, 134, 28, 29, 230, - 53, 4, 172, 105, 62, 86, 191, 183, 115, 133, 167, 188, 191, 241, 37, 56, 126, 204, 208, 225, - 57, 128, 26, 48, 131, 66, 6, 13, 24, 68, 23, 228, 20, 191, 200, 91, 105, 80, 118, 23, - 176, 66, 110, 67, 64, 186, 158, 39, 34, 174, 25, 217, 183, 177, 66, 111, 31, 164, 187, 251, - 251, 172, 113, 175, 230, 127, 68, 247, 13, 24, 95, 196, 61, 229, 12, 44, 57, 230, 19, 253, - 54, 96, 62, 192, 7, 153, 242, 49, 146, 173, 116, 85, 183, 253, 220, 12, 229, 79, 98, 154, - 229, 100, 59, 248, 8, 239, 17, 37, 179, 3, 217, 191, 95, 12, 113, 199, 62, 213, 218, 45, - 242, 126, 250, 222, 37, 109, 219, 233, 118, 62, 93, 50, 187, 81, 97, 191, 251, 99, 190, 21, - 248, 134, 115, 142, 220, 13, 164, 79, 222, 39, 41, 198, 215, 171, 73, 89, 186, 69, 221, 38, - 148, 127, 112, 86, 250, 226, 178, 237, 222, 196, 59, 66, 60, 125, 219, 48, 179, 92, 219, 16, - 3, 240, 83, 124, 252, 205, 149, 57, 126, 204, 208, 242, 57, 41, 66, 140, 85, 240, 62, 215, - 41, 15, 224, 248, 54, 161, 195, 188, 134, 128, 53, 204, 7, 49, 56, 186, 236, 251, 182, 243, - 167, 164, 109, 67, 135, 231, 0, 106, 192, 12, 10, 107, 222, 128, 177, 127, 63, 20, 229, 23, - 90, 189, 245, 10, 89, 6, 106, 230, 54, 20, 164, 235, 233, 215, 28, 169, 94, 63, 174, 214, - 74, 246, 136, 73, 74, 82, 252, 70, 186, 15, 54, 103, 93, 55, 96, 110, 131, 242, 153, 208, - 222, 198, 251, 73, 65, 79, 13, 24, 219, 223, 229, 249, 0, 5, 173, 206, 68, 107, 251, 123, - 12, 31, 96, 234, 44, 172, 122, 131, 25, 49, 3, 18, 75, 254, 145, 237, 223, 175, 134, 197, - 179, 60, 49, 191, 147, 126, 89, 44, 104, 192, 76, 247, 207, 221, 101, 252, 77, 112, 153, 98, - 76, 155, 124, 223, 72, 95, 24, 108, 120, 140, 137, 120, 66, 148, 250, 82, 59, 177, 24, 215, - 23, 148, 127, 112, 106, 127, 113, 33, 198, 192, 164, 206, 233, 59, 56, 182, 109, 136, 137, 28, - 82, 78, 224, 216, 177, 67, 139, 231, 36, 5, 177, 26, 110, 202, 167, 56, 182, 77, 232, 56, - 175, 190, 97, 13, 243, 65, 121, 119, 150, 206, 63, 163, 93, 64, 135, 231, 0, 106, 192, 12, - 10, 107, 220, 128, 65, 220, 68, 253, 59, 7, 78, 213, 26, 195, 208, 7, 212, 200, 109, 72, - 72, 215, 211, 27, 48, 62, 195, 93, 106, 161, 68, 31, 223, 185, 116, 119, 111, 164, 123, 113, - 120, 215, 39, 239, 61, 51, 68, 3, 102, 71, 43, 79, 226, 127, 44, 184, 47, 239, 139, 161, - 191, 6, 76, 217, 205, 249, 143, 112, 108, 83, 136, 9, 138, 206, 160, 227, 204, 220, 147, 227, - 151, 130, 152, 89, 160, 200, 31, 127, 205, 205, 174, 129, 88, 133, 182, 106, 218, 205, 42, 103, - 32, 186, 187, 48, 110, 192, 248, 236, 100, 60, 123, 84, 187, 51, 21, 20, 32, 253, 6, 252, - 25, 18, 31, 30, 251, 183, 147, 56, 16, 241, 196, 104, 225, 204, 88, 109, 67, 186, 222, 174, - 214, 23, 23, 226, 3, 158, 202, 203, 27, 107, 157, 63, 1, 177, 99, 124, 131, 15, 60, 117, - 121, 142, 29, 59, 180, 116, 78, 202, 32, 102, 160, 226, 207, 134, 243, 247, 224, 217, 79, 57, - 187, 128, 142, 243, 234, 27, 214, 48, 31, 171, 219, 87, 185, 178, 83, 157, 172, 211, 210, 53, - 116, 120, 14, 160, 6, 204, 160, 176, 166, 13, 24, 196, 250, 33, 190, 246, 81, 202, 113, 197, - 216, 177, 192, 146, 185, 13, 13, 233, 122, 190, 105, 250, 218, 29, 249, 133, 169, 165, 158, 118, - 89, 220, 190, 188, 225, 212, 217, 61, 136, 16, 235, 11, 178, 62, 26, 48, 62, 49, 138, 47, - 217, 144, 226, 141, 228, 202, 113, 37, 232, 175, 1, 243, 77, 62, 192, 212, 117, 56, 182, 13, - 40, 239, 158, 121, 18, 199, 46, 100, 27, 237, 193, 123, 49, 143, 78, 196, 249, 92, 232, 222, - 42, 110, 219, 134, 6, 204, 244, 88, 179, 65, 215, 51, 222, 160, 106, 125, 198, 47, 196, 44, - 79, 169, 133, 58, 31, 195, 177, 206, 254, 125, 194, 129, 83, 79, 229, 216, 174, 161, 226, 131, - 195, 177, 12, 113, 46, 125, 237, 145, 135, 161, 188, 53, 252, 112, 222, 174, 109, 136, 41, 156, - 83, 79, 191, 206, 224, 216, 117, 128, 6, 231, 100, 89, 40, 31, 11, 179, 210, 236, 83, 203, - 64, 15, 121, 245, 9, 107, 150, 15, 226, 9, 105, 170, 59, 130, 247, 239, 94, 121, 198, 158, - 33, 161, 195, 115, 0, 53, 96, 6, 133, 53, 108, 192, 32, 22, 177, 46, 91, 187, 194, 199, - 158, 213, 30, 147, 209, 7, 44, 145, 219, 24, 32, 93, 207, 89, 3, 198, 159, 194, 124, 155, - 95, 68, 76, 237, 190, 112, 57, 13, 196, 228, 60, 204, 199, 83, 159, 61, 67, 39, 6, 106, - 192, 76, 95, 247, 239, 162, 178, 70, 241, 183, 172, 108, 195, 251, 156, 65, 15, 13, 24, 196, - 53, 112, 234, 26, 204, 103, 165, 237, 228, 61, 143, 24, 130, 146, 60, 38, 199, 46, 100, 27, - 253, 27, 237, 228, 47, 72, 44, 204, 132, 234, 41, 214, 124, 213, 78, 239, 243, 231, 19, 1, - 248, 35, 162, 157, 16, 139, 218, 248, 35, 194, 84, 69, 139, 82, 13, 24, 223, 158, 127, 176, - 111, 202, 113, 77, 33, 166, 119, 99, 62, 110, 167, 244, 195, 143, 116, 107, 213, 187, 95, 117, - 58, 86, 132, 161, 252, 131, 211, 148, 79, 228, 112, 31, 62, 94, 23, 80, 126, 231, 228, 53, - 28, 187, 14, 80, 126, 78, 74, 223, 79, 117, 33, 38, 190, 72, 185, 55, 199, 182, 5, 229, - 121, 53, 117, 44, 31, 171, 15, 40, 207, 167, 181, 243, 212, 38, 68, 183, 221, 148, 90, 227, - 3, 177, 120, 78, 254, 148, 251, 241, 126, 218, 128, 242, 115, 48, 91, 152, 182, 73, 57, 0, - 105, 173, 253, 240, 55, 129, 242, 220, 71, 249, 254, 171, 11, 107, 214, 128, 65, 92, 196, 165, - 126, 215, 157, 247, 56, 25, 100, 97, 237, 101, 96, 65, 110, 99, 129, 116, 61, 207, 110, 192, - 76, 95, 191, 45, 191, 56, 85, 249, 187, 102, 175, 95, 147, 55, 152, 218, 52, 147, 162, 253, - 247, 139, 248, 69, 244, 212, 128, 153, 198, 220, 146, 95, 44, 120, 121, 113, 127, 69, 232, 167, - 1, 227, 11, 80, 166, 188, 145, 99, 219, 132, 152, 236, 43, 229, 66, 28, 91, 9, 243, 11, - 215, 204, 93, 60, 34, 62, 224, 169, 169, 232, 220, 179, 56, 190, 8, 49, 243, 128, 55, 10, - 202, 204, 53, 96, 28, 230, 31, 189, 61, 157, 99, 154, 64, 60, 222, 59, 131, 142, 225, 94, - 199, 177, 69, 136, 69, 223, 82, 238, 193, 177, 93, 66, 249, 7, 103, 85, 222, 8, 123, 62, - 122, 236, 14, 135, 24, 44, 153, 242, 100, 142, 93, 7, 40, 63, 39, 173, 253, 152, 32, 86, - 189, 77, 233, 108, 97, 85, 148, 231, 213, 212, 177, 124, 172, 62, 160, 155, 124, 238, 192, 199, - 105, 11, 202, 63, 39, 207, 224, 216, 42, 88, 173, 1, 179, 176, 175, 246, 42, 208, 205, 57, - 88, 164, 181, 31, 254, 38, 80, 158, 123, 107, 223, 19, 67, 194, 26, 53, 96, 16, 55, 92, - 63, 201, 47, 144, 199, 243, 62, 199, 2, 21, 185, 113, 236, 144, 144, 174, 103, 177, 1, 227, - 221, 163, 83, 221, 201, 253, 169, 216, 150, 197, 125, 21, 217, 107, 39, 243, 6, 230, 231, 40, - 172, 143, 134, 129, 27, 48, 211, 184, 212, 56, 156, 153, 228, 180, 209, 232, 167, 1, 83, 246, - 219, 242, 52, 142, 109, 19, 210, 99, 150, 220, 242, 51, 158, 33, 46, 226, 185, 113, 113, 88, - 34, 174, 172, 207, 218, 123, 57, 54, 197, 226, 238, 197, 27, 22, 148, 53, 96, 120, 97, 195, - 79, 112, 76, 19, 136, 39, 70, 41, 149, 211, 6, 35, 186, 95, 165, 166, 200, 251, 58, 199, - 118, 9, 229, 31, 156, 85, 121, 159, 76, 95, 45, 214, 215, 188, 41, 125, 172, 217, 38, 59, - 206, 157, 55, 86, 97, 147, 179, 251, 174, 174, 27, 148, 159, 147, 214, 126, 76, 16, 227, 208, - 82, 158, 205, 177, 109, 65, 121, 94, 77, 29, 203, 199, 234, 3, 186, 201, 167, 203, 6, 76, - 217, 231, 228, 104, 142, 173, 130, 213, 26, 48, 157, 60, 141, 69, 55, 231, 96, 145, 214, 126, - 248, 155, 64, 121, 238, 173, 125, 79, 12, 9, 235, 211, 128, 185, 168, 149, 183, 241, 63, 38, - 248, 24, 195, 107, 242, 126, 199, 0, 229, 185, 141, 234, 189, 132, 116, 61, 55, 53, 96, 166, - 49, 183, 230, 128, 169, 228, 44, 155, 136, 9, 23, 82, 238, 79, 113, 99, 104, 192, 120, 67, - 217, 23, 233, 76, 241, 177, 225, 187, 22, 227, 167, 219, 244, 209, 128, 41, 251, 109, 121, 48, - 199, 182, 201, 246, 255, 74, 62, 224, 212, 254, 28, 91, 202, 130, 47, 205, 91, 35, 61, 120, - 159, 87, 51, 159, 217, 155, 99, 83, 16, 173, 235, 178, 241, 51, 101, 13, 24, 110, 25, 254, - 156, 99, 154, 192, 252, 19, 30, 247, 25, 142, 75, 177, 184, 231, 240, 134, 83, 215, 231, 216, - 174, 160, 252, 131, 211, 6, 191, 235, 113, 99, 62, 102, 219, 80, 62, 171, 214, 195, 56, 118, - 29, 160, 252, 156, 180, 246, 99, 130, 88, 104, 48, 165, 242, 73, 104, 19, 40, 207, 171, 169, - 99, 249, 88, 125, 64, 55, 249, 116, 217, 128, 41, 251, 156, 212, 90, 112, 18, 171, 53, 96, - 42, 187, 112, 172, 10, 221, 156, 131, 69, 90, 251, 225, 111, 2, 229, 185, 183, 246, 61, 49, - 36, 172, 79, 3, 230, 205, 252, 15, 21, 124, 60, 198, 92, 215, 250, 161, 161, 60, 183, 81, - 189, 151, 144, 174, 231, 134, 6, 204, 52, 238, 43, 28, 132, 24, 207, 50, 215, 69, 223, 254, - 237, 99, 28, 136, 152, 128, 105, 195, 19, 27, 251, 255, 47, 228, 32, 244, 220, 128, 153, 198, - 250, 66, 196, 103, 113, 224, 212, 103, 65, 227, 125, 252, 255, 115, 208, 84, 107, 223, 99, 40, - 255, 109, 121, 40, 199, 182, 201, 246, 255, 50, 62, 224, 212, 242, 147, 210, 88, 240, 13, 105, - 227, 63, 112, 140, 67, 122, 112, 219, 183, 57, 174, 10, 202, 167, 1, 45, 107, 192, 240, 133, - 154, 143, 165, 105, 101, 32, 63, 202, 231, 12, 95, 234, 34, 4, 177, 128, 39, 143, 209, 113, - 245, 103, 81, 88, 17, 202, 63, 56, 109, 241, 89, 200, 150, 154, 5, 100, 85, 182, 255, 91, - 240, 65, 167, 58, 187, 24, 239, 18, 202, 207, 201, 220, 151, 217, 170, 144, 158, 242, 220, 169, - 11, 217, 146, 208, 77, 62, 75, 125, 119, 172, 194, 246, 125, 8, 31, 108, 234, 223, 56, 182, - 10, 212, 128, 105, 237, 135, 191, 9, 148, 231, 222, 218, 247, 196, 144, 176, 62, 13, 152, 186, - 42, 187, 151, 15, 1, 229, 185, 141, 234, 189, 132, 116, 61, 83, 13, 152, 178, 239, 186, 13, - 79, 155, 237, 255, 95, 143, 3, 166, 142, 44, 198, 77, 99, 71, 209, 128, 113, 40, 31, 195, - 234, 54, 116, 219, 66, 63, 13, 152, 178, 107, 176, 103, 114, 108, 155, 108, 255, 111, 229, 3, - 78, 85, 206, 204, 182, 1, 230, 187, 81, 125, 139, 99, 156, 253, 251, 63, 41, 206, 213, 90, - 255, 4, 243, 199, 154, 41, 107, 192, 92, 132, 3, 205, 133, 57, 110, 21, 72, 207, 228, 228, - 51, 250, 44, 221, 64, 178, 216, 119, 243, 14, 16, 23, 253, 115, 143, 2, 187, 128, 242, 15, - 206, 174, 136, 89, 139, 170, 138, 63, 58, 247, 41, 35, 15, 183, 242, 58, 148, 207, 123, 239, - 11, 89, 94, 157, 143, 221, 22, 219, 247, 149, 249, 128, 83, 173, 124, 185, 244, 13, 229, 231, - 36, 249, 101, 182, 10, 148, 47, 252, 213, 201, 133, 166, 67, 121, 94, 126, 71, 105, 199, 6, - 101, 144, 193, 177, 40, 207, 167, 137, 46, 27, 48, 101, 221, 6, 223, 194, 177, 85, 16, 93, - 134, 253, 71, 177, 172, 248, 164, 43, 236, 94, 188, 159, 54, 160, 155, 115, 176, 72, 107, 63, - 252, 77, 160, 60, 247, 214, 190, 39, 134, 132, 245, 109, 192, 120, 87, 49, 191, 78, 241, 217, - 161, 202, 220, 150, 247, 63, 36, 148, 231, 54, 170, 247, 18, 210, 245, 156, 107, 192, 56, 251, - 247, 47, 112, 32, 98, 13, 193, 77, 191, 23, 152, 95, 250, 195, 37, 199, 203, 216, 191, 189, - 128, 3, 209, 210, 53, 6, 210, 121, 185, 210, 191, 63, 210, 223, 179, 206, 111, 138, 223, 176, - 16, 215, 71, 3, 134, 31, 20, 204, 36, 215, 129, 108, 11, 202, 111, 166, 93, 128, 99, 75, - 97, 254, 98, 232, 243, 137, 24, 31, 243, 145, 242, 18, 142, 173, 130, 242, 59, 199, 101, 13, - 152, 212, 113, 47, 201, 113, 117, 33, 102, 56, 243, 11, 115, 86, 235, 14, 54, 230, 159, 94, - 205, 116, 54, 22, 161, 8, 43, 124, 112, 202, 32, 158, 40, 149, 189, 161, 62, 206, 241, 109, - 177, 125, 111, 131, 248, 209, 96, 62, 19, 218, 166, 65, 120, 235, 2, 45, 158, 147, 50, 182, - 175, 87, 243, 206, 167, 52, 141, 242, 146, 80, 158, 143, 175, 72, 236, 83, 60, 174, 82, 230, - 186, 56, 180, 5, 177, 54, 86, 106, 17, 221, 159, 114, 108, 19, 182, 191, 55, 240, 1, 176, - 234, 226, 98, 11, 160, 252, 28, 52, 126, 79, 65, 211, 40, 15, 10, 235, 219, 128, 185, 219, - 52, 222, 191, 7, 252, 55, 40, 197, 199, 191, 54, 190, 14, 105, 11, 202, 115, 27, 213, 123, - 9, 233, 122, 150, 53, 96, 14, 226, 192, 169, 71, 78, 95, 159, 240, 11, 83, 201, 9, 71, - 48, 190, 6, 204, 5, 16, 139, 187, 167, 248, 141, 244, 139, 76, 227, 250, 104, 192, 248, 53, - 216, 127, 243, 1, 16, 227, 114, 54, 116, 105, 107, 11, 34, 255, 212, 117, 223, 207, 56, 182, - 18, 230, 7, 240, 124, 49, 17, 227, 115, 116, 167, 126, 60, 223, 204, 177, 85, 80, 62, 77, - 94, 89, 3, 198, 255, 176, 108, 7, 142, 171, 11, 213, 171, 163, 182, 193, 191, 224, 58, 191, - 179, 140, 21, 62, 56, 85, 108, 187, 11, 35, 62, 60, 41, 151, 230, 248, 182, 216, 190, 63, - 207, 7, 155, 26, 213, 157, 174, 101, 160, 229, 115, 146, 130, 152, 97, 133, 105, 33, 203, 26, - 176, 134, 249, 88, 221, 190, 196, 149, 157, 90, 190, 207, 240, 2, 182, 175, 19, 120, 231, 232, - 104, 118, 69, 116, 120, 14, 160, 6, 204, 160, 176, 158, 13, 152, 99, 104, 155, 170, 137, 135, - 78, 65, 71, 107, 100, 212, 133, 242, 220, 70, 245, 94, 66, 186, 158, 201, 6, 140, 67, 44, - 205, 193, 124, 166, 84, 239, 65, 146, 26, 191, 124, 38, 74, 122, 208, 32, 102, 87, 101, 131, - 53, 96, 156, 189, 126, 117, 164, 111, 164, 59, 95, 215, 198, 199, 141, 119, 222, 128, 113, 136, - 241, 55, 41, 173, 47, 93, 226, 108, 191, 119, 229, 3, 77, 213, 106, 83, 248, 142, 110, 69, - 59, 248, 62, 199, 56, 196, 162, 54, 44, 25, 91, 6, 229, 235, 200, 148, 53, 96, 82, 93, - 200, 146, 111, 208, 101, 33, 102, 130, 72, 229, 210, 182, 78, 214, 78, 40, 194, 138, 31, 156, - 42, 182, 237, 99, 120, 103, 83, 157, 141, 133, 193, 252, 58, 68, 51, 254, 24, 127, 173, 22, - 233, 67, 7, 231, 164, 8, 229, 221, 48, 79, 229, 216, 54, 161, 227, 188, 250, 134, 53, 204, - 199, 234, 246, 4, 174, 236, 212, 82, 51, 65, 46, 3, 209, 157, 148, 169, 1, 211, 50, 116, - 152, 251, 24, 96, 253, 26, 48, 47, 226, 109, 156, 253, 251, 91, 56, 176, 96, 110, 177, 239, - 33, 160, 60, 183, 81, 189, 151, 144, 174, 103, 85, 3, 166, 172, 199, 78, 106, 209, 74, 87, - 58, 91, 34, 70, 216, 128, 113, 22, 243, 80, 222, 168, 192, 215, 40, 236, 171, 1, 115, 12, - 31, 96, 202, 111, 46, 183, 122, 13, 134, 232, 198, 92, 214, 69, 243, 118, 28, 95, 201, 54, - 184, 14, 237, 192, 167, 84, 158, 171, 48, 210, 179, 61, 184, 171, 114, 108, 10, 162, 53, 233, - 179, 120, 164, 148, 53, 96, 120, 160, 253, 159, 57, 166, 46, 84, 15, 160, 106, 211, 119, 248, - 216, 109, 67, 131, 15, 78, 25, 148, 127, 105, 60, 145, 99, 219, 130, 24, 179, 147, 122, 194, - 231, 54, 76, 135, 56, 118, 232, 224, 156, 204, 32, 62, 248, 223, 229, 29, 79, 117, 250, 119, - 66, 135, 121, 13, 1, 107, 152, 15, 98, 198, 200, 212, 196, 33, 238, 102, 28, 191, 10, 219, - 207, 107, 120, 199, 230, 238, 28, 215, 6, 116, 120, 14, 160, 6, 204, 160, 44, 143, 199, 114, - 98, 83, 215, 227, 216, 62, 160, 252, 239, 237, 124, 48, 241, 220, 53, 143, 67, 117, 87, 31, - 239, 118, 211, 217, 248, 208, 101, 161, 60, 183, 81, 189, 151, 144, 174, 103, 105, 3, 198, 217, - 235, 167, 242, 6, 37, 206, 64, 197, 205, 109, 123, 237, 121, 20, 239, 198, 208, 128, 241, 235, - 226, 247, 243, 134, 83, 254, 254, 186, 22, 255, 227, 84, 171, 223, 99, 136, 239, 203, 84, 151, - 46, 215, 234, 205, 107, 219, 223, 131, 248, 0, 83, 222, 115, 169, 94, 55, 108, 68, 223, 109, - 182, 87, 34, 46, 181, 98, 189, 251, 0, 199, 166, 160, 186, 225, 80, 214, 128, 225, 238, 109, - 167, 113, 76, 93, 40, 159, 135, 187, 11, 157, 78, 67, 140, 6, 31, 156, 50, 40, 95, 36, - 241, 249, 28, 219, 38, 148, 223, 233, 250, 39, 22, 172, 203, 179, 44, 212, 93, 225, 117, 5, - 232, 224, 156, 204, 160, 124, 223, 254, 193, 239, 116, 122, 79, 148, 31, 187, 113, 94, 67, 192, - 154, 230, 131, 242, 233, 236, 127, 139, 22, 38, 15, 177, 125, 188, 138, 119, 140, 233, 184, 128, - 182, 161, 195, 115, 0, 53, 96, 90, 133, 196, 192, 232, 42, 72, 207, 250, 228, 174, 194, 177, - 125, 64, 249, 223, 251, 227, 88, 144, 27, 170, 187, 250, 124, 31, 61, 116, 23, 175, 130, 242, - 220, 70, 245, 94, 66, 186, 158, 139, 26, 48, 7, 240, 6, 37, 42, 39, 26, 193, 72, 27, - 48, 206, 227, 172, 252, 146, 55, 158, 250, 9, 255, 195, 84, 235, 223, 99, 72, 63, 125, 119, - 62, 193, 83, 43, 221, 148, 109, 63, 87, 179, 242, 23, 218, 255, 76, 173, 49, 232, 155, 32, - 102, 119, 40, 154, 27, 8, 101, 255, 118, 41, 164, 103, 34, 115, 15, 231, 248, 34, 123, 253, - 138, 72, 47, 252, 56, 83, 214, 128, 225, 1, 165, 47, 230, 152, 58, 176, 252, 135, 161, 45, - 239, 227, 58, 180, 9, 13, 63, 56, 41, 40, 239, 66, 214, 245, 170, 172, 123, 96, 126, 65, - 213, 25, 127, 127, 238, 199, 219, 212, 97, 219, 223, 204, 202, 239, 209, 241, 250, 50, 232, 224, - 156, 56, 148, 119, 201, 112, 143, 225, 248, 182, 161, 163, 188, 134, 130, 53, 205, 199, 234, 119, - 25, 148, 127, 15, 251, 19, 238, 93, 120, 155, 58, 144, 94, 92, 172, 213, 59, 112, 51, 232, - 240, 28, 64, 13, 152, 214, 32, 158, 252, 126, 17, 53, 26, 178, 40, 31, 175, 117, 113, 142, - 237, 3, 202, 255, 222, 75, 13, 198, 183, 184, 135, 240, 134, 5, 175, 224, 248, 62, 161, 60, - 183, 81, 189, 151, 144, 174, 103, 101, 3, 198, 89, 204, 39, 120, 35, 226, 23, 249, 149, 131, - 205, 237, 245, 231, 242, 70, 24, 73, 3, 198, 89, 236, 13, 80, 254, 116, 61, 165, 245, 239, - 49, 196, 53, 254, 89, 124, 160, 169, 223, 161, 249, 53, 216, 101, 81, 62, 124, 195, 199, 245, - 46, 63, 251, 88, 17, 230, 87, 162, 253, 24, 199, 56, 148, 223, 85, 113, 254, 195, 183, 225, - 14, 32, 98, 176, 213, 145, 168, 110, 188, 184, 185, 6, 140, 253, 219, 14, 152, 111, 169, 221, - 132, 227, 234, 176, 237, 223, 69, 251, 115, 127, 181, 178, 59, 230, 103, 20, 170, 91, 82, 93, - 236, 124, 221, 154, 61, 185, 30, 109, 65, 11, 31, 156, 34, 219, 110, 123, 196, 130, 81, 41, - 115, 115, 171, 183, 205, 142, 241, 40, 62, 104, 129, 207, 8, 115, 119, 148, 60, 234, 47, 99, - 241, 23, 68, 44, 58, 234, 231, 194, 249, 255, 118, 210, 167, 223, 161, 253, 115, 178, 165, 149, - 87, 240, 206, 10, 188, 75, 89, 229, 29, 196, 54, 160, 229, 188, 134, 134, 53, 206, 7, 229, - 221, 115, 156, 63, 137, 89, 105, 224, 37, 98, 118, 198, 211, 104, 127, 78, 13, 152, 150, 161, - 195, 220, 219, 134, 141, 55, 79, 158, 137, 5, 179, 67, 34, 46, 198, 82, 254, 200, 177, 125, - 65, 11, 127, 111, 139, 125, 47, 111, 92, 112, 40, 199, 247, 5, 45, 228, 214, 7, 164, 235, - 185, 76, 3, 230, 186, 188, 17, 89, 56, 75, 34, 70, 222, 128, 113, 22, 255, 20, 222, 65, - 133, 78, 190, 199, 108, 191, 15, 228, 3, 21, 252, 19, 43, 142, 237, 182, 237, 142, 192, 252, - 245, 252, 140, 95, 147, 221, 156, 183, 89, 26, 230, 167, 82, 246, 150, 224, 101, 19, 113, 126, - 129, 251, 3, 138, 101, 222, 95, 212, 103, 143, 240, 65, 58, 158, 112, 10, 79, 217, 118, 251, - 196, 177, 120, 149, 78, 159, 223, 123, 229, 89, 63, 16, 141, 148, 84, 11, 183, 149, 187, 39, - 182, 159, 195, 120, 199, 83, 47, 228, 216, 182, 160, 165, 15, 142, 179, 109, 246, 65, 117, 247, - 186, 43, 241, 54, 109, 67, 244, 7, 125, 31, 31, 152, 248, 157, 189, 155, 99, 193, 69, 187, - 189, 126, 9, 196, 192, 180, 84, 227, 217, 199, 219, 28, 198, 219, 180, 1, 45, 157, 19, 196, - 223, 226, 118, 86, 190, 71, 251, 41, 242, 71, 187, 87, 228, 109, 187, 128, 150, 242, 26, 11, - 172, 113, 62, 136, 247, 198, 7, 184, 226, 228, 29, 88, 178, 187, 142, 197, 237, 98, 229, 105, - 136, 155, 57, 41, 119, 225, 109, 218, 128, 14, 207, 1, 212, 128, 105, 5, 98, 124, 226, 89, - 84, 199, 239, 35, 38, 255, 153, 187, 235, 109, 255, 118, 99, 196, 76, 81, 41, 239, 224, 248, - 190, 160, 133, 191, 55, 226, 166, 106, 106, 6, 72, 231, 57, 143, 237, 233, 210, 210, 185, 245, - 1, 233, 122, 46, 108, 192, 56, 139, 251, 8, 111, 56, 245, 99, 36, 222, 135, 12, 113, 19, - 147, 141, 173, 1, 227, 79, 58, 63, 205, 59, 41, 209, 217, 247, 24, 202, 187, 243, 207, 248, - 245, 253, 129, 188, 93, 10, 98, 186, 235, 178, 115, 55, 211, 172, 119, 15, 98, 141, 1, 254, - 146, 74, 78, 103, 134, 232, 194, 224, 143, 147, 86, 229, 23, 168, 252, 7, 250, 119, 58, 70, - 106, 144, 79, 233, 12, 19, 203, 64, 122, 22, 10, 183, 212, 36, 4, 139, 32, 102, 139, 72, - 245, 99, 252, 51, 86, 125, 52, 182, 0, 202, 63, 56, 126, 129, 239, 119, 45, 170, 138, 15, - 214, 247, 105, 173, 31, 143, 152, 18, 50, 213, 184, 155, 249, 58, 31, 187, 43, 136, 247, 226, - 231, 184, 2, 9, 222, 154, 63, 9, 49, 179, 157, 63, 222, 191, 167, 149, 71, 91, 121, 17, - 162, 145, 51, 123, 226, 82, 198, 27, 107, 91, 240, 241, 155, 66, 249, 57, 217, 207, 202, 158, - 21, 101, 111, 196, 202, 194, 183, 183, 242, 82, 196, 148, 144, 85, 124, 192, 221, 45, 249, 248, - 93, 193, 234, 121, 45, 91, 246, 224, 99, 118, 9, 229, 249, 212, 250, 209, 25, 10, 226, 233, - 246, 50, 159, 19, 95, 219, 201, 167, 141, 191, 37, 226, 38, 197, 110, 211, 255, 189, 17, 226, - 73, 142, 63, 57, 174, 250, 236, 187, 35, 248, 248, 109, 64, 135, 231, 0, 106, 192, 180, 2, - 213, 55, 148, 126, 133, 24, 147, 245, 44, 68, 239, 12, 239, 102, 86, 101, 237, 159, 82, 32, - 190, 163, 253, 6, 88, 202, 201, 168, 217, 67, 160, 13, 40, 207, 109, 130, 88, 0, 183, 110, - 105, 212, 13, 181, 12, 210, 245, 92, 182, 1, 115, 45, 222, 112, 106, 169, 222, 20, 88, 131, - 6, 140, 67, 116, 227, 74, 221, 116, 101, 157, 125, 143, 33, 102, 234, 93, 212, 232, 112, 167, - 91, 121, 177, 149, 59, 89, 57, 16, 49, 233, 150, 255, 175, 255, 127, 255, 155, 252, 240, 156, - 208, 82, 175, 67, 27, 159, 25, 164, 187, 135, 109, 90, 17, 180, 8, 49, 94, 161, 108, 26, - 180, 42, 31, 70, 172, 237, 226, 221, 202, 152, 255, 144, 62, 27, 233, 89, 39, 188, 15, 228, - 202, 73, 34, 126, 236, 255, 68, 251, 116, 115, 139, 118, 54, 129, 242, 245, 101, 30, 204, 177, - 109, 64, 249, 7, 167, 109, 115, 93, 252, 186, 132, 232, 246, 117, 10, 213, 161, 77, 254, 30, - 235, 100, 64, 63, 250, 57, 39, 254, 100, 243, 112, 62, 118, 151, 208, 125, 94, 255, 226, 99, - 118, 9, 229, 249, 212, 254, 209, 25, 10, 226, 115, 178, 168, 127, 120, 83, 126, 177, 214, 201, - 231, 31, 29, 158, 3, 168, 1, 211, 24, 226, 142, 112, 91, 239, 47, 111, 220, 172, 252, 27, - 222, 20, 90, 252, 123, 35, 110, 250, 149, 121, 40, 199, 119, 13, 229, 185, 173, 234, 4, 62, - 70, 27, 144, 174, 231, 82, 13, 24, 135, 249, 233, 147, 253, 2, 122, 225, 211, 23, 135, 184, - 182, 100, 163, 107, 192, 56, 204, 47, 109, 146, 210, 233, 247, 24, 226, 58, 61, 53, 228, 162, - 77, 47, 65, 131, 94, 85, 27, 216, 142, 118, 198, 252, 202, 179, 191, 176, 178, 19, 199, 58, - 196, 157, 114, 239, 118, 112, 214, 198, 77, 146, 188, 171, 203, 227, 48, 189, 227, 109, 255, 187, - 29, 202, 31, 51, 179, 175, 160, 225, 197, 166, 109, 255, 96, 222, 233, 212, 221, 57, 182, 9, - 196, 143, 102, 234, 238, 140, 183, 68, 91, 255, 242, 70, 249, 7, 167, 77, 143, 227, 227, 246, - 1, 49, 246, 195, 223, 224, 109, 242, 59, 205, 254, 69, 182, 212, 151, 222, 42, 208, 253, 57, - 249, 153, 149, 253, 249, 184, 93, 67, 247, 121, 169, 1, 179, 2, 196, 231, 228, 56, 78, 162, - 37, 223, 64, 195, 129, 155, 85, 208, 225, 57, 128, 26, 48, 173, 64, 116, 27, 47, 91, 104, - 120, 89, 126, 243, 112, 174, 75, 122, 159, 208, 226, 223, 27, 177, 176, 119, 89, 195, 206, 111, - 46, 117, 222, 221, 186, 8, 229, 185, 173, 234, 4, 62, 70, 27, 144, 174, 103, 157, 6, 140, - 247, 82, 240, 110, 225, 179, 114, 93, 142, 41, 131, 53, 106, 192, 56, 44, 190, 246, 233, 252, - 123, 12, 241, 62, 247, 155, 242, 169, 107, 218, 38, 188, 61, 208, 254, 178, 15, 136, 46, 56, - 236, 11, 86, 182, 227, 216, 25, 196, 98, 147, 247, 71, 60, 106, 246, 254, 136, 222, 160, 241, - 49, 46, 254, 120, 249, 163, 136, 233, 151, 231, 78, 36, 162, 175, 172, 39, 82, 229, 141, 86, - 182, 231, 109, 235, 64, 244, 23, 79, 205, 227, 238, 143, 233, 182, 225, 248, 166, 108, 159, 239, - 225, 3, 77, 173, 62, 72, 169, 4, 202, 63, 56, 109, 240, 47, 226, 7, 242, 49, 251, 102, - 117, 56, 24, 233, 243, 87, 215, 87, 173, 92, 139, 247, 223, 54, 116, 119, 78, 252, 75, 196, - 7, 243, 55, 106, 204, 175, 10, 221, 229, 53, 163, 6, 76, 3, 136, 233, 207, 171, 198, 75, - 213, 113, 166, 149, 251, 160, 173, 187, 99, 37, 208, 225, 57, 128, 26, 48, 173, 65, 220, 172, - 60, 145, 43, 186, 36, 239, 110, 126, 29, 222, 103, 223, 208, 242, 223, 219, 182, 187, 56, 98, - 194, 140, 148, 111, 163, 238, 122, 22, 13, 160, 60, 183, 85, 157, 192, 199, 104, 3, 210, 245, - 92, 186, 1, 211, 4, 162, 155, 35, 27, 115, 3, 102, 107, 196, 13, 164, 50, 189, 125, 143, - 33, 186, 239, 149, 205, 42, 88, 151, 119, 77, 219, 155, 143, 209, 10, 196, 56, 142, 207, 210, - 1, 157, 247, 181, 94, 249, 100, 148, 65, 140, 167, 241, 217, 203, 124, 26, 60, 159, 103, 221, - 199, 53, 248, 172, 74, 62, 6, 160, 149, 139, 77, 219, 207, 33, 179, 36, 72, 39, 131, 235, - 17, 23, 220, 41, 39, 115, 108, 83, 40, 255, 224, 52, 225, 231, 225, 77, 232, 121, 76, 66, - 21, 196, 93, 102, 31, 227, 242, 245, 13, 53, 93, 206, 167, 16, 19, 44, 180, 254, 4, 44, - 5, 237, 159, 19, 255, 76, 120, 195, 165, 155, 15, 253, 146, 208, 126, 94, 76, 13, 152, 134, - 16, 223, 223, 71, 96, 241, 88, 132, 20, 127, 58, 233, 55, 156, 238, 128, 14, 159, 80, 22, - 161, 195, 115, 0, 53, 96, 90, 103, 117, 187, 13, 150, 235, 215, 238, 124, 12, 162, 79, 36, - 209, 201, 120, 138, 186, 208, 193, 223, 219, 182, 61, 8, 229, 99, 45, 143, 227, 248, 174, 160, - 60, 183, 85, 157, 192, 199, 104, 3, 210, 245, 84, 3, 166, 4, 226, 137, 19, 247, 138, 154, - 233, 245, 123, 12, 241, 32, 192, 187, 182, 157, 130, 242, 247, 124, 25, 31, 175, 235, 51, 248, - 77, 120, 191, 173, 67, 204, 222, 196, 235, 194, 56, 127, 186, 210, 202, 130, 130, 125, 66, 122, - 122, 99, 215, 201, 5, 33, 226, 177, 155, 55, 200, 82, 46, 199, 241, 77, 160, 252, 131, 179, - 12, 191, 163, 239, 221, 248, 124, 70, 25, 191, 200, 247, 133, 158, 188, 177, 215, 232, 137, 87, - 215, 172, 126, 151, 179, 242, 80, 196, 212, 223, 126, 135, 194, 159, 164, 249, 19, 63, 255, 144, - 248, 127, 127, 19, 177, 178, 178, 79, 7, 184, 59, 111, 223, 53, 172, 126, 78, 188, 254, 62, - 225, 131, 63, 109, 242, 193, 160, 62, 93, 169, 79, 198, 80, 57, 101, 105, 95, 176, 122, 94, - 203, 82, 3, 166, 69, 136, 113, 138, 254, 25, 120, 51, 162, 27, 174, 127, 214, 253, 169, 170, - 55, 84, 252, 71, 241, 76, 43, 159, 68, 12, 194, 188, 163, 149, 29, 120, 31, 93, 67, 135, - 231, 0, 106, 192, 116, 2, 113, 33, 227, 79, 251, 188, 254, 126, 87, 214, 191, 115, 253, 187, - 203, 223, 91, 222, 189, 213, 191, 187, 124, 114, 136, 209, 220, 0, 115, 211, 250, 166, 52, 250, - 123, 35, 221, 53, 105, 230, 96, 142, 239, 2, 202, 115, 91, 213, 9, 124, 140, 54, 32, 93, - 207, 190, 26, 48, 254, 123, 202, 70, 221, 128, 113, 136, 27, 183, 41, 131, 125, 143, 33, 134, - 155, 220, 219, 202, 107, 17, 61, 180, 188, 189, 224, 107, 248, 205, 126, 91, 124, 232, 201, 105, - 136, 7, 17, 190, 24, 253, 133, 121, 31, 157, 66, 204, 68, 241, 71, 204, 243, 11, 197, 167, - 162, 133, 85, 191, 17, 51, 15, 181, 242, 148, 69, 68, 68, 68, 68, 68, 54, 115, 214, 184, - 216, 23, 229, 125, 60, 189, 197, 229, 51, 113, 92, 140, 183, 91, 4, 177, 95, 111, 185, 249, - 93, 27, 95, 219, 101, 91, 142, 17, 17, 17, 17, 17, 17, 169, 13, 241, 148, 164, 106, 96, - 168, 63, 50, 242, 133, 119, 124, 166, 130, 91, 32, 186, 247, 248, 212, 158, 231, 69, 204, 37, - 237, 43, 59, 251, 154, 3, 254, 24, 233, 5, 72, 15, 198, 126, 22, 31, 87, 68, 68, 68, - 68, 68, 100, 37, 214, 192, 56, 159, 149, 151, 163, 254, 192, 157, 101, 157, 133, 1, 250, 95, - 139, 136, 136, 136, 136, 72, 198, 172, 145, 113, 77, 196, 211, 150, 54, 249, 66, 57, 123, 242, - 177, 68, 68, 68, 68, 68, 68, 90, 129, 152, 19, 250, 245, 72, 15, 242, 95, 134, 47, 106, - 229, 79, 116, 246, 229, 125, 139, 136, 136, 136, 136, 136, 116, 2, 49, 206, 101, 98, 229, 49, - 136, 249, 222, 125, 170, 78, 31, 244, 239, 235, 136, 56, 239, 114, 230, 141, 28, 159, 126, 217, - 167, 86, 124, 50, 98, 141, 148, 214, 23, 143, 20, 17, 17, 17, 17, 17, 89, 153, 53, 82, - 182, 64, 199, 171, 56, 139, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 36, 1, 56, - 29, 27, 253, 144, 99, 68, 68, 68, 68, 68, 68, 70, 193, 26, 44, 79, 167, 6, 140, 187, - 42, 199, 137, 136, 136, 136, 136, 136, 12, 206, 26, 43, 87, 225, 214, 139, 121, 6, 199, 137, - 136, 136, 136, 136, 72, 102, 236, 194, 127, 123, 110, 9, 84, 248, 54, 111, 63, 20, 171, 203, - 15, 168, 110, 63, 230, 152, 117, 99, 57, 156, 159, 114, 170, 114, 58, 111, 47, 34, 34, 34, - 34, 146, 61, 172, 111, 3, 230, 41, 92, 57, 179, 47, 199, 173, 19, 168, 1, 35, 109, 179, - 55, 202, 241, 252, 206, 89, 210, 89, 86, 126, 97, 229, 27, 86, 222, 104, 229, 65, 86, 246, - 230, 253, 143, 129, 213, 107, 87, 43, 247, 179, 114, 130, 149, 207, 91, 249, 149, 149, 191, 89, - 249, 87, 33, 143, 79, 91, 121, 185, 149, 187, 90, 185, 8, 239, 163, 79, 88, 253, 156, 252, - 143, 149, 63, 89, 249, 190, 149, 15, 34, 190, 4, 111, 104, 229, 60, 124, 140, 49, 176, 122, - 109, 101, 229, 48, 43, 207, 183, 114, 170, 149, 159, 78, 235, 239, 121, 252, 30, 49, 152, 241, - 11, 86, 94, 101, 229, 222, 86, 246, 225, 125, 244, 197, 142, 253, 66, 244, 231, 8, 62, 126, - 91, 108, 223, 19, 62, 216, 212, 145, 28, 187, 10, 219, 207, 63, 121, 199, 230, 221, 28, 215, - 148, 237, 243, 109, 124, 144, 169, 7, 114, 108, 19, 182, 191, 93, 172, 252, 31, 31, 196, 156, - 198, 177, 41, 22, 247, 94, 222, 112, 234, 30, 28, 91, 135, 109, 127, 40, 239, 112, 234, 69, - 28, 91, 7, 34, 223, 148, 247, 115, 108, 25, 139, 221, 221, 202, 95, 121, 7, 83, 199, 114, - 124, 29, 182, 253, 135, 121, 135, 83, 254, 93, 177, 45, 199, 55, 101, 251, 124, 39, 31, 8, - 145, 219, 206, 28, 187, 10, 219, 207, 211, 120, 231, 83, 7, 114, 108, 27, 16, 191, 113, 125, - 249, 53, 31, 191, 111, 88, 223, 6, 204, 62, 92, 57, 243, 28, 142, 91, 39, 80, 3, 70, - 218, 134, 213, 47, 150, 203, 120, 67, 224, 112, 62, 78, 223, 172, 14, 231, 177, 114, 39, 43, - 159, 219, 88, 189, 165, 120, 195, 198, 127, 40, 15, 230, 253, 246, 1, 237, 159, 19, 111, 12, - 60, 211, 202, 78, 124, 172, 33, 88, 61, 118, 64, 52, 8, 254, 184, 161, 150, 203, 249, 182, - 149, 135, 90, 217, 145, 247, 219, 37, 168, 1, 179, 20, 244, 215, 128, 185, 49, 31, 100, 234, - 203, 28, 219, 132, 237, 239, 241, 124, 128, 169, 187, 114, 108, 138, 197, 29, 193, 27, 78, 189, - 147, 99, 235, 64, 52, 234, 83, 126, 194, 177, 117, 216, 246, 15, 228, 29, 78, 221, 141, 99, - 171, 88, 252, 125, 120, 7, 83, 126, 115, 226, 26, 28, 191, 12, 219, 238, 40, 222, 217, 148, - 127, 95, 239, 207, 241, 109, 176, 253, 238, 133, 168, 51, 123, 3, 199, 214, 133, 104, 44, 254, - 131, 119, 108, 62, 200, 177, 109, 129, 26, 48, 85, 70, 211, 128, 113, 86, 159, 239, 80, 253, - 206, 228, 152, 117, 2, 53, 96, 164, 109, 104, 255, 98, 121, 230, 255, 179, 119, 31, 224, 210, - 20, 85, 250, 192, 255, 168, 228, 100, 6, 3, 242, 25, 81, 81, 49, 103, 113, 204, 186, 42, - 38, 204, 168, 136, 57, 139, 9, 211, 10, 230, 156, 48, 43, 230, 184, 98, 206, 89, 86, 193, - 136, 57, 71, 48, 231, 180, 171, 238, 186, 171, 251, 254, 207, 249, 170, 7, 251, 190, 83, 93, - 211, 61, 213, 213, 211, 51, 243, 254, 158, 167, 30, 62, 238, 173, 238, 234, 115, 103, 166, 167, - 78, 119, 85, 245, 251, 173, 236, 207, 237, 13, 193, 218, 189, 190, 149, 111, 209, 241, 44, 234, - 68, 12, 188, 2, 8, 202, 189, 38, 158, 48, 180, 234, 120, 149, 130, 208, 161, 91, 36, 113, - 97, 126, 7, 237, 81, 86, 118, 230, 54, 74, 128, 18, 152, 86, 48, 92, 2, 179, 131, 149, - 31, 114, 67, 149, 94, 238, 212, 33, 180, 241, 3, 222, 57, 194, 251, 119, 87, 174, 31, 99, - 245, 246, 66, 252, 111, 226, 87, 241, 23, 122, 239, 34, 28, 215, 207, 105, 127, 117, 7, 242, - 54, 109, 33, 156, 183, 217, 223, 172, 156, 145, 235, 206, 99, 219, 188, 151, 119, 84, 241, 241, - 253, 187, 113, 253, 20, 171, 127, 97, 43, 127, 165, 253, 76, 61, 145, 235, 247, 201, 246, 255, - 66, 110, 16, 225, 174, 220, 21, 184, 110, 23, 182, 253, 27, 121, 167, 230, 31, 86, 46, 193, - 117, 251, 2, 37, 48, 238, 247, 86, 30, 18, 41, 135, 243, 246, 203, 100, 199, 115, 244, 63, - 15, 249, 52, 87, 228, 122, 171, 194, 142, 125, 71, 204, 254, 205, 189, 60, 182, 22, 223, 148, - 18, 24, 153, 15, 229, 58, 203, 206, 191, 100, 47, 196, 109, 150, 98, 109, 237, 98, 229, 69, - 116, 12, 125, 248, 31, 43, 15, 183, 178, 3, 183, 89, 2, 202, 190, 38, 238, 241, 220, 230, - 16, 16, 18, 142, 190, 249, 208, 145, 51, 113, 91, 125, 131, 18, 152, 86, 16, 239, 172, 247, - 158, 192, 56, 52, 191, 159, 158, 193, 117, 23, 97, 251, 185, 58, 239, 184, 114, 44, 215, 77, - 65, 243, 48, 178, 235, 115, 221, 54, 108, 187, 203, 242, 142, 200, 195, 121, 155, 54, 108, 187, - 221, 17, 191, 35, 208, 122, 248, 88, 157, 109, 183, 175, 149, 223, 242, 206, 42, 47, 228, 250, - 77, 16, 58, 62, 159, 231, 29, 84, 190, 100, 101, 71, 222, 166, 79, 182, 255, 179, 35, 62, - 36, 206, 135, 35, 47, 244, 157, 96, 219, 93, 137, 119, 86, 121, 21, 215, 237, 19, 148, 192, - 184, 83, 185, 222, 24, 33, 36, 237, 236, 89, 92, 111, 213, 33, 156, 39, 152, 18, 24, 153, - 15, 229, 59, 203, 62, 191, 164, 248, 208, 37, 132, 97, 73, 39, 81, 219, 125, 123, 189, 149, - 157, 184, 237, 190, 161, 252, 107, 226, 122, 157, 43, 48, 143, 181, 119, 8, 31, 64, 79, 62, - 203, 109, 149, 0, 37, 48, 173, 96, 216, 4, 230, 156, 8, 195, 135, 152, 207, 113, 203, 158, - 247, 133, 48, 103, 46, 166, 211, 29, 30, 52, 15, 35, 123, 62, 215, 109, 3, 241, 43, 150, - 117, 39, 241, 54, 109, 216, 118, 55, 229, 29, 85, 22, 190, 107, 107, 219, 222, 146, 119, 86, - 211, 42, 129, 179, 122, 79, 224, 13, 43, 254, 94, 235, 244, 90, 44, 202, 218, 121, 12, 55, - 94, 233, 252, 183, 65, 184, 131, 230, 201, 15, 243, 228, 113, 63, 174, 223, 39, 12, 155, 192, - 180, 78, 82, 75, 193, 10, 39, 48, 206, 142, 245, 171, 116, 236, 63, 193, 130, 73, 243, 88, - 65, 9, 140, 44, 10, 205, 157, 229, 203, 89, 185, 64, 67, 185, 160, 149, 75, 91, 185, 182, - 149, 7, 33, 12, 21, 136, 117, 36, 166, 94, 198, 237, 246, 201, 246, 127, 38, 132, 43, 113, - 243, 248, 213, 250, 231, 89, 185, 131, 149, 235, 34, 196, 120, 61, 43, 119, 66, 56, 177, 251, - 36, 242, 121, 222, 142, 30, 58, 71, 41, 88, 236, 53, 241, 114, 81, 43, 87, 68, 152, 251, - 227, 19, 227, 253, 100, 215, 196, 135, 133, 156, 151, 219, 46, 1, 225, 10, 170, 119, 42, 155, - 248, 112, 12, 159, 59, 117, 172, 149, 71, 88, 57, 10, 33, 97, 240, 43, 215, 62, 169, 63, - 229, 86, 220, 94, 9, 214, 206, 89, 49, 251, 247, 110, 42, 62, 188, 141, 125, 12, 179, 245, - 154, 202, 30, 220, 126, 95, 176, 70, 9, 140, 67, 243, 221, 141, 27, 113, 221, 46, 16, 198, - 107, 255, 153, 119, 138, 5, 146, 3, 52, 15, 35, 251, 17, 215, 109, 195, 182, 251, 2, 239, - 136, 248, 48, 164, 206, 11, 145, 216, 54, 199, 241, 142, 16, 206, 19, 123, 115, 221, 46, 108, - 251, 55, 240, 78, 43, 126, 135, 254, 44, 92, 191, 14, 225, 78, 69, 211, 119, 203, 131, 185, - 126, 41, 8, 119, 167, 98, 195, 246, 252, 103, 157, 62, 175, 86, 255, 246, 188, 147, 202, 211, - 184, 110, 223, 172, 141, 179, 97, 246, 124, 179, 104, 185, 38, 226, 159, 17, 247, 113, 20, 190, - 51, 214, 6, 86, 63, 129, 137, 221, 101, 190, 10, 215, 91, 101, 80, 2, 35, 139, 66, 115, - 103, 185, 211, 36, 105, 132, 149, 103, 62, 204, 59, 169, 248, 23, 234, 1, 188, 77, 31, 16, - 38, 235, 159, 64, 237, 177, 143, 91, 57, 152, 183, 141, 65, 152, 63, 115, 242, 214, 205, 103, - 188, 136, 183, 235, 19, 250, 123, 77, 78, 103, 229, 238, 86, 254, 131, 246, 51, 245, 10, 222, - 166, 4, 52, 175, 152, 228, 222, 109, 229, 60, 188, 205, 148, 253, 238, 244, 86, 174, 108, 229, - 229, 152, 29, 3, 127, 170, 149, 211, 243, 54, 203, 134, 248, 151, 250, 66, 195, 112, 250, 134, - 245, 75, 96, 110, 204, 141, 85, 222, 194, 117, 187, 176, 237, 143, 224, 29, 86, 58, 77, 102, - 159, 66, 115, 162, 213, 105, 190, 3, 194, 93, 167, 216, 170, 104, 172, 211, 113, 162, 121, 94, - 205, 187, 185, 110, 87, 8, 23, 152, 126, 198, 59, 174, 28, 207, 245, 167, 16, 146, 72, 191, - 232, 20, 227, 171, 22, 158, 142, 183, 41, 9, 225, 92, 26, 243, 36, 174, 219, 196, 234, 238, - 106, 229, 199, 188, 3, 132, 121, 25, 157, 231, 25, 45, 11, 66, 66, 247, 101, 138, 97, 202, - 231, 141, 37, 19, 211, 161, 96, 245, 19, 24, 79, 20, 89, 167, 33, 172, 99, 7, 37, 48, - 178, 40, 244, 212, 89, 118, 8, 201, 196, 123, 120, 71, 149, 163, 184, 126, 31, 108, 191, 79, - 230, 134, 106, 252, 74, 248, 66, 195, 113, 108, 187, 7, 163, 249, 202, 159, 187, 61, 111, 211, - 23, 244, 248, 154, 56, 219, 238, 106, 136, 119, 44, 61, 177, 217, 133, 235, 247, 13, 241, 73, - 176, 238, 20, 116, 152, 200, 108, 117, 207, 140, 48, 177, 113, 154, 32, 28, 201, 117, 198, 160, - 118, 124, 117, 74, 96, 10, 64, 72, 112, 127, 202, 13, 34, 220, 57, 56, 51, 215, 111, 11, - 225, 142, 32, 107, 61, 121, 159, 161, 121, 24, 217, 35, 185, 110, 10, 226, 157, 232, 239, 242, - 15, 208, 49, 129, 67, 243, 188, 154, 59, 112, 221, 69, 32, 220, 233, 110, 18, 29, 134, 133, - 230, 149, 214, 252, 188, 181, 141, 235, 151, 134, 240, 94, 251, 38, 29, 139, 243, 247, 252, 249, - 184, 126, 12, 154, 135, 162, 13, 118, 55, 41, 23, 66, 178, 27, 91, 94, 218, 249, 107, 179, - 240, 34, 18, 125, 195, 138, 39, 48, 206, 142, 247, 139, 116, 252, 126, 161, 97, 208, 228, 189, - 36, 40, 129, 145, 69, 161, 255, 206, 178, 95, 33, 140, 13, 161, 57, 129, 235, 230, 178, 125, - 30, 132, 248, 18, 151, 206, 175, 248, 101, 157, 72, 109, 251, 107, 32, 222, 25, 117, 62, 57, - 117, 161, 191, 209, 60, 232, 249, 53, 113, 182, 237, 51, 120, 103, 149, 171, 114, 221, 190, 161, - 249, 234, 243, 75, 184, 110, 27, 182, 221, 57, 172, 188, 192, 202, 94, 252, 187, 49, 64, 252, - 61, 163, 4, 166, 16, 196, 31, 250, 230, 238, 203, 117, 219, 64, 252, 170, 167, 91, 248, 202, - 39, 154, 135, 145, 125, 154, 235, 166, 32, 220, 177, 100, 62, 28, 150, 121, 71, 178, 245, 124, - 61, 196, 231, 213, 248, 241, 246, 246, 25, 67, 243, 2, 43, 127, 2, 221, 133, 69, 122, 206, - 92, 214, 51, 116, 114, 160, 249, 184, 222, 206, 117, 25, 194, 119, 99, 236, 220, 224, 67, 151, - 91, 95, 200, 89, 54, 52, 207, 73, 242, 145, 22, 89, 67, 55, 251, 134, 245, 72, 96, 124, - 72, 53, 187, 58, 215, 91, 85, 80, 2, 35, 139, 66, 153, 206, 114, 236, 33, 115, 191, 229, - 122, 185, 208, 188, 76, 167, 207, 155, 232, 52, 52, 163, 137, 237, 231, 95, 208, 124, 39, 166, - 151, 213, 142, 24, 202, 188, 38, 254, 60, 131, 152, 123, 115, 221, 190, 33, 126, 53, 219, 21, - 157, 27, 181, 44, 136, 119, 82, 148, 192, 20, 98, 251, 223, 134, 248, 176, 170, 133, 158, 9, - 131, 230, 135, 11, 102, 77, 24, 71, 60, 145, 247, 78, 223, 217, 185, 110, 12, 194, 240, 35, - 30, 70, 249, 221, 234, 119, 124, 149, 214, 93, 151, 247, 209, 4, 241, 121, 53, 239, 226, 122, - 57, 16, 134, 29, 53, 13, 9, 251, 56, 170, 201, 201, 8, 171, 126, 253, 122, 235, 175, 79, - 83, 244, 189, 212, 6, 194, 240, 181, 152, 107, 113, 221, 58, 52, 47, 10, 209, 203, 93, 174, - 33, 216, 177, 222, 134, 15, 190, 230, 97, 92, 127, 217, 176, 30, 9, 140, 15, 207, 103, 47, - 224, 122, 171, 10, 107, 146, 192, 32, 60, 114, 131, 173, 244, 195, 71, 71, 15, 101, 58, 203, - 15, 224, 157, 33, 116, 48, 122, 155, 175, 128, 48, 97, 189, 201, 77, 184, 126, 14, 132, 137, - 229, 49, 222, 81, 237, 237, 10, 229, 20, 10, 188, 38, 206, 182, 255, 13, 239, 208, 60, 150, - 235, 245, 13, 241, 171, 198, 206, 199, 130, 47, 125, 162, 103, 223, 160, 4, 134, 21, 239, 116, - 90, 27, 31, 228, 70, 43, 157, 146, 14, 132, 121, 99, 177, 197, 47, 62, 197, 117, 187, 66, - 88, 60, 36, 230, 112, 174, 27, 99, 245, 110, 196, 27, 162, 250, 130, 180, 255, 30, 195, 191, - 48, 207, 227, 125, 196, 32, 220, 209, 140, 37, 128, 11, 13, 191, 77, 177, 125, 94, 5, 33, - 105, 139, 217, 62, 140, 10, 241, 68, 207, 121, 82, 211, 42, 217, 43, 201, 142, 225, 242, 124, - 96, 149, 175, 161, 225, 59, 14, 97, 209, 155, 216, 223, 216, 231, 145, 172, 196, 112, 32, 132, - 97, 134, 156, 64, 79, 189, 154, 235, 143, 1, 214, 32, 129, 113, 118, 204, 159, 163, 24, 126, - 133, 134, 247, 218, 170, 193, 26, 36, 48, 8, 195, 244, 99, 252, 78, 120, 241, 199, 60, 108, - 44, 20, 232, 44, 163, 249, 42, 77, 231, 149, 113, 154, 32, 60, 89, 62, 230, 67, 92, 55, - 151, 237, 115, 103, 132, 249, 26, 49, 71, 112, 253, 92, 40, 240, 154, 56, 132, 167, 216, 179, - 103, 115, 189, 190, 161, 249, 181, 114, 62, 172, 100, 221, 150, 133, 84, 2, 179, 213, 16, 9, - 76, 211, 114, 189, 157, 238, 146, 34, 62, 28, 203, 29, 206, 117, 187, 66, 243, 48, 178, 183, - 114, 221, 24, 196, 151, 192, 221, 62, 4, 212, 254, 123, 25, 254, 5, 90, 118, 212, 172, 222, - 221, 120, 67, 244, 60, 124, 172, 14, 205, 231, 3, 111, 243, 153, 252, 195, 154, 155, 242, 190, - 150, 5, 241, 81, 6, 46, 186, 60, 61, 154, 239, 218, 180, 190, 75, 182, 76, 8, 195, 223, - 154, 22, 98, 248, 52, 70, 58, 4, 14, 235, 147, 192, 60, 132, 131, 48, 215, 228, 122, 171, - 8, 235, 145, 192, 52, 141, 6, 114, 143, 230, 250, 210, 19, 20, 232, 44, 163, 249, 74, 99, - 111, 153, 40, 102, 215, 71, 159, 42, 178, 196, 160, 237, 247, 30, 220, 80, 165, 85, 231, 163, - 11, 20, 120, 77, 28, 194, 19, 176, 217, 83, 185, 94, 223, 208, 124, 117, 98, 202, 175, 158, - 95, 152, 183, 91, 85, 80, 2, 195, 134, 72, 96, 124, 169, 238, 216, 176, 163, 78, 207, 132, - 65, 252, 233, 232, 62, 121, 191, 211, 147, 227, 155, 32, 126, 119, 193, 31, 146, 56, 119, 190, - 10, 102, 23, 43, 240, 120, 79, 187, 122, 143, 248, 157, 163, 139, 215, 247, 17, 131, 248, 49, - 189, 147, 235, 245, 197, 246, 189, 19, 154, 207, 223, 77, 6, 89, 49, 177, 45, 59, 158, 243, - 35, 60, 224, 152, 253, 14, 180, 120, 132, 253, 255, 161, 92, 169, 242, 145, 122, 189, 177, 66, - 120, 64, 52, 223, 1, 152, 242, 247, 220, 190, 188, 205, 88, 96, 125, 18, 152, 243, 96, 246, - 14, 222, 66, 115, 72, 199, 6, 43, 158, 192, 216, 177, 94, 130, 142, 221, 207, 1, 245, 187, - 204, 126, 158, 94, 104, 241, 23, 153, 3, 5, 58, 203, 182, 237, 195, 120, 103, 8, 243, 72, - 122, 185, 229, 105, 251, 217, 27, 179, 31, 102, 231, 183, 85, 139, 220, 142, 71, 248, 144, 69, - 219, 228, 186, 185, 80, 230, 53, 241, 149, 99, 98, 207, 84, 121, 4, 215, 45, 1, 243, 151, - 166, 246, 191, 237, 123, 16, 174, 164, 247, 210, 89, 92, 22, 40, 129, 97, 197, 19, 24, 103, - 237, 60, 157, 27, 174, 180, 154, 88, 140, 208, 217, 137, 61, 137, 190, 213, 80, 172, 54, 208, - 124, 113, 39, 121, 37, 30, 97, 8, 18, 123, 57, 213, 137, 77, 146, 79, 174, 114, 134, 208, - 57, 141, 45, 186, 82, 108, 149, 69, 135, 176, 0, 139, 175, 20, 215, 198, 169, 40, 116, 55, - 40, 7, 194, 115, 171, 98, 78, 123, 191, 32, 220, 189, 247, 101, 133, 153, 159, 239, 46, 93, - 223, 223, 88, 161, 249, 57, 62, 254, 190, 185, 20, 215, 31, 19, 172, 73, 2, 227, 16, 238, - 116, 213, 249, 144, 240, 214, 23, 103, 198, 10, 171, 159, 192, 240, 231, 195, 159, 221, 243, 22, - 250, 217, 66, 11, 202, 200, 28, 40, 211, 89, 246, 142, 40, 219, 62, 217, 180, 15, 8, 15, - 116, 140, 121, 45, 215, 237, 19, 154, 215, 189, 239, 237, 206, 146, 67, 153, 215, 228, 82, 188, - 179, 202, 161, 92, 183, 4, 107, 231, 146, 8, 87, 154, 219, 240, 78, 176, 63, 83, 232, 129, - 104, 185, 60, 233, 152, 64, 9, 12, 27, 42, 129, 57, 128, 27, 174, 180, 90, 82, 216, 234, - 221, 139, 55, 172, 204, 189, 139, 209, 22, 154, 135, 145, 37, 147, 36, 196, 151, 223, 61, 132, - 234, 220, 128, 43, 96, 206, 42, 103, 8, 139, 148, 48, 63, 190, 61, 185, 110, 223, 208, 60, - 183, 176, 206, 175, 100, 142, 114, 197, 37, 59, 174, 179, 34, 172, 160, 198, 252, 98, 221, 246, - 21, 48, 17, 191, 152, 231, 94, 207, 251, 27, 35, 196, 31, 164, 232, 60, 1, 27, 228, 187, - 35, 7, 214, 43, 129, 241, 239, 67, 150, 188, 240, 177, 10, 176, 194, 9, 140, 29, 231, 249, - 176, 117, 145, 39, 239, 227, 248, 115, 175, 174, 80, 251, 153, 59, 21, 107, 144, 108, 142, 14, - 122, 238, 44, 35, 220, 90, 143, 45, 109, 220, 91, 114, 129, 230, 7, 35, 62, 145, 235, 246, - 9, 241, 161, 22, 174, 151, 21, 207, 166, 208, 243, 107, 226, 16, 127, 202, 182, 27, 44, 65, - 64, 152, 252, 218, 52, 142, 58, 229, 235, 86, 30, 132, 140, 231, 122, 12, 9, 74, 96, 216, - 32, 9, 140, 67, 124, 174, 65, 171, 103, 194, 32, 62, 76, 38, 153, 0, 44, 2, 241, 243, - 200, 169, 92, 175, 206, 126, 255, 121, 170, 239, 147, 169, 183, 12, 75, 64, 184, 218, 207, 23, - 9, 146, 171, 156, 33, 254, 140, 166, 65, 94, 47, 132, 231, 170, 124, 138, 27, 39, 157, 230, - 48, 13, 205, 142, 239, 145, 124, 192, 21, 191, 0, 227, 171, 169, 197, 18, 28, 127, 63, 158, - 151, 247, 53, 54, 118, 140, 55, 69, 124, 212, 129, 59, 154, 235, 143, 17, 214, 43, 129, 57, - 23, 102, 95, 143, 227, 184, 222, 170, 193, 106, 39, 48, 124, 215, 251, 180, 57, 197, 246, 239, - 79, 208, 239, 86, 102, 181, 193, 149, 129, 30, 59, 203, 8, 195, 17, 248, 69, 155, 186, 45, - 215, 95, 148, 237, 235, 246, 188, 243, 202, 253, 185, 110, 159, 108, 255, 47, 229, 6, 43, 87, - 230, 186, 57, 208, 227, 107, 226, 108, 187, 27, 34, 190, 20, 244, 215, 185, 110, 105, 8, 87, - 45, 95, 135, 217, 19, 113, 27, 62, 188, 231, 217, 104, 209, 25, 93, 38, 40, 129, 97, 131, - 116, 136, 29, 154, 135, 104, 37, 111, 225, 219, 239, 15, 228, 13, 42, 135, 115, 221, 92, 104, - 62, 198, 232, 138, 105, 136, 15, 95, 141, 254, 77, 17, 127, 192, 96, 227, 115, 83, 16, 127, - 42, 252, 237, 184, 94, 41, 214, 214, 149, 184, 113, 50, 234, 185, 113, 8, 75, 91, 243, 220, - 164, 169, 47, 241, 15, 42, 207, 226, 253, 140, 13, 194, 184, 254, 216, 121, 204, 29, 143, 21, - 89, 120, 5, 107, 148, 192, 56, 204, 62, 146, 192, 231, 91, 172, 244, 74, 158, 88, 209, 4, - 198, 142, 113, 31, 108, 29, 114, 236, 23, 238, 79, 123, 158, 21, 102, 87, 141, 244, 85, 10, - 87, 226, 115, 179, 50, 208, 83, 103, 217, 234, 95, 24, 205, 87, 211, 126, 143, 30, 159, 248, - 110, 251, 186, 29, 55, 80, 41, 250, 100, 118, 204, 102, 219, 83, 87, 228, 186, 57, 208, 223, - 107, 114, 6, 43, 71, 34, 62, 174, 223, 61, 144, 183, 25, 10, 194, 23, 164, 63, 105, 219, - 151, 25, 236, 202, 39, 85, 223, 130, 247, 57, 22, 136, 127, 241, 43, 129, 25, 0, 194, 69, - 20, 127, 127, 176, 228, 51, 97, 16, 127, 208, 171, 207, 25, 235, 125, 62, 22, 194, 28, 190, - 216, 223, 41, 58, 31, 205, 126, 126, 87, 174, 136, 134, 164, 196, 126, 126, 56, 87, 52, 111, - 227, 122, 14, 97, 30, 10, 243, 115, 69, 241, 225, 99, 83, 214, 214, 59, 249, 0, 136, 95, - 16, 43, 50, 175, 177, 47, 118, 124, 71, 240, 65, 39, 248, 123, 234, 44, 188, 143, 49, 177, - 227, 59, 27, 194, 144, 151, 24, 127, 222, 80, 239, 159, 137, 82, 176, 126, 9, 204, 125, 57, - 24, 115, 3, 174, 183, 74, 176, 186, 9, 12, 175, 166, 248, 58, 250, 189, 207, 59, 254, 38, - 213, 185, 113, 189, 142, 100, 66, 115, 103, 217, 231, 153, 248, 19, 169, 99, 229, 130, 8, 115, - 42, 174, 109, 229, 193, 8, 171, 72, 53, 173, 237, 239, 142, 226, 118, 115, 96, 54, 179, 157, - 122, 10, 215, 237, 147, 237, 255, 77, 220, 96, 101, 251, 120, 231, 190, 96, 177, 215, 196, 139, - 63, 27, 231, 138, 8, 9, 222, 115, 16, 86, 96, 106, 226, 87, 94, 123, 75, 42, 23, 229, - 199, 96, 229, 230, 86, 94, 107, 229, 183, 91, 142, 112, 190, 135, 243, 254, 198, 0, 74, 96, - 216, 96, 9, 140, 179, 246, 158, 199, 7, 80, 105, 186, 195, 225, 137, 254, 47, 185, 178, 121, - 62, 215, 237, 11, 226, 195, 200, 162, 207, 154, 177, 159, 191, 131, 234, 249, 185, 54, 186, 36, - 61, 194, 29, 78, 62, 23, 251, 251, 113, 102, 153, 91, 196, 231, 55, 204, 125, 162, 124, 95, - 172, 173, 187, 115, 227, 13, 70, 247, 128, 196, 58, 132, 103, 7, 181, 93, 85, 109, 148, 231, - 172, 41, 132, 21, 226, 78, 228, 131, 174, 248, 103, 100, 63, 222, 102, 204, 176, 126, 9, 140, - 119, 246, 249, 243, 253, 42, 174, 183, 74, 170, 152, 216, 168, 19, 24, 132, 139, 80, 126, 49, - 162, 238, 160, 72, 61, 190, 184, 113, 18, 215, 145, 12, 104, 238, 44, 247, 197, 87, 159, 154, - 249, 242, 204, 129, 217, 101, 235, 166, 222, 204, 117, 251, 132, 230, 149, 180, 246, 230, 186, 57, - 80, 254, 53, 241, 225, 100, 87, 227, 118, 151, 13, 97, 76, 188, 15, 41, 121, 28, 226, 207, - 172, 97, 62, 172, 38, 249, 244, 235, 101, 192, 184, 19, 152, 171, 243, 129, 85, 74, 38, 48, - 131, 117, 138, 29, 154, 207, 15, 209, 249, 20, 246, 243, 67, 184, 98, 165, 215, 185, 109, 117, - 136, 15, 35, 155, 73, 76, 16, 230, 181, 240, 251, 233, 147, 245, 58, 12, 241, 14, 232, 245, - 35, 245, 120, 85, 35, 215, 219, 80, 223, 20, 132, 11, 46, 28, 87, 19, 159, 51, 82, 236, - 181, 232, 3, 226, 139, 33, 176, 159, 98, 228, 203, 169, 218, 241, 189, 130, 15, 186, 226, 159, - 235, 94, 71, 26, 12, 1, 107, 150, 192, 56, 59, 254, 143, 83, 60, 126, 199, 121, 238, 50, - 236, 99, 133, 213, 76, 96, 120, 1, 146, 15, 112, 29, 135, 112, 65, 224, 231, 84, 247, 96, - 174, 39, 11, 66, 217, 206, 242, 247, 172, 156, 139, 219, 204, 133, 48, 238, 56, 182, 6, 191, - 127, 144, 139, 172, 244, 96, 251, 221, 19, 241, 197, 9, 126, 193, 117, 115, 161, 236, 107, 226, - 49, 220, 134, 219, 28, 35, 132, 167, 118, 251, 114, 132, 177, 249, 59, 83, 159, 225, 237, 150, - 13, 241, 142, 217, 88, 18, 24, 94, 29, 101, 234, 161, 92, 183, 43, 132, 147, 117, 204, 27, - 184, 110, 105, 214, 230, 103, 249, 32, 16, 174, 32, 207, 156, 31, 236, 103, 111, 231, 138, 40, - 252, 190, 66, 243, 48, 178, 59, 81, 189, 216, 202, 98, 219, 159, 88, 223, 196, 126, 127, 20, - 111, 96, 94, 64, 117, 124, 152, 16, 95, 201, 245, 225, 99, 123, 212, 235, 149, 128, 112, 199, - 43, 246, 250, 164, 248, 29, 142, 81, 119, 210, 236, 248, 62, 202, 7, 77, 122, 127, 232, 113, - 159, 16, 70, 83, 52, 185, 35, 215, 95, 5, 88, 207, 4, 230, 158, 28, 16, 86, 120, 104, - 18, 86, 44, 129, 65, 24, 53, 194, 119, 236, 27, 47, 164, 98, 246, 124, 252, 62, 174, 35, - 11, 66, 185, 206, 178, 175, 194, 18, 29, 230, 208, 7, 52, 207, 183, 185, 30, 215, 237, 131, - 237, 247, 142, 220, 80, 229, 120, 174, 155, 11, 229, 94, 147, 83, 176, 130, 217, 63, 194, 176, - 184, 212, 234, 101, 231, 231, 109, 150, 9, 227, 78, 96, 124, 152, 97, 76, 246, 240, 75, 219, - 199, 57, 120, 167, 149, 23, 115, 221, 210, 16, 159, 55, 226, 182, 60, 19, 6, 161, 35, 31, - 187, 24, 18, 157, 99, 210, 39, 196, 135, 145, 109, 89, 242, 25, 241, 85, 194, 46, 80, 175, - 195, 236, 247, 23, 225, 13, 204, 143, 169, 206, 225, 92, 1, 13, 115, 101, 250, 102, 237, 60, - 150, 27, 174, 248, 157, 150, 166, 225, 127, 238, 105, 188, 175, 49, 65, 120, 86, 15, 47, 182, - 48, 229, 119, 148, 123, 121, 14, 90, 9, 8, 137, 114, 211, 133, 162, 226, 15, 59, 46, 5, - 235, 153, 192, 248, 57, 139, 95, 171, 222, 86, 121, 29, 26, 86, 47, 129, 185, 55, 29, 235, - 23, 184, 78, 29, 194, 197, 42, 158, 235, 59, 234, 59, 202, 43, 3, 253, 119, 150, 191, 129, - 1, 150, 139, 179, 54, 30, 206, 13, 87, 62, 131, 158, 87, 122, 64, 24, 218, 228, 43, 72, - 196, 244, 126, 85, 13, 253, 191, 38, 190, 82, 137, 95, 5, 40, 126, 117, 181, 20, 52, 223, - 57, 112, 119, 229, 250, 203, 132, 113, 39, 48, 187, 35, 222, 201, 122, 47, 215, 237, 202, 246, - 113, 29, 222, 105, 165, 215, 57, 112, 109, 88, 155, 123, 96, 118, 73, 97, 199, 9, 66, 236, - 217, 10, 69, 38, 239, 51, 196, 135, 145, 249, 23, 221, 105, 119, 26, 236, 223, 63, 162, 223, - 127, 163, 190, 143, 38, 86, 239, 187, 180, 157, 59, 109, 140, 54, 102, 31, 180, 230, 138, 223, - 153, 69, 184, 24, 193, 157, 175, 169, 237, 119, 1, 17, 127, 142, 152, 243, 59, 70, 163, 27, - 250, 90, 103, 199, 247, 122, 62, 232, 202, 205, 185, 238, 88, 32, 36, 188, 177, 229, 158, 221, - 187, 49, 242, 69, 20, 82, 176, 134, 9, 140, 67, 184, 64, 92, 231, 231, 141, 165, 207, 105, - 93, 4, 86, 40, 129, 65, 232, 11, 254, 144, 142, 245, 214, 92, 143, 89, 157, 103, 210, 54, - 131, 143, 74, 88, 75, 88, 188, 179, 236, 195, 31, 188, 99, 236, 171, 44, 248, 74, 50, 143, - 182, 114, 121, 222, 127, 41, 214, 214, 185, 17, 31, 210, 229, 122, 189, 221, 109, 251, 187, 31, - 55, 80, 241, 147, 70, 239, 43, 246, 160, 251, 107, 226, 95, 236, 94, 252, 74, 114, 236, 106, - 178, 175, 2, 119, 78, 110, 103, 40, 232, 233, 202, 35, 102, 159, 133, 49, 149, 125, 247, 160, - 79, 24, 113, 2, 227, 48, 123, 2, 118, 254, 94, 206, 90, 142, 211, 182, 127, 50, 239, 180, - 178, 229, 174, 199, 80, 16, 86, 185, 99, 91, 158, 9, 99, 255, 254, 10, 87, 0, 13, 183, - 42, 5, 205, 195, 200, 174, 83, 253, 62, 182, 74, 216, 147, 120, 63, 49, 152, 253, 194, 116, - 143, 174, 126, 231, 67, 253, 184, 195, 234, 207, 149, 41, 122, 129, 195, 247, 111, 229, 251, 212, - 238, 212, 199, 80, 117, 148, 17, 158, 159, 242, 43, 250, 253, 212, 41, 40, 112, 206, 237, 11, - 226, 171, 68, 185, 75, 114, 221, 49, 176, 227, 58, 51, 194, 80, 239, 24, 191, 107, 52, 218, - 191, 117, 27, 88, 223, 4, 230, 110, 28, 148, 185, 41, 215, 91, 5, 88, 173, 4, 134, 87, - 192, 245, 239, 210, 185, 253, 27, 171, 179, 31, 182, 246, 205, 252, 34, 206, 96, 207, 224, 91, - 91, 104, 238, 44, 119, 90, 178, 119, 25, 236, 24, 95, 201, 7, 93, 241, 47, 227, 43, 113, - 253, 69, 32, 12, 11, 224, 219, 127, 83, 209, 73, 193, 185, 144, 241, 154, 88, 157, 109, 8, - 241, 179, 165, 141, 187, 68, 152, 24, 122, 52, 50, 239, 140, 33, 126, 213, 216, 189, 130, 235, - 46, 19, 198, 159, 192, 188, 156, 15, 174, 114, 119, 174, 219, 150, 109, 187, 27, 102, 199, 5, - 59, 191, 200, 176, 23, 215, 31, 2, 194, 131, 83, 99, 182, 63, 19, 6, 225, 179, 29, 51, - 179, 154, 76, 41, 136, 15, 35, 59, 182, 250, 93, 108, 149, 176, 43, 240, 62, 98, 16, 95, - 172, 225, 179, 213, 239, 98, 119, 202, 222, 202, 251, 232, 27, 154, 223, 119, 62, 119, 113, 203, - 234, 86, 8, 207, 174, 106, 50, 170, 207, 123, 29, 86, 40, 129, 65, 152, 139, 212, 52, 111, - 199, 87, 132, 92, 249, 14, 22, 214, 55, 129, 57, 11, 102, 47, 224, 190, 145, 235, 173, 2, - 172, 86, 2, 195, 23, 188, 146, 207, 23, 171, 179, 186, 175, 161, 109, 95, 196, 117, 164, 35, - 100, 116, 150, 151, 13, 33, 171, 141, 117, 22, 157, 159, 128, 47, 199, 219, 116, 97, 219, 31, - 128, 230, 43, 129, 191, 177, 114, 70, 222, 166, 15, 200, 124, 77, 48, 187, 66, 198, 212, 224, - 67, 173, 16, 158, 15, 52, 29, 50, 226, 95, 150, 251, 115, 157, 182, 16, 158, 65, 16, 51, - 170, 7, 195, 33, 254, 158, 28, 83, 2, 211, 180, 234, 150, 207, 51, 218, 135, 235, 183, 129, - 217, 53, 241, 167, 62, 204, 117, 135, 132, 217, 47, 28, 183, 253, 153, 48, 136, 207, 183, 40, - 58, 121, 159, 33, 62, 140, 236, 148, 234, 119, 62, 28, 182, 206, 151, 69, 111, 117, 17, 0, - 97, 168, 131, 223, 33, 175, 243, 161, 131, 222, 89, 120, 46, 253, 220, 205, 29, 6, 145, 3, - 225, 169, 238, 77, 162, 109, 219, 207, 95, 192, 21, 107, 110, 194, 245, 199, 0, 171, 149, 192, - 196, 230, 87, 57, 191, 82, 60, 225, 250, 171, 8, 107, 154, 192, 56, 139, 227, 3, 20, 151, - 15, 153, 29, 245, 42, 119, 49, 88, 145, 4, 6, 179, 23, 85, 188, 143, 217, 122, 168, 49, - 102, 87, 199, 244, 69, 83, 22, 250, 190, 149, 10, 50, 59, 203, 203, 102, 199, 121, 31, 62, - 240, 26, 31, 158, 113, 15, 222, 166, 13, 219, 238, 48, 52, 223, 121, 113, 135, 242, 54, 125, - 65, 230, 107, 98, 245, 118, 180, 242, 45, 222, 24, 33, 158, 133, 19, 136, 69, 32, 60, 181, - 185, 206, 59, 247, 143, 68, 199, 19, 173, 213, 191, 30, 237, 167, 238, 110, 92, 127, 153, 48, - 254, 4, 198, 59, 183, 60, 183, 98, 234, 11, 86, 206, 206, 219, 164, 160, 121, 136, 165, 187, - 21, 215, 31, 18, 154, 59, 148, 151, 193, 108, 7, 223, 245, 62, 167, 45, 5, 97, 24, 153, - 15, 107, 99, 215, 192, 236, 42, 97, 47, 225, 237, 83, 172, 254, 235, 104, 123, 119, 23, 204, - 14, 227, 242, 59, 182, 187, 243, 246, 125, 65, 232, 160, 248, 5, 159, 152, 215, 112, 253, 41, - 132, 213, 38, 249, 65, 112, 83, 191, 70, 199, 247, 233, 16, 208, 252, 126, 27, 85, 2, 99, - 199, 115, 47, 62, 192, 154, 133, 190, 51, 199, 8, 235, 157, 192, 220, 153, 3, 67, 193, 126, - 73, 41, 88, 157, 4, 134, 151, 167, 63, 134, 235, 204, 131, 217, 164, 243, 201, 92, 71, 58, - 64, 102, 103, 121, 12, 236, 88, 223, 192, 7, 79, 78, 178, 114, 77, 222, 46, 6, 225, 65, - 127, 31, 162, 237, 217, 11, 121, 187, 62, 161, 135, 215, 4, 205, 15, 44, 244, 177, 230, 173, - 174, 226, 230, 66, 120, 216, 105, 108, 194, 184, 243, 14, 200, 99, 172, 156, 135, 183, 99, 86, - 231, 80, 52, 39, 147, 190, 255, 243, 242, 54, 203, 132, 145, 39, 48, 14, 233, 135, 8, 250, - 80, 176, 219, 96, 206, 228, 93, 251, 253, 121, 172, 188, 113, 235, 166, 91, 248, 24, 250, 185, - 227, 131, 75, 66, 232, 192, 196, 134, 84, 198, 58, 198, 62, 47, 164, 88, 71, 190, 9, 194, - 68, 105, 230, 127, 59, 214, 233, 137, 219, 86, 255, 86, 188, 3, 196, 247, 187, 101, 97, 131, - 190, 217, 254, 223, 199, 13, 86, 78, 193, 156, 225, 133, 8, 231, 144, 88, 130, 231, 222, 197, - 245, 151, 13, 43, 144, 192, 216, 177, 92, 19, 179, 195, 143, 166, 158, 199, 245, 87, 25, 214, - 59, 129, 241, 216, 248, 179, 81, 244, 89, 120, 37, 96, 5, 18, 24, 132, 71, 58, 212, 249, - 119, 74, 235, 254, 216, 148, 109, 115, 45, 218, 143, 47, 24, 147, 60, 7, 74, 2, 122, 232, - 44, 47, 27, 194, 195, 222, 230, 37, 29, 206, 175, 60, 30, 139, 48, 17, 203, 79, 226, 254, - 229, 232, 255, 245, 255, 247, 191, 67, 108, 229, 30, 246, 14, 20, 238, 148, 161, 167, 215, 4, - 225, 233, 246, 49, 247, 227, 186, 37, 88, 59, 207, 225, 134, 35, 60, 1, 249, 50, 194, 112, - 30, 191, 155, 118, 107, 43, 183, 68, 88, 6, 247, 25, 8, 171, 218, 165, 12, 250, 148, 247, - 54, 176, 26, 9, 140, 63, 61, 60, 246, 32, 195, 186, 31, 88, 121, 150, 149, 91, 88, 185, - 50, 194, 231, 197, 79, 192, 254, 58, 249, 179, 83, 154, 58, 65, 206, 239, 30, 180, 186, 104, - 80, 26, 154, 63, 7, 172, 232, 133, 137, 38, 136, 15, 35, 99, 62, 60, 164, 211, 3, 129, - 173, 254, 94, 152, 237, 224, 196, 20, 187, 75, 134, 230, 14, 189, 191, 63, 174, 202, 245, 99, - 172, 222, 67, 121, 227, 154, 193, 135, 197, 166, 160, 57, 222, 81, 36, 48, 118, 28, 231, 71, - 252, 206, 163, 243, 225, 150, 62, 228, 215, 31, 50, 218, 87, 201, 90, 24, 36, 23, 214, 56, - 129, 113, 152, 93, 177, 239, 47, 88, 194, 69, 152, 28, 88, 129, 4, 70, 70, 10, 61, 117, - 150, 151, 13, 97, 184, 65, 236, 129, 116, 125, 242, 73, 88, 197, 79, 200, 232, 233, 53, 65, - 88, 205, 199, 39, 200, 50, 63, 201, 37, 159, 37, 209, 7, 132, 7, 62, 241, 16, 178, 62, - 121, 108, 131, 14, 137, 107, 3, 43, 144, 192, 56, 59, 166, 115, 33, 204, 171, 40, 225, 17, - 220, 222, 178, 216, 177, 28, 204, 7, 215, 96, 41, 157, 76, 52, 15, 35, 171, 91, 232, 121, - 83, 152, 127, 97, 167, 88, 135, 7, 161, 51, 28, 187, 251, 229, 158, 192, 245, 155, 32, 36, - 219, 126, 231, 56, 198, 19, 187, 209, 76, 54, 199, 136, 19, 24, 132, 135, 49, 199, 238, 60, - 150, 84, 252, 123, 38, 5, 235, 159, 192, 196, 46, 126, 68, 231, 148, 141, 21, 148, 192, 200, - 162, 208, 83, 103, 121, 12, 16, 190, 232, 252, 33, 105, 77, 207, 25, 88, 148, 79, 182, 186, - 15, 183, 87, 10, 122, 124, 77, 208, 60, 214, 217, 135, 213, 37, 135, 8, 245, 193, 218, 216, - 1, 225, 89, 27, 177, 229, 98, 115, 248, 144, 178, 94, 86, 154, 235, 27, 86, 36, 129, 113, - 8, 11, 85, 52, 205, 135, 89, 212, 99, 185, 157, 101, 179, 99, 250, 54, 31, 36, 217, 190, - 66, 215, 178, 32, 62, 140, 172, 238, 48, 222, 166, 13, 164, 231, 39, 185, 133, 18, 163, 121, - 16, 230, 225, 249, 124, 170, 24, 95, 14, 189, 211, 133, 32, 132, 101, 243, 125, 57, 248, 152, - 79, 98, 128, 115, 89, 27, 24, 119, 2, 115, 69, 62, 168, 1, 40, 129, 41, 8, 225, 46, - 43, 127, 183, 14, 242, 64, 218, 190, 64, 9, 140, 44, 10, 61, 118, 150, 199, 2, 225, 161, - 135, 77, 207, 12, 233, 202, 151, 57, 29, 244, 73, 239, 232, 241, 53, 65, 72, 234, 62, 199, - 59, 170, 108, 127, 112, 220, 16, 172, 173, 11, 98, 126, 39, 173, 173, 175, 90, 185, 48, 183, - 49, 22, 88, 161, 4, 198, 217, 177, 237, 131, 248, 114, 190, 93, 121, 7, 115, 148, 87, 255, - 236, 184, 30, 194, 7, 75, 238, 194, 219, 12, 9, 241, 43, 169, 83, 62, 84, 239, 76, 188, - 77, 27, 182, 221, 254, 180, 47, 118, 75, 222, 166, 15, 104, 126, 38, 144, 223, 241, 185, 16, - 215, 111, 3, 97, 104, 105, 147, 135, 115, 253, 101, 128, 18, 24, 166, 4, 166, 48, 132, 97, - 237, 117, 126, 193, 117, 101, 158, 223, 3, 37, 48, 178, 40, 244, 216, 89, 30, 19, 132, 43, - 255, 55, 65, 88, 186, 151, 87, 243, 153, 199, 135, 61, 248, 19, 149, 47, 203, 251, 29, 2, - 122, 126, 77, 16, 158, 119, 17, 187, 43, 229, 87, 110, 46, 202, 245, 75, 66, 88, 253, 201, - 231, 36, 196, 158, 146, 62, 143, 175, 172, 118, 79, 43, 103, 224, 253, 142, 9, 86, 44, 129, - 153, 178, 99, 188, 49, 230, 207, 139, 137, 241, 215, 210, 31, 156, 184, 47, 239, 115, 44, 236, - 216, 206, 134, 230, 97, 90, 75, 153, 188, 95, 135, 244, 48, 178, 143, 113, 253, 46, 16, 95, - 74, 218, 121, 50, 209, 122, 25, 208, 182, 108, 159, 87, 67, 243, 57, 119, 225, 103, 13, 57, - 219, 254, 85, 188, 195, 138, 255, 237, 6, 123, 126, 79, 19, 40, 129, 97, 74, 96, 10, 195, - 236, 195, 21, 221, 237, 185, 222, 88, 65, 9, 140, 44, 10, 61, 119, 150, 199, 200, 98, 57, - 135, 149, 35, 172, 28, 135, 208, 65, 243, 113, 255, 77, 99, 179, 221, 123, 209, 114, 194, 44, - 194, 82, 134, 231, 226, 159, 231, 64, 129, 215, 4, 97, 241, 130, 152, 147, 177, 132, 132, 0, - 97, 206, 210, 141, 16, 158, 31, 226, 75, 11, 250, 2, 10, 222, 145, 244, 171, 205, 254, 218, - 252, 24, 97, 8, 202, 155, 16, 134, 193, 93, 132, 247, 49, 86, 88, 209, 4, 102, 10, 225, - 110, 217, 145, 8, 43, 140, 249, 2, 11, 190, 98, 156, 95, 213, 243, 36, 216, 95, 35, 127, - 109, 124, 78, 130, 191, 167, 252, 153, 50, 189, 119, 130, 75, 176, 227, 124, 179, 191, 16, 17, - 163, 120, 160, 24, 154, 239, 80, 62, 128, 235, 118, 97, 219, 63, 158, 119, 88, 233, 125, 197, - 34, 132, 33, 45, 167, 80, 59, 83, 239, 228, 250, 93, 33, 204, 227, 240, 197, 37, 98, 190, - 134, 150, 231, 237, 82, 160, 4, 134, 41, 129, 41, 204, 226, 217, 3, 179, 253, 153, 236, 207, - 218, 80, 160, 4, 70, 164, 59, 132, 59, 19, 254, 208, 174, 24, 191, 115, 115, 78, 222, 102, - 10, 97, 104, 198, 219, 170, 186, 141, 207, 50, 16, 17, 17, 145, 225, 97, 3, 18, 24, 103, - 49, 189, 133, 98, 244, 209, 21, 123, 115, 189, 49, 130, 18, 24, 145, 197, 216, 7, 229, 81, - 252, 201, 169, 241, 49, 253, 255, 138, 176, 244, 164, 207, 37, 217, 29, 97, 69, 163, 151, 96, - 235, 196, 57, 95, 10, 248, 114, 188, 111, 17, 17, 17, 89, 14, 196, 19, 24, 95, 189, 242, - 225, 145, 178, 212, 121, 112, 57, 16, 127, 230, 211, 29, 185, 222, 50, 33, 44, 236, 193, 127, - 115, 47, 79, 168, 29, 243, 148, 18, 24, 145, 121, 16, 230, 202, 188, 149, 63, 61, 17, 169, - 103, 94, 184, 147, 120, 223, 34, 34, 34, 178, 28, 136, 39, 48, 77, 190, 206, 219, 175, 10, - 59, 246, 221, 48, 59, 116, 249, 189, 92, 111, 153, 16, 134, 186, 181, 165, 4, 70, 164, 13, - 132, 249, 24, 243, 158, 151, 48, 207, 103, 161, 39, 170, 138, 136, 136, 140, 2, 54, 36, 129, - 113, 118, 252, 255, 70, 241, 248, 240, 248, 133, 86, 47, 44, 1, 74, 96, 68, 202, 176, 15, - 204, 206, 104, 94, 225, 38, 197, 87, 219, 121, 42, 58, 62, 215, 64, 68, 68, 68, 202, 193, - 102, 37, 48, 55, 231, 128, 204, 17, 92, 111, 89, 160, 4, 70, 164, 44, 251, 224, 220, 26, - 97, 149, 165, 121, 124, 222, 139, 15, 61, 59, 144, 247, 33, 34, 34, 34, 203, 133, 205, 74, - 96, 118, 65, 120, 192, 115, 221, 7, 184, 222, 178, 64, 9, 140, 72, 121, 246, 225, 217, 9, - 97, 82, 156, 47, 35, 251, 125, 132, 37, 10, 253, 153, 9, 190, 124, 167, 15, 53, 123, 16, - 6, 126, 184, 165, 136, 136, 136, 136, 200, 34, 172, 223, 122, 215, 1, 203, 104, 134, 47, 138, - 136, 136, 136, 136, 200, 10, 194, 176, 46, 198, 237, 139, 136, 136, 136, 136, 136, 180, 198, 25, - 70, 97, 74, 96, 68, 68, 68, 68, 68, 100, 113, 156, 97, 20, 166, 4, 70, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 100, 10, 192, - 174, 86, 206, 203, 63, 23, 17, 17, 145, 237, 223, 147, 151, 180, 242, 0, 43, 135, 91, 57, - 19, 255, 126, 213, 88, 12, 151, 181, 114, 164, 149, 59, 90, 217, 139, 127, 47, 34, 50, 90, - 158, 180, 88, 121, 186, 149, 223, 89, 249, 241, 58, 156, 148, 199, 206, 254, 198, 239, 192, 172, - 111, 115, 61, 89, 77, 246, 90, 158, 155, 95, 220, 202, 125, 185, 174, 148, 97, 127, 235, 93, - 172, 220, 197, 202, 219, 172, 252, 200, 202, 95, 171, 242, 45, 43, 47, 179, 114, 109, 43, 59, - 240, 118, 210, 30, 54, 236, 60, 102, 177, 61, 202, 202, 255, 213, 98, 253, 181, 149, 75, 112, - 189, 85, 97, 199, 254, 164, 90, 44, 238, 231, 86, 46, 196, 245, 198, 0, 27, 240, 94, 179, - 120, 14, 227, 0, 43, 219, 184, 174, 200, 198, 178, 15, 196, 14, 86, 174, 103, 229, 221, 86, - 254, 177, 245, 179, 130, 227, 185, 190, 244, 11, 27, 112, 50, 222, 100, 80, 2, 179, 84, 246, - 119, 190, 133, 149, 95, 242, 31, 63, 226, 102, 188, 173, 180, 135, 13, 58, 143, 89, 92, 23, - 196, 236, 119, 165, 251, 4, 215, 93, 5, 118, 220, 7, 113, 32, 149, 247, 113, 221, 49, 192, - 6, 188, 215, 160, 4, 70, 100, 62, 251, 64, 236, 101, 229, 189, 252, 41, 169, 185, 43, 111, - 35, 253, 193, 6, 156, 140, 55, 25, 148, 192, 44, 141, 253, 141, 31, 207, 127, 244, 132, 179, - 243, 246, 210, 30, 54, 232, 60, 102, 113, 221, 154, 3, 173, 252, 5, 43, 120, 39, 15, 225, - 238, 100, 204, 175, 185, 238, 24, 96, 3, 222, 107, 80, 2, 35, 210, 142, 125, 40, 78, 103, - 229, 137, 252, 73, 169, 252, 217, 202, 1, 188, 141, 244, 3, 27, 112, 50, 222, 100, 80, 2, - 179, 20, 104, 238, 148, 197, 124, 157, 183, 151, 110, 176, 65, 231, 49, 139, 235, 16, 14, 180, - 242, 59, 174, 187, 10, 236, 184, 111, 199, 129, 84, 126, 196, 117, 199, 0, 27, 240, 94, 131, - 18, 24, 145, 110, 16, 134, 91, 252, 39, 127, 98, 204, 23, 172, 236, 196, 245, 37, 31, 54, - 224, 100, 188, 201, 160, 4, 102, 112, 8, 119, 149, 127, 195, 127, 240, 154, 63, 98, 235, 239, - 143, 229, 125, 72, 55, 216, 160, 243, 152, 197, 117, 54, 43, 127, 224, 96, 205, 43, 184, 238, - 42, 64, 56, 71, 249, 133, 74, 54, 202, 207, 5, 54, 224, 189, 6, 37, 48, 34, 221, 217, - 7, 228, 98, 86, 190, 207, 159, 26, 243, 12, 174, 43, 249, 176, 1, 39, 227, 77, 6, 37, - 48, 131, 179, 191, 237, 157, 249, 143, 93, 249, 176, 149, 139, 215, 234, 157, 197, 202, 17, 86, - 174, 88, 223, 94, 186, 195, 134, 157, 199, 44, 182, 27, 32, 76, 220, 159, 58, 209, 202, 89, - 185, 222, 170, 176, 99, 191, 153, 149, 223, 215, 226, 249, 136, 149, 189, 185, 222, 24, 96, 3, - 222, 107, 80, 2, 35, 178, 24, 251, 144, 156, 201, 202, 107, 172, 188, 217, 202, 179, 173, 60, - 4, 97, 220, 239, 233, 184, 174, 228, 193, 6, 156, 140, 55, 25, 148, 192, 12, 206, 254, 182, - 111, 224, 63, 54, 194, 68, 254, 93, 185, 174, 244, 3, 27, 120, 30, 179, 248, 118, 183, 114, - 21, 43, 7, 98, 13, 190, 27, 45, 134, 61, 173, 92, 213, 202, 69, 48, 226, 185, 60, 216, - 128, 247, 26, 148, 192, 136, 200, 216, 97, 3, 78, 198, 155, 12, 74, 96, 6, 103, 127, 219, - 79, 241, 31, 219, 188, 153, 235, 73, 127, 160, 243, 152, 12, 4, 27, 240, 94, 131, 18, 24, - 17, 25, 59, 108, 192, 201, 120, 147, 65, 9, 204, 224, 236, 111, 251, 109, 254, 99, 155, 227, - 184, 158, 244, 7, 58, 143, 201, 64, 176, 1, 239, 53, 40, 129, 17, 145, 177, 195, 6, 156, - 140, 55, 25, 148, 192, 12, 14, 241, 57, 124, 74, 96, 10, 130, 206, 99, 50, 16, 108, 192, - 123, 13, 74, 96, 68, 54, 139, 125, 184, 207, 107, 229, 78, 86, 94, 104, 229, 51, 86, 126, - 128, 176, 90, 204, 255, 34, 76, 80, 252, 161, 149, 15, 88, 57, 198, 202, 165, 121, 251, 101, - 64, 203, 147, 177, 253, 108, 98, 229, 121, 86, 62, 111, 229, 119, 8, 49, 121, 108, 223, 177, - 242, 126, 43, 71, 98, 164, 79, 78, 158, 178, 227, 59, 187, 149, 187, 89, 121, 147, 149, 111, - 32, 172, 6, 245, 119, 132, 167, 162, 255, 20, 97, 34, 236, 177, 8, 19, 74, 119, 225, 237, - 151, 9, 97, 169, 241, 235, 90, 121, 62, 194, 123, 203, 87, 177, 250, 31, 43, 255, 85, 29, - 187, 79, 16, 127, 164, 149, 243, 210, 118, 163, 78, 96, 236, 56, 206, 227, 199, 98, 229, 173, - 8, 79, 166, 247, 215, 100, 250, 121, 249, 158, 149, 127, 71, 88, 98, 253, 58, 86, 78, 207, - 219, 143, 17, 86, 56, 129, 177, 227, 188, 18, 194, 243, 107, 62, 105, 229, 84, 132, 103, 139, - 252, 205, 202, 175, 172, 156, 100, 229, 105, 86, 46, 71, 219, 44, 189, 179, 131, 246, 231, 177, - 11, 32, 124, 78, 62, 100, 229, 199, 8, 241, 249, 231, 232, 23, 86, 190, 104, 229, 57, 86, - 174, 201, 219, 141, 141, 29, 227, 111, 171, 24, 235, 86, 118, 161, 27, 59, 246, 255, 230, 96, - 48, 210, 120, 208, 242, 189, 214, 4, 225, 243, 18, 123, 16, 233, 143, 172, 156, 155, 235, 47, - 3, 70, 240, 153, 118, 104, 241, 62, 183, 255, 63, 3, 194, 119, 246, 203, 17, 62, 195, 254, - 221, 225, 223, 33, 254, 217, 246, 115, 216, 187, 172, 220, 211, 202, 25, 235, 219, 197, 32, 244, - 17, 252, 251, 200, 95, 99, 239, 191, 249, 170, 184, 222, 71, 240, 239, 165, 47, 89, 121, 9, - 10, 158, 31, 16, 143, 247, 197, 84, 199, 251, 2, 254, 240, 247, 122, 95, 192, 207, 209, 30, - 175, 191, 135, 78, 176, 242, 104, 140, 180, 63, 134, 176, 120, 141, 207, 105, 127, 177, 149, 147, - 171, 99, 246, 99, 247, 126, 152, 159, 147, 125, 213, 225, 151, 86, 117, 206, 204, 219, 75, 143, - 236, 15, 188, 139, 149, 195, 173, 124, 2, 221, 125, 28, 75, 126, 147, 97, 206, 201, 216, 254, - 125, 25, 43, 159, 227, 10, 13, 254, 15, 97, 225, 133, 165, 198, 196, 16, 18, 203, 215, 34, - 124, 200, 219, 242, 19, 214, 147, 209, 226, 164, 87, 154, 29, 195, 29, 16, 239, 20, 199, 248, - 23, 227, 43, 173, 156, 165, 218, 118, 148, 9, 12, 194, 106, 131, 254, 222, 139, 125, 145, 55, - 249, 46, 194, 5, 130, 81, 77, 240, 181, 227, 185, 226, 214, 195, 236, 236, 250, 188, 207, 161, - 33, 76, 158, 238, 114, 14, 251, 136, 149, 11, 86, 219, 46, 189, 179, 131, 249, 231, 49, 239, - 152, 248, 226, 10, 109, 223, 111, 31, 71, 21, 223, 24, 33, 222, 209, 25, 101, 135, 191, 13, - 108, 72, 2, 99, 245, 14, 69, 232, 16, 51, 191, 64, 48, 154, 239, 77, 140, 224, 51, 237, - 48, 231, 125, 142, 240, 247, 244, 78, 111, 27, 126, 225, 53, 250, 96, 116, 251, 249, 78, 8, - 223, 247, 222, 137, 110, 195, 207, 149, 231, 227, 253, 228, 66, 60, 222, 211, 18, 24, 251, 247, - 245, 17, 46, 26, 183, 225, 73, 220, 139, 48, 146, 197, 99, 236, 56, 246, 67, 184, 64, 220, - 246, 111, 236, 188, 174, 95, 84, 58, 23, 239, 79, 50, 33, 100, 136, 167, 110, 253, 123, 119, - 246, 39, 20, 204, 232, 231, 65, 226, 100, 140, 112, 18, 235, 210, 233, 159, 242, 47, 163, 195, - 184, 173, 101, 176, 227, 184, 95, 117, 60, 139, 242, 213, 163, 150, 210, 193, 180, 118, 247, 182, - 242, 62, 58, 158, 182, 252, 125, 233, 171, 249, 140, 42, 129, 177, 118, 119, 64, 184, 3, 25, - 251, 18, 111, 235, 45, 86, 118, 227, 125, 47, 11, 86, 60, 129, 65, 88, 229, 113, 145, 215, - 195, 147, 252, 131, 49, 130, 206, 14, 210, 231, 177, 131, 172, 252, 156, 127, 217, 130, 119, 42, - 15, 226, 182, 198, 0, 241, 142, 206, 40, 59, 252, 109, 32, 126, 142, 30, 101, 60, 72, 188, - 215, 82, 172, 206, 141, 16, 238, 246, 49, 239, 3, 92, 138, 235, 47, 19, 70, 240, 153, 118, - 72, 188, 207, 253, 191, 252, 139, 150, 158, 66, 109, 248, 247, 172, 223, 201, 232, 202, 19, 162, - 94, 95, 55, 196, 227, 221, 158, 192, 216, 127, 143, 230, 95, 180, 228, 201, 214, 158, 220, 214, - 144, 16, 222, 79, 177, 103, 61, 181, 229, 119, 194, 110, 205, 251, 149, 5, 33, 220, 178, 236, - 139, 127, 16, 182, 12, 253, 25, 10, 26, 78, 198, 86, 110, 130, 246, 87, 43, 155, 60, 138, - 219, 27, 18, 66, 182, 223, 7, 255, 59, 220, 157, 247, 95, 18, 194, 82, 226, 95, 163, 227, - 232, 202, 135, 150, 93, 158, 127, 88, 25, 60, 129, 65, 184, 245, 237, 195, 247, 250, 224, 67, - 156, 206, 192, 109, 44, 3, 86, 56, 129, 65, 24, 46, 150, 195, 59, 95, 199, 240, 15, 43, - 219, 184, 189, 82, 208, 124, 30, 243, 171, 126, 158, 136, 44, 202, 135, 145, 236, 206, 237, 45, - 27, 226, 29, 157, 81, 118, 248, 219, 192, 154, 39, 48, 246, 251, 107, 35, 30, 163, 15, 1, - 62, 152, 235, 47, 27, 70, 158, 192, 32, 12, 3, 205, 177, 253, 2, 171, 253, 247, 244, 8, - 67, 174, 22, 229, 119, 127, 206, 196, 199, 189, 40, 196, 227, 245, 161, 86, 15, 228, 31, 118, - 244, 106, 110, 107, 40, 214, 246, 115, 249, 96, 50, 60, 149, 247, 47, 11, 64, 184, 146, 236, - 157, 168, 24, 31, 211, 119, 60, 194, 24, 197, 167, 91, 121, 53, 66, 22, 156, 186, 202, 249, - 86, 110, 99, 8, 136, 159, 140, 253, 1, 105, 245, 135, 138, 77, 121, 71, 192, 231, 36, 188, - 13, 97, 8, 137, 207, 233, 73, 241, 33, 101, 55, 225, 54, 135, 96, 237, 62, 134, 15, 166, - 129, 223, 102, 245, 227, 156, 231, 43, 24, 104, 14, 6, 66, 71, 255, 99, 212, 126, 140, 223, - 29, 242, 227, 242, 113, 191, 63, 163, 223, 77, 249, 239, 99, 150, 145, 192, 188, 128, 15, 162, - 198, 231, 83, 189, 211, 202, 147, 172, 60, 20, 161, 83, 252, 70, 108, 125, 88, 31, 123, 28, - 183, 177, 12, 88, 209, 4, 198, 218, 61, 4, 233, 247, 254, 41, 8, 99, 190, 189, 179, 112, - 127, 132, 100, 199, 231, 240, 113, 71, 172, 233, 46, 237, 54, 110, 179, 20, 196, 207, 99, 158, - 192, 248, 241, 230, 218, 114, 197, 118, 12, 16, 239, 232, 140, 178, 195, 223, 6, 102, 223, 83, - 110, 148, 241, 160, 225, 189, 198, 245, 166, 16, 207, 86, 93, 156, 0, 0, 128, 0, 73, 68, - 65, 84, 134, 103, 250, 24, 127, 230, 223, 61, 55, 230, 250, 99, 128, 113, 39, 48, 254, 153, - 246, 191, 93, 14, 239, 203, 248, 115, 135, 30, 204, 191, 88, 192, 51, 249, 184, 23, 133, 120, - 188, 39, 160, 249, 28, 219, 197, 53, 184, 189, 210, 172, 205, 71, 241, 65, 68, 248, 252, 195, - 147, 17, 230, 87, 183, 185, 83, 254, 32, 110, 71, 22, 128, 240, 0, 177, 233, 45, 97, 255, - 195, 63, 193, 202, 5, 184, 222, 148, 253, 110, 31, 43, 199, 85, 245, 153, 119, 36, 6, 31, - 115, 141, 248, 201, 152, 121, 178, 114, 101, 68, 230, 30, 216, 207, 14, 64, 152, 115, 209, 212, - 17, 242, 97, 38, 251, 242, 118, 37, 89, 123, 87, 71, 243, 221, 35, 63, 78, 239, 40, 223, - 202, 202, 57, 17, 146, 5, 159, 4, 120, 14, 132, 241, 165, 254, 224, 84, 191, 35, 86, 231, - 157, 232, 109, 220, 78, 41, 72, 95, 109, 241, 219, 176, 143, 67, 228, 189, 130, 48, 215, 231, - 209, 8, 183, 91, 231, 25, 52, 129, 65, 243, 29, 75, 63, 49, 31, 133, 134, 171, 220, 8, - 99, 147, 125, 2, 166, 95, 233, 103, 126, 65, 96, 127, 222, 102, 104, 118, 12, 187, 34, 204, - 233, 153, 150, 216, 152, 108, 95, 164, 160, 94, 167, 94, 246, 224, 125, 150, 134, 240, 158, 111, - 186, 0, 225, 239, 247, 219, 32, 242, 121, 119, 8, 159, 149, 215, 111, 221, 36, 106, 27, 111, - 91, 10, 226, 231, 177, 88, 39, 231, 251, 8, 11, 17, 220, 206, 202, 181, 170, 255, 250, 162, - 43, 177, 247, 215, 148, 39, 215, 209, 247, 231, 178, 32, 222, 209, 25, 101, 135, 191, 13, 172, - 105, 2, 99, 63, 191, 28, 226, 239, 45, 255, 30, 186, 3, 215, 31, 11, 140, 59, 129, 97, - 211, 190, 151, 247, 81, 252, 92, 236, 137, 137, 255, 221, 159, 129, 112, 135, 171, 137, 15, 157, - 229, 253, 123, 95, 199, 231, 156, 158, 15, 225, 28, 233, 139, 204, 28, 110, 229, 171, 245, 74, - 228, 63, 208, 211, 144, 102, 204, 30, 79, 140, 159, 183, 189, 15, 224, 195, 119, 125, 110, 223, - 217, 16, 230, 42, 123, 178, 144, 186, 224, 247, 110, 110, 175, 36, 132, 133, 6, 154, 250, 133, - 254, 186, 60, 199, 202, 69, 34, 219, 121, 159, 242, 153, 136, 159, 19, 156, 247, 237, 6, 79, - 198, 214, 18, 194, 213, 201, 135, 163, 195, 68, 41, 132, 137, 85, 49, 247, 231, 186, 165, 33, - 126, 50, 174, 123, 12, 111, 19, 131, 208, 65, 109, 186, 74, 240, 116, 174, 95, 10, 194, 157, - 177, 166, 161, 87, 62, 164, 234, 74, 188, 13, 67, 24, 19, 235, 119, 206, 156, 199, 116, 85, - 174, 83, 138, 181, 181, 7, 226, 119, 191, 156, 15, 103, 57, 63, 111, 195, 16, 78, 186, 126, - 245, 57, 101, 176, 4, 198, 218, 218, 17, 241, 185, 98, 126, 130, 186, 58, 215, 143, 65, 232, - 232, 199, 78, 238, 79, 230, 186, 203, 134, 248, 130, 11, 163, 90, 133, 204, 142, 231, 246, 124, - 128, 21, 191, 26, 54, 147, 28, 199, 32, 76, 122, 77, 217, 198, 219, 148, 130, 249, 231, 49, - 255, 236, 223, 156, 183, 155, 66, 88, 25, 231, 163, 180, 77, 93, 227, 182, 203, 128, 248, 103, - 97, 148, 29, 254, 54, 16, 239, 172, 140, 50, 30, 196, 223, 107, 51, 9, 12, 194, 220, 171, - 166, 115, 249, 224, 223, 245, 93, 96, 117, 18, 24, 95, 25, 181, 49, 121, 64, 232, 216, 55, - 189, 6, 245, 249, 72, 201, 185, 174, 8, 201, 140, 143, 168, 105, 114, 8, 111, 179, 8, 164, - 227, 245, 100, 192, 47, 80, 238, 196, 219, 77, 33, 156, 199, 78, 222, 186, 217, 105, 252, 130, - 223, 32, 115, 97, 16, 250, 97, 95, 166, 246, 167, 124, 181, 209, 139, 242, 54, 204, 234, 92, - 28, 205, 23, 217, 62, 207, 245, 101, 32, 8, 25, 115, 236, 132, 61, 248, 56, 69, 196, 79, - 198, 83, 207, 231, 250, 41, 86, 255, 8, 222, 65, 197, 239, 8, 236, 197, 245, 75, 64, 152, - 187, 19, 227, 75, 13, 206, 237, 252, 215, 33, 116, 242, 238, 196, 63, 47, 201, 218, 187, 207, - 214, 195, 62, 141, 95, 197, 219, 198, 245, 155, 88, 221, 125, 145, 30, 251, 63, 100, 2, 211, - 244, 101, 216, 233, 24, 16, 22, 205, 96, 191, 224, 122, 203, 134, 213, 72, 96, 154, 62, 247, - 215, 229, 186, 77, 16, 190, 164, 124, 57, 226, 38, 219, 120, 155, 82, 208, 28, 143, 243, 196, - 127, 63, 222, 134, 89, 157, 221, 16, 86, 186, 139, 233, 109, 152, 72, 31, 16, 239, 232, 140, - 178, 195, 223, 6, 226, 223, 135, 163, 140, 7, 241, 247, 218, 150, 4, 6, 97, 1, 149, 166, - 171, 225, 199, 212, 235, 142, 17, 154, 207, 217, 219, 184, 110, 73, 136, 191, 207, 167, 158, 192, - 245, 99, 16, 238, 178, 166, 248, 29, 214, 139, 241, 118, 12, 225, 124, 247, 65, 218, 118, 170, - 151, 97, 166, 72, 199, 123, 55, 174, 31, 131, 48, 239, 207, 239, 10, 197, 92, 135, 235, 151, - 96, 237, 220, 156, 27, 174, 248, 244, 138, 214, 35, 114, 16, 46, 198, 54, 125, 142, 122, 73, - 26, 101, 1, 136, 175, 122, 241, 126, 174, 87, 26, 226, 39, 99, 231, 87, 44, 91, 223, 85, - 154, 66, 115, 135, 102, 144, 55, 27, 154, 39, 137, 223, 130, 235, 142, 17, 194, 45, 236, 152, - 123, 115, 221, 121, 108, 155, 91, 240, 78, 106, 58, 37, 15, 57, 16, 134, 236, 49, 127, 198, - 75, 231, 57, 69, 136, 223, 89, 90, 202, 2, 24, 77, 48, 242, 4, 6, 225, 139, 152, 135, - 73, 186, 15, 113, 221, 121, 16, 174, 146, 53, 217, 198, 245, 75, 65, 243, 121, 204, 175, 58, - 94, 150, 235, 55, 65, 24, 90, 26, 243, 14, 174, 187, 76, 136, 119, 116, 70, 217, 225, 111, - 3, 107, 148, 192, 216, 191, 207, 143, 230, 57, 137, 207, 171, 239, 107, 172, 48, 254, 4, 230, - 211, 86, 78, 199, 245, 99, 16, 206, 119, 77, 23, 38, 220, 93, 120, 155, 38, 8, 243, 153, - 98, 222, 204, 117, 23, 129, 230, 120, 223, 206, 117, 83, 16, 134, 96, 197, 220, 147, 235, 150, - 96, 237, 188, 142, 27, 174, 180, 190, 64, 54, 133, 230, 100, 232, 85, 92, 87, 6, 130, 248, - 73, 240, 147, 92, 175, 52, 196, 143, 195, 29, 197, 117, 219, 176, 237, 174, 193, 59, 170, 60, - 139, 235, 150, 128, 120, 199, 236, 171, 92, 111, 140, 16, 230, 227, 196, 198, 236, 250, 21, 136, - 206, 15, 214, 68, 122, 56, 221, 32, 9, 12, 194, 49, 196, 174, 6, 181, 26, 154, 200, 16, - 31, 182, 52, 170, 229, 21, 49, 254, 4, 198, 199, 119, 199, 220, 138, 235, 182, 97, 219, 125, - 138, 119, 84, 217, 198, 117, 75, 65, 243, 121, 236, 181, 92, 55, 5, 97, 206, 85, 236, 57, - 5, 131, 159, 155, 83, 16, 239, 232, 140, 178, 195, 223, 6, 214, 36, 129, 65, 184, 98, 124, - 42, 255, 178, 226, 243, 198, 162, 243, 202, 198, 6, 227, 79, 96, 58, 221, 73, 64, 152, 111, - 17, 227, 175, 85, 171, 68, 200, 33, 172, 90, 22, 251, 62, 235, 124, 241, 39, 6, 205, 241, - 118, 90, 174, 25, 97, 126, 76, 76, 241, 149, 97, 17, 190, 243, 125, 72, 30, 59, 153, 235, - 182, 129, 176, 191, 175, 243, 206, 204, 207, 185, 174, 44, 0, 97, 50, 248, 145, 8, 171, 38, - 249, 100, 47, 159, 196, 251, 71, 132, 9, 215, 77, 37, 54, 193, 244, 68, 222, 119, 105, 136, - 159, 140, 221, 204, 228, 170, 54, 16, 58, 225, 177, 49, 167, 39, 112, 221, 190, 161, 249, 153, - 39, 199, 112, 221, 49, 178, 227, 188, 32, 31, 120, 229, 21, 92, 183, 45, 132, 49, 179, 49, - 67, 37, 48, 251, 115, 195, 149, 133, 158, 125, 132, 248, 21, 242, 71, 114, 189, 101, 194, 248, - 19, 152, 166, 165, 181, 183, 63, 252, 180, 43, 196, 147, 74, 183, 141, 235, 150, 130, 230, 243, - 88, 231, 201, 158, 136, 143, 33, 95, 232, 203, 183, 20, 196, 59, 58, 163, 236, 240, 183, 129, - 53, 72, 96, 16, 22, 183, 240, 59, 203, 77, 230, 206, 191, 28, 11, 140, 59, 129, 241, 206, - 113, 167, 68, 208, 234, 223, 131, 119, 82, 233, 60, 244, 11, 241, 206, 244, 9, 92, 111, 17, - 136, 199, 251, 67, 174, 55, 143, 109, 115, 86, 222, 73, 165, 213, 176, 187, 28, 8, 67, 216, - 98, 22, 94, 53, 212, 182, 125, 42, 239, 172, 162, 7, 92, 46, 202, 254, 120, 123, 89, 121, - 5, 226, 201, 200, 34, 78, 226, 54, 74, 67, 252, 100, 252, 103, 174, 215, 5, 226, 195, 200, - 190, 193, 245, 250, 134, 176, 10, 73, 204, 77, 185, 238, 24, 161, 249, 170, 201, 17, 92, 183, - 45, 52, 223, 17, 27, 42, 129, 105, 186, 229, 222, 167, 167, 113, 187, 203, 132, 241, 39, 48, - 190, 58, 12, 251, 3, 215, 107, 203, 182, 189, 55, 239, 172, 178, 141, 235, 150, 130, 248, 121, - 204, 207, 203, 139, 220, 185, 140, 157, 191, 148, 192, 20, 132, 213, 79, 96, 124, 200, 216, 55, - 248, 135, 228, 203, 24, 201, 179, 171, 230, 193, 184, 19, 152, 206, 195, 57, 109, 155, 219, 242, - 78, 42, 157, 31, 243, 96, 219, 156, 196, 59, 65, 217, 4, 166, 211, 240, 49, 135, 176, 112, - 78, 204, 16, 9, 204, 165, 185, 209, 202, 194, 11, 161, 216, 182, 135, 242, 206, 42, 151, 228, - 186, 210, 2, 194, 68, 252, 239, 240, 95, 51, 211, 167, 184, 157, 210, 16, 63, 25, 159, 194, - 245, 186, 64, 124, 252, 227, 47, 185, 94, 223, 172, 141, 27, 112, 163, 149, 171, 112, 221, 49, - 178, 227, 252, 23, 62, 240, 202, 181, 185, 110, 91, 8, 147, 73, 99, 134, 74, 96, 154, 94, - 147, 62, 189, 148, 219, 93, 38, 140, 63, 129, 137, 189, 207, 126, 202, 245, 218, 178, 109, 239, - 194, 59, 171, 108, 227, 186, 165, 32, 126, 30, 91, 104, 136, 1, 226, 207, 142, 81, 2, 83, - 16, 86, 63, 129, 105, 107, 84, 119, 139, 155, 96, 220, 9, 204, 11, 185, 222, 60, 8, 203, - 194, 199, 92, 158, 235, 206, 99, 219, 156, 200, 59, 65, 217, 4, 230, 197, 92, 111, 30, 132, - 85, 211, 98, 134, 72, 96, 174, 203, 141, 86, 14, 230, 186, 109, 33, 60, 26, 35, 166, 211, - 80, 66, 169, 32, 60, 208, 177, 111, 99, 73, 96, 126, 204, 245, 186, 64, 124, 34, 253, 111, - 185, 94, 223, 208, 252, 193, 89, 137, 91, 247, 104, 238, 236, 95, 141, 235, 182, 101, 219, 94, - 128, 119, 86, 25, 42, 129, 137, 117, 150, 251, 182, 240, 16, 187, 18, 48, 254, 4, 38, 118, - 87, 204, 151, 20, 237, 52, 44, 99, 10, 225, 57, 62, 49, 219, 184, 110, 41, 136, 159, 199, - 102, 150, 182, 109, 3, 74, 96, 6, 135, 205, 73, 96, 60, 206, 11, 241, 62, 199, 6, 227, - 78, 96, 58, 191, 47, 208, 156, 192, 92, 140, 235, 206, 3, 37, 48, 73, 214, 198, 117, 184, - 209, 202, 194, 143, 163, 176, 109, 175, 198, 59, 171, 40, 129, 233, 10, 205, 171, 59, 249, 74, - 23, 247, 66, 184, 234, 189, 59, 18, 29, 2, 196, 59, 249, 159, 230, 122, 165, 33, 126, 50, - 254, 43, 215, 235, 2, 241, 228, 238, 59, 92, 175, 111, 8, 107, 190, 199, 220, 144, 235, 142, - 17, 154, 135, 192, 221, 146, 235, 182, 101, 219, 94, 137, 119, 86, 25, 42, 129, 137, 117, 150, - 251, 118, 44, 183, 187, 76, 24, 127, 2, 115, 46, 62, 184, 202, 37, 184, 110, 27, 182, 221, - 155, 121, 71, 149, 109, 92, 183, 20, 196, 207, 99, 74, 96, 86, 4, 214, 47, 129, 241, 85, - 70, 99, 223, 241, 238, 19, 72, 244, 13, 198, 0, 74, 96, 26, 65, 9, 76, 146, 181, 113, - 41, 110, 180, 178, 240, 74, 180, 104, 126, 16, 118, 167, 197, 13, 228, 255, 53, 158, 192, 62, - 143, 14, 79, 107, 70, 252, 228, 246, 25, 174, 87, 26, 226, 177, 184, 185, 15, 26, 138, 65, - 88, 197, 231, 47, 188, 51, 243, 9, 174, 219, 55, 132, 21, 96, 98, 30, 198, 117, 199, 200, - 142, 115, 31, 62, 240, 202, 194, 15, 107, 180, 109, 239, 207, 59, 171, 12, 149, 192, 52, 117, - 150, 31, 132, 48, 209, 176, 143, 210, 248, 32, 179, 101, 192, 200, 19, 24, 135, 240, 92, 36, - 214, 121, 133, 26, 132, 11, 53, 177, 69, 59, 220, 54, 174, 95, 10, 226, 231, 49, 37, 48, - 43, 2, 235, 149, 192, 248, 202, 143, 103, 70, 120, 168, 96, 236, 115, 230, 6, 89, 206, 118, - 81, 80, 2, 211, 8, 74, 96, 146, 208, 252, 157, 191, 240, 240, 73, 219, 246, 113, 188, 179, - 202, 57, 185, 174, 204, 129, 248, 131, 117, 58, 77, 6, 179, 250, 111, 231, 29, 96, 92, 9, - 204, 67, 185, 110, 27, 104, 158, 108, 85, 252, 65, 112, 8, 203, 237, 197, 94, 155, 127, 231, - 186, 99, 101, 199, 250, 115, 62, 120, 243, 37, 174, 215, 150, 109, 251, 49, 222, 89, 101, 144, - 4, 198, 33, 254, 37, 222, 203, 178, 147, 99, 132, 213, 72, 96, 98, 23, 80, 252, 217, 79, - 157, 38, 189, 91, 253, 7, 243, 78, 106, 182, 113, 253, 82, 16, 63, 143, 41, 129, 89, 17, - 88, 159, 4, 198, 31, 154, 122, 142, 90, 221, 59, 112, 133, 138, 63, 152, 120, 180, 43, 40, - 65, 9, 76, 35, 40, 129, 73, 66, 232, 135, 253, 130, 27, 70, 198, 223, 200, 182, 253, 28, - 239, 12, 153, 83, 29, 54, 18, 194, 50, 193, 255, 199, 127, 73, 115, 113, 174, 219, 4, 97, - 45, 241, 88, 71, 245, 179, 92, 183, 52, 52, 159, 140, 125, 85, 149, 174, 157, 25, 143, 235, - 139, 180, 159, 169, 67, 185, 126, 9, 214, 206, 27, 184, 225, 202, 170, 204, 131, 137, 45, 128, - 224, 58, 143, 31, 69, 243, 114, 185, 110, 200, 4, 166, 233, 53, 185, 52, 215, 93, 7, 88, - 141, 4, 230, 16, 62, 192, 74, 235, 225, 120, 86, 247, 64, 196, 239, 182, 78, 109, 227, 109, - 74, 65, 252, 60, 166, 4, 102, 69, 96, 61, 18, 24, 255, 206, 156, 121, 168, 174, 253, 236, - 195, 92, 177, 242, 46, 174, 59, 22, 80, 2, 211, 8, 74, 96, 230, 178, 118, 94, 203, 13, - 87, 46, 195, 117, 231, 177, 109, 174, 201, 59, 169, 188, 138, 235, 74, 11, 136, 63, 108, 176, - 245, 74, 81, 104, 62, 57, 124, 142, 235, 150, 134, 230, 147, 177, 235, 52, 57, 218, 234, 31, - 205, 59, 168, 248, 131, 159, 90, 15, 175, 203, 97, 237, 220, 146, 27, 175, 156, 98, 229, 204, - 92, 63, 197, 234, 95, 216, 202, 51, 208, 225, 65, 87, 185, 208, 220, 177, 252, 138, 149, 157, - 184, 126, 19, 171, 187, 11, 226, 235, 213, 79, 13, 153, 192, 220, 136, 27, 175, 248, 85, 149, - 214, 49, 57, 132, 36, 249, 114, 252, 243, 49, 193, 106, 36, 48, 254, 119, 108, 122, 58, 245, - 147, 172, 156, 158, 183, 169, 67, 72, 142, 127, 69, 219, 177, 109, 188, 93, 41, 136, 159, 199, - 148, 192, 172, 8, 172, 126, 2, 243, 159, 86, 14, 228, 186, 206, 126, 126, 126, 196, 31, 142, - 234, 70, 245, 16, 222, 41, 59, 174, 219, 241, 129, 86, 14, 226, 186, 37, 161, 167, 247, 57, - 148, 192, 76, 13, 149, 192, 52, 205, 19, 255, 2, 58, 12, 249, 70, 24, 138, 25, 251, 62, - 117, 173, 251, 220, 82, 131, 248, 122, 239, 47, 231, 122, 49, 86, 239, 98, 104, 30, 51, 254, - 121, 174, 95, 26, 226, 39, 227, 186, 23, 91, 217, 145, 183, 99, 86, 231, 129, 188, 97, 77, - 231, 15, 224, 162, 16, 238, 144, 53, 117, 220, 63, 139, 150, 157, 42, 171, 119, 99, 252, 243, - 100, 226, 119, 69, 146, 29, 186, 190, 32, 156, 120, 78, 169, 218, 101, 111, 69, 139, 14, 63, - 194, 188, 132, 216, 179, 44, 234, 134, 76, 96, 252, 53, 105, 234, 44, 31, 111, 101, 103, 222, - 38, 6, 97, 76, 185, 199, 229, 43, 102, 221, 128, 127, 63, 22, 136, 159, 112, 71, 149, 192, - 56, 132, 247, 120, 147, 111, 89, 185, 31, 194, 249, 234, 140, 8, 115, 219, 252, 129, 189, 158, - 140, 250, 213, 181, 127, 252, 179, 106, 163, 109, 220, 102, 41, 136, 159, 199, 148, 192, 172, 8, - 172, 126, 2, 147, 124, 175, 217, 239, 31, 206, 27, 84, 252, 34, 64, 167, 11, 107, 67, 64, - 243, 69, 167, 187, 114, 221, 146, 208, 211, 251, 28, 74, 96, 166, 134, 74, 96, 124, 24, 153, - 95, 116, 141, 249, 168, 149, 179, 242, 54, 12, 225, 251, 38, 54, 116, 204, 13, 126, 177, 127, - 109, 216, 31, 239, 153, 252, 215, 68, 24, 86, 246, 48, 52, 116, 48, 17, 222, 80, 119, 70, - 115, 242, 226, 198, 152, 192, 56, 239, 204, 248, 21, 153, 61, 104, 91, 191, 138, 123, 117, 164, - 59, 203, 126, 101, 106, 255, 250, 118, 165, 33, 221, 49, 243, 177, 199, 199, 88, 57, 127, 100, - 187, 179, 35, 140, 89, 62, 97, 203, 22, 193, 235, 49, 92, 18, 115, 71, 110, 188, 198, 39, - 136, 222, 4, 145, 247, 25, 194, 93, 151, 91, 35, 140, 195, 158, 103, 176, 4, 198, 161, 249, - 11, 209, 249, 5, 1, 95, 66, 58, 186, 50, 143, 253, 252, 76, 8, 159, 173, 250, 103, 199, - 175, 104, 46, 188, 188, 116, 73, 88, 145, 4, 198, 217, 113, 61, 143, 15, 116, 1, 111, 228, - 31, 84, 182, 113, 123, 165, 32, 126, 30, 75, 118, 42, 155, 64, 9, 204, 224, 176, 254, 9, - 140, 127, 255, 55, 117, 232, 94, 197, 245, 151, 13, 205, 43, 73, 249, 220, 6, 95, 26, 223, - 59, 151, 254, 224, 229, 87, 89, 57, 11, 111, 223, 23, 244, 244, 62, 135, 18, 152, 169, 65, - 18, 24, 135, 230, 199, 66, 56, 159, 66, 113, 31, 43, 123, 70, 182, 243, 7, 196, 63, 0, - 241, 249, 204, 206, 31, 80, 124, 101, 222, 78, 90, 178, 63, 222, 249, 16, 174, 2, 199, 248, - 56, 216, 231, 35, 76, 110, 189, 59, 66, 199, 235, 53, 136, 79, 106, 98, 131, 127, 73, 34, - 126, 50, 246, 55, 206, 31, 249, 135, 230, 111, 8, 119, 55, 124, 153, 228, 47, 35, 94, 135, - 221, 159, 219, 28, 130, 181, 251, 68, 62, 144, 136, 223, 33, 124, 169, 124, 19, 97, 162, 121, - 108, 110, 211, 148, 143, 245, 63, 128, 219, 41, 197, 218, 122, 39, 31, 0, 241, 227, 241, 19, - 169, 47, 6, 225, 119, 102, 62, 89, 253, 140, 125, 143, 127, 80, 25, 52, 129, 113, 214, 230, - 139, 248, 32, 200, 143, 16, 174, 238, 63, 30, 33, 201, 244, 250, 254, 94, 243, 19, 86, 140, - 191, 255, 246, 225, 118, 150, 13, 171, 149, 192, 248, 221, 49, 63, 63, 45, 234, 104, 52, 15, - 137, 221, 198, 237, 149, 130, 248, 121, 44, 217, 169, 108, 2, 37, 48, 131, 195, 154, 39, 48, - 14, 97, 216, 101, 211, 157, 203, 235, 114, 253, 101, 66, 232, 0, 251, 197, 199, 54, 14, 230, - 237, 251, 130, 158, 222, 231, 80, 2, 51, 53, 88, 2, 227, 172, 189, 199, 240, 1, 16, 239, - 71, 251, 200, 152, 183, 85, 197, 151, 31, 111, 234, 91, 79, 61, 130, 219, 145, 142, 16, 58, - 89, 57, 98, 39, 135, 47, 112, 59, 165, 161, 225, 100, 140, 176, 238, 118, 211, 201, 182, 173, - 23, 160, 225, 170, 122, 105, 222, 174, 149, 151, 211, 241, 44, 202, 231, 60, 13, 250, 44, 25, - 132, 171, 16, 77, 183, 79, 219, 242, 147, 225, 213, 249, 135, 149, 101, 36, 48, 59, 34, 36, - 91, 125, 240, 100, 243, 72, 110, 99, 12, 176, 66, 9, 204, 20, 194, 16, 208, 63, 243, 65, - 39, 248, 103, 226, 126, 213, 182, 74, 96, 6, 134, 120, 71, 167, 115, 199, 110, 44, 176, 1, - 9, 140, 67, 243, 29, 207, 83, 48, 208, 60, 209, 182, 16, 134, 143, 183, 113, 47, 222, 182, - 47, 232, 233, 125, 14, 37, 48, 83, 131, 38, 48, 206, 218, 60, 150, 15, 34, 195, 147, 120, - 255, 178, 0, 132, 43, 151, 111, 225, 191, 110, 75, 143, 181, 114, 28, 255, 16, 35, 74, 96, - 170, 223, 249, 80, 38, 191, 235, 210, 149, 39, 62, 79, 225, 182, 150, 193, 142, 227, 190, 152, - 159, 209, 167, 248, 93, 129, 171, 240, 126, 135, 128, 48, 247, 224, 253, 116, 60, 109, 253, 210, - 202, 101, 173, 156, 155, 127, 81, 25, 60, 129, 113, 8, 195, 14, 159, 138, 188, 228, 120, 251, - 48, 6, 222, 247, 88, 96, 5, 19, 24, 103, 199, 184, 47, 194, 4, 254, 216, 241, 79, 249, - 221, 89, 191, 48, 113, 218, 106, 75, 246, 239, 187, 80, 157, 169, 125, 235, 251, 47, 9, 137, - 243, 88, 87, 80, 2, 51, 56, 108, 78, 2, 179, 167, 149, 159, 240, 198, 149, 103, 115, 253, - 101, 66, 24, 38, 214, 102, 228, 200, 243, 121, 219, 190, 160, 167, 247, 57, 148, 192, 76, 13, - 158, 192, 56, 132, 139, 92, 177, 139, 246, 109, 253, 193, 202, 157, 121, 191, 146, 1, 33, 137, - 241, 59, 49, 177, 147, 111, 140, 15, 87, 218, 222, 241, 66, 60, 129, 249, 34, 183, 81, 26, - 230, 156, 140, 17, 158, 110, 239, 183, 248, 218, 58, 25, 35, 91, 37, 202, 142, 231, 0, 132, - 137, 248, 127, 223, 122, 168, 73, 62, 223, 194, 31, 158, 180, 23, 239, 111, 72, 8, 239, 49, - 31, 43, 58, 111, 197, 167, 41, 191, 51, 225, 137, 245, 246, 103, 12, 96, 100, 9, 204, 148, - 181, 127, 37, 52, 63, 163, 166, 137, 159, 196, 124, 104, 224, 222, 188, 191, 49, 65, 60, 1, - 24, 125, 2, 83, 135, 240, 80, 213, 137, 149, 155, 35, 124, 249, 251, 184, 119, 255, 28, 205, - 220, 81, 181, 159, 61, 242, 159, 97, 110, 177, 43, 215, 45, 5, 115, 206, 99, 93, 64, 9, - 204, 224, 16, 255, 14, 29, 101, 60, 200, 124, 175, 33, 204, 97, 140, 241, 139, 58, 87, 224, - 250, 203, 100, 199, 115, 9, 52, 47, 42, 51, 245, 42, 222, 174, 47, 232, 233, 125, 14, 37, - 48, 83, 75, 73, 96, 156, 181, 189, 159, 149, 231, 34, 62, 212, 189, 137, 215, 125, 33, 70, - 56, 84, 124, 109, 32, 92, 169, 120, 20, 66, 135, 204, 231, 192, 248, 201, 216, 255, 240, 126, - 245, 222, 199, 244, 61, 221, 202, 181, 81, 91, 142, 23, 241, 4, 102, 225, 7, 22, 46, 10, - 45, 79, 198, 246, 179, 171, 33, 188, 249, 124, 88, 147, 207, 29, 241, 121, 9, 126, 119, 198, - 59, 214, 39, 89, 121, 22, 10, 142, 133, 237, 131, 29, 223, 121, 172, 220, 19, 97, 24, 147, - 207, 123, 241, 171, 201, 158, 212, 248, 132, 112, 127, 221, 252, 196, 228, 243, 151, 124, 248, 92, - 171, 149, 177, 134, 130, 48, 65, 223, 143, 203, 223, 55, 190, 20, 161, 159, 232, 252, 206, 146, - 191, 6, 126, 149, 236, 4, 132, 132, 235, 34, 180, 221, 40, 19, 152, 41, 132, 165, 170, 31, - 129, 48, 231, 199, 231, 235, 248, 188, 22, 127, 77, 252, 51, 228, 119, 145, 62, 141, 112, 197, - 223, 59, 210, 157, 158, 75, 180, 44, 88, 131, 4, 166, 11, 139, 237, 221, 28, 172, 249, 37, - 215, 43, 9, 45, 207, 99, 109, 64, 9, 204, 224, 176, 65, 9, 140, 67, 243, 80, 90, 95, - 164, 101, 238, 170, 159, 67, 178, 227, 217, 195, 202, 81, 8, 207, 120, 243, 126, 141, 15, 31, - 245, 133, 125, 94, 106, 229, 26, 92, 191, 79, 232, 233, 125, 14, 37, 48, 83, 75, 75, 96, - 166, 16, 150, 70, 246, 215, 227, 37, 8, 125, 153, 31, 35, 244, 193, 188, 63, 227, 241, 251, - 207, 94, 105, 229, 246, 86, 206, 200, 219, 139, 136, 136, 100, 179, 47, 152, 115, 84, 95, 62, - 236, 125, 92, 87, 36, 6, 97, 190, 98, 108, 1, 149, 167, 113, 93, 17, 17, 17, 17, 17, - 239, 64, 158, 147, 127, 214, 6, 66, 199, 211, 159, 227, 19, 115, 119, 174, 47, 18, 99, 239, - 149, 243, 242, 155, 167, 242, 104, 174, 43, 34, 34, 34, 34, 27, 14, 225, 1, 149, 223, 65, - 24, 254, 218, 122, 153, 112, 132, 33, 141, 77, 171, 252, 249, 92, 37, 221, 250, 151, 86, 236, - 189, 114, 36, 191, 129, 42, 197, 86, 183, 18, 17, 17, 17, 145, 21, 133, 48, 255, 104, 202, - 39, 17, 251, 248, 126, 127, 0, 217, 110, 92, 215, 217, 207, 119, 181, 114, 39, 132, 164, 167, - 201, 131, 121, 59, 17, 135, 218, 60, 208, 234, 255, 47, 135, 230, 135, 59, 143, 106, 66, 187, - 136, 136, 136, 136, 44, 25, 194, 2, 15, 77, 207, 126, 241, 9, 149, 159, 183, 242, 46, 132, - 167, 109, 251, 80, 49, 95, 144, 100, 222, 178, 234, 62, 1, 126, 75, 39, 85, 100, 10, 97, - 241, 20, 79, 126, 125, 209, 14, 95, 252, 165, 105, 57, 117, 127, 176, 240, 25, 120, 123, 17, - 17, 17, 17, 217, 96, 214, 65, 60, 154, 58, 141, 185, 254, 221, 202, 158, 220, 142, 136, 67, - 243, 92, 151, 152, 71, 242, 246, 34, 34, 34, 34, 34, 222, 169, 188, 157, 149, 159, 114, 239, - 177, 35, 95, 65, 202, 159, 182, 60, 170, 165, 199, 101, 92, 236, 253, 113, 111, 122, 223, 52, - 241, 249, 88, 163, 90, 74, 88, 68, 68, 68, 68, 70, 196, 58, 139, 187, 89, 185, 27, 194, - 67, 104, 187, 240, 231, 245, 248, 16, 179, 203, 240, 62, 69, 88, 245, 94, 153, 231, 149, 86, - 118, 231, 109, 69, 68, 68, 68, 68, 162, 172, 243, 120, 160, 149, 251, 88, 121, 163, 149, 175, - 90, 249, 57, 194, 67, 6, 125, 238, 203, 244, 33, 99, 175, 69, 72, 120, 246, 229, 237, 69, - 154, 216, 251, 229, 170, 86, 158, 137, 144, 40, 251, 131, 131, 253, 61, 245, 39, 43, 95, 71, - 120, 88, 237, 37, 121, 27, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 217, 92, 0, 158, 101, 229, 167, 181, 242, 104, 174, 35, 34, - 34, 34, 34, 34, 50, 10, 150, 176, 188, 10, 91, 61, 131, 235, 136, 136, 136, 136, 136, 136, - 140, 130, 18, 24, 17, 17, 17, 17, 145, 13, 97, 157, 253, 3, 173, 60, 213, 202, 39, 172, - 252, 210, 202, 95, 107, 137, 192, 181, 185, 254, 24, 97, 69, 19, 24, 59, 206, 247, 84, 199, - 251, 15, 43, 127, 180, 242, 93, 43, 111, 179, 114, 23, 43, 187, 115, 125, 17, 17, 17, 17, - 145, 141, 102, 157, 228, 199, 86, 157, 231, 38, 74, 96, 10, 194, 63, 19, 152, 152, 31, 90, - 57, 136, 183, 17, 17, 17, 17, 17, 217, 72, 214, 57, 190, 3, 247, 152, 35, 148, 192, 20, - 132, 116, 2, 227, 126, 98, 101, 55, 222, 78, 250, 97, 127, 219, 157, 173, 28, 86, 184, 236, - 195, 237, 138, 136, 136, 136, 200, 2, 172, 99, 245, 109, 204, 167, 4, 166, 32, 204, 79, 96, - 220, 61, 120, 59, 233, 135, 253, 109, 207, 202, 127, 236, 2, 38, 220, 174, 136, 140, 28, 194, - 120, 106, 246, 28, 174, 39, 34, 34, 195, 177, 243, 240, 185, 248, 196, 92, 227, 203, 16, 191, - 194, 202, 99, 172, 236, 207, 219, 142, 17, 86, 55, 129, 57, 212, 202, 147, 173, 188, 215, 202, - 223, 182, 134, 112, 154, 227, 121, 59, 233, 7, 148, 192, 136, 72, 12, 148, 192, 136, 136, 140, - 142, 157, 135, 175, 194, 39, 230, 138, 63, 79, 101, 71, 174, 63, 118, 88, 209, 4, 166, 206, - 142, 249, 2, 86, 126, 68, 113, 184, 207, 113, 93, 233, 7, 148, 192, 136, 72, 12, 148, 192, - 136, 136, 140, 142, 157, 135, 175, 199, 39, 102, 243, 99, 43, 167, 227, 186, 171, 0, 107, 144, - 192, 56, 59, 238, 195, 41, 14, 247, 45, 174, 39, 253, 192, 108, 2, 115, 34, 215, 233, 202, - 246, 241, 124, 218, 231, 132, 235, 136, 200, 200, 65, 9, 140, 136, 200, 232, 216, 121, 248, 250, - 124, 98, 54, 239, 231, 122, 171, 2, 235, 147, 192, 92, 140, 226, 112, 223, 230, 122, 210, 15, - 40, 129, 17, 145, 24, 40, 129, 17, 17, 25, 29, 196, 19, 152, 247, 112, 189, 85, 129, 245, - 73, 96, 124, 24, 25, 83, 2, 83, 8, 148, 192, 136, 72, 12, 148, 192, 136, 136, 140, 14, - 148, 192, 140, 18, 148, 192, 12, 10, 235, 150, 192, 88, 99, 239, 160, 198, 221, 150, 55, 144, - 253, 255, 14, 8, 39, 128, 23, 89, 249, 130, 149, 223, 91, 249, 95, 43, 127, 176, 242, 29, - 43, 239, 183, 114, 164, 149, 11, 213, 183, 91, 54, 59, 158, 211, 89, 185, 46, 194, 31, 248, - 51, 86, 126, 99, 229, 127, 172, 252, 23, 194, 202, 35, 31, 182, 242, 72, 43, 231, 165, 237, - 206, 141, 184, 251, 214, 235, 45, 139, 29, 199, 111, 249, 192, 204, 139, 169, 142, 199, 126, 99, - 132, 19, 221, 215, 173, 252, 135, 149, 251, 215, 235, 140, 129, 29, 211, 30, 86, 110, 139, 176, - 10, 204, 87, 173, 252, 2, 97, 117, 146, 63, 89, 57, 213, 202, 71, 173, 60, 9, 225, 117, - 60, 61, 111, 63, 38, 88, 177, 4, 198, 142, 237, 35, 124, 176, 230, 51, 92, 111, 30, 219, - 102, 194, 59, 169, 12, 182, 36, 169, 181, 117, 34, 55, 142, 240, 158, 223, 149, 235, 206, 131, - 230, 120, 174, 206, 117, 187, 178, 125, 124, 138, 119, 106, 78, 229, 122, 243, 216, 54, 119, 227, - 157, 84, 94, 203, 117, 231, 177, 109, 222, 202, 59, 49, 191, 178, 114, 6, 174, 219, 21, 226, - 99, 220, 157, 63, 239, 97, 79, 174, 31, 99, 245, 14, 66, 248, 190, 97, 254, 221, 179, 11, - 215, 47, 193, 218, 57, 147, 149, 191, 80, 251, 238, 205, 92, 183, 13, 219, 110, 87, 132, 115, - 28, 123, 10, 215, 45, 197, 218, 186, 39, 55, 222, 131, 81, 158, 239, 160, 4, 102, 148, 160, - 4, 102, 80, 216, 180, 4, 198, 254, 125, 45, 43, 223, 228, 10, 13, 254, 207, 202, 155, 49, - 130, 68, 6, 225, 161, 85, 223, 223, 122, 120, 141, 252, 201, 188, 175, 180, 114, 150, 106, 219, - 149, 78, 96, 16, 86, 92, 137, 189, 102, 15, 172, 239, 103, 153, 16, 146, 226, 251, 32, 222, - 233, 111, 242, 51, 43, 79, 176, 114, 70, 222, 223, 50, 84, 199, 146, 107, 95, 222, 239, 80, - 176, 94, 9, 204, 17, 220, 120, 229, 80, 174, 59, 15, 194, 133, 26, 230, 79, 137, 222, 129, - 235, 118, 101, 251, 184, 23, 239, 184, 114, 25, 174, 155, 130, 176, 12, 105, 140, 95, 84, 106, - 189, 170, 18, 66, 71, 58, 214, 49, 63, 150, 235, 46, 10, 225, 2, 87, 204, 243, 184, 46, - 179, 58, 167, 183, 242, 121, 222, 16, 225, 187, 230, 106, 92, 191, 36, 107, 239, 101, 124, 16, - 8, 23, 91, 206, 198, 117, 231, 177, 109, 110, 199, 59, 66, 136, 233, 252, 92, 183, 20, 40, - 129, 81, 2, 179, 100, 80, 2, 51, 40, 108, 82, 2, 99, 255, 61, 10, 225, 164, 218, 213, - 127, 91, 57, 140, 219, 26, 130, 181, 187, 183, 149, 247, 209, 241, 180, 117, 170, 149, 139, 96, - 133, 19, 24, 132, 142, 220, 223, 249, 151, 149, 81, 36, 48, 118, 28, 59, 90, 121, 3, 31, - 92, 7, 191, 179, 114, 51, 222, 239, 208, 160, 4, 102, 59, 140, 35, 129, 241, 59, 121, 127, - 230, 3, 48, 111, 225, 186, 41, 86, 255, 12, 86, 126, 205, 59, 49, 143, 225, 186, 139, 176, - 253, 156, 25, 225, 46, 48, 123, 18, 215, 109, 130, 16, 171, 159, 99, 155, 92, 135, 183, 105, - 98, 117, 111, 202, 27, 87, 46, 207, 117, 23, 101, 251, 218, 15, 241, 187, 13, 126, 225, 232, - 10, 92, 191, 206, 126, 255, 16, 222, 168, 242, 66, 174, 91, 26, 194, 157, 160, 152, 135, 114, - 221, 121, 108, 155, 15, 240, 78, 204, 135, 184, 94, 73, 80, 2, 163, 4, 102, 201, 160, 4, - 102, 80, 216, 148, 4, 198, 202, 253, 248, 135, 11, 120, 20, 183, 87, 18, 194, 109, 254, 175, - 241, 65, 116, 228, 67, 203, 46, 207, 63, 172, 140, 58, 129, 65, 24, 50, 230, 157, 130, 38, - 99, 73, 96, 142, 227, 3, 91, 64, 111, 29, 172, 69, 65, 9, 204, 118, 24, 65, 2, 227, - 16, 238, 162, 50, 31, 46, 218, 106, 168, 146, 67, 24, 170, 200, 252, 34, 78, 111, 15, 184, - 67, 252, 156, 251, 29, 174, 215, 196, 234, 222, 146, 55, 38, 173, 59, 247, 86, 247, 53, 188, - 177, 249, 46, 215, 203, 133, 230, 33, 111, 62, 108, 52, 58, 84, 205, 126, 126, 126, 196, 239, - 14, 249, 240, 179, 189, 184, 254, 16, 172, 221, 79, 242, 193, 160, 195, 107, 231, 172, 254, 57, - 16, 191, 200, 212, 249, 110, 97, 14, 148, 73, 96, 6, 27, 2, 215, 5, 148, 192, 140, 18, - 148, 192, 12, 10, 27, 146, 192, 248, 216, 113, 190, 74, 232, 87, 252, 252, 170, 209, 51, 17, - 230, 141, 60, 5, 97, 184, 152, 15, 89, 104, 226, 95, 252, 55, 225, 54, 75, 64, 152, 243, - 241, 49, 106, 63, 198, 135, 44, 125, 197, 202, 23, 17, 134, 36, 197, 248, 239, 99, 198, 156, - 192, 248, 56, 118, 191, 51, 145, 178, 244, 4, 198, 142, 225, 194, 124, 80, 21, 79, 188, 62, - 104, 229, 57, 86, 30, 135, 48, 140, 231, 227, 86, 254, 90, 171, 51, 245, 1, 222, 239, 50, - 64, 9, 204, 118, 24, 79, 2, 115, 48, 31, 64, 229, 14, 92, 183, 9, 194, 92, 44, 246, - 81, 174, 151, 195, 246, 119, 11, 110, 160, 114, 49, 174, 27, 131, 249, 119, 47, 253, 188, 54, - 119, 184, 27, 194, 221, 38, 159, 207, 200, 142, 230, 186, 125, 64, 252, 253, 230, 30, 193, 117, - 29, 154, 235, 223, 152, 235, 14, 197, 218, 190, 13, 31, 76, 165, 245, 252, 40, 196, 239, 42, - 249, 247, 82, 235, 161, 127, 125, 176, 246, 46, 135, 112, 14, 235, 90, 124, 238, 104, 140, 15, - 217, 62, 51, 183, 51, 6, 80, 2, 51, 74, 80, 2, 51, 40, 108, 72, 2, 83, 231, 87, - 138, 158, 97, 101, 111, 222, 214, 33, 12, 7, 186, 191, 149, 63, 110, 217, 234, 159, 252, 231, - 197, 59, 105, 214, 198, 3, 185, 225, 26, 31, 90, 226, 157, 226, 11, 70, 182, 59, 175, 149, - 71, 91, 249, 207, 45, 91, 196, 141, 57, 129, 137, 13, 245, 243, 9, 240, 62, 12, 240, 218, - 86, 46, 137, 134, 215, 112, 72, 8, 201, 47, 243, 191, 125, 116, 14, 128, 253, 124, 39, 43, - 55, 179, 242, 30, 252, 51, 198, 171, 114, 189, 101, 176, 227, 56, 59, 194, 58, 246, 211, 18, - 123, 93, 94, 139, 173, 117, 184, 68, 175, 62, 15, 1, 241, 14, 226, 202, 38, 48, 206, 218, - 252, 30, 31, 132, 121, 31, 215, 139, 65, 120, 175, 197, 46, 200, 180, 78, 128, 218, 176, 253, - 237, 140, 120, 59, 115, 135, 169, 33, 156, 111, 155, 206, 181, 117, 87, 228, 109, 153, 213, 185, - 14, 111, 84, 185, 0, 215, 237, 131, 237, 119, 27, 226, 231, 89, 191, 75, 182, 165, 77, 52, - 207, 105, 122, 99, 189, 222, 208, 16, 254, 254, 63, 231, 131, 50, 175, 231, 186, 77, 16, 191, - 64, 214, 122, 8, 225, 50, 33, 220, 21, 139, 93, 40, 243, 33, 130, 23, 229, 250, 99, 1, - 37, 48, 163, 4, 37, 48, 131, 194, 134, 37, 48, 126, 23, 230, 22, 188, 77, 12, 66, 7, - 217, 87, 249, 138, 121, 58, 215, 239, 19, 194, 152, 240, 216, 149, 68, 247, 3, 180, 152, 24, - 105, 117, 206, 131, 48, 116, 46, 101, 204, 9, 76, 221, 231, 208, 242, 106, 238, 208, 236, 184, - 94, 207, 7, 107, 94, 199, 245, 98, 16, 222, 99, 143, 229, 159, 143, 5, 226, 11, 18, 140, - 114, 76, 184, 195, 122, 38, 48, 143, 226, 131, 64, 88, 193, 106, 251, 2, 29, 41, 8, 67, - 48, 153, 223, 141, 222, 141, 235, 230, 178, 125, 190, 148, 27, 50, 95, 225, 122, 12, 205, 67, - 220, 216, 83, 121, 91, 134, 248, 98, 5, 159, 230, 122, 125, 66, 88, 184, 35, 230, 35, 181, - 58, 251, 34, 126, 62, 247, 243, 222, 217, 235, 251, 91, 6, 59, 134, 99, 248, 192, 16, 70, - 40, 204, 189, 251, 128, 112, 14, 99, 254, 250, 109, 89, 9, 115, 140, 236, 24, 247, 180, 242, - 13, 58, 118, 231, 119, 207, 111, 200, 245, 199, 196, 142, 239, 95, 248, 160, 177, 228, 100, 56, - 7, 214, 39, 129, 137, 205, 55, 254, 62, 215, 147, 126, 96, 195, 18, 152, 135, 113, 253, 20, - 132, 43, 122, 177, 47, 83, 191, 234, 86, 108, 204, 50, 154, 191, 20, 253, 170, 208, 54, 174, - 223, 4, 225, 139, 211, 151, 15, 109, 178, 10, 9, 140, 47, 96, 48, 232, 80, 132, 46, 16, - 95, 178, 245, 56, 174, 183, 138, 160, 4, 134, 45, 35, 129, 241, 47, 196, 216, 60, 176, 123, - 112, 93, 102, 117, 94, 199, 27, 161, 208, 123, 19, 205, 195, 221, 146, 119, 63, 236, 247, 47, - 228, 13, 16, 255, 89, 114, 94, 6, 194, 42, 128, 177, 59, 9, 69, 207, 113, 8, 237, 158, - 192, 141, 86, 238, 84, 213, 121, 11, 255, 162, 210, 235, 157, 176, 69, 33, 204, 97, 225, 33, - 214, 238, 1, 92, 151, 89, 157, 103, 241, 70, 230, 131, 92, 111, 108, 16, 134, 104, 191, 155, - 15, 188, 210, 121, 17, 131, 161, 33, 222, 71, 120, 2, 215, 91, 21, 88, 159, 4, 198, 239, - 104, 242, 48, 113, 159, 247, 182, 51, 215, 29, 27, 132, 187, 196, 62, 21, 193, 143, 223, 251, - 100, 254, 249, 184, 21, 34, 163, 42, 16, 46, 178, 123, 95, 123, 90, 150, 114, 199, 21, 27, - 148, 192, 124, 203, 202, 233, 184, 254, 60, 136, 95, 97, 119, 135, 112, 221, 190, 32, 222, 17, - 115, 247, 230, 186, 243, 160, 121, 124, 186, 43, 250, 229, 222, 22, 154, 19, 152, 31, 91, 217, - 131, 235, 143, 137, 29, 223, 115, 249, 160, 17, 174, 114, 95, 156, 235, 174, 26, 40, 129, 97, - 131, 39, 48, 14, 241, 21, 158, 62, 206, 245, 234, 236, 247, 187, 32, 188, 15, 217, 85, 184, - 110, 31, 16, 58, 242, 167, 80, 91, 238, 40, 174, 59, 133, 176, 13, 207, 219, 243, 142, 180, - 175, 108, 230, 243, 15, 88, 227, 144, 30, 251, 221, 149, 185, 50, 194, 157, 170, 206, 75, 2, - 119, 133, 230, 201, 249, 126, 94, 107, 154, 236, 63, 138, 121, 111, 83, 118, 60, 255, 198, 7, - 104, 190, 206, 245, 234, 16, 150, 132, 142, 157, 35, 110, 206, 117, 199, 198, 142, 241, 105, 124, - 208, 149, 215, 112, 221, 49, 65, 72, 188, 46, 133, 48, 18, 163, 206, 151, 191, 62, 128, 235, - 175, 10, 172, 73, 2, 227, 236, 216, 95, 78, 177, 56, 127, 246, 219, 238, 92, 119, 44, 236, - 216, 30, 195, 7, 92, 227, 195, 152, 111, 69, 245, 125, 24, 127, 221, 82, 46, 90, 96, 131, - 18, 152, 206, 157, 127, 103, 219, 93, 154, 119, 84, 121, 22, 215, 237, 3, 194, 9, 202, 199, - 80, 51, 95, 10, 181, 243, 67, 206, 16, 58, 9, 77, 43, 153, 141, 61, 129, 57, 156, 235, - 142, 13, 194, 243, 121, 98, 124, 158, 146, 79, 16, 237, 109, 181, 167, 161, 33, 222, 57, 81, - 2, 51, 48, 107, 247, 214, 124, 32, 8, 119, 101, 206, 201, 117, 167, 16, 191, 112, 209, 251, - 106, 92, 117, 136, 47, 2, 241, 57, 174, 55, 101, 191, 187, 2, 87, 54, 239, 173, 126, 247, - 68, 254, 5, 18, 171, 64, 34, 204, 107, 100, 131, 205, 9, 64, 120, 240, 113, 91, 126, 110, - 24, 213, 121, 193, 142, 231, 106, 124, 144, 149, 43, 115, 221, 41, 196, 135, 49, 249, 131, 123, - 103, 174, 216, 142, 9, 154, 207, 217, 159, 193, 136, 175, 148, 163, 121, 72, 184, 143, 204, 104, - 53, 52, 126, 172, 176, 94, 9, 140, 223, 157, 104, 122, 174, 149, 187, 39, 111, 179, 76, 8, - 211, 13, 98, 119, 96, 153, 63, 244, 253, 65, 8, 119, 255, 78, 165, 223, 189, 140, 247, 59, - 4, 108, 80, 2, 179, 240, 152, 92, 132, 147, 50, 59, 129, 235, 245, 193, 246, 123, 65, 110, - 168, 242, 10, 174, 219, 22, 194, 164, 254, 152, 49, 39, 48, 126, 69, 115, 180, 87, 44, 166, - 16, 198, 81, 199, 174, 116, 215, 125, 9, 97, 168, 197, 85, 209, 98, 53, 165, 177, 128, 18, - 24, 182, 172, 4, 198, 39, 201, 199, 230, 80, 52, 174, 194, 103, 191, 59, 158, 43, 155, 71, - 114, 189, 62, 217, 254, 15, 224, 6, 43, 251, 113, 93, 103, 63, 127, 50, 87, 52, 119, 172, - 126, 23, 123, 70, 201, 201, 188, 143, 41, 204, 94, 145, 118, 183, 229, 122, 165, 32, 92, 120, - 58, 137, 15, 160, 193, 253, 121, 251, 49, 176, 227, 250, 50, 31, 168, 121, 37, 215, 155, 66, - 252, 174, 205, 168, 135, 49, 33, 36, 205, 177, 103, 14, 253, 20, 3, 44, 206, 147, 3, 241, - 4, 230, 141, 24, 249, 113, 183, 129, 53, 74, 96, 166, 16, 22, 235, 249, 17, 197, 229, 198, - 150, 192, 60, 152, 15, 112, 1, 119, 231, 253, 14, 1, 27, 146, 192, 252, 137, 235, 117, 129, - 248, 147, 151, 191, 193, 245, 250, 128, 230, 177, 228, 71, 112, 221, 182, 108, 219, 107, 240, 206, - 42, 99, 78, 96, 62, 193, 245, 198, 202, 142, 245, 174, 124, 240, 9, 62, 100, 198, 147, 153, - 115, 241, 126, 198, 6, 74, 96, 216, 82, 18, 24, 135, 217, 147, 170, 139, 198, 102, 63, 223, - 29, 179, 227, 176, 253, 142, 205, 185, 185, 110, 223, 16, 127, 202, 124, 116, 46, 5, 194, 176, - 222, 58, 31, 6, 115, 218, 202, 130, 145, 223, 187, 243, 212, 247, 81, 213, 139, 37, 59, 62, - 79, 177, 247, 197, 10, 82, 16, 18, 184, 216, 221, 243, 186, 79, 99, 129, 161, 204, 67, 64, - 124, 184, 155, 95, 72, 154, 89, 237, 209, 127, 134, 217, 88, 253, 61, 182, 141, 235, 142, 133, - 29, 219, 185, 16, 191, 24, 233, 159, 149, 203, 114, 253, 177, 193, 108, 2, 227, 11, 16, 140, - 234, 78, 222, 162, 176, 134, 9, 140, 67, 252, 51, 53, 182, 4, 134, 47, 68, 252, 16, 97, - 37, 222, 71, 96, 246, 61, 23, 227, 159, 159, 165, 44, 70, 130, 13, 73, 96, 126, 200, 245, - 186, 64, 88, 58, 150, 253, 146, 235, 245, 1, 241, 219, 242, 110, 225, 206, 147, 109, 123, 17, - 222, 89, 101, 204, 9, 204, 203, 185, 222, 152, 33, 220, 86, 245, 14, 88, 91, 254, 229, 239, - 207, 32, 58, 43, 239, 107, 44, 160, 4, 134, 45, 252, 25, 204, 101, 109, 95, 134, 15, 166, - 50, 115, 103, 217, 126, 118, 59, 174, 132, 129, 198, 40, 91, 59, 15, 224, 134, 17, 185, 24, - 129, 248, 221, 154, 119, 82, 157, 199, 114, 5, 68, 238, 94, 32, 94, 239, 213, 92, 111, 8, - 136, 31, 75, 221, 65, 188, 205, 88, 216, 177, 237, 134, 248, 114, 216, 51, 195, 175, 17, 239, - 152, 189, 159, 235, 141, 133, 29, 219, 174, 86, 78, 230, 3, 174, 220, 134, 235, 143, 17, 226, - 157, 73, 31, 142, 232, 75, 249, 143, 118, 232, 91, 27, 88, 179, 4, 198, 142, 255, 64, 196, - 191, 143, 220, 216, 18, 152, 79, 209, 241, 157, 54, 108, 20, 97, 158, 219, 61, 17, 79, 252, - 167, 142, 172, 239, 111, 72, 216, 144, 4, 230, 167, 92, 175, 11, 132, 7, 92, 178, 223, 114, - 189, 62, 216, 126, 111, 192, 13, 85, 174, 198, 117, 219, 66, 124, 109, 114, 55, 230, 4, 230, - 197, 92, 111, 236, 236, 152, 247, 71, 152, 192, 231, 147, 135, 219, 242, 167, 112, 143, 178, 83, - 131, 205, 77, 96, 14, 225, 157, 84, 150, 150, 192, 56, 196, 159, 183, 49, 243, 208, 68, 251, - 217, 59, 185, 18, 6, 26, 78, 133, 240, 44, 33, 126, 255, 251, 149, 249, 125, 168, 222, 195, - 169, 142, 187, 29, 213, 185, 40, 87, 48, 31, 171, 215, 169, 234, 125, 149, 43, 153, 235, 112, - 189, 210, 16, 30, 164, 233, 75, 190, 167, 52, 206, 227, 25, 3, 196, 87, 21, 251, 82, 164, - 222, 39, 185, 146, 185, 41, 215, 27, 11, 204, 94, 101, 158, 26, 245, 144, 183, 58, 59, 214, - 199, 91, 57, 14, 241, 191, 189, 175, 214, 121, 122, 222, 102, 85, 96, 141, 18, 24, 59, 246, - 43, 33, 36, 150, 117, 126, 39, 211, 87, 44, 245, 215, 175, 245, 67, 98, 135, 96, 199, 243, - 108, 108, 93, 81, 108, 215, 72, 29, 191, 0, 112, 23, 132, 135, 190, 250, 69, 14, 191, 0, - 235, 23, 4, 110, 207, 117, 135, 132, 13, 73, 96, 124, 204, 235, 194, 115, 15, 108, 219, 19, - 121, 135, 152, 179, 172, 231, 162, 16, 95, 77, 199, 221, 146, 235, 182, 133, 240, 129, 138, 81, - 2, 83, 0, 254, 249, 48, 209, 88, 135, 51, 230, 84, 43, 123, 242, 126, 150, 13, 235, 145, - 192, 124, 150, 235, 205, 131, 248, 18, 165, 110, 217, 9, 204, 3, 249, 128, 204, 87, 169, 142, - 15, 237, 225, 49, 254, 127, 196, 2, 11, 128, 44, 10, 241, 9, 172, 91, 174, 58, 34, 76, - 152, 174, 243, 47, 196, 153, 207, 0, 102, 23, 32, 249, 59, 106, 207, 192, 65, 88, 1, 140, - 249, 213, 194, 193, 59, 115, 72, 175, 228, 51, 229, 119, 105, 15, 228, 109, 199, 2, 225, 239, - 25, 123, 116, 192, 229, 106, 117, 252, 252, 198, 117, 124, 9, 235, 81, 78, 222, 183, 227, 250, - 87, 58, 214, 41, 239, 43, 44, 220, 47, 88, 38, 59, 238, 55, 112, 48, 200, 232, 35, 44, - 27, 214, 43, 129, 225, 115, 155, 187, 2, 215, 147, 124, 216, 144, 4, 198, 93, 130, 235, 182, - 129, 48, 129, 150, 199, 250, 186, 153, 97, 17, 125, 176, 253, 238, 195, 13, 85, 158, 204, 117, - 219, 66, 24, 207, 24, 163, 4, 166, 48, 139, 227, 124, 86, 238, 133, 112, 229, 130, 191, 244, - 235, 58, 61, 163, 104, 8, 88, 143, 4, 166, 243, 202, 91, 136, 119, 14, 220, 178, 19, 24, - 63, 89, 199, 86, 139, 57, 109, 121, 97, 251, 247, 225, 252, 75, 12, 252, 89, 178, 246, 110, - 203, 7, 96, 62, 84, 251, 189, 63, 119, 132, 63, 11, 111, 173, 239, 99, 10, 241, 5, 72, - 14, 175, 253, 254, 161, 252, 75, 20, 90, 33, 50, 5, 97, 105, 219, 216, 107, 19, 227, 243, - 132, 6, 79, 176, 218, 66, 124, 206, 231, 75, 107, 191, 63, 154, 127, 105, 30, 95, 223, 199, - 88, 32, 76, 164, 230, 247, 154, 243, 187, 118, 123, 112, 253, 85, 129, 248, 103, 108, 208, 207, - 121, 159, 176, 38, 9, 12, 194, 48, 76, 246, 115, 174, 39, 253, 192, 6, 37, 48, 51, 67, - 45, 218, 64, 124, 60, 185, 123, 38, 215, 237, 11, 226, 15, 100, 155, 185, 141, 223, 150, 109, - 251, 49, 222, 89, 69, 9, 204, 128, 16, 198, 253, 127, 136, 3, 173, 124, 158, 235, 47, 27, - 86, 47, 129, 121, 23, 31, 44, 194, 21, 251, 214, 29, 21, 132, 59, 24, 177, 103, 122, 184, - 165, 38, 48, 14, 241, 7, 167, 158, 214, 121, 68, 252, 153, 49, 87, 172, 239, 163, 52, 132, - 225, 6, 188, 50, 159, 15, 43, 219, 254, 100, 119, 132, 132, 158, 109, 121, 206, 192, 20, 226, - 171, 50, 158, 54, 87, 6, 97, 82, 60, 187, 116, 125, 31, 165, 33, 92, 228, 226, 59, 69, - 83, 223, 231, 31, 84, 22, 250, 62, 26, 130, 29, 219, 13, 249, 96, 17, 22, 69, 216, 254, - 57, 194, 108, 76, 62, 68, 112, 116, 147, 201, 237, 152, 46, 129, 217, 161, 60, 238, 55, 24, - 241, 98, 3, 109, 216, 241, 95, 159, 131, 2, 205, 33, 91, 37, 88, 159, 4, 198, 239, 78, - 178, 111, 115, 61, 233, 7, 54, 40, 129, 241, 206, 88, 167, 85, 105, 16, 198, 52, 199, 198, - 87, 187, 67, 185, 126, 95, 16, 127, 130, 182, 187, 42, 215, 157, 199, 182, 185, 60, 239, 164, - 70, 9, 204, 192, 16, 38, 197, 157, 192, 193, 154, 191, 112, 221, 101, 67, 60, 129, 121, 30, - 215, 27, 11, 59, 182, 151, 241, 193, 86, 182, 47, 205, 219, 6, 226, 207, 19, 153, 26, 67, - 2, 115, 35, 62, 40, 243, 189, 234, 119, 103, 193, 236, 252, 147, 111, 241, 62, 134, 96, 237, - 190, 146, 142, 195, 29, 94, 253, 238, 131, 244, 115, 79, 24, 27, 207, 205, 8, 79, 135, 174, - 243, 59, 226, 190, 210, 218, 57, 49, 123, 117, 125, 240, 120, 173, 205, 167, 210, 49, 76, 189, - 13, 225, 24, 125, 8, 31, 243, 97, 126, 141, 15, 230, 92, 38, 132, 37, 161, 57, 73, 113, - 62, 113, 255, 42, 252, 67, 84, 207, 238, 25, 19, 59, 166, 179, 97, 246, 89, 21, 206, 239, - 146, 29, 204, 245, 87, 13, 226, 9, 204, 96, 207, 61, 234, 27, 214, 39, 129, 137, 205, 55, - 86, 2, 83, 8, 54, 40, 129, 113, 175, 229, 250, 41, 8, 147, 230, 98, 252, 234, 98, 177, - 103, 148, 160, 121, 18, 177, 207, 169, 216, 137, 235, 55, 65, 120, 26, 247, 215, 105, 31, 117, - 74, 96, 50, 33, 116, 26, 59, 117, 68, 172, 254, 97, 20, 235, 212, 204, 28, 128, 101, 66, - 252, 78, 224, 155, 185, 222, 88, 160, 121, 5, 40, 239, 140, 53, 118, 144, 167, 172, 206, 141, - 49, 155, 0, 212, 141, 33, 129, 241, 4, 56, 246, 186, 92, 214, 202, 61, 248, 135, 230, 40, - 222, 199, 16, 172, 221, 107, 241, 129, 152, 119, 91, 217, 11, 179, 171, 245, 253, 27, 111, 95, - 135, 248, 132, 127, 127, 80, 231, 189, 249, 135, 24, 120, 146, 60, 194, 156, 69, 191, 3, 193, - 126, 101, 229, 108, 85, 157, 187, 243, 47, 43, 159, 197, 72, 135, 146, 33, 254, 108, 8, 95, - 160, 224, 37, 252, 67, 115, 19, 222, 126, 153, 236, 120, 118, 66, 124, 162, 187, 91, 202, 243, - 42, 250, 6, 37, 48, 163, 4, 37, 48, 131, 194, 134, 37, 48, 206, 175, 210, 206, 77, 2, - 16, 63, 129, 79, 21, 237, 92, 35, 220, 249, 57, 133, 218, 156, 242, 33, 36, 109, 142, 223, - 175, 80, 54, 13, 87, 154, 82, 2, 147, 9, 225, 97, 124, 126, 53, 213, 199, 226, 183, 234, - 140, 32, 62, 79, 193, 59, 206, 163, 122, 62, 4, 226, 207, 225, 240, 9, 210, 209, 247, 31, - 90, 198, 95, 138, 181, 127, 109, 58, 214, 58, 31, 215, 31, 77, 16, 17, 62, 111, 15, 195, - 236, 228, 119, 182, 244, 4, 198, 33, 126, 197, 223, 239, 28, 241, 80, 81, 31, 62, 119, 78, - 222, 126, 8, 8, 87, 241, 253, 225, 128, 117, 254, 247, 141, 37, 89, 55, 231, 237, 235, 16, - 31, 150, 225, 75, 219, 243, 156, 39, 191, 27, 179, 141, 183, 47, 5, 97, 188, 251, 247, 232, - 24, 166, 14, 169, 213, 219, 193, 202, 199, 233, 247, 83, 75, 73, 48, 231, 177, 227, 58, 19, - 102, 159, 37, 228, 120, 62, 168, 191, 198, 75, 253, 220, 51, 132, 149, 32, 99, 70, 123, 247, - 184, 43, 40, 129, 25, 37, 40, 129, 25, 20, 54, 48, 129, 113, 190, 158, 250, 237, 65, 99, - 227, 17, 174, 110, 78, 48, 251, 197, 88, 231, 99, 129, 139, 143, 247, 181, 54, 238, 200, 13, - 215, 248, 120, 235, 155, 32, 210, 145, 68, 184, 235, 114, 107, 196, 159, 76, 205, 148, 192, 100, - 64, 184, 251, 226, 239, 135, 41, 127, 0, 148, 95, 21, 110, 188, 59, 103, 191, 219, 211, 202, - 23, 106, 219, 76, 157, 204, 117, 151, 13, 205, 159, 3, 31, 226, 232, 157, 74, 239, 192, 249, - 122, 247, 254, 236, 15, 31, 106, 121, 107, 222, 199, 144, 172, 253, 29, 17, 127, 142, 197, 148, - 95, 21, 247, 206, 191, 223, 225, 244, 43, 231, 254, 57, 241, 37, 36, 121, 141, 123, 239, 248, - 199, 140, 37, 129, 185, 48, 31, 152, 249, 53, 102, 239, 4, 188, 143, 183, 29, 146, 181, 255, - 52, 58, 30, 199, 159, 117, 255, 252, 204, 44, 219, 201, 48, 187, 60, 241, 159, 48, 123, 183, - 44, 251, 203, 171, 11, 107, 239, 5, 212, 254, 212, 113, 145, 186, 62, 151, 135, 59, 255, 206, - 147, 186, 139, 112, 253, 49, 64, 88, 242, 117, 158, 199, 242, 118, 203, 132, 248, 74, 125, 206, - 207, 101, 163, 92, 37, 109, 17, 80, 2, 51, 74, 80, 2, 51, 40, 108, 72, 2, 227, 95, - 238, 177, 113, 200, 62, 148, 193, 135, 88, 253, 187, 149, 47, 35, 94, 135, 205, 60, 72, 173, - 20, 196, 159, 231, 80, 231, 99, 199, 125, 137, 231, 183, 35, 220, 153, 241, 219, 230, 177, 9, - 200, 77, 87, 9, 149, 192, 100, 176, 99, 124, 34, 31, 116, 197, 223, 87, 31, 69, 24, 130, - 232, 9, 141, 119, 148, 239, 140, 112, 149, 252, 103, 181, 122, 117, 15, 228, 253, 47, 155, 29, - 211, 49, 124, 144, 115, 28, 207, 251, 24, 154, 29, 195, 177, 124, 80, 11, 104, 234, 152, 142, - 34, 129, 113, 152, 125, 248, 88, 204, 82, 151, 85, 181, 246, 47, 206, 7, 20, 241, 122, 222, - 46, 6, 233, 59, 226, 83, 131, 61, 32, 14, 225, 110, 31, 207, 191, 113, 126, 17, 163, 233, - 78, 223, 81, 92, 185, 226, 11, 17, 140, 234, 46, 134, 179, 99, 186, 36, 31, 40, 241, 132, - 121, 63, 222, 110, 89, 236, 88, 174, 135, 230, 139, 15, 175, 64, 56, 255, 118, 46, 220, 206, - 24, 64, 9, 204, 40, 65, 9, 204, 160, 176, 33, 9, 140, 223, 113, 241, 229, 20, 249, 10, - 101, 87, 222, 177, 25, 108, 221, 120, 132, 241, 226, 124, 229, 177, 43, 79, 14, 174, 206, 63, - 172, 40, 129, 201, 128, 248, 243, 46, 22, 225, 115, 155, 70, 247, 36, 101, 132, 103, 66, 240, - 85, 238, 20, 95, 241, 103, 238, 213, 244, 146, 16, 78, 104, 177, 57, 34, 109, 249, 18, 202, - 19, 254, 97, 101, 76, 9, 76, 236, 73, 232, 117, 191, 199, 8, 222, 83, 8, 23, 134, 82, - 78, 27, 106, 149, 98, 245, 246, 67, 60, 97, 152, 242, 201, 217, 219, 87, 57, 43, 13, 97, - 165, 186, 31, 83, 251, 206, 191, 95, 26, 31, 56, 140, 48, 84, 145, 23, 36, 152, 122, 40, - 215, 31, 3, 196, 159, 129, 54, 53, 170, 14, 51, 154, 87, 130, 203, 194, 237, 140, 1, 148, - 192, 140, 18, 148, 192, 12, 10, 179, 9, 204, 119, 16, 230, 24, 231, 20, 158, 122, 49, 225, - 118, 139, 65, 67, 2, 83, 253, 206, 135, 101, 241, 4, 210, 54, 252, 139, 233, 41, 220, 214, - 16, 172, 221, 51, 34, 190, 46, 127, 27, 190, 138, 148, 79, 238, 61, 55, 255, 162, 162, 4, - 38, 3, 194, 56, 127, 159, 59, 177, 200, 123, 106, 202, 135, 147, 109, 159, 236, 59, 70, 104, - 94, 200, 162, 73, 114, 62, 195, 16, 16, 86, 222, 107, 115, 55, 149, 189, 7, 97, 8, 230, - 132, 127, 81, 25, 83, 2, 227, 23, 55, 98, 119, 91, 167, 158, 207, 219, 44, 131, 29, 199, - 67, 248, 192, 106, 124, 24, 88, 235, 36, 203, 234, 158, 196, 59, 168, 25, 108, 9, 89, 204, - 118, 182, 166, 158, 202, 117, 25, 194, 243, 98, 98, 23, 5, 124, 120, 217, 1, 92, 127, 217, - 16, 127, 222, 200, 212, 141, 185, 254, 50, 33, 92, 168, 236, 29, 183, 51, 6, 80, 2, 51, - 74, 80, 2, 51, 40, 204, 38, 48, 37, 76, 184, 221, 98, 144, 72, 96, 170, 223, 95, 6, - 97, 245, 151, 182, 78, 70, 237, 41, 196, 203, 128, 208, 81, 246, 167, 131, 251, 24, 254, 54, - 252, 74, 229, 91, 172, 156, 171, 218, 94, 9, 76, 65, 118, 172, 231, 177, 242, 76, 132, 14, - 89, 91, 190, 146, 157, 39, 7, 209, 225, 38, 99, 130, 48, 148, 236, 239, 91, 15, 63, 202, - 135, 60, 94, 144, 183, 95, 6, 132, 103, 238, 124, 134, 142, 175, 137, 207, 195, 120, 4, 170, - 97, 60, 88, 129, 4, 198, 217, 241, 188, 134, 15, 176, 230, 178, 92, 127, 25, 16, 150, 17, - 110, 186, 243, 253, 106, 174, 159, 130, 230, 7, 242, 186, 65, 134, 203, 161, 121, 133, 72, 159, - 3, 54, 51, 39, 49, 198, 234, 61, 133, 55, 174, 248, 176, 192, 177, 45, 228, 225, 243, 202, - 120, 142, 152, 251, 9, 70, 54, 236, 13, 74, 96, 78, 123, 88, 236, 170, 193, 250, 36, 48, - 23, 162, 56, 156, 18, 152, 66, 176, 105, 9, 76, 173, 222, 213, 172, 60, 23, 97, 136, 214, - 239, 16, 174, 138, 249, 149, 116, 79, 18, 252, 74, 223, 179, 48, 178, 245, 226, 17, 174, 14, - 251, 80, 184, 227, 16, 174, 220, 123, 199, 223, 135, 78, 248, 113, 251, 151, 204, 9, 86, 30, - 7, 154, 20, 10, 37, 48, 131, 176, 99, 222, 3, 97, 41, 94, 79, 102, 252, 61, 228, 11, - 41, 120, 82, 227, 175, 145, 223, 13, 243, 78, 206, 171, 17, 238, 4, 14, 50, 220, 165, 47, - 8, 147, 144, 253, 51, 225, 49, 120, 135, 223, 99, 242, 207, 138, 175, 124, 117, 180, 255, 158, - 183, 25, 3, 59, 174, 235, 32, 44, 253, 58, 157, 227, 230, 137, 152, 175, 174, 116, 42, 194, - 178, 190, 126, 97, 96, 203, 107, 129, 213, 73, 96, 174, 193, 7, 88, 249, 58, 215, 93, 38, - 204, 222, 146, 159, 186, 33, 215, 77, 177, 250, 231, 64, 60, 25, 242, 207, 216, 46, 92, 191, - 111, 8, 95, 150, 254, 57, 102, 126, 254, 189, 4, 215, 111, 130, 112, 30, 255, 46, 237, 99, - 234, 193, 92, 127, 153, 16, 22, 182, 57, 133, 142, 209, 29, 205, 117, 151, 13, 155, 149, 192, - 248, 124, 31, 230, 67, 103, 71, 149, 84, 182, 133, 245, 73, 96, 110, 74, 113, 184, 193, 159, - 77, 181, 41, 176, 169, 9, 204, 38, 193, 200, 19, 24, 17, 17, 25, 31, 251, 142, 184, 21, - 127, 105, 32, 92, 4, 56, 55, 215, 149, 225, 216, 223, 255, 96, 126, 81, 42, 79, 199, 10, - 38, 49, 88, 131, 4, 6, 97, 206, 104, 236, 194, 196, 23, 184, 174, 72, 20, 148, 192, 204, - 128, 18, 24, 17, 17, 233, 192, 190, 31, 118, 70, 152, 20, 203, 222, 197, 117, 101, 88, 8, - 157, 229, 38, 63, 66, 88, 117, 237, 24, 12, 248, 92, 164, 28, 88, 209, 4, 6, 33, 193, - 247, 165, 249, 63, 128, 48, 42, 33, 70, 159, 23, 105, 7, 74, 96, 102, 64, 9, 140, 136, - 136, 68, 216, 247, 192, 229, 35, 63, 243, 121, 151, 222, 9, 142, 233, 52, 244, 79, 202, 64, - 124, 37, 60, 54, 170, 97, 175, 77, 176, 186, 9, 140, 47, 252, 50, 207, 131, 120, 59, 145, - 40, 40, 129, 153, 1, 37, 48, 34, 34, 66, 16, 158, 103, 227, 222, 135, 176, 132, 168, 15, - 77, 242, 57, 122, 254, 108, 154, 24, 159, 103, 50, 170, 133, 6, 54, 21, 194, 252, 189, 121, - 148, 192, 20, 132, 249, 9, 204, 111, 172, 236, 205, 219, 137, 68, 65, 9, 204, 12, 40, 129, - 17, 17, 145, 26, 59, 255, 239, 128, 230, 231, 210, 52, 185, 53, 239, 71, 150, 7, 97, 33, - 162, 20, 37, 48, 5, 33, 157, 192, 248, 194, 74, 87, 226, 109, 68, 26, 65, 9, 204, 12, - 40, 129, 17, 17, 145, 26, 59, 255, 223, 129, 191, 16, 230, 88, 217, 231, 140, 172, 51, 132, - 71, 67, 60, 27, 97, 25, 238, 95, 91, 249, 239, 218, 107, 166, 4, 166, 32, 252, 51, 129, - 241, 213, 17, 125, 117, 78, 95, 121, 244, 93, 86, 238, 13, 221, 121, 145, 174, 160, 4, 102, - 6, 148, 192, 136, 136, 72, 5, 97, 142, 203, 41, 244, 125, 144, 226, 203, 144, 171, 67, 38, - 34, 82, 10, 148, 192, 204, 128, 18, 24, 17, 17, 169, 177, 243, 255, 13, 16, 158, 29, 50, - 207, 155, 172, 236, 197, 219, 139, 136, 72, 143, 160, 4, 102, 6, 148, 192, 136, 136, 8, 65, - 88, 42, 249, 174, 8, 195, 94, 126, 138, 240, 80, 206, 63, 91, 249, 166, 149, 151, 90, 185, - 34, 111, 35, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 50, 24, 0, 59, 91, 57, 172, 112, 217, - 135, 219, 45, 1, 138, 165, 107, 81, 44, 29, 65, 177, 116, 45, 138, 165, 35, 40, 150, 174, - 69, 177, 116, 4, 197, 210, 181, 40, 150, 142, 160, 88, 186, 22, 197, 210, 149, 53, 116, 86, - 148, 55, 225, 118, 75, 128, 98, 233, 106, 194, 237, 150, 0, 197, 210, 213, 132, 219, 45, 1, - 138, 165, 171, 9, 183, 91, 2, 20, 75, 87, 19, 110, 183, 4, 40, 150, 174, 38, 220, 110, - 9, 80, 44, 93, 77, 184, 221, 18, 160, 88, 186, 154, 112, 187, 37, 96, 141, 98, 89, 171, - 96, 160, 88, 186, 154, 112, 187, 37, 64, 177, 116, 53, 225, 118, 75, 128, 98, 233, 106, 194, - 237, 150, 0, 197, 210, 213, 132, 219, 45, 1, 138, 165, 171, 9, 183, 91, 2, 20, 75, 87, - 19, 110, 183, 4, 40, 150, 174, 38, 220, 110, 9, 88, 163, 88, 214, 42, 24, 40, 150, 174, - 38, 220, 110, 9, 80, 44, 93, 77, 184, 221, 18, 160, 88, 186, 154, 112, 187, 37, 64, 177, - 116, 53, 225, 118, 75, 128, 98, 233, 106, 194, 237, 150, 0, 197, 210, 213, 132, 219, 45, 1, - 138, 165, 171, 9, 183, 91, 2, 214, 40, 150, 88, 48, 39, 114, 157, 174, 108, 31, 207, 167, - 125, 78, 184, 78, 9, 80, 44, 73, 80, 44, 217, 160, 88, 146, 160, 88, 178, 65, 177, 36, - 65, 177, 100, 131, 98, 73, 130, 98, 201, 6, 197, 146, 4, 197, 146, 15, 107, 20, 12, 20, - 75, 18, 20, 75, 54, 40, 150, 36, 40, 150, 108, 80, 44, 73, 80, 44, 217, 160, 88, 146, - 160, 88, 178, 65, 177, 36, 65, 177, 228, 195, 26, 5, 3, 197, 146, 4, 197, 146, 13, 138, - 37, 9, 138, 37, 27, 20, 75, 18, 20, 75, 54, 40, 150, 36, 40, 150, 108, 80, 44, 73, - 80, 44, 249, 176, 70, 193, 64, 177, 36, 65, 177, 100, 131, 98, 73, 130, 98, 201, 6, 197, - 146, 4, 197, 146, 13, 138, 37, 9, 138, 37, 27, 20, 75, 18, 20, 75, 62, 172, 81, 48, - 80, 44, 73, 80, 44, 217, 160, 88, 146, 160, 88, 178, 65, 177, 36, 65, 177, 100, 131, 98, - 73, 130, 98, 201, 6, 197, 146, 4, 197, 146, 15, 107, 20, 12, 20, 75, 18, 20, 75, 54, - 40, 150, 36, 40, 150, 108, 80, 44, 73, 80, 44, 217, 160, 88, 146, 160, 88, 178, 65, 177, - 36, 65, 177, 228, 195, 26, 5, 3, 197, 146, 4, 197, 146, 13, 138, 37, 9, 138, 37, 27, - 20, 75, 18, 20, 75, 54, 40, 150, 36, 40, 150, 108, 80, 44, 73, 80, 44, 249, 176, 70, - 193, 64, 177, 36, 65, 177, 100, 131, 98, 73, 130, 98, 201, 6, 197, 146, 4, 197, 146, 13, - 138, 37, 9, 138, 37, 27, 20, 75, 18, 20, 75, 62, 172, 81, 48, 80, 44, 73, 80, 44, - 217, 160, 88, 146, 160, 88, 178, 65, 177, 36, 65, 177, 100, 131, 98, 73, 130, 98, 201, 6, - 197, 146, 4, 197, 146, 15, 107, 20, 12, 20, 75, 18, 20, 75, 54, 40, 150, 36, 40, 150, - 108, 80, 44, 73, 80, 44, 217, 160, 88, 146, 160, 88, 178, 65, 177, 36, 65, 177, 228, 195, - 26, 5, 3, 197, 146, 4, 197, 146, 13, 138, 37, 9, 138, 37, 27, 20, 75, 18, 20, 75, - 54, 40, 150, 36, 40, 150, 108, 80, 44, 73, 80, 44, 249, 176, 70, 193, 64, 177, 36, 65, - 177, 100, 131, 98, 73, 130, 98, 201, 6, 197, 146, 4, 197, 146, 13, 138, 37, 9, 138, 37, - 27, 20, 75, 18, 20, 75, 62, 172, 81, 48, 80, 44, 73, 80, 44, 217, 160, 88, 146, 160, - 88, 178, 65, 177, 36, 65, 177, 100, 131, 98, 73, 130, 98, 201, 6, 197, 146, 4, 197, 146, - 15, 107, 20, 12, 20, 75, 18, 20, 75, 54, 40, 150, 36, 40, 150, 108, 80, 44, 73, 80, - 44, 217, 160, 88, 146, 160, 88, 178, 65, 177, 36, 65, 177, 228, 195, 26, 5, 3, 197, 146, - 4, 197, 146, 13, 138, 37, 9, 138, 37, 27, 20, 75, 18, 20, 75, 54, 40, 150, 36, 40, - 150, 108, 80, 44, 73, 80, 44, 249, 176, 70, 193, 64, 177, 36, 65, 177, 100, 131, 98, 73, - 130, 98, 201, 6, 197, 146, 4, 197, 146, 13, 138, 37, 9, 138, 37, 27, 20, 75, 18, 20, - 75, 62, 172, 81, 48, 80, 44, 73, 80, 44, 217, 160, 88, 146, 160, 88, 178, 65, 177, 36, - 65, 177, 100, 131, 98, 73, 130, 98, 201, 6, 197, 146, 4, 197, 146, 15, 107, 20, 12, 20, - 75, 18, 20, 75, 54, 40, 150, 36, 40, 150, 108, 80, 44, 73, 80, 44, 217, 160, 88, 146, - 160, 88, 178, 65, 177, 36, 65, 177, 228, 195, 26, 5, 3, 197, 146, 4, 197, 146, 13, 138, - 37, 9, 138, 37, 27, 20, 75, 18, 20, 75, 54, 40, 150, 36, 40, 150, 108, 80, 44, 73, - 80, 44, 249, 176, 70, 193, 64, 177, 36, 65, 177, 100, 131, 98, 73, 130, 98, 201, 6, 197, - 146, 4, 197, 146, 13, 138, 37, 9, 138, 37, 27, 20, 75, 18, 20, 75, 62, 172, 81, 48, - 80, 44, 73, 80, 44, 217, 160, 88, 146, 160, 88, 178, 65, 177, 36, 65, 177, 100, 131, 98, - 73, 130, 98, 201, 6, 197, 146, 4, 197, 146, 15, 107, 20, 12, 20, 75, 18, 20, 75, 54, - 40, 150, 36, 40, 150, 108, 80, 44, 73, 80, 44, 217, 160, 88, 146, 160, 88, 178, 65, 177, - 36, 65, 177, 228, 195, 26, 5, 3, 197, 146, 4, 197, 146, 13, 138, 37, 9, 138, 37, 27, - 20, 75, 18, 20, 75, 54, 40, 150, 36, 40, 150, 108, 80, 44, 73, 80, 44, 249, 176, 70, - 193, 64, 177, 36, 65, 177, 100, 131, 98, 73, 130, 98, 201, 6, 197, 146, 4, 197, 146, 13, - 138, 37, 9, 138, 37, 27, 20, 75, 18, 20, 75, 62, 172, 81, 48, 80, 44, 73, 80, 44, - 217, 160, 88, 146, 160, 88, 178, 65, 177, 36, 65, 177, 100, 131, 98, 73, 130, 98, 201, 6, - 197, 146, 4, 197, 146, 15, 107, 20, 12, 20, 75, 18, 20, 75, 54, 40, 150, 36, 40, 150, - 108, 80, 44, 73, 80, 44, 217, 160, 88, 146, 160, 88, 178, 65, 177, 36, 65, 177, 228, 195, - 108, 48, 223, 177, 114, 88, 102, 249, 16, 182, 154, 112, 187, 37, 64, 177, 204, 43, 138, 37, - 19, 20, 203, 188, 162, 88, 50, 65, 177, 204, 43, 138, 37, 19, 20, 203, 188, 162, 88, 50, - 65, 177, 204, 43, 138, 37, 23, 102, 131, 41, 97, 194, 237, 150, 0, 197, 210, 213, 132, 219, - 45, 1, 138, 165, 171, 9, 183, 91, 2, 20, 75, 87, 19, 110, 183, 4, 40, 150, 174, 38, - 220, 110, 9, 80, 44, 93, 77, 184, 221, 18, 160, 88, 186, 154, 112, 187, 37, 64, 177, 116, - 53, 225, 118, 75, 192, 26, 197, 178, 86, 193, 64, 177, 116, 53, 225, 118, 75, 128, 98, 233, - 106, 194, 237, 150, 0, 197, 210, 213, 132, 219, 45, 1, 138, 165, 171, 9, 183, 91, 2, 20, - 75, 87, 19, 110, 183, 4, 40, 150, 174, 38, 220, 110, 9, 80, 44, 93, 77, 184, 221, 18, - 176, 70, 177, 172, 85, 48, 80, 44, 93, 77, 184, 221, 18, 160, 88, 186, 154, 112, 187, 37, - 64, 177, 116, 53, 225, 118, 75, 128, 98, 233, 106, 194, 237, 150, 0, 197, 210, 213, 132, 219, - 45, 1, 138, 165, 171, 9, 183, 91, 2, 20, 75, 87, 19, 110, 183, 4, 172, 81, 44, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 2, 96, 103, 43, 135, 21, 46, 251, 112, 187, 37, 64, 177, 116, 45, 138, 165, 35, - 40, 150, 174, 69, 177, 116, 4, 197, 210, 181, 40, 150, 142, 160, 88, 186, 22, 197, 210, 17, - 20, 75, 215, 162, 88, 186, 178, 134, 206, 138, 242, 38, 220, 110, 9, 80, 44, 93, 77, 184, - 221, 18, 160, 88, 186, 154, 112, 187, 37, 64, 177, 116, 53, 225, 118, 75, 128, 98, 233, 106, - 194, 237, 150, 0, 197, 210, 213, 132, 219, 45, 1, 138, 165, 171, 9, 183, 91, 2, 20, 75, - 87, 19, 110, 183, 4, 172, 81, 44, 107, 21, 12, 20, 75, 87, 19, 110, 183, 4, 40, 150, - 174, 38, 220, 110, 9, 80, 44, 93, 77, 184, 221, 18, 160, 88, 186, 154, 112, 187, 37, 64, - 177, 116, 53, 225, 118, 75, 128, 98, 233, 106, 194, 237, 150, 0, 197, 210, 213, 132, 219, 45, - 1, 107, 20, 203, 90, 5, 3, 197, 210, 213, 132, 219, 45, 1, 138, 165, 171, 9, 183, 91, - 2, 20, 75, 87, 19, 110, 183, 4, 40, 150, 174, 38, 220, 110, 9, 80, 44, 93, 77, 184, - 221, 18, 160, 88, 186, 154, 112, 187, 37, 64, 177, 116, 53, 225, 118, 75, 192, 26, 197, 18, - 11, 230, 68, 174, 211, 149, 237, 227, 249, 180, 207, 9, 215, 41, 1, 138, 37, 9, 138, 37, - 27, 20, 75, 18, 20, 75, 54, 40, 150, 36, 40, 150, 108, 80, 44, 73, 80, 44, 217, 160, - 88, 146, 160, 88, 242, 97, 141, 130, 129, 98, 73, 130, 98, 201, 6, 197, 146, 4, 197, 146, - 13, 138, 37, 9, 138, 37, 27, 20, 75, 18, 20, 75, 54, 40, 150, 36, 40, 150, 124, 88, - 163, 96, 160, 88, 146, 160, 88, 178, 65, 177, 36, 65, 177, 100, 131, 98, 73, 130, 98, 201, - 6, 197, 146, 4, 197, 146, 13, 138, 37, 9, 138, 37, 31, 214, 40, 24, 40, 150, 36, 40, - 150, 108, 80, 44, 73, 80, 44, 217, 160, 88, 146, 160, 88, 178, 65, 177, 36, 65, 177, 100, - 131, 98, 73, 130, 98, 201, 135, 53, 10, 6, 138, 37, 9, 138, 37, 27, 20, 75, 18, 20, - 75, 54, 40, 150, 36, 40, 150, 108, 80, 44, 73, 80, 44, 217, 160, 88, 146, 160, 88, 242, - 97, 141, 130, 129, 98, 73, 130, 98, 201, 6, 197, 146, 4, 197, 146, 13, 138, 37, 9, 138, - 37, 27, 20, 75, 18, 20, 75, 54, 40, 150, 36, 40, 150, 124, 88, 163, 96, 160, 88, 146, - 160, 88, 178, 65, 177, 36, 65, 177, 100, 131, 98, 73, 130, 98, 201, 6, 197, 146, 4, 197, - 146, 13, 138, 37, 9, 138, 37, 31, 214, 40, 24, 40, 150, 36, 40, 150, 108, 80, 44, 73, - 80, 44, 217, 160, 88, 146, 160, 88, 178, 65, 177, 36, 65, 177, 100, 131, 98, 73, 130, 98, - 201, 135, 53, 10, 6, 138, 37, 9, 138, 37, 27, 20, 75, 18, 20, 75, 54, 40, 150, 36, - 40, 150, 108, 80, 44, 73, 80, 44, 217, 160, 88, 146, 160, 88, 242, 97, 141, 130, 129, 98, - 73, 130, 98, 201, 6, 197, 146, 4, 197, 146, 13, 138, 37, 9, 138, 37, 27, 20, 75, 18, - 20, 75, 54, 40, 150, 36, 40, 150, 124, 88, 163, 96, 160, 88, 146, 160, 88, 178, 65, 177, - 36, 65, 177, 100, 131, 98, 73, 130, 98, 201, 6, 197, 146, 4, 197, 146, 13, 138, 37, 9, - 138, 37, 31, 214, 40, 24, 40, 150, 36, 40, 150, 108, 80, 44, 73, 80, 44, 217, 160, 88, - 146, 160, 88, 178, 65, 177, 36, 65, 177, 100, 131, 98, 73, 130, 98, 201, 135, 53, 10, 6, - 138, 37, 9, 138, 37, 27, 20, 75, 18, 20, 75, 54, 40, 150, 36, 40, 150, 108, 80, 44, - 73, 80, 44, 217, 160, 88, 146, 160, 88, 242, 97, 141, 130, 129, 98, 73, 130, 98, 201, 6, - 197, 146, 4, 197, 146, 13, 138, 37, 9, 138, 37, 27, 20, 75, 18, 20, 75, 54, 40, 150, - 36, 40, 150, 124, 88, 163, 96, 160, 88, 146, 160, 88, 178, 65, 177, 36, 65, 177, 100, 131, - 98, 73, 130, 98, 201, 6, 197, 146, 4, 197, 146, 13, 138, 37, 9, 138, 37, 31, 214, 40, - 24, 40, 150, 36, 40, 150, 108, 80, 44, 73, 80, 44, 217, 160, 88, 146, 160, 88, 178, 65, - 177, 36, 65, 177, 100, 131, 98, 73, 130, 98, 201, 135, 53, 10, 6, 138, 37, 9, 138, 37, - 27, 20, 75, 18, 20, 75, 54, 40, 150, 36, 40, 150, 108, 80, 44, 73, 80, 44, 217, 160, - 88, 146, 160, 88, 242, 97, 141, 130, 129, 98, 73, 130, 98, 201, 6, 197, 146, 4, 197, 146, - 13, 138, 37, 9, 138, 37, 27, 20, 75, 18, 20, 75, 54, 40, 150, 36, 40, 150, 124, 88, - 163, 96, 160, 88, 146, 160, 88, 178, 65, 177, 36, 65, 177, 100, 131, 98, 73, 130, 98, 201, - 6, 197, 146, 4, 197, 146, 13, 138, 37, 9, 138, 37, 31, 214, 40, 24, 40, 150, 36, 40, - 150, 108, 80, 44, 73, 80, 44, 217, 160, 88, 146, 160, 88, 178, 65, 177, 36, 65, 177, 100, - 131, 98, 73, 130, 98, 201, 135, 53, 10, 6, 138, 37, 9, 138, 37, 27, 20, 75, 18, 20, - 75, 54, 40, 150, 36, 40, 150, 108, 80, 44, 73, 80, 44, 217, 160, 88, 146, 160, 88, 242, - 97, 141, 130, 129, 98, 73, 130, 98, 201, 6, 197, 146, 4, 197, 146, 13, 138, 37, 9, 138, - 37, 27, 20, 75, 18, 20, 75, 54, 40, 150, 36, 40, 150, 124, 88, 163, 96, 160, 88, 146, - 160, 88, 178, 65, 177, 36, 65, 177, 100, 131, 98, 73, 130, 98, 201, 6, 197, 146, 4, 197, - 146, 13, 138, 37, 9, 138, 37, 31, 214, 40, 24, 40, 150, 36, 40, 150, 108, 80, 44, 73, - 80, 44, 217, 160, 88, 146, 160, 88, 178, 65, 177, 36, 65, 177, 100, 131, 98, 73, 130, 98, - 201, 135, 53, 10, 6, 138, 37, 9, 138, 37, 27, 20, 75, 18, 20, 75, 54, 40, 150, 36, - 40, 150, 108, 80, 44, 73, 80, 44, 217, 160, 88, 146, 160, 88, 242, 97, 141, 130, 129, 98, - 73, 130, 98, 201, 6, 197, 146, 4, 197, 146, 13, 138, 37, 9, 138, 37, 27, 20, 75, 18, - 20, 75, 54, 40, 150, 36, 40, 150, 124, 152, 13, 230, 59, 86, 14, 203, 44, 31, 194, 86, - 19, 110, 183, 4, 40, 150, 121, 69, 177, 100, 130, 98, 153, 87, 20, 75, 38, 40, 150, 121, - 69, 177, 100, 130, 98, 153, 87, 20, 75, 38, 40, 150, 121, 69, 177, 228, 194, 108, 48, 37, - 76, 184, 221, 18, 160, 88, 186, 154, 112, 187, 37, 64, 177, 116, 53, 225, 118, 75, 128, 98, - 233, 106, 194, 237, 150, 0, 197, 210, 213, 132, 219, 45, 1, 138, 165, 171, 9, 183, 91, 2, - 20, 75, 87, 19, 110, 183, 4, 40, 150, 174, 38, 220, 110, 9, 88, 163, 88, 214, 42, 24, - 40, 150, 174, 38, 220, 110, 9, 80, 44, 93, 77, 184, 221, 18, 160, 88, 186, 154, 112, 187, - 37, 64, 177, 116, 53, 225, 118, 75, 128, 98, 233, 106, 194, 237, 150, 0, 197, 210, 213, 132, - 219, 45, 1, 138, 165, 171, 9, 183, 91, 2, 214, 40, 150, 181, 10, 6, 138, 165, 171, 9, - 183, 91, 2, 20, 75, 87, 19, 110, 183, 4, 40, 150, 174, 38, 220, 110, 9, 80, 44, 93, - 77, 184, 221, 18, 160, 88, 186, 154, 112, 187, 37, 64, 177, 116, 53, 225, 118, 75, 128, 98, - 233, 106, 194, 237, 150, 128, 53, 138, 69, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 100, 37, 0, 56, 218, 202, 201, 181, 242, 0, 174, 35, 34, 34, 34, 34, 34, 50, - 10, 150, 176, 188, 10, 91, 61, 131, 235, 136, 136, 136, 136, 136, 136, 140, 130, 18, 152, 241, - 176, 191, 253, 14, 86, 118, 229, 159, 215, 217, 239, 119, 177, 114, 58, 254, 185, 148, 99, 127, - 239, 179, 91, 185, 171, 149, 55, 88, 249, 134, 149, 63, 88, 249, 95, 43, 127, 180, 242, 101, - 43, 207, 181, 114, 97, 222, 78, 68, 68, 68, 68, 10, 128, 18, 152, 81, 176, 191, 251, 125, - 173, 252, 206, 202, 255, 89, 249, 172, 149, 3, 233, 247, 251, 90, 121, 127, 245, 251, 63, 91, - 121, 138, 149, 29, 234, 117, 164, 95, 246, 247, 189, 176, 149, 127, 179, 242, 119, 255, 96, 204, - 241, 63, 86, 238, 202, 251, 16, 17, 17, 17, 145, 158, 65, 9, 204, 210, 217, 223, 252, 26, - 244, 26, 184, 239, 160, 150, 160, 216, 191, 223, 199, 21, 204, 221, 235, 251, 145, 126, 217, 223, - 247, 154, 252, 7, 159, 227, 31, 86, 174, 202, 251, 17, 145, 213, 98, 159, 227, 187, 91, 57, - 110, 129, 114, 8, 239, 75, 100, 35, 217, 135, 225, 242, 86, 158, 108, 229, 147, 86, 126, 106, - 229, 175, 86, 254, 219, 202, 207, 172, 124, 196, 202, 163, 173, 92, 128, 183, 147, 246, 236, 239, - 247, 65, 204, 250, 189, 149, 179, 114, 221, 69, 216, 126, 142, 229, 157, 35, 92, 69, 191, 28, - 215, 93, 6, 172, 120, 2, 99, 199, 187, 13, 225, 115, 240, 94, 43, 167, 90, 249, 19, 194, - 240, 158, 223, 34, 36, 1, 111, 181, 114, 148, 149, 131, 120, 219, 177, 176, 99, 123, 90, 248, - 211, 207, 216, 191, 250, 253, 25, 16, 58, 199, 236, 120, 222, 151, 244, 199, 254, 190, 167, 183, - 242, 75, 132, 247, 147, 39, 144, 247, 176, 114, 89, 43, 231, 179, 114, 37, 43, 143, 64, 56, - 87, 212, 125, 128, 247, 35, 34, 171, 197, 62, 199, 111, 162, 207, 117, 91, 199, 240, 190, 68, - 90, 67, 24, 138, 81, 119, 2, 215, 25, 59, 59, 230, 131, 16, 146, 150, 54, 188, 51, 252, - 14, 43, 7, 240, 126, 100, 62, 251, 187, 93, 28, 241, 33, 34, 47, 225, 186, 93, 217, 62, - 46, 138, 208, 249, 97, 111, 228, 186, 203, 130, 21, 77, 96, 236, 56, 247, 182, 242, 106, 196, - 59, 246, 77, 190, 102, 229, 126, 86, 118, 225, 253, 45, 147, 29, 207, 99, 233, 56, 167, 206, - 87, 253, 254, 116, 8, 23, 47, 216, 219, 120, 95, 99, 128, 208, 193, 127, 32, 66, 242, 248, - 77, 132, 164, 210, 63, 99, 62, 204, 202, 135, 201, 125, 201, 202, 235, 17, 18, 130, 125, 121, - 251, 49, 177, 227, 187, 5, 170, 68, 50, 6, 179, 119, 207, 252, 2, 147, 134, 246, 201, 70, - 194, 154, 124, 246, 161, 4, 70, 150, 1, 43, 158, 192, 216, 241, 30, 97, 229, 111, 20, 67, - 27, 255, 101, 229, 126, 188, 191, 146, 172, 189, 11, 90, 217, 145, 127, 222, 23, 132, 73, 205, - 23, 229, 159, 247, 205, 218, 120, 89, 253, 15, 89, 241, 142, 241, 165, 185, 110, 23, 136, 223, - 221, 241, 14, 206, 54, 174, 187, 44, 88, 193, 4, 198, 142, 113, 31, 132, 187, 43, 139, 242, - 59, 152, 87, 225, 253, 46, 11, 226, 73, 244, 23, 169, 206, 107, 232, 247, 238, 118, 245, 58, - 203, 102, 199, 115, 93, 43, 39, 240, 65, 206, 225, 113, 191, 221, 202, 101, 120, 127, 171, 194, - 142, 253, 39, 20, 211, 25, 185, 142, 200, 58, 195, 154, 125, 246, 161, 4, 70, 150, 1, 43, - 156, 192, 216, 177, 30, 130, 110, 87, 148, 99, 94, 128, 1, 174, 0, 34, 36, 47, 191, 66, - 56, 1, 245, 158, 196, 120, 12, 86, 94, 104, 229, 47, 86, 174, 204, 191, 239, 19, 194, 4, - 233, 255, 172, 254, 126, 117, 39, 97, 193, 191, 165, 109, 119, 99, 222, 89, 229, 233, 92, 119, - 153, 176, 98, 9, 12, 194, 221, 136, 207, 208, 49, 179, 216, 221, 138, 58, 79, 34, 71, 117, - 245, 207, 142, 231, 102, 86, 190, 133, 112, 236, 62, 60, 116, 27, 253, 126, 47, 132, 215, 202, - 175, 98, 250, 176, 166, 135, 215, 127, 191, 76, 118, 44, 251, 89, 121, 207, 246, 191, 108, 51, - 255, 28, 167, 94, 23, 191, 147, 252, 18, 43, 123, 242, 254, 199, 14, 225, 60, 81, 215, 203, - 240, 83, 145, 177, 195, 134, 127, 246, 69, 122, 133, 21, 77, 96, 236, 56, 119, 181, 242, 11, - 58, 246, 69, 221, 132, 247, 223, 39, 219, 255, 185, 173, 252, 168, 214, 158, 223, 46, 62, 3, - 215, 91, 20, 254, 153, 188, 76, 249, 178, 165, 69, 231, 48, 216, 254, 255, 181, 214, 94, 221, - 29, 184, 238, 60, 182, 205, 78, 86, 190, 203, 59, 66, 232, 124, 142, 234, 234, 44, 86, 47, - 129, 185, 51, 29, 175, 243, 164, 255, 217, 8, 67, 47, 183, 47, 67, 108, 255, 221, 25, 97, - 8, 159, 15, 85, 240, 59, 97, 245, 11, 3, 217, 195, 3, 37, 176, 191, 229, 245, 16, 230, - 27, 213, 249, 176, 17, 95, 189, 235, 14, 86, 46, 128, 90, 199, 196, 254, 189, 35, 194, 29, - 39, 127, 29, 223, 141, 48, 180, 164, 238, 219, 24, 209, 146, 196, 8, 115, 94, 94, 138, 48, - 252, 240, 63, 208, 238, 2, 147, 18, 24, 89, 123, 88, 243, 207, 190, 200, 224, 176, 186, 9, - 12, 31, 119, 221, 207, 17, 38, 140, 94, 21, 161, 83, 230, 171, 227, 28, 137, 48, 158, 148, - 253, 0, 5, 238, 136, 76, 217, 190, 207, 140, 112, 165, 152, 189, 5, 145, 36, 198, 126, 118, - 41, 132, 121, 7, 158, 144, 248, 137, 237, 120, 132, 171, 45, 15, 179, 114, 48, 232, 88, 49, - 155, 188, 76, 249, 221, 158, 98, 11, 22, 216, 190, 119, 67, 88, 40, 129, 249, 223, 190, 211, - 149, 33, 171, 255, 16, 222, 73, 229, 129, 92, 119, 217, 176, 122, 9, 204, 199, 232, 120, 221, - 189, 184, 30, 179, 58, 251, 35, 188, 175, 124, 168, 101, 177, 247, 209, 38, 177, 191, 227, 97, - 216, 58, 199, 203, 175, 178, 250, 162, 35, 123, 115, 221, 38, 8, 87, 112, 125, 245, 30, 191, - 10, 59, 245, 27, 100, 14, 223, 236, 131, 29, 195, 3, 232, 184, 156, 95, 132, 240, 225, 139, - 222, 217, 154, 22, 190, 186, 172, 4, 70, 214, 26, 214, 252, 179, 47, 178, 20, 152, 77, 4, - 78, 224, 58, 99, 100, 199, 249, 97, 58, 238, 169, 47, 90, 57, 11, 215, 159, 178, 223, 29, - 106, 229, 215, 181, 250, 183, 231, 58, 125, 66, 184, 178, 221, 116, 172, 158, 160, 248, 202, 61, - 126, 165, 197, 147, 22, 255, 114, 159, 199, 19, 19, 127, 166, 133, 39, 70, 77, 201, 139, 243, - 43, 160, 141, 127, 135, 62, 216, 254, 239, 68, 109, 78, 61, 141, 235, 54, 65, 120, 232, 157, - 95, 133, 98, 223, 183, 178, 19, 215, 95, 54, 172, 94, 2, 227, 239, 151, 58, 127, 152, 96, - 235, 132, 29, 133, 223, 67, 155, 2, 97, 114, 123, 253, 110, 132, 63, 208, 177, 113, 178, 251, - 60, 182, 237, 4, 91, 231, 146, 248, 57, 109, 105, 137, 166, 181, 125, 30, 108, 237, 160, 121, - 210, 114, 73, 174, 231, 236, 231, 39, 214, 234, 57, 37, 48, 178, 182, 176, 230, 159, 125, 145, - 165, 193, 10, 38, 48, 8, 203, 164, 250, 56, 81, 230, 87, 38, 230, 78, 98, 183, 58, 231, - 64, 120, 66, 244, 87, 49, 192, 83, 186, 17, 238, 86, 240, 151, 246, 148, 47, 103, 27, 187, - 67, 51, 143, 95, 217, 244, 109, 99, 188, 243, 176, 15, 31, 71, 223, 16, 18, 40, 79, 24, - 217, 255, 103, 239, 62, 192, 103, 167, 170, 181, 129, 127, 74, 175, 210, 20, 68, 64, 16, 69, - 16, 81, 64, 81, 44, 40, 86, 176, 235, 197, 134, 5, 184, 22, 44, 96, 111, 88, 57, 138, - 5, 5, 177, 119, 81, 236, 92, 21, 123, 175, 216, 123, 47, 168, 40, 32, 22, 236, 229, 218, - 111, 123, 191, 181, 206, 74, 206, 217, 243, 78, 50, 147, 153, 73, 50, 59, 115, 222, 223, 243, - 236, 135, 195, 63, 43, 201, 94, 83, 50, 217, 201, 206, 222, 62, 168, 194, 62, 28, 95, 5, - 213, 3, 2, 184, 59, 115, 108, 14, 48, 188, 6, 12, 15, 91, 235, 93, 24, 58, 255, 204, - 203, 122, 136, 174, 122, 233, 93, 7, 239, 14, 178, 53, 199, 205, 202, 182, 177, 171, 149, 111, - 37, 219, 245, 99, 218, 150, 28, 215, 7, 68, 23, 152, 212, 93, 57, 166, 132, 152, 120, 52, - 165, 6, 140, 172, 36, 108, 0, 223, 125, 25, 24, 196, 9, 176, 119, 1, 242, 171, 153, 231, - 91, 185, 15, 199, 228, 12, 241, 96, 239, 13, 172, 156, 100, 229, 11, 229, 55, 160, 224, 87, - 108, 159, 105, 229, 46, 86, 174, 192, 235, 230, 0, 241, 76, 73, 149, 79, 113, 108, 29, 139, - 189, 172, 149, 67, 249, 239, 93, 65, 60, 84, 252, 213, 209, 234, 118, 226, 66, 43, 187, 243, - 254, 187, 130, 241, 97, 81, 75, 31, 228, 88, 134, 232, 46, 87, 213, 71, 254, 243, 28, 155, - 11, 12, 175, 1, 83, 53, 188, 120, 175, 163, 239, 109, 200, 16, 119, 87, 191, 159, 188, 246, - 254, 126, 52, 190, 3, 54, 13, 226, 56, 230, 221, 96, 75, 47, 230, 152, 62, 32, 70, 131, - 76, 85, 78, 26, 138, 232, 74, 195, 212, 128, 145, 149, 131, 13, 228, 187, 47, 3, 130, 184, - 234, 92, 117, 53, 253, 214, 28, 155, 27, 171, 227, 118, 136, 57, 20, 154, 62, 252, 238, 39, - 151, 62, 194, 79, 237, 213, 180, 101, 64, 60, 216, 86, 229, 217, 28, 155, 19, 171, 223, 142, - 136, 174, 93, 93, 241, 225, 110, 215, 206, 133, 209, 39, 219, 231, 123, 184, 34, 133, 137, 179, - 236, 218, 242, 79, 243, 10, 133, 78, 71, 81, 91, 4, 134, 215, 128, 169, 58, 97, 244, 59, - 149, 254, 160, 117, 150, 23, 40, 86, 137, 189, 198, 143, 73, 94, 119, 239, 246, 81, 123, 103, - 212, 150, 93, 215, 202, 139, 17, 87, 83, 189, 91, 165, 95, 185, 189, 192, 202, 27, 16, 35, - 46, 86, 142, 240, 103, 127, 223, 31, 49, 82, 156, 243, 99, 118, 101, 215, 173, 46, 33, 174, - 52, 167, 252, 206, 223, 125, 17, 23, 251, 182, 178, 114, 176, 149, 151, 97, 252, 25, 25, 167, - 6, 140, 172, 28, 76, 249, 238, 219, 255, 31, 153, 44, 103, 222, 29, 211, 187, 134, 125, 10, - 241, 252, 235, 246, 233, 186, 37, 100, 240, 221, 151, 1, 65, 140, 20, 81, 37, 155, 201, 246, - 170, 88, 253, 238, 134, 120, 224, 107, 94, 231, 34, 147, 17, 47, 172, 30, 215, 231, 202, 21, - 178, 123, 232, 155, 33, 134, 32, 174, 26, 113, 171, 228, 183, 152, 143, 177, 178, 183, 149, 173, - 17, 221, 207, 252, 223, 254, 183, 73, 195, 47, 250, 193, 110, 41, 239, 143, 237, 247, 170, 168, - 158, 128, 210, 159, 99, 217, 140, 227, 157, 253, 253, 174, 28, 92, 200, 122, 182, 116, 12, 172, - 1, 227, 172, 142, 111, 166, 58, 151, 124, 84, 27, 31, 36, 226, 54, 104, 241, 202, 160, 4, - 196, 72, 137, 233, 243, 118, 149, 13, 122, 196, 115, 96, 239, 78, 226, 234, 124, 13, 53, 39, - 40, 246, 247, 199, 37, 113, 75, 153, 176, 19, 147, 143, 79, 37, 239, 114, 250, 121, 250, 155, - 26, 48, 178, 82, 208, 224, 187, 143, 201, 13, 24, 230, 23, 157, 175, 205, 219, 112, 200, 224, - 187, 47, 3, 97, 31, 144, 235, 36, 31, 150, 212, 71, 56, 54, 23, 86, 183, 167, 115, 101, - 231, 228, 93, 230, 150, 126, 117, 28, 49, 186, 88, 149, 19, 57, 54, 55, 136, 231, 119, 170, - 238, 194, 92, 132, 6, 93, 218, 44, 230, 16, 84, 63, 236, 239, 93, 255, 150, 54, 228, 48, - 226, 202, 113, 149, 39, 86, 196, 250, 193, 221, 243, 101, 126, 66, 189, 55, 199, 231, 4, 195, - 108, 192, 248, 64, 17, 167, 96, 124, 24, 206, 148, 95, 49, 127, 173, 149, 219, 66, 141, 153, - 86, 96, 244, 185, 144, 47, 240, 114, 103, 127, 223, 23, 49, 114, 95, 202, 79, 242, 253, 115, - 230, 119, 201, 206, 197, 232, 164, 157, 62, 42, 220, 88, 35, 198, 254, 182, 57, 226, 14, 172, - 243, 43, 177, 189, 223, 93, 179, 125, 110, 111, 229, 227, 69, 29, 170, 188, 17, 49, 248, 200, - 135, 232, 239, 106, 192, 200, 74, 65, 179, 239, 126, 218, 128, 241, 137, 32, 143, 75, 202, 3, - 173, 60, 3, 163, 231, 10, 126, 156, 24, 123, 126, 6, 25, 124, 247, 101, 32, 236, 195, 177, - 13, 98, 124, 123, 118, 10, 199, 230, 0, 241, 156, 75, 155, 188, 207, 229, 70, 188, 159, 62, - 97, 216, 13, 24, 31, 109, 140, 121, 151, 145, 203, 113, 108, 29, 68, 151, 140, 170, 19, 133, - 23, 113, 108, 95, 108, 223, 59, 33, 26, 184, 236, 175, 86, 118, 163, 216, 167, 112, 80, 225, - 249, 105, 156, 180, 203, 94, 223, 43, 89, 249, 32, 191, 232, 21, 124, 226, 71, 255, 241, 212, - 137, 229, 2, 48, 218, 181, 178, 234, 10, 172, 119, 41, 189, 56, 137, 241, 135, 114, 199, 134, - 68, 69, 12, 159, 234, 19, 224, 186, 15, 160, 190, 43, 217, 147, 203, 13, 97, 137, 119, 163, - 17, 199, 231, 39, 90, 121, 33, 98, 168, 88, 63, 25, 219, 35, 89, 238, 199, 192, 151, 39, - 101, 171, 116, 125, 145, 161, 195, 148, 239, 190, 195, 104, 3, 230, 209, 188, 220, 33, 30, 89, - 56, 35, 137, 59, 129, 99, 28, 50, 249, 238, 203, 0, 32, 250, 149, 251, 72, 75, 37, 127, - 56, 123, 166, 185, 47, 250, 96, 117, 186, 30, 70, 175, 222, 49, 239, 95, 237, 119, 103, 110, - 105, 101, 63, 43, 7, 22, 255, 246, 70, 143, 63, 112, 198, 253, 149, 253, 10, 238, 97, 188, - 159, 190, 97, 160, 13, 24, 196, 193, 40, 125, 232, 206, 121, 99, 120, 230, 33, 16, 17, 13, - 105, 111, 248, 164, 188, 207, 124, 101, 95, 217, 62, 32, 250, 234, 86, 57, 59, 137, 185, 2, - 170, 71, 144, 243, 201, 55, 119, 72, 183, 39, 237, 64, 12, 218, 225, 15, 89, 251, 168, 123, - 179, 240, 207, 230, 35, 161, 81, 203, 102, 230, 175, 25, 214, 55, 232, 253, 174, 201, 218, 9, - 67, 41, 230, 69, 197, 114, 231, 87, 90, 39, 206, 9, 129, 232, 42, 82, 251, 29, 65, 116, - 229, 44, 189, 155, 151, 203, 236, 16, 39, 143, 62, 223, 85, 89, 252, 152, 187, 238, 78, 55, - 98, 112, 22, 31, 22, 55, 141, 209, 195, 212, 27, 48, 52, 248, 238, 59, 52, 104, 192, 56, - 196, 96, 0, 190, 29, 119, 14, 47, 119, 208, 119, 95, 102, 97, 31, 146, 189, 16, 13, 25, - 255, 16, 102, 217, 229, 2, 209, 103, 186, 138, 127, 25, 252, 170, 216, 196, 19, 19, 68, 119, - 185, 180, 191, 242, 131, 57, 102, 25, 48, 220, 6, 204, 225, 92, 97, 243, 100, 142, 107, 10, - 49, 65, 39, 91, 218, 123, 132, 152, 243, 230, 66, 170, 79, 233, 198, 69, 204, 155, 120, 65, - 161, 246, 0, 46, 243, 67, 60, 115, 197, 35, 13, 206, 234, 93, 200, 244, 24, 151, 43, 140, - 62, 43, 57, 54, 34, 31, 226, 217, 182, 114, 120, 85, 191, 80, 116, 77, 142, 153, 7, 214, - 63, 231, 248, 115, 94, 38, 179, 65, 28, 175, 249, 34, 222, 195, 40, 134, 135, 129, 247, 59, - 206, 235, 238, 54, 245, 205, 246, 125, 51, 140, 78, 26, 218, 86, 185, 37, 239, 75, 170, 97, - 202, 119, 191, 132, 134, 13, 24, 135, 245, 23, 43, 43, 187, 163, 57, 232, 187, 47, 171, 194, - 62, 196, 55, 47, 62, 204, 236, 159, 86, 14, 231, 248, 58, 136, 103, 54, 94, 111, 229, 76, - 94, 214, 23, 196, 8, 54, 222, 173, 165, 44, 62, 7, 74, 21, 191, 98, 156, 198, 113, 249, - 10, 111, 187, 79, 182, 255, 147, 203, 138, 22, 252, 238, 88, 237, 21, 213, 38, 48, 58, 76, - 163, 123, 43, 199, 244, 201, 246, 127, 119, 170, 79, 201, 187, 199, 120, 195, 147, 79, 8, 220, - 133, 168, 121, 216, 95, 230, 135, 56, 73, 174, 122, 222, 202, 239, 164, 250, 232, 54, 47, 183, - 114, 58, 226, 121, 139, 143, 88, 249, 75, 26, 68, 78, 229, 237, 75, 61, 196, 157, 236, 210, - 25, 21, 203, 111, 157, 44, 255, 48, 47, 159, 151, 109, 235, 147, 197, 54, 253, 123, 166, 239, - 212, 156, 16, 223, 29, 31, 132, 36, 245, 13, 36, 221, 167, 81, 253, 27, 251, 184, 116, 59, - 125, 179, 253, 223, 145, 43, 212, 146, 44, 231, 229, 202, 17, 166, 124, 247, 75, 104, 216, 128, - 193, 232, 29, 152, 247, 240, 242, 18, 244, 221, 151, 85, 97, 31, 224, 215, 21, 31, 102, 246, - 8, 142, 157, 6, 209, 245, 105, 105, 87, 96, 109, 223, 135, 82, 14, 243, 186, 136, 183, 221, - 39, 196, 149, 236, 84, 237, 213, 148, 166, 108, 27, 207, 163, 109, 158, 207, 49, 125, 179, 58, - 124, 145, 234, 84, 242, 161, 97, 171, 28, 205, 219, 144, 197, 217, 235, 250, 120, 126, 161, 17, - 67, 192, 143, 60, 147, 84, 66, 156, 180, 249, 93, 229, 159, 142, 174, 178, 150, 95, 248, 216, - 150, 215, 145, 106, 24, 29, 101, 111, 236, 164, 214, 254, 118, 66, 178, 252, 9, 188, 124, 94, - 136, 81, 229, 74, 181, 67, 54, 203, 100, 246, 218, 61, 63, 121, 29, 157, 159, 20, 174, 27, - 100, 5, 49, 66, 228, 133, 163, 33, 107, 175, 146, 47, 237, 119, 210, 65, 13, 152, 165, 195, - 148, 239, 126, 9, 205, 27, 48, 233, 100, 227, 39, 243, 242, 18, 244, 221, 151, 85, 129, 241, - 145, 109, 156, 63, 48, 186, 212, 3, 236, 60, 176, 58, 13, 152, 207, 81, 125, 22, 30, 122, - 219, 182, 241, 8, 218, 230, 159, 56, 166, 111, 168, 31, 230, 186, 202, 151, 81, 243, 80, 178, - 44, 6, 113, 197, 56, 229, 119, 94, 118, 225, 56, 134, 152, 229, 57, 29, 2, 180, 116, 7, - 142, 149, 106, 246, 90, 29, 155, 188, 110, 247, 171, 88, 254, 132, 100, 249, 131, 120, 249, 188, - 48, 122, 225, 106, 105, 93, 153, 134, 12, 49, 201, 179, 143, 230, 148, 122, 21, 197, 188, 132, - 150, 187, 181, 221, 100, 151, 9, 43, 222, 128, 65, 204, 101, 199, 221, 219, 38, 149, 215, 240, - 54, 186, 134, 41, 223, 253, 18, 38, 52, 96, 16, 35, 117, 250, 115, 201, 167, 98, 253, 243, - 214, 222, 229, 244, 242, 105, 92, 10, 250, 238, 203, 42, 64, 204, 43, 80, 229, 121, 28, 59, - 68, 24, 238, 51, 48, 62, 60, 106, 234, 44, 142, 153, 21, 70, 175, 228, 186, 127, 113, 204, - 50, 96, 244, 106, 208, 36, 75, 31, 20, 98, 85, 97, 188, 75, 216, 15, 57, 166, 14, 198, - 239, 236, 185, 172, 191, 95, 57, 193, 104, 87, 202, 135, 84, 44, 127, 80, 178, 252, 169, 188, - 124, 94, 24, 157, 139, 229, 178, 188, 92, 38, 67, 12, 73, 251, 195, 228, 53, 116, 191, 179, - 178, 99, 18, 115, 99, 140, 119, 133, 125, 67, 186, 157, 161, 195, 248, 156, 62, 185, 52, 96, - 124, 180, 203, 89, 124, 140, 183, 209, 53, 76, 249, 238, 151, 48, 219, 60, 48, 126, 241, 233, - 182, 188, 141, 20, 244, 221, 151, 166, 16, 125, 198, 63, 86, 148, 99, 121, 249, 50, 161, 254, - 142, 197, 74, 116, 213, 193, 112, 27, 48, 60, 244, 241, 71, 57, 102, 86, 182, 141, 211, 104, - 155, 151, 112, 76, 23, 16, 243, 57, 248, 15, 123, 93, 225, 147, 231, 42, 126, 18, 192, 235, - 165, 165, 247, 31, 159, 85, 130, 241, 225, 222, 253, 1, 227, 177, 121, 4, 170, 160, 122, 248, - 245, 7, 114, 156, 84, 195, 232, 201, 201, 51, 42, 150, 251, 195, 214, 165, 207, 241, 242, 121, - 33, 70, 196, 116, 254, 221, 218, 148, 151, 203, 100, 24, 63, 158, 186, 251, 38, 203, 171, 158, - 141, 241, 17, 20, 87, 170, 203, 14, 212, 128, 153, 27, 166, 124, 247, 75, 20, 55, 137, 119, - 201, 190, 26, 175, 207, 160, 239, 190, 52, 129, 232, 255, 154, 202, 106, 254, 10, 171, 207, 17, - 84, 191, 210, 141, 56, 118, 136, 48, 220, 6, 204, 107, 168, 190, 126, 146, 191, 208, 129, 6, - 209, 5, 43, 245, 37, 142, 233, 2, 102, 255, 33, 153, 199, 87, 121, 191, 210, 156, 189, 126, - 95, 226, 23, 212, 188, 20, 13, 186, 236, 33, 38, 80, 100, 55, 225, 56, 169, 102, 175, 213, - 62, 201, 235, 54, 246, 224, 173, 253, 109, 83, 140, 54, 242, 111, 200, 49, 179, 66, 12, 184, - 82, 14, 223, 250, 51, 94, 46, 147, 33, 70, 221, 228, 105, 7, 188, 219, 239, 186, 239, 11, - 170, 239, 76, 86, 206, 205, 49, 100, 80, 3, 102, 110, 152, 242, 221, 47, 97, 180, 1, 227, - 221, 191, 238, 76, 197, 135, 228, 118, 231, 91, 217, 146, 215, 79, 65, 223, 125, 105, 10, 49, - 177, 88, 234, 44, 142, 89, 38, 196, 108, 218, 85, 174, 203, 177, 67, 132, 225, 54, 96, 238, - 203, 21, 54, 247, 224, 184, 166, 108, 221, 3, 120, 99, 230, 185, 28, 215, 5, 204, 254, 67, - 50, 15, 53, 96, 22, 128, 241, 231, 163, 74, 31, 181, 114, 61, 142, 119, 136, 73, 82, 95, - 76, 241, 206, 31, 236, 159, 56, 236, 186, 172, 103, 175, 213, 70, 88, 63, 104, 133, 95, 161, - 223, 184, 34, 198, 251, 183, 151, 252, 170, 254, 196, 201, 108, 109, 249, 253, 48, 97, 174, 24, - 91, 118, 163, 100, 123, 181, 39, 78, 82, 205, 94, 179, 15, 39, 175, 95, 233, 54, 201, 242, - 93, 48, 254, 108, 140, 15, 93, 187, 212, 137, 157, 187, 128, 76, 27, 48, 67, 224, 159, 7, - 76, 249, 238, 59, 76, 120, 6, 166, 88, 126, 84, 178, 252, 165, 188, 60, 5, 125, 247, 165, - 41, 140, 159, 56, 190, 139, 99, 150, 9, 213, 243, 131, 184, 155, 115, 236, 16, 97, 184, 13, - 24, 127, 56, 250, 191, 169, 206, 254, 160, 97, 229, 68, 87, 211, 96, 252, 71, 198, 45, 253, - 65, 210, 20, 70, 103, 17, 78, 93, 135, 99, 165, 93, 136, 121, 121, 124, 248, 234, 58, 126, - 133, 207, 103, 140, 62, 211, 202, 107, 17, 13, 155, 186, 174, 127, 19, 251, 95, 203, 56, 123, - 205, 222, 155, 188, 126, 71, 84, 44, 247, 7, 146, 211, 238, 72, 254, 111, 191, 123, 62, 114, - 135, 204, 254, 255, 234, 88, 191, 45, 239, 178, 92, 57, 16, 11, 98, 72, 236, 210, 204, 163, - 77, 110, 232, 80, 61, 44, 242, 200, 60, 30, 136, 33, 199, 217, 189, 210, 152, 85, 128, 241, - 223, 22, 53, 96, 102, 128, 41, 223, 125, 135, 41, 13, 24, 135, 209, 247, 161, 118, 46, 30, - 232, 187, 47, 77, 217, 7, 228, 176, 228, 195, 226, 62, 197, 49, 203, 100, 245, 185, 6, 213, - 175, 212, 218, 104, 55, 203, 132, 129, 54, 96, 28, 170, 31, 110, 247, 31, 197, 169, 221, 122, - 82, 22, 255, 68, 222, 136, 249, 54, 199, 45, 27, 170, 159, 165, 112, 7, 114, 236, 16, 32, - 242, 57, 55, 41, 89, 127, 167, 172, 126, 151, 71, 116, 65, 152, 151, 95, 113, 214, 179, 47, - 115, 176, 215, 237, 222, 201, 235, 248, 126, 94, 238, 236, 239, 251, 90, 185, 36, 137, 115, 62, - 130, 164, 55, 38, 253, 228, 197, 47, 112, 164, 252, 138, 255, 88, 127, 120, 196, 29, 209, 242, - 153, 39, 239, 3, 175, 81, 136, 230, 128, 241, 137, 41, 221, 81, 201, 242, 237, 49, 62, 194, - 231, 175, 48, 225, 206, 216, 16, 65, 13, 152, 133, 160, 217, 119, 191, 73, 3, 102, 79, 172, - 159, 240, 214, 47, 56, 109, 95, 17, 163, 239, 190, 52, 103, 31, 144, 219, 21, 31, 150, 210, - 183, 56, 102, 153, 16, 67, 240, 241, 40, 41, 110, 169, 147, 28, 182, 5, 195, 110, 192, 92, - 13, 49, 162, 8, 59, 27, 13, 230, 217, 64, 76, 106, 149, 94, 109, 73, 29, 201, 241, 203, - 134, 213, 107, 192, 156, 69, 121, 156, 206, 49, 185, 177, 58, 110, 139, 184, 203, 194, 221, 95, - 166, 241, 103, 104, 86, 162, 219, 233, 50, 32, 70, 180, 42, 135, 163, 246, 227, 241, 245, 57, - 198, 217, 223, 175, 96, 229, 19, 69, 220, 36, 62, 112, 204, 21, 121, 125, 135, 209, 59, 157, - 239, 229, 229, 210, 12, 226, 187, 242, 179, 228, 181, 116, 254, 255, 235, 6, 191, 176, 127, 223, - 158, 150, 187, 23, 165, 219, 25, 58, 168, 1, 179, 16, 52, 248, 238, 163, 65, 3, 198, 97, - 116, 62, 175, 55, 87, 44, 215, 119, 95, 154, 195, 104, 235, 218, 93, 204, 49, 203, 102, 117, - 250, 38, 213, 209, 249, 108, 174, 181, 227, 136, 15, 5, 6, 220, 128, 113, 136, 147, 201, 42, - 191, 182, 242, 40, 84, 156, 164, 32, 174, 252, 253, 187, 149, 243, 70, 214, 88, 239, 19, 188, - 78, 151, 108, 127, 59, 34, 70, 181, 154, 86, 202, 49, 236, 153, 95, 85, 226, 88, 46, 159, - 230, 253, 46, 27, 6, 216, 128, 41, 89, 93, 175, 130, 152, 191, 162, 110, 66, 209, 148, 143, - 124, 179, 47, 111, 67, 102, 99, 175, 225, 163, 147, 215, 244, 219, 86, 54, 231, 152, 18, 162, - 11, 147, 15, 244, 225, 119, 204, 252, 243, 255, 55, 43, 63, 66, 220, 21, 168, 29, 64, 193, - 150, 29, 142, 245, 93, 83, 253, 100, 73, 141, 206, 5, 216, 235, 119, 235, 226, 181, 76, 157, - 70, 49, 111, 166, 229, 254, 240, 255, 193, 105, 204, 144, 65, 13, 152, 133, 97, 202, 119, 31, - 209, 133, 212, 207, 101, 188, 92, 33, 93, 150, 66, 92, 180, 44, 227, 124, 142, 162, 117, 207, - 212, 64, 223, 125, 153, 149, 125, 72, 30, 82, 124, 96, 74, 255, 201, 49, 203, 102, 117, 122, - 6, 213, 177, 244, 1, 204, 222, 93, 201, 251, 210, 103, 243, 108, 5, 6, 220, 128, 177, 58, - 222, 10, 49, 171, 249, 52, 222, 45, 193, 27, 161, 62, 202, 216, 133, 168, 190, 163, 150, 242, - 229, 235, 134, 251, 236, 26, 54, 208, 135, 248, 49, 224, 6, 76, 9, 241, 125, 246, 129, 62, - 252, 100, 217, 187, 36, 213, 241, 31, 198, 147, 120, 125, 105, 14, 49, 218, 88, 122, 209, 97, - 236, 10, 234, 34, 16, 93, 76, 210, 247, 240, 213, 28, 35, 179, 179, 215, 241, 245, 201, 107, - 234, 252, 187, 176, 127, 178, 220, 143, 127, 126, 193, 41, 229, 141, 254, 153, 126, 91, 115, 101, - 121, 220, 205, 202, 147, 146, 162, 139, 25, 51, 130, 190, 251, 146, 35, 251, 160, 60, 37, 249, - 208, 148, 178, 26, 137, 4, 241, 225, 174, 235, 50, 226, 67, 65, 54, 170, 47, 226, 42, 129, - 207, 95, 226, 87, 152, 178, 152, 71, 6, 3, 109, 192, 32, 30, 208, 109, 210, 120, 153, 151, - 55, 98, 238, 195, 251, 237, 2, 212, 128, 41, 13, 174, 1, 147, 66, 140, 152, 227, 87, 254, - 223, 138, 250, 227, 69, 237, 100, 108, 50, 157, 189, 126, 7, 97, 244, 78, 228, 171, 209, 194, - 136, 110, 182, 141, 171, 98, 244, 249, 38, 159, 128, 113, 27, 142, 147, 217, 33, 238, 120, 243, - 179, 73, 35, 207, 186, 218, 255, 223, 133, 150, 187, 227, 211, 24, 217, 176, 65, 223, 125, 201, - 13, 170, 71, 86, 90, 55, 83, 111, 46, 172, 78, 175, 224, 74, 38, 62, 109, 229, 90, 188, - 78, 9, 113, 0, 127, 56, 98, 66, 193, 146, 55, 98, 238, 201, 177, 125, 195, 0, 27, 48, - 86, 183, 91, 32, 186, 240, 49, 127, 30, 102, 218, 221, 149, 58, 85, 221, 179, 252, 36, 244, - 56, 222, 255, 178, 64, 207, 192, 12, 6, 98, 240, 15, 239, 234, 192, 252, 1, 81, 253, 56, - 46, 192, 94, 191, 123, 210, 107, 234, 67, 246, 238, 194, 113, 77, 33, 26, 157, 62, 68, 107, - 201, 175, 196, 234, 42, 121, 139, 236, 245, 188, 99, 242, 250, 150, 142, 161, 152, 115, 104, 249, - 239, 173, 236, 148, 198, 200, 134, 13, 250, 238, 75, 78, 48, 62, 33, 161, 187, 50, 199, 45, - 27, 98, 182, 244, 139, 184, 162, 228, 187, 136, 124, 158, 106, 229, 153, 136, 254, 214, 62, 121, - 151, 55, 86, 170, 248, 223, 123, 253, 178, 216, 254, 174, 140, 120, 200, 189, 44, 31, 75, 43, - 148, 248, 26, 70, 227, 154, 148, 206, 39, 33, 69, 204, 186, 93, 142, 36, 146, 242, 6, 141, - 223, 149, 57, 4, 205, 30, 226, 45, 121, 158, 222, 32, 242, 171, 59, 254, 131, 201, 188, 17, - 115, 44, 215, 99, 25, 160, 6, 204, 160, 32, 142, 25, 191, 160, 28, 221, 237, 57, 86, 102, - 131, 232, 122, 156, 94, 172, 240, 19, 15, 255, 91, 227, 201, 108, 17, 199, 66, 191, 91, 150, - 242, 135, 133, 87, 230, 249, 139, 156, 32, 126, 35, 82, 222, 109, 108, 187, 100, 249, 206, 24, - 63, 6, 191, 38, 221, 134, 8, 244, 221, 151, 92, 216, 7, 230, 29, 244, 33, 114, 215, 230, - 184, 28, 88, 189, 14, 180, 242, 7, 174, 236, 2, 158, 204, 251, 232, 154, 237, 243, 80, 174, - 68, 139, 126, 204, 251, 107, 19, 98, 238, 23, 127, 24, 151, 173, 109, 188, 80, 236, 190, 86, - 78, 70, 140, 54, 228, 67, 38, 122, 140, 119, 57, 243, 97, 59, 63, 101, 229, 89, 160, 187, - 102, 136, 247, 55, 189, 75, 86, 242, 70, 204, 33, 105, 236, 50, 64, 13, 152, 165, 65, 12, - 180, 48, 115, 159, 124, 91, 231, 185, 148, 163, 83, 55, 178, 22, 32, 174, 198, 242, 197, 12, - 63, 41, 126, 49, 226, 185, 164, 93, 41, 222, 71, 197, 242, 145, 11, 31, 138, 56, 46, 148, - 15, 236, 150, 252, 2, 84, 118, 23, 207, 68, 100, 20, 244, 221, 151, 28, 160, 250, 106, 249, - 45, 56, 46, 23, 136, 137, 55, 211, 254, 146, 243, 240, 238, 74, 181, 67, 253, 117, 9, 3, - 110, 192, 56, 140, 14, 131, 232, 188, 97, 82, 59, 41, 213, 172, 16, 93, 127, 248, 97, 236, - 151, 115, 220, 50, 64, 13, 152, 165, 65, 116, 111, 249, 164, 149, 189, 121, 217, 36, 168, 158, - 11, 35, 139, 231, 223, 86, 1, 226, 251, 250, 21, 126, 129, 19, 126, 162, 226, 87, 245, 171, - 186, 156, 150, 252, 78, 248, 243, 49, 231, 36, 184, 34, 210, 63, 232, 187, 47, 203, 102, 31, - 156, 175, 211, 7, 202, 221, 133, 227, 114, 98, 245, 219, 218, 202, 179, 49, 249, 139, 81, 199, - 159, 151, 185, 6, 111, 179, 47, 24, 120, 3, 198, 217, 126, 158, 83, 236, 207, 95, 255, 214, - 27, 187, 136, 70, 106, 57, 238, 252, 155, 208, 194, 131, 130, 109, 128, 26, 48, 75, 97, 245, - 218, 7, 235, 31, 202, 247, 171, 126, 62, 112, 199, 238, 28, 199, 16, 221, 25, 171, 142, 17, - 99, 147, 39, 202, 252, 16, 131, 39, 248, 112, 252, 223, 161, 215, 121, 26, 191, 144, 228, 223, - 239, 117, 35, 98, 137, 200, 112, 64, 223, 125, 89, 38, 251, 0, 253, 132, 62, 88, 238, 126, - 28, 151, 35, 68, 183, 146, 71, 32, 186, 36, 85, 61, 4, 238, 188, 133, 239, 15, 243, 190, - 8, 75, 108, 184, 148, 176, 2, 13, 24, 135, 120, 61, 91, 111, 188, 148, 108, 219, 251, 35, - 230, 152, 89, 55, 78, 252, 178, 65, 13, 152, 165, 64, 245, 93, 20, 31, 48, 194, 231, 119, - 56, 17, 209, 245, 240, 114, 86, 54, 70, 60, 247, 114, 3, 68, 35, 167, 170, 241, 50, 50, - 250, 146, 180, 203, 94, 223, 107, 89, 121, 50, 98, 136, 251, 31, 35, 230, 128, 241, 254, 242, - 254, 126, 249, 213, 88, 191, 96, 230, 159, 187, 227, 172, 236, 192, 235, 139, 200, 48, 233, 187, - 47, 189, 67, 245, 131, 241, 15, 228, 184, 220, 33, 38, 72, 90, 67, 121, 248, 188, 35, 91, - 113, 172, 136, 12, 170, 1, 243, 74, 170, 231, 188, 188, 75, 195, 161, 188, 125, 17, 17, 17, - 25, 24, 172, 72, 3, 198, 33, 174, 198, 166, 206, 229, 24, 17, 9, 24, 72, 3, 198, 89, - 221, 142, 68, 245, 177, 170, 41, 191, 27, 163, 25, 184, 69, 68, 68, 86, 1, 170, 79, 10, - 212, 128, 17, 89, 113, 24, 80, 3, 198, 33, 102, 131, 62, 6, 213, 207, 237, 77, 226, 3, - 149, 168, 175, 181, 136, 136, 200, 170, 128, 26, 48, 34, 27, 36, 12, 172, 1, 147, 66, 12, - 201, 121, 130, 149, 183, 33, 230, 18, 186, 216, 202, 95, 16, 147, 162, 93, 96, 229, 163, 86, - 158, 102, 229, 32, 94, 87, 68, 68, 68, 6, 14, 106, 192, 136, 108, 144, 48, 224, 6, 140, - 136, 136, 136, 108, 192, 160, 6, 140, 200, 6, 9, 106, 192, 136, 136, 136, 200, 16, 65, 13, - 24, 17, 17, 17, 17, 17, 25, 10, 172, 80, 3, 70, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 50, 3, - 224, 64, 43, 103, 91, 185, 196, 202, 191, 172, 252, 204, 202, 107, 173, 92, 133, 99, 69, 68, - 68, 68, 68, 68, 150, 198, 26, 41, 247, 180, 242, 223, 168, 246, 55, 43, 71, 242, 58, 34, - 34, 34, 34, 34, 34, 189, 179, 198, 201, 65, 136, 59, 46, 101, 99, 229, 13, 86, 78, 65, - 220, 141, 249, 175, 226, 239, 255, 105, 101, 47, 94, 87, 186, 97, 175, 245, 165, 172, 28, 97, - 229, 133, 86, 190, 97, 229, 215, 136, 6, 230, 31, 172, 124, 193, 202, 26, 43, 87, 224, 245, - 114, 98, 245, 187, 99, 124, 116, 102, 242, 114, 222, 78, 206, 172, 190, 155, 64, 119, 40, 69, - 86, 158, 125, 207, 63, 75, 199, 42, 118, 56, 175, 147, 43, 171, 235, 46, 86, 158, 104, 229, - 19, 88, 223, 227, 226, 207, 86, 206, 179, 242, 26, 196, 111, 207, 165, 120, 61, 17, 145, 172, - 216, 129, 234, 189, 197, 1, 248, 247, 86, 174, 74, 203, 174, 99, 229, 31, 197, 242, 51, 211, - 101, 210, 13, 123, 157, 239, 102, 229, 123, 197, 107, 62, 201, 223, 173, 156, 192, 235, 231, 2, - 27, 70, 3, 230, 217, 86, 254, 207, 202, 135, 172, 220, 214, 202, 165, 57, 70, 218, 101, 175, - 241, 174, 86, 78, 64, 92, 96, 249, 62, 162, 113, 95, 94, 104, 153, 199, 110, 188, 15, 17, - 134, 21, 104, 192, 88, 29, 55, 182, 114, 50, 214, 95, 176, 156, 228, 43, 86, 14, 224, 109, - 136, 136, 100, 1, 113, 5, 185, 60, 152, 61, 134, 151, 59, 251, 251, 25, 197, 242, 95, 243, - 50, 105, 143, 189, 190, 59, 90, 121, 71, 241, 90, 207, 226, 158, 188, 173, 28, 96, 190, 6, - 204, 253, 120, 59, 185, 178, 186, 222, 212, 202, 255, 82, 253, 47, 176, 242, 24, 43, 59, 112, - 188, 44, 198, 94, 211, 237, 172, 188, 220, 202, 63, 71, 94, 241, 197, 169, 1, 35, 83, 97, - 224, 13, 24, 68, 227, 101, 214, 223, 151, 191, 90, 185, 17, 111, 75, 68, 100, 233, 236, 224, - 116, 185, 228, 96, 85, 249, 156, 139, 253, 253, 223, 147, 24, 93, 97, 238, 136, 189, 182, 187, - 97, 252, 228, 236, 119, 86, 206, 66, 220, 238, 127, 154, 149, 247, 99, 252, 164, 249, 135, 188, - 173, 28, 32, 186, 193, 249, 143, 102, 93, 121, 242, 186, 12, 194, 41, 188, 141, 92, 33, 26, - 155, 191, 160, 250, 151, 252, 61, 187, 41, 175, 35, 243, 179, 215, 115, 31, 43, 63, 162, 215, - 185, 45, 106, 192, 200, 84, 246, 57, 57, 12, 113, 81, 166, 44, 63, 28, 249, 20, 229, 223, - 128, 121, 18, 213, 215, 125, 202, 202, 61, 172, 92, 203, 202, 141, 16, 93, 147, 189, 155, 114, - 202, 123, 102, 236, 200, 219, 147, 201, 208, 67, 131, 215, 182, 177, 133, 149, 239, 210, 118, 31, - 201, 113, 139, 192, 138, 228, 225, 48, 223, 69, 213, 185, 123, 133, 216, 186, 155, 90, 249, 58, - 109, 239, 9, 28, 39, 115, 42, 94, 224, 255, 41, 94, 216, 39, 241, 114, 103, 127, 127, 105, - 177, 252, 55, 188, 76, 218, 133, 120, 230, 197, 249, 143, 198, 137, 86, 54, 169, 136, 121, 104, - 17, 147, 186, 12, 199, 229, 12, 209, 5, 40, 245, 98, 142, 201, 153, 213, 247, 93, 84, 255, - 210, 55, 173, 236, 201, 241, 50, 63, 196, 157, 151, 159, 208, 235, 60, 205, 151, 17, 39, 108, - 92, 78, 79, 131, 10, 106, 192, 200, 204, 236, 115, 243, 69, 250, 28, 29, 206, 49, 185, 176, - 186, 109, 133, 184, 155, 146, 58, 153, 227, 156, 253, 125, 79, 43, 63, 167, 216, 103, 113, 156, - 76, 134, 126, 78, 252, 253, 142, 116, 234, 131, 104, 249, 217, 37, 172, 72, 30, 14, 253, 55, - 96, 158, 79, 219, 242, 103, 206, 116, 19, 160, 77, 197, 139, 234, 254, 98, 229, 16, 90, 118, - 36, 214, 143, 78, 246, 186, 116, 153, 180, 207, 94, 227, 203, 91, 249, 40, 38, 60, 160, 111, - 203, 118, 47, 222, 143, 212, 182, 28, 151, 43, 171, 235, 49, 136, 231, 70, 74, 111, 68, 7, - 7, 171, 174, 88, 93, 31, 148, 212, 61, 229, 207, 100, 108, 201, 241, 178, 24, 123, 77, 223, - 196, 47, 116, 3, 149, 63, 58, 136, 147, 51, 166, 6, 140, 204, 12, 195, 106, 192, 240, 137, - 219, 231, 56, 38, 101, 203, 239, 76, 241, 231, 113, 140, 76, 134, 142, 79, 252, 109, 253, 59, - 209, 246, 126, 101, 101, 103, 142, 91, 20, 86, 36, 15, 135, 241, 239, 65, 19, 15, 228, 237, - 52, 97, 235, 221, 26, 163, 231, 57, 222, 51, 163, 246, 188, 78, 230, 100, 47, 234, 141, 177, - 190, 91, 146, 55, 86, 252, 234, 242, 243, 16, 173, 224, 242, 13, 240, 209, 201, 52, 218, 82, - 6, 236, 125, 184, 69, 241, 158, 148, 126, 204, 49, 185, 178, 186, 254, 27, 214, 223, 241, 115, - 239, 177, 178, 49, 199, 229, 202, 234, 186, 31, 98, 240, 132, 148, 231, 243, 88, 142, 149, 197, - 217, 235, 122, 117, 140, 254, 8, 52, 165, 6, 140, 116, 10, 195, 106, 192, 60, 158, 234, 250, - 8, 142, 73, 217, 242, 205, 49, 58, 48, 134, 159, 31, 232, 202, 241, 12, 236, 245, 186, 153, - 149, 187, 39, 229, 252, 228, 245, 116, 135, 243, 58, 77, 33, 46, 98, 166, 93, 253, 252, 24, - 121, 4, 199, 181, 1, 43, 146, 135, 179, 109, 111, 100, 101, 235, 9, 229, 228, 162, 30, 165, - 185, 238, 60, 34, 46, 68, 255, 134, 182, 117, 123, 142, 147, 150, 216, 139, 123, 95, 212, 143, - 228, 227, 163, 144, 221, 142, 215, 201, 153, 213, 247, 14, 86, 142, 43, 202, 109, 120, 249, 80, - 89, 46, 151, 182, 242, 233, 228, 189, 113, 173, 247, 21, 237, 2, 98, 104, 206, 116, 244, 155, - 79, 90, 217, 156, 227, 114, 134, 152, 236, 245, 129, 86, 158, 142, 152, 228, 213, 71, 31, 187, - 37, 199, 73, 59, 80, 221, 229, 171, 9, 53, 96, 164, 83, 24, 86, 3, 230, 57, 84, 215, - 187, 115, 12, 67, 140, 238, 151, 218, 158, 99, 164, 57, 180, 244, 121, 65, 156, 132, 243, 57, - 192, 105, 28, 215, 21, 172, 72, 30, 12, 227, 61, 43, 94, 194, 49, 77, 32, 158, 253, 245, - 94, 52, 169, 23, 113, 156, 180, 204, 94, 228, 107, 34, 186, 107, 248, 45, 60, 111, 204, 248, - 67, 202, 175, 183, 178, 31, 199, 230, 14, 163, 15, 132, 125, 145, 151, 15, 21, 226, 33, 203, - 148, 63, 72, 154, 125, 183, 37, 171, 227, 193, 136, 187, 120, 37, 191, 162, 119, 26, 226, 160, - 113, 40, 116, 117, 79, 42, 216, 231, 226, 91, 201, 103, 102, 22, 106, 192, 72, 167, 208, 210, - 137, 92, 31, 16, 131, 192, 164, 30, 204, 49, 41, 196, 201, 101, 57, 125, 130, 243, 227, 245, - 70, 28, 39, 205, 161, 165, 207, 11, 198, 207, 1, 190, 106, 101, 83, 142, 235, 10, 86, 36, - 143, 148, 237, 247, 88, 140, 222, 233, 127, 29, 230, 236, 214, 110, 235, 157, 148, 108, 199, 125, - 27, 3, 187, 80, 43, 75, 134, 21, 108, 192, 88, 30, 15, 72, 114, 114, 126, 55, 227, 218, - 28, 151, 35, 171, 231, 253, 168, 238, 236, 66, 43, 119, 226, 245, 100, 195, 134, 241, 7, 143, - 155, 82, 3, 70, 58, 133, 150, 78, 228, 250, 128, 152, 91, 44, 245, 30, 142, 73, 33, 134, - 136, 79, 13, 166, 155, 114, 174, 208, 194, 231, 5, 49, 18, 94, 218, 5, 219, 159, 91, 238, - 181, 107, 63, 86, 36, 143, 146, 237, 247, 174, 84, 151, 115, 48, 103, 99, 29, 49, 111, 98, - 218, 147, 201, 187, 155, 95, 141, 227, 68, 38, 194, 138, 53, 96, 48, 254, 224, 187, 127, 225, - 238, 204, 113, 185, 194, 244, 6, 76, 233, 56, 94, 87, 54, 76, 136, 17, 18, 231, 165, 6, - 140, 116, 10, 45, 156, 200, 245, 197, 234, 182, 61, 198, 187, 136, 31, 197, 113, 14, 241, 44, - 192, 55, 40, 246, 121, 28, 39, 179, 193, 130, 159, 23, 196, 123, 120, 49, 109, 227, 24, 142, - 235, 26, 86, 36, 15, 103, 251, 189, 29, 70, 191, 23, 222, 37, 124, 174, 187, 64, 182, 222, - 182, 24, 31, 45, 243, 120, 142, 19, 153, 10, 43, 212, 128, 177, 250, 31, 141, 209, 185, 95, - 188, 33, 115, 31, 142, 27, 10, 196, 115, 60, 187, 32, 30, 14, 244, 121, 109, 82, 126, 37, - 230, 178, 188, 142, 204, 7, 213, 195, 61, 255, 128, 227, 166, 177, 117, 174, 205, 27, 41, 220, - 145, 99, 219, 132, 209, 110, 135, 179, 80, 3, 70, 58, 133, 5, 79, 228, 250, 134, 24, 152, - 39, 229, 191, 41, 47, 178, 114, 0, 226, 98, 129, 159, 88, 30, 101, 229, 251, 105, 16, 226, - 46, 168, 70, 79, 90, 16, 22, 252, 188, 32, 238, 12, 164, 222, 196, 49, 125, 192, 234, 228, - 225, 119, 75, 210, 121, 247, 252, 251, 240, 98, 43, 143, 70, 156, 155, 140, 77, 97, 49, 137, - 231, 145, 108, 203, 189, 157, 99, 114, 100, 245, 188, 63, 98, 96, 134, 63, 90, 121, 27, 58, - 26, 1, 78, 102, 128, 21, 105, 192, 32, 70, 237, 42, 135, 177, 118, 222, 120, 89, 153, 86, - 61, 170, 31, 228, 27, 108, 227, 44, 55, 24, 126, 3, 134, 71, 188, 105, 74, 13, 24, 233, - 20, 22, 60, 145, 235, 27, 226, 206, 202, 231, 168, 206, 211, 248, 111, 207, 191, 241, 182, 100, - 118, 88, 224, 243, 130, 241, 7, 204, 253, 74, 255, 82, 166, 78, 192, 234, 228, 49, 173, 87, - 200, 47, 173, 28, 205, 235, 85, 193, 232, 100, 239, 238, 167, 24, 192, 160, 23, 86, 199, 219, - 83, 189, 221, 185, 28, 39, 61, 195, 10, 52, 96, 172, 222, 183, 197, 232, 237, 77, 111, 188, - 204, 53, 38, 121, 206, 44, 167, 199, 38, 57, 186, 167, 115, 140, 204, 7, 195, 111, 192, 188, - 138, 119, 216, 144, 26, 48, 210, 41, 44, 112, 34, 183, 44, 136, 70, 204, 43, 168, 222, 117, - 46, 192, 0, 114, 26, 10, 204, 249, 121, 177, 184, 253, 49, 58, 116, 191, 159, 19, 92, 135, - 227, 250, 130, 213, 201, 99, 90, 3, 166, 116, 127, 94, 55, 101, 203, 247, 193, 232, 179, 154, - 222, 189, 255, 134, 28, 151, 35, 171, 231, 219, 147, 122, 167, 174, 200, 177, 210, 35, 12, 188, - 1, 131, 24, 114, 56, 189, 189, 233, 30, 196, 113, 185, 67, 131, 171, 43, 22, 115, 6, 229, - 121, 18, 199, 200, 124, 48, 252, 6, 140, 127, 15, 230, 161, 6, 140, 116, 10, 115, 158, 200, - 229, 192, 234, 122, 53, 68, 151, 50, 31, 229, 175, 28, 218, 222, 47, 144, 249, 220, 21, 239, - 182, 114, 111, 204, 249, 44, 128, 84, 195, 28, 159, 23, 196, 124, 60, 223, 161, 245, 30, 199, - 113, 125, 194, 138, 228, 145, 194, 228, 110, 237, 222, 56, 169, 236, 214, 142, 232, 122, 249, 53, - 138, 63, 153, 227, 114, 133, 245, 147, 216, 179, 131, 57, 86, 122, 132, 1, 55, 96, 16, 35, - 192, 240, 100, 137, 19, 135, 189, 204, 145, 213, 121, 71, 43, 151, 32, 110, 27, 87, 14, 147, - 108, 127, 223, 201, 202, 207, 211, 68, 205, 77, 57, 78, 230, 131, 225, 55, 96, 124, 76, 253, - 105, 51, 65, 87, 81, 3, 70, 58, 133, 57, 78, 228, 114, 101, 117, 223, 18, 115, 142, 188, - 36, 205, 204, 243, 121, 177, 152, 151, 209, 58, 62, 191, 200, 92, 195, 251, 182, 5, 43, 146, - 71, 29, 204, 208, 173, 29, 227, 207, 149, 249, 122, 131, 249, 30, 89, 93, 159, 69, 245, 119, - 127, 194, 0, 166, 230, 24, 44, 123, 113, 239, 200, 175, 120, 11, 14, 229, 253, 44, 131, 213, - 227, 134, 24, 31, 58, 246, 165, 136, 25, 201, 39, 149, 253, 121, 91, 203, 102, 117, 122, 65, - 153, 0, 226, 74, 223, 137, 136, 7, 70, 47, 135, 184, 2, 232, 35, 171, 253, 32, 137, 113, - 231, 97, 64, 7, 128, 220, 97, 224, 13, 24, 135, 152, 60, 148, 239, 70, 78, 163, 6, 140, - 116, 10, 115, 156, 200, 201, 226, 16, 15, 129, 251, 69, 175, 178, 124, 10, 201, 3, 215, 136, - 239, 248, 133, 20, 243, 232, 116, 27, 203, 128, 25, 63, 47, 24, 63, 207, 241, 187, 99, 151, - 175, 136, 243, 187, 27, 126, 33, 176, 44, 157, 206, 57, 130, 142, 242, 200, 9, 26, 116, 107, - 183, 191, 221, 10, 163, 35, 195, 254, 193, 202, 238, 21, 113, 219, 32, 62, 147, 101, 217, 134, - 99, 150, 197, 234, 114, 25, 43, 95, 95, 159, 194, 218, 223, 217, 70, 207, 253, 200, 156, 48, - 254, 133, 104, 67, 46, 13, 24, 191, 99, 49, 143, 255, 225, 109, 45, 19, 226, 118, 108, 217, - 53, 161, 41, 143, 31, 68, 223, 209, 161, 192, 10, 52, 96, 156, 237, 231, 14, 24, 29, 204, - 98, 26, 53, 96, 164, 83, 152, 241, 68, 78, 218, 129, 152, 20, 57, 29, 149, 211, 61, 133, - 98, 78, 167, 229, 126, 98, 182, 212, 9, 185, 49, 195, 231, 197, 150, 237, 102, 229, 247, 20, - 127, 27, 142, 115, 246, 247, 143, 36, 49, 254, 92, 201, 222, 28, 211, 38, 180, 156, 135, 253, - 255, 102, 136, 121, 138, 94, 139, 24, 1, 207, 27, 2, 158, 199, 175, 16, 119, 106, 252, 194, - 231, 214, 233, 58, 139, 176, 109, 109, 193, 127, 99, 22, 243, 220, 181, 53, 93, 239, 241, 180, - 220, 207, 111, 188, 33, 150, 170, 28, 236, 194, 254, 254, 225, 36, 198, 243, 90, 202, 124, 55, - 117, 172, 62, 155, 88, 57, 210, 202, 189, 172, 236, 197, 203, 165, 101, 88, 237, 6, 140, 223, - 190, 155, 71, 86, 13, 24, 103, 117, 186, 9, 98, 118, 221, 38, 126, 103, 229, 150, 188, 13, - 89, 12, 86, 164, 1, 227, 108, 95, 183, 198, 120, 119, 195, 58, 106, 192, 72, 167, 48, 195, - 137, 156, 180, 11, 49, 220, 109, 202, 47, 126, 93, 61, 89, 238, 131, 21, 252, 140, 98, 252, - 253, 170, 236, 202, 220, 135, 98, 255, 169, 195, 57, 198, 33, 186, 48, 249, 93, 165, 212, 243, - 57, 206, 33, 142, 137, 83, 227, 218, 132, 150, 242, 176, 127, 111, 108, 229, 225, 136, 209, 190, - 166, 241, 11, 187, 11, 119, 45, 71, 220, 113, 184, 200, 202, 61, 121, 89, 9, 49, 156, 184, - 143, 34, 150, 90, 119, 110, 130, 232, 214, 156, 54, 26, 93, 221, 239, 141, 55, 12, 82, 47, - 228, 24, 217, 192, 216, 135, 224, 198, 136, 19, 227, 73, 229, 31, 197, 7, 198, 121, 151, 44, - 94, 206, 101, 221, 193, 111, 153, 176, 66, 13, 152, 18, 226, 228, 247, 84, 196, 193, 204, 15, - 68, 126, 53, 204, 223, 159, 95, 88, 249, 32, 226, 32, 118, 25, 94, 79, 22, 135, 21, 106, - 192, 56, 196, 67, 147, 183, 69, 92, 33, 123, 167, 149, 207, 32, 190, 191, 191, 77, 234, 228, - 234, 126, 80, 246, 164, 56, 167, 6, 140, 204, 12, 13, 79, 228, 164, 125, 136, 19, 81, 191, - 66, 159, 250, 10, 146, 238, 199, 246, 239, 59, 211, 114, 247, 168, 116, 59, 125, 66, 195, 207, - 139, 253, 253, 100, 138, 243, 73, 69, 55, 171, 136, 243, 6, 194, 247, 146, 56, 159, 199, 99, - 71, 142, 107, 27, 90, 200, 3, 49, 114, 215, 151, 104, 249, 52, 126, 222, 176, 208, 121, 26, - 226, 60, 164, 228, 207, 86, 250, 96, 21, 187, 35, 126, 87, 118, 69, 92, 28, 231, 73, 92, - 125, 52, 190, 180, 139, 226, 227, 104, 185, 191, 7, 99, 119, 117, 16, 239, 207, 183, 147, 184, - 63, 91, 217, 137, 227, 68, 198, 96, 192, 15, 241, 139, 180, 5, 43, 214, 128, 169, 131, 241, - 43, 178, 43, 209, 128, 65, 252, 208, 191, 18, 209, 149, 194, 71, 235, 211, 36, 99, 34, 255, - 111, 237, 119, 195, 187, 188, 176, 147, 40, 198, 47, 144, 165, 124, 112, 156, 165, 116, 225, 65, - 131, 19, 127, 196, 51, 176, 62, 12, 111, 201, 39, 242, 189, 42, 199, 57, 251, 251, 3, 147, - 56, 247, 24, 142, 233, 2, 90, 200, 195, 254, 125, 187, 100, 89, 201, 27, 10, 126, 172, 59, - 25, 241, 112, 124, 122, 242, 95, 122, 125, 186, 159, 89, 32, 186, 125, 165, 23, 182, 155, 240, - 174, 138, 71, 38, 219, 240, 201, 47, 211, 169, 45, 124, 123, 7, 164, 251, 41, 33, 38, 136, - 76, 141, 124, 54, 69, 106, 65, 13, 24, 17, 255, 30, 168, 1, 147, 192, 128, 26, 48, 86, - 175, 125, 17, 63, 252, 41, 239, 66, 151, 253, 4, 105, 34, 125, 176, 239, 194, 39, 233, 251, - 49, 242, 172, 139, 253, 123, 111, 140, 159, 180, 250, 93, 219, 222, 71, 192, 194, 148, 19, 127, - 68, 215, 165, 139, 41, 230, 190, 105, 76, 9, 241, 96, 248, 175, 147, 184, 139, 80, 113, 151, - 166, 11, 104, 41, 15, 196, 251, 224, 252, 142, 199, 17, 188, 220, 217, 223, 223, 188, 126, 19, - 107, 157, 199, 49, 179, 176, 245, 143, 66, 52, 148, 154, 240, 198, 238, 186, 174, 102, 246, 239, - 109, 17, 19, 111, 166, 78, 72, 183, 95, 178, 191, 111, 133, 209, 231, 153, 189, 59, 227, 216, - 93, 26, 145, 74, 80, 3, 70, 196, 191, 7, 106, 192, 36, 48, 172, 6, 204, 171, 185, 162, - 133, 165, 143, 168, 36, 146, 3, 251, 46, 236, 135, 209, 43, 226, 238, 11, 72, 158, 117, 177, - 127, 175, 161, 229, 238, 161, 233, 118, 250, 128, 233, 39, 254, 62, 186, 90, 234, 63, 210, 229, - 41, 91, 246, 76, 138, 189, 7, 199, 116, 5, 45, 229, 97, 127, 191, 190, 149, 103, 88, 217, - 152, 151, 149, 108, 217, 191, 141, 110, 10, 223, 227, 152, 89, 33, 230, 124, 241, 110, 200, 175, - 179, 242, 99, 140, 142, 36, 230, 119, 92, 252, 206, 207, 105, 86, 246, 160, 245, 222, 148, 196, - 185, 119, 165, 203, 83, 182, 236, 169, 20, 123, 44, 199, 228, 2, 241, 89, 58, 61, 41, 75, - 185, 67, 41, 9, 168, 1, 35, 226, 223, 3, 53, 96, 18, 24, 86, 3, 134, 31, 128, 45, - 85, 230, 38, 178, 33, 194, 232, 115, 13, 165, 71, 38, 203, 125, 148, 171, 243, 105, 185, 63, - 23, 123, 165, 116, 59, 93, 67, 60, 183, 179, 83, 82, 210, 231, 42, 184, 59, 216, 133, 168, - 121, 46, 20, 241, 204, 70, 122, 87, 201, 159, 1, 236, 237, 142, 18, 98, 20, 184, 195, 147, - 178, 93, 178, 172, 113, 30, 77, 216, 186, 39, 209, 246, 222, 192, 49, 139, 66, 60, 171, 226, - 239, 135, 207, 91, 87, 57, 133, 131, 253, 253, 184, 145, 90, 196, 157, 240, 202, 231, 141, 16, - 207, 210, 164, 119, 206, 191, 137, 37, 14, 30, 49, 9, 226, 51, 201, 174, 193, 113, 210, 51, - 168, 1, 35, 226, 223, 131, 182, 26, 48, 254, 67, 85, 69, 13, 152, 142, 96, 252, 138, 95, - 233, 73, 28, 43, 178, 161, 178, 239, 195, 118, 24, 191, 11, 227, 15, 76, 175, 235, 82, 101, - 255, 126, 0, 45, 119, 103, 166, 219, 89, 22, 171, 199, 254, 24, 157, 184, 218, 135, 139, 191, - 30, 199, 149, 108, 217, 27, 147, 88, 119, 120, 178, 236, 78, 86, 206, 78, 202, 181, 147, 85, - 59, 133, 25, 243, 152, 6, 209, 21, 141, 71, 40, 155, 123, 123, 243, 178, 125, 94, 197, 202, - 95, 146, 58, 248, 93, 154, 195, 57, 174, 100, 203, 94, 147, 196, 186, 116, 4, 51, 191, 243, - 147, 190, 63, 189, 231, 147, 194, 248, 40, 105, 126, 55, 106, 93, 131, 84, 150, 4, 106, 192, - 136, 248, 247, 160, 170, 1, 243, 67, 142, 155, 198, 214, 185, 7, 111, 164, 160, 6, 76, 71, - 172, 94, 55, 194, 248, 124, 23, 126, 229, 248, 10, 28, 43, 178, 161, 178, 239, 195, 227, 233, - 59, 226, 78, 73, 150, 251, 21, 118, 191, 10, 158, 242, 6, 79, 229, 195, 215, 125, 66, 76, - 66, 201, 15, 171, 215, 94, 160, 64, 220, 9, 79, 187, 60, 189, 135, 150, 63, 41, 89, 230, - 122, 57, 62, 99, 198, 60, 166, 65, 188, 103, 239, 166, 237, 85, 118, 69, 235, 18, 98, 116, - 178, 175, 81, 61, 198, 38, 181, 44, 217, 178, 107, 98, 244, 152, 253, 33, 90, 254, 232, 100, - 153, 187, 123, 186, 188, 111, 182, 255, 247, 83, 125, 62, 195, 49, 178, 4, 80, 3, 70, 196, - 191, 7, 85, 13, 152, 75, 56, 110, 26, 91, 231, 5, 188, 145, 66, 47, 63, 144, 211, 96, - 5, 27, 48, 14, 49, 90, 143, 159, 124, 249, 21, 64, 239, 123, 126, 93, 142, 17, 217, 80, - 217, 247, 97, 15, 140, 15, 116, 225, 191, 253, 155, 38, 49, 62, 76, 63, 27, 153, 248, 114, - 89, 172, 30, 47, 165, 122, 125, 18, 19, 186, 27, 97, 180, 91, 169, 143, 242, 53, 50, 57, - 39, 150, 215, 128, 153, 41, 143, 73, 16, 243, 172, 240, 243, 127, 23, 97, 9, 119, 6, 16, - 35, 63, 166, 62, 143, 201, 207, 236, 164, 243, 195, 120, 67, 102, 164, 59, 22, 50, 106, 192, - 32, 38, 135, 102, 247, 231, 56, 89, 2, 168, 1, 35, 226, 223, 131, 170, 6, 140, 95, 193, - 107, 60, 146, 21, 98, 194, 49, 190, 149, 95, 234, 229, 7, 114, 26, 172, 104, 3, 70, 68, - 234, 97, 252, 248, 230, 39, 245, 135, 36, 203, 47, 143, 232, 78, 150, 242, 11, 2, 235, 158, - 63, 89, 22, 140, 79, 200, 253, 59, 76, 184, 187, 90, 17, 255, 178, 138, 152, 222, 27, 48, - 190, 15, 218, 231, 196, 60, 166, 193, 248, 177, 220, 103, 188, 223, 151, 227, 186, 134, 232, 94, - 149, 222, 237, 250, 147, 149, 61, 57, 174, 132, 241, 73, 69, 95, 83, 17, 147, 69, 3, 198, - 246, 123, 61, 140, 118, 139, 115, 62, 159, 205, 210, 191, 23, 34, 34, 107, 97, 252, 7, 190, - 212, 120, 84, 20, 139, 125, 16, 175, 156, 232, 252, 7, 178, 9, 140, 255, 232, 169, 1, 35, - 178, 194, 236, 123, 123, 27, 254, 34, 155, 103, 83, 140, 63, 103, 144, 242, 231, 50, 14, 78, - 99, 150, 193, 234, 176, 155, 149, 223, 83, 221, 238, 192, 113, 37, 91, 182, 137, 149, 31, 37, - 177, 126, 242, 57, 54, 39, 20, 122, 110, 192, 96, 198, 60, 166, 193, 248, 29, 15, 159, 156, - 243, 32, 142, 235, 26, 98, 206, 152, 116, 152, 106, 119, 87, 142, 43, 33, 186, 188, 165, 23, - 205, 253, 89, 160, 177, 70, 28, 50, 104, 192, 32, 238, 188, 120, 87, 228, 148, 55, 206, 174, - 198, 177, 34, 34, 75, 131, 250, 6, 204, 121, 72, 186, 89, 212, 177, 152, 171, 35, 14, 110, - 117, 58, 253, 129, 108, 10, 106, 192, 136, 108, 48, 236, 59, 187, 5, 198, 231, 243, 248, 129, - 149, 205, 147, 152, 155, 209, 114, 247, 140, 116, 59, 203, 128, 24, 198, 151, 71, 24, 124, 9, - 199, 165, 108, 249, 77, 40, 126, 30, 55, 228, 237, 46, 2, 115, 228, 49, 137, 173, 251, 44, - 218, 150, 255, 238, 172, 187, 155, 214, 23, 68, 23, 182, 180, 43, 152, 155, 56, 224, 3, 226, - 142, 198, 162, 110, 206, 219, 109, 19, 34, 175, 53, 24, 189, 171, 228, 254, 96, 229, 80, 142, - 23, 17, 89, 42, 212, 55, 96, 220, 27, 80, 51, 108, 164, 179, 101, 183, 180, 242, 43, 90, - 135, 169, 1, 35, 34, 189, 178, 239, 236, 41, 244, 29, 246, 231, 13, 110, 144, 44, 247, 135, - 175, 189, 65, 147, 242, 46, 50, 189, 76, 246, 56, 9, 98, 166, 249, 148, 63, 252, 190, 174, - 225, 85, 197, 150, 223, 156, 214, 153, 71, 219, 13, 152, 147, 105, 251, 83, 243, 168, 131, 241, - 121, 83, 188, 241, 114, 29, 142, 235, 131, 237, 247, 113, 84, 23, 255, 28, 109, 197, 113, 41, - 91, 126, 67, 90, 103, 30, 157, 53, 96, 16, 141, 23, 30, 29, 205, 93, 104, 229, 170, 28, - 47, 34, 178, 116, 152, 220, 128, 113, 223, 177, 114, 31, 196, 80, 145, 62, 38, 188, 79, 12, - 119, 156, 149, 143, 165, 65, 19, 168, 1, 35, 34, 189, 65, 28, 171, 254, 73, 223, 225, 231, - 83, 204, 19, 105, 185, 55, 112, 150, 62, 0, 6, 226, 68, 215, 159, 211, 41, 121, 87, 163, - 253, 57, 142, 33, 179, 6, 140, 111, 11, 115, 228, 81, 197, 214, 123, 66, 178, 29, 231, 207, - 44, 45, 229, 189, 178, 253, 30, 130, 209, 33, 185, 253, 115, 118, 32, 199, 49, 228, 223, 128, - 225, 6, 162, 243, 46, 111, 151, 231, 88, 233, 24, 226, 214, 176, 183, 138, 219, 44, 215, 228, - 253, 136, 12, 29, 166, 55, 96, 154, 226, 217, 149, 75, 106, 192, 136, 72, 111, 48, 222, 189, - 231, 39, 86, 182, 76, 150, 251, 119, 60, 157, 143, 196, 157, 158, 110, 99, 25, 16, 243, 154, - 252, 148, 234, 245, 0, 142, 171, 130, 184, 130, 238, 131, 169, 76, 43, 79, 41, 182, 91, 242, - 153, 236, 215, 46, 227, 109, 206, 11, 11, 228, 193, 108, 189, 71, 209, 118, 188, 241, 178, 148, - 238, 76, 182, 223, 109, 172, 252, 152, 234, 243, 48, 142, 171, 131, 241, 247, 162, 170, 60, 182, - 220, 112, 193, 167, 39, 40, 151, 117, 50, 25, 169, 109, 247, 32, 140, 54, 54, 157, 191, 206, - 87, 230, 88, 233, 1, 198, 71, 189, 104, 195, 82, 190, 52, 34, 93, 66, 59, 13, 152, 207, - 162, 190, 143, 175, 26, 48, 34, 34, 83, 216, 113, 230, 237, 116, 220, 57, 135, 99, 22, 133, - 30, 30, 226, 71, 75, 121, 216, 122, 15, 161, 237, 248, 179, 25, 254, 183, 107, 79, 41, 157, - 116, 121, 194, 248, 4, 161, 62, 71, 74, 171, 141, 10, 44, 225, 33, 126, 219, 199, 59, 104, - 159, 238, 36, 142, 147, 158, 64, 13, 24, 145, 70, 176, 120, 3, 230, 43, 86, 118, 66, 252, - 112, 84, 105, 253, 7, 114, 30, 80, 3, 70, 68, 50, 101, 199, 152, 7, 208, 49, 231, 98, - 204, 48, 148, 125, 83, 232, 184, 1, 131, 150, 242, 176, 117, 246, 162, 237, 204, 226, 179, 188, - 189, 69, 217, 54, 143, 165, 125, 248, 180, 1, 151, 229, 184, 69, 161, 231, 6, 140, 109, 127, - 91, 140, 118, 137, 115, 222, 80, 220, 137, 99, 165, 39, 80, 3, 70, 164, 17, 204, 223, 128, - 249, 23, 98, 72, 203, 45, 138, 237, 168, 1, 35, 34, 50, 35, 59, 190, 92, 13, 163, 93, - 218, 188, 59, 207, 97, 28, 215, 6, 116, 216, 128, 65, 139, 121, 216, 122, 251, 38, 219, 153, - 85, 171, 13, 24, 196, 51, 85, 233, 156, 40, 126, 130, 223, 201, 243, 40, 232, 191, 1, 115, - 56, 237, 207, 253, 156, 227, 170, 32, 26, 153, 126, 87, 42, 45, 51, 55, 86, 69, 68, 230, - 130, 234, 6, 140, 143, 173, 255, 78, 68, 127, 95, 255, 183, 207, 141, 240, 15, 43, 63, 179, - 242, 97, 43, 143, 177, 178, 43, 109, 71, 13, 24, 17, 145, 25, 216, 177, 101, 115, 196, 232, - 92, 169, 53, 28, 215, 22, 116, 212, 128, 65, 203, 121, 32, 147, 6, 12, 98, 180, 186, 175, - 210, 246, 79, 229, 184, 182, 160, 255, 6, 204, 209, 180, 63, 119, 30, 199, 85, 177, 184, 187, - 209, 122, 126, 39, 167, 118, 212, 82, 17, 145, 86, 161, 186, 1, 243, 3, 142, 27, 58, 168, - 1, 51, 8, 136, 185, 30, 190, 143, 120, 16, 251, 76, 36, 15, 95, 139, 136, 72, 123, 236, - 248, 122, 247, 244, 135, 174, 224, 23, 43, 215, 246, 172, 152, 196, 98, 222, 66, 235, 53, 106, - 248, 136, 136, 180, 2, 106, 192, 140, 128, 26, 48, 75, 133, 232, 51, 95, 250, 10, 47, 23, - 17, 145, 118, 160, 126, 2, 212, 71, 113, 108, 202, 150, 95, 31, 227, 35, 151, 189, 128, 227, - 68, 68, 58, 3, 53, 96, 70, 64, 13, 152, 165, 177, 215, 249, 58, 244, 186, 55, 30, 162, - 84, 68, 68, 102, 131, 24, 242, 154, 27, 34, 206, 255, 246, 100, 43, 219, 81, 188, 119, 169, - 243, 121, 225, 124, 34, 81, 118, 163, 52, 86, 68, 164, 83, 80, 3, 102, 4, 212, 128, 89, - 26, 123, 157, 79, 165, 215, 221, 127, 36, 223, 108, 229, 0, 142, 21, 17, 145, 197, 217, 241, - 245, 3, 116, 220, 77, 249, 243, 175, 223, 179, 242, 25, 43, 95, 199, 248, 252, 73, 165, 79, - 242, 118, 69, 68, 58, 5, 53, 96, 70, 64, 13, 152, 165, 177, 215, 249, 71, 252, 194, 23, - 124, 196, 187, 219, 115, 188, 136, 136, 44, 198, 142, 173, 215, 68, 60, 247, 50, 175, 255, 180, - 114, 117, 222, 174, 136, 72, 167, 176, 225, 52, 96, 110, 97, 229, 164, 164, 28, 193, 49, 206, - 254, 126, 25, 138, 243, 178, 13, 199, 73, 55, 236, 181, 190, 180, 149, 157, 17, 15, 243, 167, - 26, 13, 237, 41, 34, 34, 179, 65, 252, 62, 214, 221, 93, 153, 196, 27, 47, 135, 243, 246, - 68, 68, 58, 135, 13, 164, 1, 35, 121, 179, 207, 220, 229, 233, 255, 111, 195, 31, 74, 208, - 208, 221, 34, 34, 210, 14, 59, 190, 30, 100, 229, 163, 124, 208, 157, 192, 167, 84, 216, 147, - 183, 35, 34, 210, 11, 168, 1, 35, 75, 134, 232, 194, 224, 206, 183, 242, 113, 43, 159, 69, - 244, 189, 102, 59, 242, 186, 34, 34, 210, 30, 196, 96, 42, 39, 35, 142, 197, 23, 32, 238, - 178, 248, 28, 47, 191, 182, 242, 5, 43, 207, 182, 114, 32, 175, 39, 34, 210, 43, 168, 1, - 35, 75, 102, 159, 183, 211, 248, 3, 88, 225, 203, 188, 158, 136, 136, 136, 136, 136, 72, 175, - 16, 207, 188, 252, 130, 91, 43, 228, 18, 43, 215, 224, 117, 69, 68, 68, 68, 68, 68, 122, - 135, 232, 178, 112, 186, 149, 47, 91, 249, 35, 162, 251, 152, 55, 106, 124, 232, 206, 135, 88, - 217, 150, 215, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 145, - 174, 1, 216, 202, 202, 147, 173, 124, 203, 202, 159, 16, 147, 91, 189, 213, 71, 143, 226, 88, - 17, 17, 17, 17, 17, 145, 165, 177, 70, 202, 229, 172, 124, 7, 213, 254, 199, 202, 241, 188, - 142, 136, 136, 136, 136, 136, 200, 82, 88, 3, 229, 163, 220, 106, 33, 62, 103, 199, 193, 188, - 158, 136, 136, 136, 200, 82, 217, 9, 202, 181, 172, 188, 206, 202, 59, 120, 217, 42, 176, 188, - 46, 101, 229, 61, 86, 206, 26, 218, 201, 152, 213, 247, 118, 86, 190, 90, 81, 252, 253, 186, - 20, 199, 231, 8, 49, 27, 247, 126, 86, 14, 176, 178, 57, 47, 119, 246, 247, 237, 173, 28, - 154, 148, 93, 56, 70, 218, 101, 175, 241, 13, 177, 222, 223, 172, 28, 107, 101, 91, 196, 251, - 244, 217, 100, 217, 217, 188, 174, 200, 44, 236, 51, 180, 143, 149, 23, 22, 159, 171, 205, 120, - 249, 42, 176, 188, 94, 108, 229, 157, 86, 110, 202, 203, 114, 102, 245, 61, 200, 202, 87, 48, - 254, 27, 243, 62, 212, 28, 175, 165, 27, 246, 122, 111, 105, 229, 1, 86, 190, 109, 229, 112, - 94, 190, 10, 44, 175, 107, 91, 249, 174, 149, 135, 90, 217, 134, 151, 231, 202, 234, 186, 145, - 149, 55, 87, 124, 79, 188, 220, 140, 227, 165, 67, 246, 130, 111, 98, 229, 238, 86, 62, 143, - 81, 39, 112, 236, 208, 89, 78, 15, 167, 28, 63, 135, 200, 125, 19, 142, 205, 137, 213, 239, - 138, 86, 254, 48, 82, 243, 81, 143, 231, 117, 114, 99, 117, 188, 145, 149, 159, 38, 117, 254, - 39, 226, 71, 254, 250, 20, 119, 239, 36, 198, 61, 32, 93, 158, 3, 196, 9, 255, 23, 173, - 252, 5, 241, 25, 186, 38, 45, 223, 216, 202, 169, 86, 46, 177, 242, 107, 43, 167, 33, 227, - 207, 152, 213, 237, 105, 241, 82, 175, 245, 56, 90, 182, 147, 149, 127, 20, 203, 126, 159, 46, - 19, 105, 2, 113, 225, 232, 214, 86, 62, 104, 229, 255, 138, 207, 146, 123, 30, 199, 14, 157, - 229, 116, 219, 36, 63, 231, 39, 104, 126, 34, 186, 21, 199, 230, 4, 113, 193, 226, 199, 163, - 85, 31, 241, 74, 94, 39, 55, 86, 199, 171, 33, 238, 36, 251, 113, 217, 159, 227, 187, 121, - 69, 204, 163, 172, 92, 132, 248, 61, 61, 203, 202, 182, 28, 179, 76, 86, 159, 189, 172, 156, - 110, 229, 143, 107, 95, 245, 112, 177, 149, 237, 56, 118, 200, 16, 13, 180, 31, 38, 57, 254, - 39, 226, 194, 198, 62, 28, 155, 27, 171, 227, 41, 73, 189, 153, 255, 222, 95, 158, 215, 201, - 9, 226, 156, 255, 57, 136, 243, 147, 95, 21, 255, 222, 152, 98, 14, 182, 242, 41, 196, 119, - 201, 27, 102, 35, 231, 105, 89, 176, 74, 109, 131, 56, 192, 86, 249, 187, 149, 171, 241, 58, - 67, 133, 184, 154, 236, 39, 205, 85, 188, 239, 127, 150, 87, 0, 16, 31, 182, 47, 81, 125, - 153, 63, 163, 112, 35, 94, 55, 23, 86, 183, 157, 17, 15, 133, 215, 121, 55, 226, 110, 203, - 101, 172, 124, 152, 150, 221, 149, 183, 183, 76, 86, 159, 93, 173, 252, 153, 234, 248, 11, 36, - 159, 31, 251, 247, 26, 90, 238, 158, 156, 110, 39, 39, 86, 183, 151, 38, 245, 28, 187, 130, - 100, 127, 251, 65, 178, 60, 219, 134, 152, 228, 7, 209, 152, 255, 120, 242, 249, 73, 121, 99, - 230, 150, 188, 206, 80, 33, 142, 115, 191, 161, 28, 75, 126, 178, 176, 7, 175, 147, 11, 171, - 219, 219, 184, 194, 21, 238, 197, 235, 229, 194, 234, 182, 185, 149, 11, 169, 190, 126, 55, 249, - 138, 73, 204, 113, 180, 220, 189, 46, 221, 206, 50, 89, 93, 238, 101, 229, 127, 185, 130, 133, - 149, 186, 251, 109, 249, 188, 146, 19, 44, 248, 49, 225, 193, 28, 159, 11, 171, 219, 45, 81, - 255, 30, 149, 206, 181, 178, 17, 175, 155, 11, 171, 219, 211, 185, 194, 230, 137, 201, 114, 63, - 15, 243, 134, 77, 202, 27, 212, 59, 167, 219, 201, 130, 85, 106, 111, 212, 55, 98, 190, 105, - 101, 83, 94, 103, 104, 44, 135, 205, 80, 255, 128, 178, 231, 190, 55, 175, 147, 11, 171, 219, - 243, 185, 194, 53, 252, 36, 250, 114, 188, 126, 14, 16, 35, 91, 205, 235, 64, 222, 222, 50, - 89, 125, 238, 193, 21, 44, 28, 153, 196, 124, 157, 23, 154, 111, 165, 219, 201, 137, 213, 237, - 169, 73, 61, 31, 75, 203, 118, 196, 250, 134, 255, 159, 210, 101, 34, 77, 32, 6, 136, 248, - 244, 186, 79, 216, 168, 95, 90, 217, 145, 215, 25, 34, 203, 227, 3, 156, 92, 193, 143, 205, - 217, 142, 228, 103, 117, 123, 24, 87, 184, 198, 95, 173, 236, 199, 235, 231, 192, 234, 117, 29, - 174, 108, 225, 65, 73, 204, 59, 120, 33, 226, 10, 115, 54, 93, 176, 17, 119, 136, 252, 130, - 100, 149, 99, 56, 126, 136, 44, 143, 59, 112, 98, 5, 111, 188, 172, 65, 70, 239, 71, 202, - 234, 117, 5, 212, 95, 160, 96, 207, 228, 245, 115, 129, 232, 150, 200, 190, 153, 44, 247, 70, - 90, 149, 60, 47, 96, 32, 238, 196, 188, 139, 107, 91, 56, 157, 227, 135, 198, 114, 120, 1, - 39, 85, 240, 3, 218, 214, 28, 159, 11, 171, 219, 157, 184, 194, 136, 214, 255, 209, 136, 198, - 37, 251, 136, 149, 75, 243, 118, 150, 205, 234, 244, 25, 174, 104, 67, 126, 176, 200, 42, 31, - 212, 55, 96, 238, 152, 196, 84, 53, 96, 126, 144, 110, 39, 39, 86, 183, 195, 146, 122, 250, - 73, 138, 119, 227, 243, 99, 2, 63, 3, 243, 118, 94, 87, 164, 9, 196, 157, 228, 151, 37, - 159, 165, 212, 59, 57, 126, 104, 44, 135, 135, 112, 82, 5, 239, 154, 157, 237, 115, 124, 136, - 19, 255, 127, 81, 157, 157, 63, 151, 240, 33, 254, 35, 226, 130, 223, 150, 188, 157, 101, 67, - 125, 3, 230, 225, 73, 76, 85, 3, 198, 115, 207, 237, 55, 230, 22, 168, 238, 50, 238, 221, - 172, 246, 226, 248, 33, 177, 250, 95, 222, 202, 111, 41, 47, 231, 13, 201, 117, 191, 161, 185, - 65, 220, 73, 174, 58, 143, 241, 222, 49, 199, 96, 180, 107, 172, 243, 255, 191, 21, 111, 39, - 7, 168, 110, 192, 172, 59, 63, 65, 125, 3, 230, 126, 233, 118, 178, 130, 232, 167, 236, 125, - 251, 170, 222, 136, 177, 110, 37, 67, 97, 117, 63, 162, 38, 167, 53, 200, 180, 165, 239, 172, - 110, 87, 66, 117, 183, 171, 71, 20, 203, 119, 71, 116, 75, 96, 217, 117, 85, 194, 232, 85, - 11, 191, 186, 116, 61, 68, 87, 172, 199, 99, 180, 175, 47, 123, 2, 111, 107, 217, 172, 78, - 151, 197, 120, 157, 253, 199, 230, 50, 73, 204, 73, 180, 220, 101, 123, 69, 198, 161, 190, 155, - 79, 201, 127, 232, 179, 186, 27, 38, 195, 99, 159, 161, 227, 173, 252, 23, 125, 182, 220, 253, - 57, 118, 40, 16, 207, 94, 148, 207, 137, 165, 206, 68, 198, 61, 24, 16, 3, 166, 92, 56, - 90, 229, 181, 94, 80, 44, 247, 231, 98, 170, 122, 103, 100, 211, 237, 170, 100, 117, 218, 212, - 202, 143, 168, 158, 254, 57, 187, 114, 18, 227, 207, 187, 178, 183, 166, 219, 201, 5, 234, 123, - 198, 248, 51, 151, 217, 118, 79, 154, 4, 113, 142, 89, 213, 40, 246, 103, 175, 246, 231, 248, - 156, 32, 158, 19, 97, 254, 76, 239, 218, 139, 19, 246, 223, 39, 240, 66, 243, 59, 43, 187, - 241, 182, 150, 205, 234, 244, 36, 174, 40, 146, 243, 19, 196, 124, 112, 63, 167, 229, 254, 72, - 201, 21, 210, 237, 100, 201, 42, 121, 103, 196, 85, 88, 231, 93, 71, 46, 180, 114, 54, 50, - 187, 74, 209, 4, 98, 180, 8, 239, 219, 235, 57, 148, 221, 96, 188, 165, 127, 39, 142, 205, - 9, 226, 96, 236, 15, 78, 177, 151, 83, 156, 95, 117, 242, 15, 86, 202, 239, 208, 100, 53, - 250, 13, 70, 111, 137, 127, 141, 150, 237, 96, 229, 25, 24, 237, 115, 233, 13, 204, 87, 35, - 211, 3, 181, 213, 235, 6, 136, 187, 44, 126, 82, 239, 93, 19, 15, 163, 229, 126, 181, 217, - 31, 220, 247, 134, 155, 127, 151, 94, 133, 204, 71, 241, 65, 116, 243, 241, 7, 95, 171, 120, - 158, 71, 243, 58, 34, 243, 64, 12, 130, 81, 126, 223, 253, 36, 211, 31, 82, 254, 24, 50, - 190, 27, 62, 9, 226, 14, 255, 249, 136, 103, 46, 156, 15, 57, 254, 16, 142, 203, 9, 214, - 143, 200, 201, 222, 143, 228, 184, 107, 255, 222, 19, 241, 96, 50, 187, 111, 186, 189, 28, 88, - 157, 246, 69, 116, 85, 244, 223, 250, 159, 88, 249, 183, 138, 152, 71, 35, 78, 206, 202, 65, - 100, 178, 237, 190, 136, 241, 158, 49, 191, 71, 92, 61, 191, 13, 199, 14, 129, 213, 251, 112, - 196, 111, 140, 223, 129, 41, 47, 42, 123, 175, 145, 237, 57, 54, 39, 136, 129, 57, 248, 34, - 184, 223, 13, 59, 128, 226, 206, 162, 24, 231, 13, 206, 145, 7, 228, 151, 13, 113, 126, 226, - 3, 69, 212, 158, 159, 216, 255, 31, 104, 229, 11, 136, 223, 126, 31, 108, 225, 214, 233, 242, - 172, 33, 78, 102, 178, 253, 98, 207, 11, 49, 162, 210, 101, 249, 239, 210, 45, 123, 205, 111, - 158, 148, 202, 225, 171, 17, 63, 168, 126, 37, 211, 187, 51, 237, 202, 203, 165, 123, 136, 145, - 97, 252, 238, 209, 215, 16, 63, 150, 126, 133, 233, 141, 160, 3, 181, 200, 162, 16, 87, 255, - 253, 161, 247, 108, 239, 130, 207, 195, 242, 217, 14, 153, 143, 66, 36, 195, 81, 252, 46, 238, - 137, 21, 27, 114, 28, 113, 145, 246, 138, 200, 244, 34, 165, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 172, 133, 234, 7, 221, 156, 247, 83, 206, 170, 47, 223, 52, 80, - 46, 89, 130, 114, 201, 18, 6, 158, 11, 98, 226, 173, 62, 29, 199, 117, 232, 130, 237, 103, - 15, 196, 100, 136, 175, 179, 242, 101, 196, 243, 35, 254, 236, 155, 63, 91, 230, 3, 125, 252, - 0, 49, 151, 146, 119, 255, 59, 136, 215, 239, 19, 98, 22, 250, 46, 157, 200, 251, 236, 10, - 148, 203, 44, 148, 75, 7, 80, 159, 235, 78, 28, 155, 59, 40, 151, 44, 97, 133, 114, 241, - 100, 124, 134, 241, 58, 119, 225, 248, 156, 65, 185, 100, 9, 202, 37, 75, 24, 112, 46, 136, - 193, 71, 250, 118, 28, 215, 163, 45, 182, 237, 75, 91, 57, 10, 49, 116, 39, 63, 64, 58, - 205, 247, 173, 60, 24, 75, 232, 55, 143, 250, 31, 195, 182, 244, 118, 114, 9, 229, 50, 11, - 229, 210, 1, 212, 231, 58, 184, 147, 75, 40, 151, 44, 97, 85, 114, 177, 10, 95, 151, 51, - 32, 159, 229, 117, 114, 5, 229, 146, 37, 40, 151, 44, 97, 192, 185, 32, 38, 170, 189, 128, - 43, 220, 131, 227, 184, 46, 109, 64, 12, 51, 94, 53, 151, 208, 172, 126, 134, 158, 27, 158, - 168, 255, 49, 108, 75, 111, 39, 151, 80, 46, 179, 80, 46, 29, 64, 125, 174, 195, 58, 185, - 252, 127, 202, 37, 87, 88, 149, 92, 172, 194, 111, 225, 12, 42, 84, 142, 34, 149, 27, 40, - 151, 44, 65, 185, 100, 9, 3, 206, 5, 213, 99, 240, 247, 225, 56, 174, 203, 34, 16, 119, - 93, 214, 32, 134, 66, 111, 147, 15, 37, 191, 110, 158, 162, 46, 161, 254, 199, 176, 45, 189, - 157, 92, 66, 185, 204, 66, 185, 116, 0, 245, 185, 14, 235, 228, 242, 255, 41, 151, 92, 97, - 21, 114, 177, 202, 94, 1, 49, 126, 253, 52, 217, 77, 98, 197, 160, 92, 178, 4, 229, 146, - 37, 12, 56, 23, 196, 204, 206, 62, 183, 19, 243, 121, 148, 126, 193, 127, 108, 217, 113, 92, - 159, 121, 33, 238, 34, 189, 157, 119, 208, 34, 159, 167, 100, 221, 164, 126, 93, 65, 253, 143, - 97, 91, 122, 59, 185, 132, 114, 153, 133, 114, 233, 0, 234, 115, 29, 206, 201, 101, 1, 202, - 37, 75, 88, 133, 92, 172, 178, 207, 228, 218, 215, 240, 9, 160, 46, 199, 235, 231, 4, 202, - 37, 75, 80, 46, 89, 194, 128, 115, 177, 250, 188, 150, 234, 232, 190, 139, 152, 196, 182, 238, - 192, 124, 13, 43, 87, 110, 161, 108, 195, 245, 153, 135, 109, 103, 99, 196, 4, 130, 147, 248, - 3, 251, 62, 41, 154, 207, 162, 124, 7, 43, 135, 34, 38, 238, 59, 196, 202, 61, 173, 188, - 18, 213, 19, 14, 166, 124, 18, 188, 78, 231, 93, 65, 253, 107, 238, 245, 228, 215, 111, 158, - 210, 203, 157, 36, 7, 229, 50, 75, 81, 46, 29, 64, 125, 174, 195, 57, 185, 44, 64, 185, - 100, 9, 67, 207, 197, 42, 186, 133, 149, 223, 113, 237, 17, 51, 213, 86, 121, 10, 111, 35, - 23, 80, 46, 89, 130, 114, 201, 18, 6, 156, 139, 213, 229, 90, 168, 126, 192, 253, 200, 98, - 121, 221, 129, 121, 107, 222, 214, 50, 89, 125, 206, 228, 10, 38, 188, 59, 217, 235, 173, 236, - 197, 235, 49, 196, 228, 112, 247, 65, 204, 52, 206, 124, 198, 251, 195, 120, 157, 182, 161, 254, - 53, 31, 198, 143, 97, 2, 202, 37, 75, 88, 161, 92, 166, 193, 10, 229, 10, 229, 146, 37, - 12, 61, 23, 171, 232, 241, 92, 115, 243, 55, 43, 59, 88, 249, 6, 47, 48, 151, 88, 217, - 132, 183, 147, 3, 40, 23, 229, 210, 49, 40, 151, 44, 114, 65, 140, 208, 197, 62, 156, 44, - 175, 59, 48, 103, 211, 128, 177, 186, 28, 203, 149, 75, 248, 112, 201, 55, 224, 117, 166, 177, - 117, 182, 181, 114, 22, 109, 171, 151, 110, 49, 168, 127, 205, 135, 241, 99, 152, 128, 114, 201, - 18, 86, 40, 151, 105, 176, 66, 185, 66, 185, 100, 9, 67, 207, 5, 209, 229, 130, 189, 178, - 88, 230, 87, 244, 170, 220, 147, 183, 147, 3, 40, 23, 229, 210, 49, 40, 151, 165, 231, 98, - 117, 184, 27, 87, 10, 209, 205, 234, 234, 73, 76, 221, 129, 57, 139, 6, 140, 213, 227, 178, - 86, 254, 192, 149, 43, 156, 103, 101, 119, 94, 103, 22, 182, 254, 195, 16, 119, 168, 206, 226, - 101, 93, 65, 253, 107, 62, 140, 31, 195, 4, 148, 75, 150, 176, 66, 185, 76, 131, 21, 202, - 21, 202, 37, 75, 24, 114, 46, 86, 201, 91, 112, 173, 11, 215, 40, 150, 111, 142, 234, 46, - 38, 95, 230, 109, 45, 27, 148, 139, 83, 46, 29, 130, 114, 113, 75, 205, 5, 209, 237, 237, - 167, 92, 41, 20, 13, 175, 36, 174, 238, 192, 156, 75, 3, 230, 133, 92, 177, 194, 239, 173, - 180, 242, 192, 189, 109, 231, 246, 86, 54, 231, 191, 119, 5, 245, 175, 121, 254, 63, 134, 4, - 202, 37, 75, 88, 161, 92, 166, 193, 10, 229, 10, 229, 146, 37, 12, 57, 23, 84, 63, 60, - 122, 46, 197, 156, 202, 1, 133, 67, 211, 184, 101, 131, 114, 41, 41, 151, 142, 64, 185, 148, - 150, 150, 139, 237, 251, 201, 92, 25, 196, 72, 100, 59, 83, 92, 221, 129, 121, 233, 13, 24, - 171, 195, 142, 86, 254, 206, 21, 43, 220, 150, 227, 135, 2, 245, 175, 121, 254, 63, 134, 4, - 202, 37, 75, 88, 161, 92, 166, 193, 10, 229, 10, 229, 146, 37, 12, 53, 23, 171, 224, 85, - 80, 253, 16, 236, 81, 20, 183, 7, 162, 123, 6, 123, 75, 26, 183, 76, 80, 46, 41, 229, - 210, 1, 40, 151, 212, 82, 114, 177, 253, 238, 106, 229, 175, 92, 25, 243, 196, 138, 216, 186, - 3, 115, 14, 13, 152, 7, 115, 165, 10, 231, 114, 236, 144, 160, 254, 53, 207, 251, 199, 176, - 2, 148, 75, 150, 176, 66, 185, 76, 131, 21, 202, 21, 202, 37, 75, 24, 106, 46, 168, 174, - 248, 197, 86, 54, 170, 136, 61, 135, 3, 17, 115, 71, 236, 202, 177, 203, 0, 229, 146, 82, - 46, 29, 128, 114, 73, 45, 37, 23, 196, 136, 92, 204, 235, 189, 69, 69, 108, 85, 142, 46, - 135, 6, 204, 71, 185, 82, 133, 155, 115, 236, 144, 160, 254, 53, 207, 251, 199, 176, 2, 148, - 75, 150, 176, 66, 185, 76, 131, 21, 202, 21, 202, 37, 75, 24, 98, 46, 86, 185, 203, 160, - 122, 2, 184, 199, 115, 172, 179, 191, 31, 206, 129, 133, 167, 115, 108, 223, 160, 92, 170, 40, - 151, 22, 65, 185, 84, 233, 53, 23, 196, 60, 15, 85, 119, 141, 238, 197, 177, 14, 245, 7, - 230, 165, 54, 96, 16, 243, 190, 252, 149, 43, 101, 254, 108, 101, 99, 142, 31, 18, 212, 191, - 230, 249, 254, 24, 214, 128, 114, 201, 18, 86, 40, 151, 105, 176, 66, 185, 66, 185, 100, 9, - 67, 204, 197, 42, 247, 40, 174, 173, 249, 7, 38, 84, 26, 49, 17, 26, 251, 45, 122, 124, - 72, 180, 10, 148, 139, 114, 233, 24, 148, 203, 210, 115, 177, 125, 125, 158, 43, 96, 190, 130, - 154, 201, 25, 81, 127, 96, 94, 212, 26, 222, 215, 44, 108, 253, 125, 120, 131, 133, 119, 114, - 236, 208, 32, 211, 215, 124, 30, 80, 46, 77, 172, 225, 125, 117, 13, 43, 148, 203, 52, 168, - 207, 181, 246, 88, 157, 43, 40, 151, 44, 97, 104, 185, 32, 102, 169, 190, 144, 42, 235, 94, - 203, 177, 41, 91, 126, 127, 94, 161, 240, 239, 28, 219, 23, 40, 23, 229, 210, 49, 40, 151, - 165, 231, 98, 251, 185, 7, 239, 184, 80, 59, 57, 35, 234, 15, 204, 139, 90, 195, 251, 154, - 133, 173, 127, 4, 111, 176, 112, 26, 199, 14, 13, 50, 125, 205, 231, 1, 229, 210, 196, 26, - 222, 87, 215, 176, 66, 185, 76, 131, 250, 92, 243, 60, 185, 156, 0, 202, 37, 75, 24, 90, - 46, 86, 177, 163, 184, 166, 133, 131, 57, 54, 101, 203, 183, 68, 245, 188, 5, 223, 228, 216, - 190, 64, 185, 40, 151, 142, 65, 185, 44, 53, 23, 196, 190, 253, 57, 23, 118, 14, 199, 166, - 80, 127, 96, 94, 212, 26, 222, 215, 44, 108, 253, 187, 242, 6, 11, 143, 225, 216, 161, 65, - 166, 175, 249, 60, 160, 92, 154, 88, 195, 251, 234, 26, 86, 40, 151, 105, 80, 159, 107, 158, - 39, 151, 19, 64, 185, 100, 9, 67, 203, 197, 42, 246, 105, 174, 169, 249, 28, 199, 85, 177, - 184, 211, 120, 197, 194, 141, 56, 182, 15, 80, 46, 107, 65, 185, 116, 6, 202, 101, 45, 44, - 41, 23, 219, 254, 26, 222, 161, 249, 47, 76, 153, 43, 5, 245, 7, 230, 69, 173, 225, 125, - 205, 194, 214, 191, 55, 111, 176, 240, 96, 142, 29, 26, 100, 250, 154, 207, 3, 202, 165, 137, - 53, 188, 175, 174, 97, 133, 114, 153, 6, 245, 185, 230, 121, 114, 57, 1, 148, 75, 150, 48, - 164, 92, 172, 82, 7, 113, 45, 11, 119, 231, 216, 42, 22, 183, 167, 149, 255, 229, 149, 49, - 229, 106, 104, 23, 160, 92, 214, 129, 114, 233, 4, 148, 203, 58, 88, 66, 46, 182, 237, 221, - 172, 252, 141, 119, 104, 206, 224, 88, 134, 250, 3, 243, 162, 214, 240, 190, 102, 97, 235, 223, - 133, 55, 88, 120, 10, 199, 14, 13, 50, 125, 205, 231, 1, 229, 210, 196, 26, 222, 87, 215, - 176, 66, 185, 76, 131, 250, 92, 243, 59, 185, 156, 2, 202, 37, 75, 24, 82, 46, 86, 169, - 215, 113, 45, 205, 47, 173, 108, 194, 177, 117, 44, 246, 93, 188, 1, 196, 92, 17, 87, 228, - 216, 46, 65, 185, 140, 128, 114, 105, 29, 148, 203, 8, 244, 156, 139, 109, 247, 77, 188, 51, - 196, 76, 245, 219, 115, 44, 67, 253, 129, 249, 138, 86, 118, 90, 160, 108, 201, 251, 154, 133, - 173, 127, 51, 84, 123, 25, 199, 14, 13, 234, 95, 115, 31, 184, 128, 95, 199, 89, 202, 66, - 175, 249, 60, 160, 92, 154, 20, 229, 210, 33, 212, 231, 154, 223, 201, 229, 20, 80, 46, 89, - 194, 80, 114, 177, 10, 237, 108, 229, 95, 92, 75, 204, 120, 229, 15, 245, 63, 192, 207, 225, - 216, 174, 64, 185, 140, 129, 114, 105, 21, 148, 203, 24, 244, 152, 139, 109, 243, 80, 84, 15, - 155, 252, 48, 142, 173, 130, 250, 3, 243, 178, 135, 81, 222, 155, 43, 84, 248, 46, 199, 14, - 13, 234, 95, 243, 188, 126, 12, 27, 128, 114, 201, 18, 86, 40, 151, 105, 176, 66, 185, 66, - 185, 100, 9, 67, 201, 197, 42, 244, 84, 174, 97, 203, 252, 33, 223, 94, 174, 98, 64, 185, - 204, 66, 185, 204, 1, 202, 101, 22, 173, 230, 98, 219, 186, 148, 149, 47, 210, 62, 218, 178, - 236, 6, 204, 165, 17, 115, 190, 84, 185, 2, 199, 15, 9, 134, 242, 99, 216, 0, 148, 75, - 150, 176, 66, 185, 76, 131, 21, 202, 21, 202, 37, 75, 24, 66, 46, 86, 153, 205, 172, 252, - 154, 107, 216, 129, 7, 240, 190, 219, 6, 229, 50, 15, 229, 50, 3, 40, 151, 121, 180, 150, - 11, 234, 31, 116, 111, 195, 82, 27, 48, 206, 234, 240, 33, 174, 84, 225, 20, 142, 29, 18, - 12, 225, 199, 176, 33, 40, 151, 44, 97, 133, 114, 153, 6, 43, 148, 43, 148, 75, 150, 48, - 132, 92, 172, 50, 199, 113, 237, 58, 242, 61, 222, 119, 219, 160, 92, 230, 161, 92, 102, 0, - 229, 50, 143, 86, 114, 177, 237, 108, 101, 229, 231, 188, 241, 22, 229, 208, 128, 121, 16, 87, - 170, 240, 39, 43, 219, 113, 252, 80, 96, 8, 63, 134, 13, 65, 185, 100, 9, 43, 148, 203, - 52, 88, 161, 92, 161, 92, 178, 132, 33, 228, 98, 149, 249, 6, 215, 174, 67, 183, 224, 253, - 183, 9, 202, 101, 94, 202, 165, 33, 40, 151, 121, 45, 156, 139, 109, 227, 105, 188, 209, 150, - 229, 208, 128, 217, 30, 213, 163, 171, 185, 55, 112, 252, 80, 96, 8, 63, 134, 13, 65, 185, - 100, 9, 43, 148, 203, 52, 88, 161, 92, 161, 92, 178, 132, 220, 115, 177, 138, 220, 152, 107, - 214, 177, 247, 114, 29, 218, 2, 229, 178, 8, 229, 210, 0, 148, 203, 34, 22, 202, 197, 214, - 223, 195, 202, 223, 121, 163, 230, 227, 86, 78, 154, 177, 124, 126, 237, 154, 227, 150, 222, 128, - 113, 86, 143, 23, 114, 197, 18, 247, 229, 248, 121, 216, 118, 110, 101, 101, 115, 254, 123, 87, - 144, 251, 143, 225, 12, 160, 92, 178, 132, 21, 202, 101, 26, 172, 80, 174, 80, 46, 89, 66, - 238, 185, 88, 69, 222, 201, 53, 51, 127, 177, 178, 151, 149, 93, 22, 44, 31, 195, 56, 31, - 57, 104, 226, 36, 115, 243, 130, 114, 105, 90, 148, 203, 156, 160, 92, 154, 150, 214, 115, 177, - 117, 207, 230, 13, 154, 127, 88, 217, 131, 99, 167, 65, 253, 129, 57, 151, 6, 204, 101, 173, - 252, 145, 43, 87, 240, 161, 169, 143, 231, 117, 154, 66, 12, 20, 240, 20, 196, 251, 241, 14, - 255, 127, 142, 233, 2, 234, 95, 243, 60, 126, 12, 103, 0, 229, 146, 37, 172, 80, 46, 211, - 96, 133, 114, 133, 114, 201, 18, 114, 206, 5, 113, 162, 82, 53, 249, 220, 43, 56, 118, 30, - 182, 157, 127, 227, 13, 23, 158, 207, 177, 139, 130, 114, 105, 12, 202, 101, 46, 80, 46, 141, - 161, 229, 92, 108, 189, 27, 240, 134, 10, 167, 114, 108, 19, 168, 63, 48, 103, 209, 128, 113, - 86, 151, 123, 113, 229, 136, 223, 165, 185, 12, 175, 55, 137, 197, 239, 107, 229, 92, 218, 206, - 139, 57, 174, 11, 190, 31, 218, 111, 105, 249, 63, 134, 51, 130, 114, 201, 18, 86, 40, 151, - 105, 176, 66, 185, 66, 185, 100, 9, 57, 231, 98, 149, 56, 131, 107, 85, 56, 136, 99, 231, - 97, 219, 217, 216, 202, 47, 120, 227, 136, 97, 66, 183, 225, 248, 69, 64, 185, 52, 6, 229, - 50, 23, 40, 151, 198, 208, 98, 46, 136, 97, 147, 191, 66, 219, 113, 191, 195, 140, 39, 240, - 37, 212, 31, 152, 175, 97, 229, 202, 45, 148, 43, 241, 62, 231, 129, 250, 122, 150, 126, 99, - 229, 81, 152, 114, 23, 202, 150, 95, 215, 202, 89, 86, 254, 123, 100, 237, 245, 78, 226, 117, - 218, 134, 250, 92, 14, 193, 248, 235, 55, 79, 217, 155, 247, 217, 21, 40, 151, 89, 138, 114, - 233, 0, 234, 115, 93, 254, 201, 229, 140, 160, 92, 178, 132, 92, 115, 177, 10, 108, 141, 24, - 213, 134, 125, 145, 99, 23, 129, 250, 57, 38, 30, 202, 177, 243, 130, 114, 153, 25, 148, 203, - 76, 160, 92, 102, 134, 150, 114, 65, 253, 72, 105, 51, 109, 39, 133, 250, 3, 115, 91, 254, - 202, 251, 156, 135, 109, 103, 35, 43, 103, 242, 198, 107, 248, 128, 12, 255, 97, 229, 5, 86, - 78, 182, 114, 26, 162, 139, 216, 47, 147, 152, 58, 31, 176, 178, 17, 239, 191, 77, 232, 254, - 53, 255, 31, 222, 103, 87, 160, 92, 102, 161, 92, 58, 128, 250, 92, 151, 123, 114, 57, 7, - 40, 151, 44, 33, 215, 92, 172, 2, 15, 229, 26, 21, 142, 227, 216, 69, 216, 246, 118, 67, - 244, 217, 102, 63, 178, 114, 41, 142, 159, 7, 148, 203, 204, 160, 92, 102, 2, 229, 50, 51, - 180, 144, 11, 162, 177, 85, 117, 2, 254, 99, 43, 155, 112, 124, 83, 168, 63, 48, 183, 165, - 149, 6, 76, 201, 182, 247, 12, 222, 65, 139, 94, 132, 142, 27, 47, 14, 221, 191, 230, 189, - 157, 92, 66, 185, 204, 66, 185, 116, 0, 245, 185, 46, 247, 228, 114, 14, 80, 46, 89, 66, - 142, 185, 32, 186, 100, 156, 207, 53, 66, 204, 152, 189, 5, 199, 47, 202, 182, 249, 110, 222, - 81, 225, 54, 28, 59, 43, 40, 151, 185, 65, 185, 52, 2, 229, 50, 55, 44, 152, 11, 234, - 79, 220, 239, 204, 177, 179, 64, 253, 129, 185, 45, 173, 54, 96, 156, 109, 243, 238, 104, 119, - 210, 81, 239, 130, 119, 28, 239, 167, 43, 232, 254, 53, 239, 237, 228, 18, 202, 101, 22, 202, - 165, 3, 168, 207, 117, 121, 39, 151, 115, 130, 114, 201, 18, 114, 204, 197, 118, 126, 59, 174, - 77, 97, 174, 7, 108, 167, 65, 12, 215, 89, 229, 195, 28, 59, 43, 40, 151, 185, 65, 185, - 52, 2, 229, 50, 55, 44, 144, 139, 197, 236, 137, 24, 101, 140, 125, 158, 99, 103, 133, 250, - 3, 115, 91, 90, 111, 192, 56, 196, 28, 49, 175, 66, 245, 157, 173, 166, 124, 240, 134, 87, - 88, 217, 145, 183, 223, 37, 116, 255, 154, 247, 118, 114, 9, 229, 50, 11, 229, 210, 1, 212, - 231, 186, 188, 147, 203, 57, 65, 185, 100, 9, 57, 230, 130, 234, 33, 78, 221, 190, 28, 219, - 6, 196, 176, 157, 23, 240, 206, 10, 251, 113, 252, 44, 160, 92, 230, 6, 229, 210, 8, 148, - 203, 220, 176, 64, 46, 182, 252, 109, 188, 66, 225, 6, 28, 59, 43, 212, 31, 152, 219, 210, - 73, 3, 166, 100, 219, 223, 221, 202, 211, 173, 252, 138, 246, 59, 201, 207, 172, 156, 98, 101, - 47, 222, 94, 31, 208, 253, 107, 222, 219, 201, 37, 148, 203, 44, 148, 75, 7, 80, 159, 235, - 242, 78, 46, 231, 4, 229, 146, 37, 172, 80, 46, 34, 34, 146, 17, 196, 104, 111, 215, 65, - 140, 68, 198, 221, 245, 188, 187, 217, 107, 172, 156, 128, 24, 133, 172, 151, 249, 94, 68, 68, - 68, 68, 68, 68, 166, 178, 6, 202, 141, 70, 154, 47, 192, 195, 56, 70, 68, 68, 68, 68, - 68, 36, 11, 214, 96, 121, 126, 210, 120, 241, 231, 92, 118, 225, 24, 17, 17, 17, 17, 17, - 145, 44, 88, 131, 229, 162, 164, 1, 227, 126, 136, 120, 78, 102, 107, 142, 21, 17, 17, 17, - 17, 17, 89, 26, 107, 164, 92, 139, 26, 47, 169, 159, 88, 217, 129, 215, 17, 17, 17, 17, - 17, 17, 89, 42, 107, 168, 108, 106, 101, 63, 43, 95, 26, 109, 195, 224, 185, 28, 43, 34, - 34, 34, 34, 34, 210, 59, 107, 156, 108, 107, 101, 75, 250, 219, 235, 169, 1, 243, 233, 116, - 185, 136, 136, 136, 136, 136, 200, 82, 88, 227, 228, 89, 86, 254, 101, 229, 235, 86, 62, 98, - 229, 188, 145, 166, 75, 248, 40, 175, 39, 34, 34, 34, 34, 34, 210, 43, 107, 152, 92, 202, - 202, 79, 185, 181, 82, 225, 145, 188, 174, 136, 136, 136, 136, 136, 72, 175, 172, 97, 114, 99, - 110, 169, 84, 248, 144, 149, 77, 121, 93, 17, 17, 17, 17, 17, 145, 94, 89, 195, 100, 51, - 43, 119, 179, 242, 70, 43, 63, 178, 242, 119, 43, 255, 176, 114, 190, 149, 115, 172, 28, 105, - 229, 82, 188, 158, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, - 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 200, 6, 3, - 192, 22, 86, 174, 97, 229, 170, 86, 54, 226, 229, 206, 254, 190, 135, 149, 67, 147, 178, 21, - 199, 228, 194, 234, 182, 169, 149, 123, 88, 185, 38, 47, 91, 21, 150, 219, 67, 172, 236, 197, - 127, 207, 153, 79, 30, 104, 229, 131, 168, 246, 114, 142, 207, 145, 213, 243, 16, 43, 159, 65, - 76, 142, 248, 107, 43, 111, 246, 191, 85, 196, 157, 153, 228, 230, 246, 225, 24, 145, 13, 129, - 125, 246, 183, 178, 242, 0, 43, 223, 182, 114, 56, 47, 95, 5, 150, 215, 117, 173, 124, 215, - 202, 137, 86, 182, 225, 229, 185, 178, 186, 94, 198, 202, 79, 202, 131, 20, 121, 32, 199, 203, - 242, 216, 251, 113, 144, 149, 239, 89, 121, 152, 149, 109, 121, 185, 200, 6, 199, 190, 8, 199, - 91, 249, 207, 228, 160, 245, 103, 43, 175, 180, 114, 37, 138, 123, 69, 18, 227, 178, 107, 28, - 88, 157, 118, 177, 178, 198, 202, 37, 69, 29, 207, 179, 178, 5, 199, 13, 29, 162, 241, 226, - 254, 215, 202, 187, 173, 220, 156, 99, 114, 100, 245, 124, 98, 81, 239, 58, 247, 224, 117, 114, - 98, 245, 219, 11, 163, 223, 149, 148, 127, 103, 182, 78, 98, 207, 165, 229, 187, 166, 219, 202, - 129, 213, 233, 161, 86, 46, 182, 242, 23, 43, 111, 179, 178, 19, 45, 223, 29, 241, 249, 250, - 171, 149, 11, 173, 28, 151, 46, 23, 153, 196, 62, 47, 87, 178, 242, 92, 43, 127, 244, 47, - 64, 193, 63, 111, 219, 113, 236, 144, 89, 62, 91, 91, 57, 63, 201, 209, 143, 17, 47, 196, - 0, 46, 90, 88, 29, 207, 73, 234, 205, 254, 105, 229, 32, 94, 39, 39, 136, 139, 149, 207, - 179, 242, 187, 162, 248, 231, 109, 19, 138, 185, 142, 149, 207, 91, 249, 135, 149, 111, 90, 57, - 44, 93, 62, 4, 136, 139, 204, 223, 247, 55, 165, 224, 199, 236, 23, 91, 217, 151, 99, 69, - 54, 8, 246, 225, 63, 220, 202, 255, 37, 95, 138, 212, 127, 89, 121, 145, 149, 125, 172, 236, - 102, 229, 231, 163, 139, 177, 7, 111, 111, 89, 172, 46, 251, 90, 121, 19, 162, 206, 236, 165, - 28, 63, 100, 150, 207, 254, 136, 3, 49, 243, 131, 219, 253, 57, 62, 23, 86, 183, 27, 91, - 249, 159, 209, 42, 143, 241, 131, 242, 85, 121, 221, 92, 32, 26, 41, 147, 92, 104, 229, 129, - 136, 6, 166, 55, 46, 75, 254, 185, 172, 188, 179, 185, 44, 86, 159, 187, 38, 245, 43, 189, - 139, 98, 190, 76, 203, 253, 88, 49, 184, 31, 127, 233, 159, 125, 78, 142, 195, 232, 119, 32, - 117, 54, 199, 15, 153, 229, 243, 26, 78, 176, 224, 223, 151, 7, 115, 124, 46, 172, 110, 15, - 231, 10, 87, 240, 134, 89, 182, 87, 251, 173, 110, 207, 228, 10, 155, 39, 37, 203, 119, 176, - 242, 91, 90, 254, 39, 43, 59, 167, 219, 201, 157, 213, 247, 165, 148, 67, 201, 63, 99, 15, - 229, 120, 145, 149, 103, 31, 252, 247, 243, 183, 161, 33, 239, 62, 115, 105, 222, 222, 178, 32, - 174, 128, 189, 131, 234, 152, 186, 45, 175, 51, 68, 150, 199, 102, 86, 190, 197, 201, 21, 252, - 234, 211, 77, 121, 157, 28, 88, 189, 118, 182, 242, 75, 170, 175, 243, 207, 17, 251, 14, 50, - 188, 107, 134, 232, 254, 230, 93, 198, 230, 241, 53, 222, 222, 178, 89, 157, 94, 207, 149, 52, - 255, 109, 101, 211, 98, 249, 229, 120, 97, 225, 12, 222, 150, 72, 21, 251, 172, 60, 22, 245, - 141, 152, 99, 56, 126, 136, 44, 143, 163, 56, 177, 130, 159, 88, 174, 177, 114, 41, 94, 39, - 7, 136, 46, 111, 85, 23, 252, 170, 46, 142, 189, 141, 215, 207, 5, 162, 91, 34, 251, 122, - 178, 252, 214, 188, 176, 144, 245, 221, 254, 148, 213, 245, 54, 92, 249, 130, 127, 198, 78, 65, - 166, 159, 49, 145, 206, 216, 135, 126, 35, 84, 31, 172, 154, 120, 63, 111, 111, 217, 16, 39, - 152, 254, 131, 81, 117, 71, 201, 79, 60, 7, 117, 197, 165, 138, 229, 112, 6, 39, 86, 240, - 70, 77, 150, 207, 195, 88, 189, 46, 109, 229, 99, 84, 95, 247, 85, 68, 151, 172, 139, 120, - 129, 121, 45, 111, 103, 217, 172, 78, 87, 160, 58, 122, 55, 17, 63, 121, 241, 59, 46, 124, - 119, 146, 61, 153, 183, 183, 108, 168, 110, 192, 248, 201, 230, 218, 198, 163, 253, 247, 178, 188, - 176, 240, 34, 222, 150, 72, 29, 251, 188, 28, 137, 209, 46, 100, 37, 255, 254, 100, 121, 204, - 106, 10, 113, 76, 248, 61, 229, 229, 252, 78, 242, 29, 57, 62, 23, 136, 187, 18, 63, 165, - 58, 187, 55, 32, 158, 241, 171, 186, 176, 116, 34, 111, 39, 7, 168, 110, 192, 124, 39, 89, - 94, 215, 128, 57, 54, 221, 78, 174, 16, 23, 255, 170, 46, 156, 121, 183, 222, 163, 56, 94, - 100, 131, 128, 232, 159, 156, 186, 16, 113, 64, 222, 207, 202, 203, 80, 125, 117, 166, 116, 51, - 222, 94, 46, 172, 110, 119, 68, 252, 128, 176, 236, 26, 93, 179, 176, 250, 223, 28, 213, 141, - 179, 183, 35, 239, 1, 21, 158, 202, 21, 54, 63, 67, 241, 76, 136, 253, 247, 234, 136, 231, - 174, 216, 113, 180, 169, 165, 66, 12, 92, 145, 58, 51, 89, 182, 189, 149, 55, 210, 242, 210, - 47, 172, 236, 144, 110, 43, 7, 168, 254, 97, 127, 31, 197, 124, 130, 3, 176, 162, 15, 97, - 75, 119, 236, 51, 115, 21, 140, 246, 223, 47, 125, 14, 153, 117, 173, 108, 10, 113, 193, 172, - 234, 194, 204, 143, 173, 236, 207, 241, 185, 64, 212, 251, 189, 84, 103, 247, 89, 43, 155, 21, - 49, 126, 97, 134, 127, 107, 254, 101, 229, 218, 188, 189, 101, 179, 58, 61, 129, 234, 233, 214, - 36, 203, 189, 119, 134, 31, 131, 83, 126, 242, 191, 75, 178, 153, 108, 161, 186, 151, 204, 5, - 86, 14, 224, 88, 145, 13, 134, 125, 1, 174, 77, 95, 138, 23, 208, 242, 43, 35, 250, 246, - 250, 151, 189, 228, 119, 108, 30, 146, 198, 229, 8, 241, 156, 136, 255, 144, 176, 19, 56, 118, - 8, 16, 87, 204, 248, 32, 236, 63, 48, 79, 70, 198, 183, 143, 17, 163, 218, 125, 9, 113, - 183, 165, 44, 254, 92, 197, 129, 20, 231, 87, 105, 211, 24, 47, 159, 178, 114, 217, 52, 110, - 153, 172, 46, 55, 195, 168, 117, 253, 172, 147, 152, 27, 34, 30, 134, 247, 171, 178, 127, 179, - 242, 33, 100, 252, 32, 47, 226, 238, 145, 255, 24, 122, 93, 223, 99, 229, 114, 180, 220, 7, - 197, 240, 174, 153, 222, 192, 244, 70, 167, 70, 37, 146, 185, 216, 103, 103, 219, 226, 51, 86, - 242, 239, 136, 95, 61, 191, 13, 199, 14, 129, 213, 251, 166, 136, 59, 223, 254, 124, 69, 121, - 178, 255, 17, 43, 219, 115, 108, 78, 172, 126, 183, 199, 248, 177, 214, 47, 84, 140, 28, 107, - 237, 255, 31, 81, 17, 247, 86, 43, 27, 167, 113, 203, 102, 245, 217, 196, 202, 179, 173, 252, - 10, 241, 108, 139, 63, 216, 190, 182, 27, 108, 18, 115, 77, 68, 99, 217, 143, 115, 62, 138, - 215, 80, 6, 189, 241, 223, 19, 31, 116, 32, 253, 140, 125, 220, 202, 142, 28, 43, 178, 65, - 65, 12, 159, 232, 87, 245, 203, 50, 50, 234, 88, 9, 49, 202, 199, 193, 86, 110, 224, 235, - 240, 242, 92, 33, 174, 138, 251, 213, 127, 127, 80, 209, 31, 88, 246, 131, 193, 238, 28, 55, - 4, 86, 239, 45, 173, 28, 136, 184, 106, 126, 63, 43, 39, 251, 191, 57, 78, 68, 4, 213, - 125, 230, 151, 222, 141, 17, 113, 245, 127, 79, 20, 87, 250, 87, 5, 226, 55, 242, 138, 24, - 232, 221, 36, 201, 95, 242, 25, 203, 170, 1, 41, 34, 34, 34, 178, 176, 226, 68, 39, 29, - 210, 215, 253, 16, 43, 214, 104, 16, 17, 233, 147, 29, 67, 183, 179, 114, 23, 196, 104, 164, - 95, 67, 12, 9, 239, 207, 139, 121, 207, 36, 191, 3, 232, 189, 77, 124, 186, 17, 191, 96, - 190, 37, 175, 47, 34, 34, 34, 53, 236, 135, 243, 36, 111, 177, 144, 65, 116, 153, 17, 17, - 201, 13, 226, 57, 42, 239, 174, 95, 245, 172, 110, 29, 127, 244, 194, 187, 54, 246, 223, 107, - 9, 209, 143, 114, 30, 62, 207, 133, 39, 233, 51, 219, 250, 3, 126, 167, 33, 250, 156, 46, - 101, 88, 88, 212, 231, 113, 52, 199, 206, 202, 182, 177, 49, 111, 180, 112, 58, 199, 246, 5, - 113, 139, 213, 103, 124, 62, 203, 202, 23, 17, 19, 90, 122, 191, 87, 127, 95, 252, 3, 229, - 163, 69, 249, 44, 234, 47, 183, 114, 12, 50, 122, 198, 130, 41, 151, 60, 41, 23, 233, 26, - 98, 222, 173, 251, 35, 158, 65, 252, 2, 98, 8, 242, 242, 125, 241, 209, 187, 252, 121, 164, - 115, 17, 115, 67, 248, 21, 193, 181, 207, 93, 216, 127, 119, 197, 248, 0, 38, 111, 230, 237, - 183, 5, 49, 143, 88, 149, 86, 158, 149, 66, 76, 164, 200, 70, 230, 42, 106, 11, 148, 75, - 99, 80, 46, 115, 65, 245, 84, 15, 254, 125, 109, 101, 146, 99, 219, 206, 51, 120, 227, 133, - 78, 167, 87, 64, 253, 121, 230, 200, 196, 200, 67, 132, 24, 236, 234, 71, 156, 216, 12, 252, - 216, 125, 48, 111, 183, 83, 168, 127, 67, 230, 229, 39, 3, 254, 99, 212, 235, 232, 36, 168, - 207, 195, 27, 89, 149, 207, 188, 52, 133, 76, 26, 48, 136, 122, 220, 3, 241, 67, 63, 43, - 63, 33, 248, 144, 149, 91, 241, 118, 151, 1, 202, 165, 164, 92, 58, 130, 21, 202, 101, 149, - 32, 134, 181, 247, 198, 136, 55, 24, 121, 4, 168, 105, 124, 132, 168, 183, 88, 249, 0, 253, - 221, 143, 243, 157, 141, 182, 132, 213, 58, 185, 84, 46, 13, 65, 185, 204, 5, 49, 41, 184, - 207, 181, 197, 94, 207, 177, 179, 178, 109, 236, 129, 234, 105, 49, 62, 192, 177, 109, 67, 253, - 121, 230, 160, 27, 48, 136, 65, 136, 188, 107, 216, 162, 252, 252, 255, 90, 188, 253, 206, 160, - 254, 13, 89, 148, 207, 179, 240, 106, 244, 52, 138, 4, 38, 231, 225, 163, 65, 109, 194, 235, - 52, 133, 12, 26, 48, 136, 209, 171, 206, 227, 10, 204, 233, 179, 86, 14, 226, 125, 244, 5, - 202, 165, 142, 114, 105, 9, 86, 40, 151, 85, 98, 175, 227, 77, 80, 61, 159, 197, 162, 58, - 29, 49, 18, 171, 117, 114, 169, 92, 26, 130, 114, 153, 27, 226, 174, 41, 243, 11, 22, 215, - 229, 216, 89, 32, 46, 96, 48, 63, 223, 188, 6, 199, 182, 13, 245, 231, 153, 131, 109, 192, - 32, 38, 13, 247, 17, 224, 234, 252, 14, 49, 133, 197, 11, 172, 188, 8, 49, 220, 181, 223, - 29, 175, 227, 195, 200, 247, 211, 19, 11, 245, 111, 72, 91, 188, 107, 198, 97, 188, 223, 182, - 97, 122, 30, 167, 241, 58, 77, 97, 137, 13, 24, 219, 199, 230, 136, 185, 106, 218, 230, 115, - 223, 156, 132, 30, 135, 38, 134, 114, 105, 66, 185, 44, 0, 43, 148, 203, 42, 65, 12, 1, - 251, 60, 204, 126, 199, 165, 9, 239, 198, 220, 233, 168, 88, 88, 161, 147, 75, 40, 151, 198, - 160, 92, 230, 102, 219, 190, 28, 198, 187, 121, 58, 239, 194, 59, 215, 113, 212, 214, 187, 30, - 111, 172, 112, 22, 199, 118, 1, 245, 231, 153, 67, 110, 192, 212, 117, 199, 243, 187, 218, 222, - 189, 119, 236, 216, 106, 127, 219, 10, 49, 47, 145, 223, 17, 175, 114, 60, 175, 211, 9, 212, - 191, 33, 109, 242, 36, 239, 198, 251, 110, 19, 166, 231, 225, 63, 156, 71, 242, 122, 77, 96, - 73, 13, 24, 219, 254, 142, 136, 49, 221, 187, 244, 38, 208, 88, 242, 93, 128, 114, 153, 149, - 114, 153, 17, 86, 40, 151, 85, 130, 24, 198, 222, 159, 147, 236, 210, 11, 81, 241, 67, 219, - 22, 172, 208, 201, 37, 148, 75, 99, 80, 46, 11, 177, 237, 63, 133, 119, 88, 56, 134, 99, - 167, 65, 12, 77, 238, 141, 31, 230, 221, 201, 122, 153, 54, 2, 245, 231, 153, 131, 108, 192, - 32, 230, 172, 170, 122, 96, 223, 231, 25, 186, 38, 199, 51, 196, 115, 239, 85, 62, 199, 177, - 157, 64, 253, 27, 114, 8, 98, 130, 199, 186, 114, 0, 98, 78, 149, 251, 88, 121, 51, 226, - 54, 211, 36, 222, 167, 252, 78, 188, 255, 182, 160, 62, 143, 212, 175, 49, 71, 63, 105, 44, - 161, 1, 131, 152, 219, 229, 27, 188, 195, 10, 63, 70, 220, 214, 187, 183, 149, 91, 34, 222, - 183, 35, 172, 28, 139, 120, 32, 249, 167, 235, 34, 235, 189, 19, 29, 142, 185, 14, 229, 162, - 92, 148, 203, 6, 201, 94, 167, 109, 80, 125, 210, 145, 242, 139, 75, 222, 205, 247, 100, 43, - 119, 176, 114, 45, 43, 251, 89, 57, 12, 49, 76, 231, 25, 24, 31, 46, 185, 138, 119, 45, - 185, 52, 215, 161, 13, 88, 161, 147, 75, 40, 151, 198, 160, 92, 22, 130, 184, 82, 239, 15, - 119, 51, 255, 219, 214, 28, 63, 137, 197, 223, 147, 55, 82, 120, 14, 199, 118, 5, 205, 206, - 51, 89, 57, 32, 201, 47, 16, 207, 99, 250, 69, 176, 135, 162, 135, 46, 111, 211, 88, 29, - 30, 150, 212, 51, 117, 47, 142, 173, 131, 232, 94, 198, 188, 199, 194, 92, 119, 217, 102, 130, - 250, 55, 100, 166, 22, 37, 162, 31, 221, 137, 24, 159, 69, 61, 229, 45, 229, 78, 222, 52, - 212, 231, 193, 62, 138, 25, 95, 88, 244, 220, 128, 65, 236, 239, 92, 222, 25, 249, 164, 149, - 27, 241, 186, 85, 176, 126, 246, 247, 73, 94, 198, 235, 181, 1, 202, 165, 22, 148, 75, 43, - 176, 66, 185, 172, 18, 123, 141, 46, 141, 24, 8, 161, 142, 55, 92, 94, 103, 101, 63, 94, - 151, 33, 238, 174, 249, 140, 246, 211, 116, 242, 190, 96, 133, 78, 46, 161, 92, 26, 131, 114, - 89, 152, 237, 227, 120, 222, 105, 225, 153, 28, 91, 199, 98, 183, 64, 204, 69, 194, 254, 96, - 101, 59, 142, 239, 10, 154, 159, 103, 54, 245, 93, 43, 15, 194, 2, 207, 104, 47, 194, 246, - 251, 65, 170, 143, 243, 139, 69, 141, 47, 4, 89, 236, 209, 188, 129, 194, 206, 28, 219, 58, - 212, 191, 33, 51, 53, 96, 74, 136, 238, 2, 85, 67, 232, 149, 126, 128, 14, 38, 26, 67, - 125, 30, 85, 78, 226, 245, 39, 65, 255, 13, 152, 103, 241, 142, 18, 62, 196, 104, 227, 214, - 113, 202, 214, 123, 20, 226, 106, 64, 157, 123, 242, 58, 139, 130, 114, 153, 10, 202, 101, 33, - 88, 161, 92, 86, 9, 226, 142, 74, 29, 31, 30, 249, 134, 188, 78, 29, 139, 61, 155, 55, - 48, 193, 204, 221, 83, 166, 193, 10, 157, 92, 66, 185, 52, 6, 229, 178, 48, 196, 168, 131, - 254, 96, 55, 243, 250, 52, 26, 33, 22, 245, 93, 209, 30, 197, 177, 93, 194, 108, 231, 153, - 179, 248, 17, 22, 28, 220, 96, 86, 136, 247, 165, 234, 97, 252, 153, 158, 23, 71, 244, 98, - 168, 178, 15, 199, 182, 14, 245, 111, 200, 92, 230, 167, 134, 36, 0, 0, 61, 19, 73, 68, - 65, 84, 13, 152, 146, 173, 255, 76, 222, 96, 226, 9, 28, 191, 40, 212, 231, 81, 197, 135, - 247, 59, 148, 183, 81, 7, 61, 54, 96, 108, 155, 215, 68, 245, 240, 131, 206, 239, 110, 45, - 52, 60, 53, 98, 20, 160, 191, 210, 118, 75, 222, 13, 112, 161, 247, 61, 5, 229, 210, 24, - 148, 203, 92, 176, 66, 185, 172, 18, 123, 93, 246, 71, 116, 35, 168, 242, 29, 204, 112, 117, - 206, 98, 239, 196, 27, 48, 255, 129, 104, 156, 86, 249, 35, 90, 158, 199, 7, 43, 116, 114, - 9, 229, 210, 24, 148, 75, 43, 80, 255, 172, 196, 59, 57, 150, 33, 230, 124, 170, 58, 6, - 123, 119, 223, 214, 47, 134, 79, 130, 217, 206, 51, 103, 229, 199, 203, 78, 159, 21, 79, 33, - 94, 215, 42, 51, 213, 193, 226, 15, 228, 13, 20, 186, 31, 129, 24, 245, 111, 200, 194, 63, - 204, 136, 238, 1, 85, 252, 7, 102, 27, 142, 95, 4, 234, 243, 240, 91, 140, 85, 46, 68, - 195, 153, 67, 209, 111, 3, 198, 135, 168, 171, 226, 15, 85, 181, 210, 253, 206, 182, 115, 107, - 212, 95, 89, 110, 45, 39, 40, 151, 153, 64, 185, 204, 12, 43, 148, 75, 19, 136, 99, 81, - 227, 231, 111, 44, 118, 83, 204, 208, 29, 160, 45, 182, 207, 119, 143, 188, 74, 235, 249, 157, - 151, 198, 207, 33, 90, 236, 14, 24, 159, 159, 224, 91, 136, 81, 205, 110, 133, 250, 70, 210, - 139, 121, 91, 139, 192, 10, 157, 92, 66, 185, 52, 6, 229, 210, 26, 219, 215, 167, 120, 231, - 133, 155, 113, 108, 10, 49, 249, 112, 149, 123, 115, 108, 215, 80, 127, 158, 233, 195, 16, 123, - 183, 227, 170, 226, 221, 196, 188, 177, 85, 119, 172, 74, 249, 197, 184, 70, 93, 157, 23, 133, - 120, 142, 189, 202, 76, 147, 129, 162, 250, 2, 211, 197, 28, 215, 9, 212, 191, 33, 109, 52, - 96, 252, 199, 211, 135, 184, 172, 242, 96, 142, 95, 4, 234, 243, 56, 10, 49, 70, 120, 149, - 183, 242, 118, 170, 160, 167, 6, 140, 109, 239, 106, 188, 131, 196, 29, 56, 126, 17, 182, 189, - 199, 243, 14, 10, 126, 165, 99, 91, 142, 159, 21, 148, 203, 92, 160, 92, 26, 195, 10, 229, - 210, 4, 226, 153, 146, 55, 90, 121, 43, 26, 52, 98, 16, 199, 223, 247, 89, 121, 5, 47, - 235, 18, 98, 82, 180, 170, 225, 146, 253, 111, 55, 230, 248, 73, 16, 3, 196, 164, 252, 36, - 224, 192, 100, 121, 221, 251, 226, 119, 103, 90, 235, 27, 143, 21, 58, 185, 132, 114, 105, 12, - 202, 165, 53, 182, 175, 235, 240, 206, 11, 126, 71, 182, 114, 4, 65, 251, 251, 193, 168, 62, - 150, 120, 131, 97, 25, 23, 102, 234, 206, 51, 167, 158, 47, 35, 142, 199, 222, 99, 224, 201, - 86, 46, 26, 93, 125, 196, 5, 232, 97, 164, 75, 196, 32, 41, 85, 26, 247, 78, 114, 168, - 110, 96, 190, 136, 227, 58, 129, 5, 222, 144, 38, 16, 51, 97, 87, 249, 52, 199, 46, 2, - 19, 242, 176, 242, 84, 254, 99, 98, 234, 120, 213, 232, 175, 1, 115, 42, 239, 160, 240, 17, - 142, 93, 20, 98, 208, 133, 11, 105, 63, 165, 251, 112, 252, 172, 160, 92, 230, 2, 229, 210, - 24, 86, 40, 151, 38, 16, 163, 164, 149, 38, 54, 98, 16, 63, 150, 239, 73, 226, 159, 203, - 49, 93, 65, 253, 188, 2, 255, 193, 177, 147, 32, 70, 36, 99, 39, 83, 140, 191, 47, 62, - 178, 92, 149, 169, 199, 246, 166, 176, 66, 39, 151, 80, 46, 141, 65, 185, 180, 10, 113, 220, - 170, 114, 2, 199, 58, 212, 223, 181, 185, 37, 199, 246, 1, 19, 206, 51, 57, 118, 18, 196, - 160, 4, 207, 231, 141, 36, 238, 207, 235, 180, 13, 245, 159, 183, 198, 13, 24, 68, 247, 49, - 238, 194, 237, 189, 21, 186, 127, 254, 197, 161, 165, 55, 164, 14, 98, 236, 238, 75, 120, 227, - 136, 164, 183, 226, 248, 121, 97, 66, 30, 136, 135, 149, 62, 205, 11, 10, 127, 199, 148, 126, - 242, 232, 175, 1, 83, 55, 67, 245, 13, 56, 182, 13, 182, 221, 7, 240, 142, 10, 231, 112, - 236, 172, 160, 92, 230, 6, 229, 210, 8, 86, 40, 151, 105, 80, 221, 135, 188, 178, 17, 131, - 232, 94, 85, 213, 133, 235, 38, 28, 219, 5, 212, 207, 234, 124, 109, 142, 173, 131, 232, 58, - 198, 191, 27, 95, 67, 117, 190, 117, 239, 203, 212, 254, 245, 77, 161, 254, 199, 126, 112, 39, - 151, 80, 46, 141, 65, 185, 180, 202, 246, 183, 55, 170, 187, 82, 249, 8, 131, 59, 80, 236, - 157, 57, 168, 240, 177, 52, 174, 79, 152, 112, 158, 201, 177, 77, 96, 244, 162, 84, 234, 179, - 28, 219, 54, 212, 127, 222, 26, 53, 96, 16, 119, 147, 188, 75, 48, 123, 22, 199, 118, 6, - 45, 191, 33, 85, 80, 255, 44, 204, 76, 221, 9, 38, 193, 148, 60, 236, 191, 187, 161, 126, - 24, 78, 191, 133, 185, 5, 111, 179, 132, 30, 26, 48, 136, 209, 219, 170, 110, 149, 250, 220, - 53, 157, 220, 42, 181, 237, 238, 130, 154, 125, 114, 236, 44, 160, 92, 22, 2, 229, 50, 21, - 86, 40, 151, 166, 108, 63, 167, 243, 142, 65, 141, 24, 68, 227, 229, 157, 20, 227, 70, 238, - 92, 116, 5, 49, 49, 90, 85, 151, 221, 159, 112, 236, 36, 136, 174, 114, 41, 159, 12, 249, - 0, 142, 115, 232, 225, 125, 65, 253, 143, 253, 224, 78, 46, 161, 92, 26, 131, 114, 105, 29, - 98, 210, 217, 42, 235, 186, 29, 33, 238, 172, 86, 61, 126, 224, 223, 243, 131, 211, 237, 245, - 9, 83, 206, 51, 103, 133, 248, 29, 171, 154, 72, 210, 143, 161, 51, 205, 147, 51, 43, 212, - 127, 222, 42, 27, 48, 136, 187, 250, 151, 71, 60, 19, 250, 106, 84, 127, 158, 222, 134, 138, - 139, 76, 157, 65, 203, 111, 72, 21, 219, 214, 113, 188, 241, 194, 253, 56, 118, 94, 104, 144, - 7, 170, 175, 98, 150, 94, 158, 110, 47, 133, 126, 26, 48, 117, 67, 209, 189, 129, 99, 219, - 132, 250, 171, 165, 219, 115, 108, 83, 80, 46, 11, 131, 114, 153, 8, 43, 148, 203, 44, 48, - 161, 17, 83, 148, 115, 104, 153, 235, 165, 241, 226, 108, 95, 215, 230, 157, 23, 222, 200, 177, - 117, 44, 246, 118, 188, 50, 166, 140, 92, 137, 250, 247, 101, 228, 170, 238, 188, 80, 255, 99, - 63, 184, 147, 75, 40, 151, 198, 160, 92, 90, 135, 232, 21, 83, 117, 210, 238, 93, 143, 214, - 246, 134, 177, 255, 62, 150, 23, 22, 222, 196, 219, 235, 19, 26, 156, 103, 206, 10, 245, 221, - 234, 58, 29, 86, 25, 245, 159, 183, 186, 6, 140, 143, 186, 89, 199, 239, 170, 249, 179, 61, - 149, 207, 50, 181, 198, 119, 96, 229, 182, 73, 121, 95, 82, 137, 148, 63, 187, 146, 198, 85, - 149, 137, 93, 175, 74, 136, 25, 175, 171, 60, 133, 99, 231, 133, 134, 31, 44, 196, 44, 220, - 117, 142, 74, 99, 75, 232, 167, 1, 83, 213, 223, 219, 61, 131, 99, 219, 132, 209, 126, 242, - 169, 185, 71, 112, 130, 114, 89, 24, 148, 203, 68, 88, 161, 92, 102, 133, 250, 70, 204, 219, - 249, 143, 232, 177, 241, 226, 80, 255, 190, 60, 137, 99, 171, 88, 220, 246, 24, 159, 185, 251, - 203, 152, 242, 195, 136, 250, 223, 177, 171, 115, 236, 60, 80, 255, 99, 63, 184, 147, 75, 40, - 151, 198, 160, 92, 58, 97, 251, 125, 2, 87, 164, 224, 19, 141, 95, 14, 213, 13, 28, 191, - 11, 187, 23, 111, 171, 79, 104, 120, 158, 57, 11, 91, 119, 13, 111, 172, 112, 91, 142, 109, - 19, 234, 63, 111, 179, 54, 96, 124, 196, 207, 187, 161, 143, 59, 47, 182, 147, 173, 105, 231, - 139, 104, 52, 84, 37, 234, 199, 137, 126, 14, 199, 206, 11, 13, 63, 88, 136, 91, 147, 223, - 224, 160, 194, 31, 173, 92, 49, 141, 47, 214, 233, 163, 1, 115, 79, 222, 120, 225, 161, 28, - 219, 38, 219, 254, 43, 121, 135, 133, 235, 115, 108, 83, 80, 46, 11, 131, 114, 153, 8, 43, - 148, 203, 60, 80, 221, 136, 97, 189, 54, 94, 28, 234, 223, 151, 202, 135, 116, 153, 197, 189, - 158, 214, 243, 147, 174, 171, 113, 28, 179, 152, 87, 209, 122, 165, 235, 113, 236, 60, 80, 255, - 99, 63, 184, 147, 75, 40, 151, 198, 160, 92, 58, 129, 120, 136, 253, 231, 92, 153, 66, 221, - 249, 217, 25, 188, 157, 190, 161, 225, 121, 230, 44, 108, 221, 71, 242, 198, 10, 149, 23, 212, - 219, 130, 250, 207, 219, 172, 13, 152, 146, 63, 179, 248, 116, 116, 57, 42, 39, 150, 211, 128, - 185, 6, 175, 88, 232, 189, 1, 83, 196, 238, 131, 234, 137, 145, 220, 231, 65, 45, 73, 255, - 127, 14, 42, 180, 217, 128, 169, 27, 173, 237, 17, 28, 219, 38, 219, 254, 203, 120, 135, 133, - 185, 127, 248, 161, 92, 22, 6, 229, 50, 17, 86, 40, 151, 121, 97, 114, 35, 166, 247, 198, - 139, 179, 253, 30, 205, 21, 41, 60, 140, 99, 153, 197, 220, 134, 87, 50, 143, 229, 184, 42, - 232, 248, 125, 65, 253, 143, 253, 224, 78, 46, 161, 92, 26, 131, 114, 233, 140, 237, 251, 62, - 92, 153, 9, 252, 42, 127, 247, 19, 35, 78, 129, 25, 206, 51, 155, 66, 253, 164, 239, 183, - 224, 216, 54, 161, 254, 243, 54, 111, 3, 166, 228, 207, 161, 78, 156, 219, 103, 110, 88, 78, - 3, 230, 230, 188, 98, 161, 181, 31, 89, 204, 248, 193, 66, 253, 115, 57, 110, 164, 27, 10, - 250, 105, 192, 120, 151, 188, 42, 167, 114, 108, 155, 108, 251, 103, 243, 14, 11, 141, 186, 7, - 86, 129, 114, 89, 24, 148, 203, 68, 88, 161, 92, 230, 133, 184, 155, 124, 1, 87, 196, 124, - 15, 125, 220, 206, 175, 128, 57, 223, 23, 91, 190, 157, 149, 95, 208, 58, 126, 49, 105, 98, - 215, 177, 146, 197, 253, 7, 173, 91, 82, 23, 50, 2, 229, 210, 24, 148, 75, 103, 16, 243, - 90, 213, 141, 36, 201, 78, 226, 245, 151, 1, 51, 158, 103, 54, 97, 235, 126, 152, 55, 86, - 216, 155, 99, 219, 132, 250, 207, 91, 93, 3, 230, 8, 43, 119, 71, 220, 49, 242, 158, 8, - 117, 195, 215, 59, 127, 158, 233, 54, 188, 141, 214, 161, 131, 55, 132, 217, 182, 238, 205, 27, - 47, 180, 54, 214, 53, 230, 200, 3, 227, 35, 221, 148, 124, 4, 136, 117, 45, 72, 244, 211, - 128, 169, 187, 75, 213, 104, 178, 205, 121, 33, 102, 138, 173, 178, 13, 199, 54, 5, 229, 178, - 48, 40, 151, 137, 176, 66, 185, 204, 3, 49, 34, 204, 123, 185, 18, 9, 63, 161, 111, 116, - 242, 223, 38, 219, 231, 65, 92, 145, 194, 217, 28, 155, 194, 248, 100, 104, 62, 188, 125, 227, - 185, 4, 80, 223, 237, 164, 149, 238, 12, 182, 157, 27, 243, 134, 11, 93, 158, 92, 182, 54, - 12, 116, 10, 202, 165, 49, 40, 151, 78, 33, 70, 180, 154, 198, 187, 154, 213, 142, 18, 219, - 39, 204, 113, 158, 57, 9, 98, 84, 175, 170, 247, 229, 15, 86, 46, 197, 241, 109, 194, 140, - 13, 152, 42, 22, 123, 93, 196, 115, 75, 85, 252, 57, 166, 185, 94, 151, 198, 208, 242, 27, - 82, 5, 49, 228, 90, 149, 195, 57, 118, 94, 152, 35, 15, 91, 182, 141, 149, 243, 121, 133, - 130, 63, 72, 122, 217, 34, 174, 143, 6, 140, 247, 9, 173, 26, 31, 221, 159, 203, 233, 228, - 106, 42, 34, 127, 158, 132, 200, 93, 204, 177, 179, 128, 114, 89, 8, 148, 203, 84, 88, 161, - 92, 102, 133, 250, 121, 94, 216, 91, 208, 115, 35, 198, 246, 183, 37, 170, 135, 52, 246, 33, - 236, 43, 223, 23, 84, 159, 196, 52, 238, 10, 136, 24, 138, 212, 175, 248, 177, 159, 115, 236, - 188, 16, 63, 212, 85, 30, 195, 177, 179, 66, 52, 70, 171, 188, 153, 99, 219, 0, 229, 210, - 8, 148, 75, 47, 172, 14, 31, 231, 74, 145, 94, 38, 10, 110, 2, 115, 156, 103, 214, 65, - 204, 145, 88, 119, 231, 184, 241, 168, 141, 243, 66, 11, 13, 24, 135, 200, 163, 110, 82, 206, - 83, 56, 190, 85, 104, 241, 13, 169, 131, 234, 201, 110, 252, 7, 167, 181, 113, 174, 49, 103, - 30, 182, 252, 90, 136, 209, 45, 170, 124, 0, 241, 230, 116, 222, 128, 113, 136, 46, 19, 85, - 142, 224, 216, 54, 216, 118, 143, 225, 29, 21, 22, 30, 170, 16, 202, 101, 110, 80, 46, 141, - 96, 133, 114, 105, 10, 209, 120, 121, 23, 87, 192, 156, 134, 234, 103, 98, 222, 140, 254, 27, - 49, 117, 119, 67, 198, 250, 116, 35, 26, 31, 252, 48, 239, 103, 48, 195, 92, 62, 22, 123, - 63, 90, 191, 244, 22, 142, 157, 151, 109, 235, 106, 188, 241, 194, 196, 174, 113, 77, 32, 174, - 194, 86, 169, 29, 218, 127, 17, 80, 46, 141, 64, 185, 244, 194, 234, 112, 48, 170, 47, 122, - 184, 239, 162, 231, 227, 215, 36, 152, 243, 60, 147, 89, 252, 86, 168, 191, 176, 239, 14, 227, - 117, 218, 134, 150, 26, 48, 14, 113, 142, 252, 125, 222, 144, 249, 6, 199, 182, 10, 45, 189, - 33, 117, 108, 59, 71, 241, 134, 11, 159, 227, 216, 69, 96, 129, 60, 44, 230, 17, 188, 82, - 226, 81, 232, 175, 1, 115, 18, 239, 160, 240, 69, 180, 124, 59, 17, 49, 156, 182, 79, 224, - 89, 229, 174, 28, 63, 43, 40, 151, 185, 64, 185, 52, 134, 21, 202, 165, 9, 68, 227, 229, - 29, 188, 115, 115, 90, 18, 243, 60, 94, 136, 232, 42, 219, 184, 65, 176, 40, 212, 63, 148, - 250, 153, 138, 216, 215, 80, 204, 223, 48, 67, 223, 111, 196, 149, 229, 31, 209, 54, 74, 71, - 115, 252, 188, 16, 39, 28, 85, 39, 89, 239, 231, 216, 89, 217, 54, 110, 193, 27, 45, 60, - 142, 99, 219, 0, 229, 210, 8, 148, 75, 111, 172, 30, 111, 226, 138, 21, 254, 141, 99, 151, - 9, 139, 157, 103, 250, 51, 63, 251, 34, 134, 144, 190, 120, 116, 245, 17, 31, 225, 117, 187, - 128, 22, 27, 48, 206, 214, 123, 34, 111, 8, 113, 163, 162, 213, 223, 226, 17, 88, 224, 13, - 153, 6, 241, 163, 95, 213, 42, 115, 39, 114, 252, 34, 176, 64, 30, 136, 187, 44, 239, 227, - 21, 11, 222, 77, 229, 80, 254, 99, 161, 237, 6, 204, 110, 168, 238, 162, 226, 142, 225, 248, - 69, 216, 246, 30, 194, 59, 40, 120, 223, 203, 205, 57, 126, 86, 80, 46, 115, 129, 114, 105, - 12, 43, 148, 203, 52, 136, 139, 40, 85, 147, 84, 174, 107, 188, 36, 177, 85, 183, 243, 125, - 120, 226, 94, 26, 49, 136, 81, 30, 171, 78, 196, 220, 221, 147, 184, 35, 121, 161, 121, 72, - 186, 173, 105, 80, 223, 136, 245, 174, 132, 91, 114, 252, 34, 80, 61, 96, 194, 127, 90, 217, - 132, 99, 103, 97, 235, 63, 139, 55, 90, 232, 108, 30, 8, 40, 151, 169, 160, 92, 122, 99, - 245, 56, 145, 43, 86, 56, 144, 99, 151, 9, 245, 231, 153, 159, 179, 114, 110, 77, 249, 2, - 98, 96, 149, 191, 174, 139, 174, 231, 35, 125, 237, 201, 251, 237, 2, 218, 111, 192, 220, 133, - 55, 84, 216, 142, 99, 91, 131, 250, 55, 100, 234, 137, 255, 52, 168, 223, 182, 15, 137, 215, - 202, 195, 149, 37, 212, 239, 171, 81, 30, 30, 135, 241, 81, 112, 74, 85, 7, 21, 215, 106, - 3, 198, 217, 54, 95, 203, 59, 41, 248, 67, 173, 109, 13, 9, 234, 183, 108, 253, 160, 88, - 165, 205, 201, 69, 95, 203, 27, 47, 40, 151, 10, 80, 46, 51, 195, 10, 229, 50, 9, 170, - 159, 19, 25, 107, 188, 148, 108, 217, 11, 41, 214, 27, 20, 55, 230, 184, 174, 32, 186, 223, - 86, 241, 99, 191, 15, 192, 224, 93, 199, 184, 107, 241, 39, 49, 195, 213, 58, 139, 61, 204, - 202, 63, 70, 55, 177, 206, 211, 56, 126, 81, 182, 205, 51, 121, 39, 133, 227, 57, 182, 41, - 196, 51, 67, 191, 226, 13, 34, 26, 230, 173, 254, 70, 166, 160, 92, 38, 130, 114, 233, 21, - 134, 223, 128, 105, 131, 63, 39, 120, 8, 239, 179, 43, 232, 175, 1, 179, 25, 199, 182, 6, - 245, 111, 72, 163, 19, 255, 58, 182, 254, 163, 121, 131, 137, 214, 127, 244, 209, 66, 30, 22, - 123, 19, 196, 8, 100, 77, 117, 209, 128, 217, 29, 245, 45, 117, 111, 157, 47, 244, 1, 183, - 245, 175, 138, 24, 167, 187, 138, 159, 80, 180, 54, 154, 18, 148, 75, 99, 80, 46, 115, 193, - 10, 229, 50, 141, 237, 235, 113, 201, 190, 107, 27, 47, 37, 140, 30, 19, 27, 77, 36, 217, - 22, 219, 223, 213, 81, 253, 96, 189, 243, 1, 82, 184, 43, 220, 95, 48, 195, 149, 71, 196, - 104, 103, 126, 151, 165, 138, 111, 255, 50, 188, 206, 162, 108, 155, 183, 231, 29, 21, 252, 194, - 215, 206, 28, 223, 132, 173, 119, 42, 111, 172, 240, 81, 142, 109, 19, 148, 203, 68, 80, 46, - 189, 130, 26, 48, 159, 197, 12, 199, 191, 54, 160, 253, 6, 204, 83, 121, 67, 230, 119, 28, - 215, 42, 212, 191, 33, 141, 79, 252, 83, 136, 62, 201, 175, 224, 141, 37, 126, 136, 14, 90, - 100, 104, 41, 15, 139, 63, 133, 55, 48, 65, 235, 13, 24, 103, 219, 61, 129, 119, 148, 240, - 33, 247, 30, 192, 235, 52, 97, 235, 221, 11, 245, 87, 146, 253, 10, 109, 235, 227, 118, 67, - 185, 76, 5, 229, 178, 16, 172, 80, 46, 211, 216, 62, 159, 129, 6, 141, 151, 146, 197, 190, - 20, 75, 154, 67, 1, 49, 43, 115, 83, 141, 135, 138, 181, 216, 251, 35, 238, 176, 213, 185, - 35, 175, 211, 6, 68, 151, 232, 159, 242, 206, 10, 95, 179, 114, 57, 94, 103, 18, 212, 119, - 75, 116, 157, 62, 87, 5, 229, 82, 11, 202, 165, 119, 216, 112, 27, 48, 95, 66, 210, 173, - 182, 79, 104, 177, 1, 131, 56, 239, 255, 9, 111, 8, 93, 15, 211, 141, 250, 55, 100, 214, - 19, 127, 127, 142, 228, 174, 86, 206, 163, 237, 164, 252, 71, 231, 154, 188, 110, 27, 208, 94, - 30, 126, 0, 249, 12, 111, 164, 70, 39, 13, 24, 135, 24, 61, 104, 18, 239, 115, 121, 83, - 94, 175, 10, 226, 131, 250, 17, 90, 159, 141, 76, 222, 217, 38, 40, 151, 74, 80, 46, 173, - 193, 10, 229, 178, 42, 16, 199, 210, 143, 241, 11, 87, 225, 235, 104, 208, 117, 12, 49, 33, - 242, 185, 180, 46, 107, 220, 184, 155, 135, 109, 255, 120, 222, 97, 194, 187, 233, 220, 29, 83, - 158, 53, 178, 229, 123, 32, 134, 184, 174, 243, 93, 244, 48, 242, 18, 148, 203, 8, 40, 151, - 165, 193, 106, 55, 96, 252, 78, 180, 223, 97, 246, 187, 104, 254, 60, 204, 27, 172, 60, 216, - 202, 85, 121, 251, 125, 66, 187, 13, 152, 231, 242, 70, 10, 173, 13, 164, 82, 9, 245, 111, - 200, 33, 86, 174, 60, 161, 248, 104, 10, 222, 7, 249, 110, 136, 171, 124, 23, 197, 106, 181, - 188, 191, 229, 29, 120, 255, 109, 65, 125, 30, 51, 53, 96, 28, 162, 91, 138, 63, 156, 59, - 77, 151, 13, 152, 205, 48, 253, 36, 202, 253, 24, 209, 223, 253, 30, 86, 110, 138, 232, 90, - 225, 255, 245, 255, 247, 215, 164, 110, 132, 158, 212, 107, 209, 224, 4, 98, 94, 80, 46, 202, - 69, 185, 108, 144, 236, 117, 218, 26, 241, 163, 61, 141, 15, 246, 226, 93, 93, 124, 212, 202, - 107, 35, 186, 160, 221, 24, 113, 178, 230, 239, 139, 191, 111, 211, 248, 72, 70, 19, 79, 236, - 22, 229, 219, 199, 244, 124, 252, 74, 228, 25, 136, 92, 174, 143, 248, 140, 221, 12, 113, 167, - 240, 157, 168, 31, 120, 194, 121, 23, 230, 70, 13, 237, 69, 65, 185, 40, 151, 76, 96, 248, - 13, 152, 153, 207, 51, 151, 13, 45, 52, 96, 16, 115, 163, 189, 132, 55, 80, 248, 22, 186, - 110, 36, 163, 254, 13, 105, 147, 223, 121, 185, 19, 239, 187, 77, 168, 207, 99, 174, 15, 150, - 173, 119, 71, 222, 80, 133, 206, 26, 48, 14, 49, 89, 159, 31, 140, 186, 228, 31, 190, 78, - 127, 244, 29, 148, 203, 172, 148, 203, 140, 176, 66, 185, 172, 18, 68, 35, 230, 61, 244, 58, - 182, 237, 213, 168, 153, 40, 179, 109, 182, 159, 43, 88, 185, 132, 246, 223, 150, 199, 243, 254, - 186, 4, 229, 210, 148, 114, 233, 16, 212, 128, 233, 29, 102, 104, 192, 32, 6, 145, 185, 109, - 81, 252, 97, 125, 111, 40, 191, 14, 49, 40, 75, 21, 239, 186, 61, 182, 157, 214, 161, 254, - 13, 105, 139, 143, 224, 117, 29, 222, 111, 219, 80, 159, 199, 220, 31, 44, 212, 183, 44, 75, - 157, 54, 96, 28, 226, 106, 140, 63, 28, 229, 183, 33, 219, 228, 141, 202, 7, 241, 254, 186, - 4, 229, 210, 132, 114, 89, 0, 86, 40, 151, 85, 98, 175, 221, 46, 136, 31, 181, 182, 249, - 36, 196, 143, 224, 253, 117, 13, 49, 184, 67, 221, 179, 10, 243, 122, 42, 239, 167, 15, 80, - 46, 211, 40, 151, 142, 65, 13, 152, 222, 97, 182, 6, 204, 44, 191, 167, 30, 219, 233, 13, - 139, 117, 80, 255, 134, 44, 234, 191, 172, 188, 0, 61, 141, 210, 131, 250, 60, 230, 254, 96, - 217, 186, 155, 35, 110, 131, 213, 233, 188, 1, 83, 66, 204, 69, 243, 21, 174, 192, 156, 188, - 171, 205, 190, 188, 143, 190, 64, 185, 212, 81, 46, 45, 193, 10, 229, 178, 10, 236, 245, 123, - 43, 191, 168, 45, 56, 215, 202, 1, 188, 175, 190, 216, 190, 119, 70, 59, 119, 150, 188, 187, - 242, 221, 120, 251, 125, 130, 114, 169, 162, 92, 122, 2, 53, 96, 122, 135, 110, 26, 48, 254, - 156, 207, 205, 120, 253, 206, 160, 254, 13, 153, 151, 15, 109, 249, 34, 204, 48, 155, 114, 27, - 80, 159, 199, 66, 31, 44, 196, 179, 62, 62, 59, 116, 149, 222, 26, 48, 14, 49, 80, 130, - 119, 109, 251, 36, 234, 39, 138, 171, 227, 125, 98, 253, 64, 120, 56, 111, 119, 25, 160, 92, - 74, 202, 165, 35, 88, 161, 92, 134, 12, 213, 221, 113, 253, 185, 201, 143, 98, 246, 247, 197, - 127, 72, 125, 142, 153, 91, 240, 126, 150, 197, 234, 114, 59, 76, 127, 102, 161, 138, 63, 216, - 235, 15, 191, 238, 194, 219, 92, 22, 40, 23, 167, 92, 122, 6, 53, 96, 122, 135, 118, 27, - 48, 222, 64, 62, 205, 202, 142, 188, 110, 167, 80, 255, 134, 76, 227, 63, 240, 127, 182, 114, - 190, 149, 15, 33, 134, 247, 188, 37, 22, 156, 49, 118, 94, 168, 207, 99, 225, 15, 150, 109, - 227, 62, 188, 209, 66, 175, 13, 152, 148, 237, 123, 87, 43, 247, 179, 242, 26, 196, 80, 124, - 62, 58, 137, 79, 234, 230, 15, 232, 121, 131, 235, 231, 136, 177, 197, 253, 68, 225, 158, 86, - 118, 224, 109, 228, 66, 185, 228, 73, 185, 200, 162, 236, 117, 220, 30, 227, 125, 249, 63, 141, - 98, 16, 4, 196, 251, 114, 172, 149, 87, 33, 70, 138, 243, 57, 92, 252, 253, 240, 247, 197, - 187, 237, 249, 21, 61, 255, 251, 203, 173, 28, 131, 22, 142, 231, 93, 177, 186, 93, 197, 202, - 35, 16, 163, 63, 125, 211, 202, 111, 16, 159, 49, 255, 241, 247, 223, 202, 139, 173, 124, 2, - 49, 136, 132, 207, 247, 177, 37, 111, 35, 23, 202, 37, 79, 171, 148, 75, 10, 106, 192, 244, - 14, 243, 53, 96, 252, 184, 236, 55, 41, 46, 68, 252, 94, 250, 64, 18, 119, 198, 64, 62, - 103, 34, 34, 34, 141, 216, 15, 219, 89, 197, 15, 95, 201, 79, 182, 246, 225, 56, 17, 17, - 17, 17, 17, 145, 165, 178, 134, 202, 17, 212, 120, 113, 143, 227, 56, 17, 17, 17, 17, 17, - 145, 165, 67, 116, 249, 122, 82, 82, 30, 139, 158, 134, 58, 22, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 145, 33, 3, 176, 177, 149, 19, 173, 124, 213, - 202, 223, 172, 252, 217, 202, 185, 86, 238, 194, 177, 34, 34, 34, 34, 34, 34, 75, 99, 141, - 148, 77, 173, 124, 16, 245, 94, 200, 235, 136, 136, 136, 136, 100, 193, 78, 84, 110, 102, 229, - 233, 252, 247, 85, 97, 185, 221, 218, 202, 195, 172, 108, 203, 203, 114, 102, 245, 189, 178, 149, - 47, 34, 174, 142, 167, 229, 227, 86, 46, 195, 241, 34, 179, 176, 207, 208, 233, 222, 74, 73, - 252, 31, 253, 191, 251, 119, 94, 79, 100, 22, 246, 25, 218, 195, 202, 169, 86, 174, 197, 203, - 86, 129, 229, 181, 181, 149, 151, 88, 57, 148, 151, 229, 206, 234, 252, 82, 140, 255, 190, 120, - 57, 154, 99, 165, 123, 246, 186, 95, 222, 202, 83, 173, 188, 221, 202, 165, 121, 249, 42, 40, - 142, 5, 47, 179, 178, 63, 47, 203, 153, 213, 247, 186, 86, 190, 82, 241, 93, 121, 167, 149, - 77, 57, 94, 58, 100, 47, 248, 86, 86, 30, 104, 229, 123, 88, 239, 33, 28, 55, 116, 136, - 3, 194, 111, 139, 252, 254, 98, 229, 197, 86, 246, 229, 184, 220, 88, 29, 55, 179, 242, 141, - 162, 222, 85, 222, 193, 235, 228, 198, 234, 184, 13, 226, 135, 253, 215, 86, 254, 105, 229, 124, - 43, 175, 176, 114, 93, 138, 187, 202, 250, 180, 214, 58, 51, 93, 158, 3, 68, 99, 242, 35, - 86, 254, 110, 229, 60, 84, 116, 177, 178, 191, 157, 96, 229, 167, 136, 110, 88, 111, 179, 178, - 11, 199, 228, 194, 234, 182, 3, 226, 61, 41, 157, 132, 120, 191, 46, 107, 229, 85, 201, 223, - 47, 226, 117, 69, 154, 176, 207, 206, 225, 86, 206, 177, 242, 63, 197, 103, 233, 7, 86, 182, - 228, 184, 161, 179, 156, 206, 42, 191, 44, 136, 19, 156, 99, 172, 108, 198, 113, 185, 177, 58, - 62, 56, 169, 55, 251, 171, 149, 253, 120, 157, 156, 88, 253, 46, 101, 229, 100, 43, 151, 88, - 249, 131, 149, 51, 65, 23, 41, 17, 191, 45, 31, 67, 28, 183, 253, 92, 231, 142, 233, 242, - 92, 88, 189, 174, 103, 229, 45, 86, 254, 11, 235, 61, 129, 227, 134, 206, 114, 58, 2, 163, - 23, 202, 252, 98, 236, 29, 145, 121, 99, 13, 241, 123, 121, 81, 82, 111, 150, 125, 111, 5, - 171, 227, 70, 86, 158, 102, 229, 23, 136, 115, 226, 23, 32, 57, 78, 217, 191, 247, 177, 242, - 33, 196, 121, 242, 119, 173, 220, 42, 93, 63, 11, 136, 47, 253, 211, 173, 252, 209, 95, 117, - 242, 15, 12, 172, 85, 60, 9, 34, 87, 63, 233, 100, 254, 5, 250, 176, 149, 171, 240, 58, - 185, 64, 156, 232, 79, 243, 112, 94, 47, 39, 152, 220, 61, 201, 127, 84, 110, 137, 56, 105, - 62, 133, 150, 157, 193, 219, 90, 38, 171, 207, 165, 17, 141, 150, 148, 159, 148, 173, 187, 162, - 108, 255, 190, 61, 45, 119, 31, 75, 183, 147, 19, 171, 219, 29, 146, 122, 158, 77, 203, 252, - 123, 147, 54, 158, 247, 73, 151, 139, 76, 98, 159, 151, 195, 172, 124, 59, 249, 252, 164, 94, - 193, 241, 67, 102, 249, 220, 133, 19, 44, 248, 69, 155, 108, 47, 8, 90, 221, 14, 198, 232, - 5, 140, 42, 126, 18, 147, 109, 131, 19, 213, 13, 176, 179, 146, 229, 126, 194, 230, 23, 205, - 82, 222, 64, 56, 32, 217, 204, 82, 33, 186, 241, 126, 148, 234, 88, 242, 186, 30, 194, 235, - 12, 149, 229, 178, 19, 162, 177, 89, 197, 223, 167, 93, 121, 157, 28, 32, 126, 15, 223, 75, - 245, 173, 114, 103, 94, 55, 39, 136, 139, 148, 236, 89, 197, 178, 77, 172, 252, 136, 150, 249, - 241, 33, 191, 115, 100, 196, 173, 48, 111, 133, 85, 249, 22, 6, 112, 245, 168, 9, 203, 227, - 145, 156, 92, 193, 27, 48, 222, 136, 187, 20, 175, 147, 3, 171, 215, 61, 168, 190, 117, 252, - 0, 55, 114, 55, 35, 23, 86, 175, 27, 114, 101, 103, 112, 2, 111, 111, 153, 172, 62, 251, - 115, 5, 11, 79, 74, 98, 94, 203, 11, 17, 159, 179, 44, 79, 0, 172, 94, 247, 73, 234, - 249, 184, 138, 229, 103, 37, 203, 175, 199, 203, 69, 234, 32, 78, 202, 94, 157, 124, 126, 216, - 237, 121, 157, 33, 178, 60, 118, 67, 92, 249, 175, 242, 53, 43, 187, 243, 58, 57, 176, 122, - 93, 198, 202, 143, 169, 190, 117, 94, 203, 235, 231, 2, 213, 39, 254, 191, 75, 150, 95, 147, - 23, 22, 30, 157, 110, 103, 217, 172, 62, 123, 35, 26, 139, 85, 252, 164, 114, 43, 94, 103, - 136, 44, 143, 119, 115, 114, 5, 191, 27, 112, 56, 199, 231, 194, 234, 246, 56, 174, 112, 13, - 239, 121, 113, 101, 94, 63, 23, 86, 183, 207, 115, 133, 205, 143, 139, 101, 215, 224, 5, 133, - 71, 240, 118, 178, 128, 232, 90, 245, 5, 174, 109, 225, 121, 28, 63, 52, 136, 55, 164, 234, - 10, 147, 223, 26, 207, 182, 165, 108, 117, 219, 23, 113, 11, 143, 61, 201, 202, 27, 249, 143, - 136, 46, 75, 59, 240, 118, 150, 205, 234, 244, 108, 174, 232, 12, 178, 234, 186, 128, 120, 79, - 170, 60, 51, 137, 169, 59, 97, 203, 238, 189, 113, 86, 175, 219, 37, 117, 124, 59, 45, 243, - 59, 78, 233, 21, 244, 189, 211, 229, 34, 77, 216, 231, 230, 33, 86, 254, 59, 249, 28, 149, - 252, 132, 37, 219, 238, 149, 77, 32, 190, 35, 159, 160, 188, 74, 111, 178, 178, 5, 175, 147, - 11, 196, 243, 21, 204, 79, 148, 253, 46, 242, 191, 120, 129, 57, 142, 183, 145, 3, 68, 119, - 23, 246, 183, 100, 249, 213, 121, 97, 225, 41, 233, 118, 114, 128, 232, 137, 240, 46, 174, 104, - 225, 85, 28, 63, 52, 136, 199, 21, 170, 124, 211, 202, 158, 28, 159, 11, 196, 133, 216, 170, - 99, 216, 253, 17, 189, 72, 152, 247, 92, 216, 156, 183, 147, 3, 84, 55, 96, 46, 40, 150, - 213, 53, 96, 30, 201, 219, 201, 6, 226, 57, 139, 215, 112, 141, 17, 87, 142, 111, 193, 241, - 67, 97, 117, 223, 28, 213, 87, 52, 46, 176, 114, 13, 142, 207, 133, 213, 109, 75, 43, 223, - 161, 58, 187, 55, 20, 203, 253, 253, 250, 28, 47, 68, 220, 222, 204, 234, 110, 146, 213, 231, - 125, 84, 71, 239, 111, 121, 164, 149, 231, 33, 26, 145, 117, 62, 204, 219, 90, 54, 68, 87, - 132, 244, 89, 177, 210, 186, 59, 19, 24, 109, 16, 148, 62, 155, 110, 39, 39, 86, 183, 237, - 16, 93, 70, 75, 254, 224, 168, 223, 226, 223, 29, 163, 119, 147, 214, 30, 224, 68, 230, 97, - 159, 159, 155, 88, 249, 93, 242, 121, 42, 249, 201, 103, 86, 199, 172, 89, 160, 250, 170, 236, - 255, 90, 121, 44, 199, 230, 196, 234, 247, 80, 174, 52, 226, 46, 210, 218, 110, 162, 246, 223, - 99, 105, 153, 243, 225, 213, 179, 235, 90, 110, 117, 122, 16, 87, 20, 73, 119, 88, 196, 16, - 241, 254, 220, 85, 202, 207, 109, 14, 78, 183, 147, 11, 68, 87, 37, 63, 14, 87, 13, 166, - 114, 39, 142, 31, 10, 196, 5, 64, 255, 12, 177, 255, 64, 166, 61, 20, 28, 226, 121, 208, - 159, 83, 157, 221, 169, 197, 114, 255, 13, 229, 207, 151, 203, 178, 155, 44, 170, 123, 36, 61, - 167, 88, 230, 231, 56, 223, 167, 101, 222, 195, 39, 219, 59, 74, 235, 32, 14, 106, 220, 202, - 252, 37, 50, 189, 122, 60, 13, 226, 100, 153, 249, 195, 98, 59, 114, 108, 78, 80, 221, 13, - 233, 179, 24, 125, 208, 202, 191, 84, 222, 16, 99, 99, 221, 128, 150, 9, 49, 122, 90, 201, - 127, 216, 215, 93, 149, 64, 156, 40, 251, 115, 47, 124, 112, 240, 43, 4, 59, 167, 219, 201, - 133, 213, 107, 63, 43, 95, 70, 252, 184, 252, 9, 21, 221, 220, 236, 111, 143, 197, 250, 103, - 203, 252, 238, 230, 158, 28, 147, 19, 196, 104, 48, 211, 220, 155, 215, 19, 153, 133, 125, 134, - 246, 68, 116, 77, 102, 99, 223, 161, 33, 176, 122, 31, 128, 241, 59, 21, 254, 189, 63, 130, - 99, 115, 98, 245, 59, 164, 162, 222, 126, 146, 114, 19, 138, 123, 22, 197, 56, 127, 6, 48, - 171, 174, 76, 136, 187, 96, 207, 65, 92, 16, 243, 227, 178, 55, 138, 119, 162, 24, 239, 254, - 235, 35, 69, 249, 114, 111, 168, 221, 63, 93, 158, 35, 171, 227, 157, 48, 218, 11, 195, 255, - 237, 231, 1, 217, 222, 213, 155, 4, 209, 29, 249, 247, 73, 62, 126, 62, 144, 245, 0, 5, - 136, 207, 150, 63, 39, 205, 222, 129, 228, 194, 11, 98, 112, 159, 170, 11, 52, 247, 76, 183, - 151, 3, 196, 115, 46, 47, 68, 124, 95, 252, 56, 240, 102, 36, 13, 72, 251, 247, 213, 16, - 93, 95, 253, 187, 242, 43, 84, 12, 84, 148, 45, 171, 236, 13, 172, 28, 103, 229, 22, 69, - 34, 131, 26, 114, 56, 85, 188, 81, 123, 88, 185, 190, 191, 9, 86, 254, 221, 202, 198, 28, - 39, 221, 41, 94, 123, 191, 227, 226, 229, 230, 188, 188, 100, 203, 174, 106, 229, 166, 200, 172, - 219, 88, 29, 196, 221, 189, 137, 87, 142, 49, 144, 31, 154, 226, 123, 226, 67, 64, 214, 89, - 123, 165, 73, 100, 81, 136, 81, 47, 143, 69, 28, 15, 188, 1, 48, 200, 139, 99, 165, 34, - 31, 31, 181, 199, 239, 48, 221, 11, 67, 184, 82, 185, 162, 16, 39, 155, 19, 187, 237, 216, - 242, 45, 48, 229, 184, 157, 19, 196, 249, 139, 95, 52, 27, 236, 121, 24, 243, 247, 200, 191, - 39, 24, 192, 40, 176, 171, 172, 248, 190, 108, 194, 127, 47, 77, 251, 46, 137, 136, 100, 161, - 56, 152, 29, 107, 229, 83, 86, 126, 131, 24, 37, 198, 187, 255, 101, 125, 53, 89, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 90, 1, 96, 175, 162, 251, - 200, 75, 17, 15, 93, 255, 4, 241, 48, 162, 63, 208, 239, 15, 188, 249, 195, 226, 254, 96, - 220, 26, 100, 58, 114, 71, 73, 185, 228, 73, 185, 228, 105, 40, 185, 216, 190, 183, 69, 204, - 212, 236, 15, 22, 251, 64, 28, 62, 225, 153, 63, 16, 234, 15, 31, 251, 100, 129, 62, 218, - 160, 143, 194, 231, 67, 246, 78, 28, 238, 25, 49, 120, 196, 49, 86, 206, 70, 12, 19, 237, - 15, 42, 122, 190, 62, 126, 255, 133, 86, 222, 111, 229, 41, 200, 96, 196, 37, 171, 195, 206, - 86, 142, 71, 140, 212, 227, 163, 195, 248, 192, 17, 62, 121, 170, 207, 40, 238, 131, 95, 248, - 67, 189, 254, 64, 166, 63, 240, 155, 109, 159, 101, 68, 95, 254, 19, 173, 156, 131, 120, 16, - 220, 243, 40, 63, 99, 254, 94, 122, 215, 197, 103, 32, 158, 189, 220, 136, 215, 207, 137, 114, - 201, 211, 42, 229, 82, 66, 245, 131, 225, 167, 115, 220, 16, 64, 185, 100, 9, 67, 204, 5, - 241, 32, 213, 113, 86, 62, 77, 21, 111, 226, 147, 200, 104, 86, 110, 40, 151, 210, 39, 161, - 92, 58, 1, 229, 82, 250, 36, 122, 202, 5, 49, 164, 163, 159, 152, 251, 124, 21, 233, 80, - 207, 211, 248, 232, 41, 62, 87, 210, 110, 180, 189, 237, 17, 163, 21, 205, 178, 173, 79, 96, - 9, 179, 96, 35, 30, 114, 125, 11, 162, 129, 214, 148, 159, 176, 121, 3, 111, 59, 222, 222, - 178, 32, 230, 224, 240, 121, 45, 124, 196, 161, 166, 124, 46, 146, 99, 145, 217, 195, 214, 80, - 46, 202, 165, 103, 24, 226, 201, 101, 13, 40, 151, 44, 97, 104, 185, 88, 229, 238, 102, 229, - 34, 174, 241, 140, 252, 106, 229, 77, 121, 219, 125, 131, 114, 97, 202, 165, 101, 80, 46, 172, - 211, 92, 16, 51, 184, 223, 15, 205, 103, 9, 175, 227, 195, 142, 30, 86, 108, 243, 250, 136, - 193, 9, 230, 225, 119, 60, 158, 196, 245, 236, 138, 237, 235, 209, 152, 173, 225, 194, 252, 142, - 210, 145, 188, 221, 62, 33, 230, 178, 88, 131, 120, 237, 230, 229, 13, 215, 165, 207, 15, 1, - 229, 194, 148, 75, 79, 48, 180, 147, 203, 9, 160, 92, 178, 132, 33, 229, 130, 184, 162, 217, - 22, 239, 194, 177, 23, 239, 163, 47, 80, 46, 117, 148, 75, 75, 160, 92, 234, 116, 150, 11, - 98, 118, 227, 182, 120, 35, 230, 100, 204, 118, 215, 165, 206, 203, 208, 225, 21, 91, 223, 182, - 149, 87, 210, 62, 231, 229, 87, 163, 143, 231, 125, 244, 1, 49, 162, 157, 119, 207, 107, 195, - 103, 176, 196, 161, 239, 161, 92, 234, 40, 151, 30, 96, 72, 39, 151, 83, 64, 185, 100, 9, - 67, 202, 5, 241, 35, 233, 95, 216, 42, 63, 181, 242, 54, 43, 47, 182, 114, 154, 149, 215, - 33, 186, 153, 76, 186, 194, 113, 14, 239, 163, 47, 80, 46, 202, 165, 99, 80, 46, 189, 231, - 98, 219, 221, 17, 245, 119, 32, 124, 242, 173, 47, 33, 134, 120, 246, 19, 152, 15, 32, 250, - 183, 207, 195, 159, 165, 241, 103, 97, 124, 14, 34, 159, 24, 214, 187, 109, 221, 25, 241, 188, - 73, 93, 119, 148, 71, 113, 125, 219, 98, 219, 126, 38, 239, 172, 134, 247, 235, 247, 110, 114, - 211, 124, 11, 75, 232, 235, 111, 251, 124, 9, 87, 36, 225, 207, 87, 189, 27, 145, 235, 99, - 16, 87, 208, 189, 171, 220, 164, 187, 99, 79, 227, 125, 244, 5, 202, 69, 185, 44, 17, 134, - 116, 114, 57, 5, 148, 75, 150, 48, 180, 92, 16, 179, 210, 150, 39, 8, 191, 180, 242, 116, - 76, 152, 128, 11, 241, 32, 233, 171, 139, 120, 230, 63, 164, 87, 225, 117, 250, 2, 229, 162, - 92, 58, 6, 229, 210, 123, 46, 136, 7, 233, 75, 222, 64, 121, 154, 149, 131, 80, 115, 66, - 110, 127, 191, 18, 234, 235, 201, 126, 107, 229, 182, 188, 141, 20, 98, 182, 242, 11, 104, 61, - 231, 175, 221, 85, 57, 126, 81, 182, 205, 91, 162, 190, 81, 226, 127, 247, 19, 178, 187, 90, - 217, 21, 113, 245, 121, 99, 43, 151, 71, 76, 8, 121, 6, 198, 127, 132, 124, 96, 131, 43, - 242, 126, 186, 134, 250, 187, 124, 62, 227, 243, 227, 80, 51, 139, 59, 162, 219, 224, 3, 17, - 221, 19, 153, 55, 162, 149, 203, 2, 160, 92, 178, 204, 101, 26, 140, 127, 175, 93, 190, 39, - 151, 19, 64, 185, 100, 9, 67, 204, 197, 42, 248, 4, 43, 39, 97, 134, 217, 194, 17, 93, - 40, 170, 60, 148, 99, 251, 4, 229, 162, 92, 58, 6, 229, 210, 107, 46, 182, 221, 123, 32, - 70, 13, 154, 233, 89, 14, 68, 67, 103, 18, 239, 250, 118, 117, 94, 175, 138, 197, 93, 17, - 209, 200, 99, 111, 227, 216, 69, 32, 6, 43, 248, 33, 239, 164, 224, 119, 198, 174, 203, 235, - 48, 196, 40, 109, 207, 70, 52, 118, 254, 105, 229, 250, 28, 211, 53, 219, 231, 38, 168, 126, - 190, 202, 235, 115, 99, 142, 175, 130, 120, 32, 187, 234, 7, 245, 89, 28, 219, 37, 40, 151, - 17, 80, 46, 75, 129, 234, 122, 230, 125, 114, 89, 3, 202, 37, 75, 88, 161, 92, 38, 66, - 116, 179, 240, 3, 5, 123, 29, 199, 230, 14, 202, 37, 75, 80, 46, 89, 66, 207, 185, 96, - 206, 103, 77, 16, 87, 89, 253, 33, 246, 58, 71, 243, 58, 147, 88, 252, 221, 121, 3, 136, - 171, 181, 187, 115, 236, 188, 108, 91, 119, 225, 29, 20, 46, 193, 140, 87, 133, 45, 254, 104, - 43, 247, 226, 191, 247, 193, 247, 59, 90, 253, 117, 78, 228, 216, 73, 16, 3, 77, 176, 75, - 56, 174, 75, 80, 46, 99, 160, 92, 122, 135, 21, 58, 185, 132, 114, 201, 18, 86, 40, 151, - 169, 16, 115, 69, 176, 15, 114, 220, 16, 64, 185, 100, 9, 202, 37, 75, 24, 72, 46, 136, - 103, 88, 170, 124, 147, 99, 167, 65, 60, 55, 228, 243, 173, 176, 71, 115, 236, 188, 16, 243, - 86, 84, 185, 21, 199, 230, 236, 255, 183, 119, 39, 112, 247, 77, 229, 30, 192, 203, 28, 101, - 10, 25, 163, 80, 100, 72, 162, 43, 50, 134, 162, 12, 73, 41, 82, 52, 162, 137, 138, 50, - 148, 169, 129, 6, 84, 148, 204, 209, 116, 27, 40, 99, 184, 149, 91, 230, 177, 65, 50, 116, - 35, 73, 154, 92, 77, 154, 239, 239, 62, 207, 255, 217, 231, 111, 159, 223, 89, 251, 12, 239, - 123, 246, 232, 247, 253, 124, 214, 231, 207, 123, 158, 189, 247, 122, 222, 125, 222, 115, 214, 218, - 123, 237, 181, 16, 195, 220, 152, 15, 255, 75, 14, 251, 27, 198, 182, 185, 157, 119, 132, 146, - 38, 141, 72, 129, 114, 73, 130, 114, 169, 20, 58, 212, 184, 132, 114, 105, 36, 116, 40, 151, - 145, 16, 243, 173, 179, 239, 113, 92, 27, 64, 185, 52, 18, 148, 75, 35, 161, 37, 185, 32, - 22, 118, 76, 217, 143, 99, 199, 129, 244, 204, 96, 23, 113, 220, 76, 33, 214, 111, 97, 55, - 114, 92, 147, 33, 58, 122, 127, 228, 36, 204, 251, 56, 118, 28, 136, 245, 108, 216, 110, 28, - 87, 6, 40, 151, 66, 80, 46, 149, 66, 135, 26, 151, 80, 46, 141, 132, 182, 230, 130, 120, - 32, 244, 0, 196, 12, 29, 190, 34, 245, 189, 136, 47, 83, 159, 233, 167, 168, 248, 12, 56, - 236, 74, 222, 119, 213, 160, 92, 148, 75, 201, 160, 92, 26, 153, 11, 179, 58, 157, 192, 149, - 204, 204, 104, 194, 1, 219, 110, 127, 222, 145, 185, 143, 227, 102, 2, 241, 156, 77, 202, 161, - 28, 219, 100, 40, 206, 99, 70, 235, 5, 33, 38, 44, 96, 135, 112, 92, 25, 160, 92, 10, - 65, 185, 84, 10, 109, 109, 92, 38, 64, 185, 52, 18, 218, 150, 11, 226, 129, 207, 51, 144, - 110, 144, 204, 196, 85, 124, 140, 170, 64, 185, 12, 163, 92, 166, 0, 202, 101, 152, 82, 115, - 65, 204, 60, 230, 211, 161, 126, 19, 241, 240, 174, 79, 145, 234, 207, 160, 212, 205, 31, 150, - 95, 136, 235, 59, 41, 219, 199, 243, 120, 199, 153, 29, 57, 182, 201, 80, 156, 199, 52, 125, - 152, 143, 91, 6, 40, 151, 73, 41, 151, 146, 160, 109, 141, 203, 33, 160, 92, 26, 9, 109, - 202, 5, 241, 48, 110, 209, 140, 55, 51, 117, 53, 31, 167, 10, 80, 46, 163, 40, 151, 89, - 130, 114, 25, 165, 148, 92, 108, 191, 107, 162, 120, 205, 154, 166, 88, 129, 235, 61, 41, 219, - 199, 118, 188, 211, 76, 229, 179, 136, 205, 6, 138, 243, 152, 166, 83, 248, 184, 101, 128, 114, - 153, 148, 114, 41, 9, 218, 212, 184, 28, 1, 202, 165, 145, 208, 166, 92, 16, 83, 147, 78, - 91, 41, 141, 152, 81, 160, 92, 70, 81, 46, 179, 4, 229, 50, 202, 212, 115, 177, 125, 110, - 140, 24, 178, 214, 116, 51, 26, 146, 150, 103, 251, 216, 158, 119, 154, 105, 91, 7, 166, 40, - 143, 105, 58, 131, 143, 91, 6, 40, 151, 73, 41, 151, 146, 160, 77, 141, 203, 17, 160, 92, - 26, 9, 109, 201, 197, 42, 245, 82, 174, 101, 230, 78, 43, 251, 34, 174, 122, 46, 130, 33, - 83, 152, 34, 86, 191, 102, 215, 112, 92, 217, 160, 92, 250, 64, 185, 76, 29, 148, 75, 31, - 84, 144, 139, 237, 111, 9, 164, 87, 204, 246, 41, 156, 125, 45, 26, 191, 10, 235, 139, 86, - 62, 209, 202, 226, 5, 229, 164, 108, 27, 182, 18, 6, 99, 103, 83, 230, 225, 250, 79, 202, - 246, 177, 41, 210, 118, 230, 216, 38, 67, 53, 195, 123, 62, 193, 199, 45, 3, 148, 203, 164, - 148, 75, 73, 208, 150, 198, 229, 24, 160, 92, 26, 9, 109, 201, 5, 233, 89, 132, 110, 64, - 193, 202, 181, 41, 72, 55, 98, 174, 229, 184, 178, 65, 185, 244, 129, 114, 153, 58, 40, 151, - 62, 168, 32, 23, 164, 23, 162, 244, 231, 94, 214, 229, 216, 34, 22, 251, 17, 222, 65, 102, - 214, 119, 76, 166, 13, 197, 15, 38, 31, 193, 177, 77, 102, 245, 93, 129, 19, 200, 188, 195, - 202, 82, 83, 42, 11, 243, 113, 203, 0, 229, 50, 105, 81, 46, 37, 65, 91, 26, 151, 99, - 128, 114, 105, 36, 180, 37, 23, 164, 175, 108, 238, 196, 113, 195, 88, 252, 121, 188, 3, 76, - 185, 17, 51, 14, 40, 151, 62, 80, 46, 83, 7, 229, 210, 7, 21, 228, 98, 251, 251, 17, - 31, 192, 28, 196, 113, 195, 88, 252, 49, 188, 131, 204, 107, 57, 182, 110, 40, 158, 26, 246, - 135, 28, 219, 116, 86, 231, 223, 114, 18, 230, 50, 142, 107, 3, 40, 151, 70, 66, 135, 114, - 25, 7, 218, 210, 184, 28, 3, 148, 75, 35, 161, 13, 185, 88, 133, 230, 65, 204, 156, 195, - 214, 225, 216, 34, 22, 59, 175, 149, 251, 121, 7, 230, 58, 142, 45, 19, 148, 75, 31, 40, - 151, 169, 131, 114, 233, 131, 138, 114, 177, 253, 253, 149, 15, 96, 54, 224, 184, 97, 80, 60, - 141, 242, 85, 24, 50, 68, 174, 46, 86, 167, 243, 185, 162, 153, 151, 115, 108, 147, 89, 125, - 191, 192, 9, 100, 214, 231, 216, 166, 131, 114, 105, 36, 116, 40, 151, 113, 160, 13, 141, 203, - 49, 65, 185, 52, 18, 218, 146, 11, 210, 141, 131, 173, 57, 174, 136, 197, 190, 138, 55, 206, - 92, 207, 177, 101, 131, 114, 153, 11, 202, 165, 20, 80, 46, 115, 161, 130, 92, 16, 29, 173, - 127, 243, 1, 204, 70, 28, 91, 196, 98, 151, 181, 242, 7, 222, 65, 206, 1, 188, 205, 40, - 136, 231, 93, 182, 228, 159, 79, 139, 237, 123, 119, 170, 99, 143, 231, 177, 6, 199, 15, 131, - 120, 70, 232, 82, 43, 139, 242, 107, 101, 179, 99, 190, 184, 175, 246, 143, 184, 222, 202, 2, - 28, 63, 12, 162, 195, 188, 33, 255, 188, 42, 80, 46, 73, 80, 46, 149, 66, 91, 26, 151, - 99, 128, 114, 105, 36, 180, 37, 23, 171, 212, 143, 185, 150, 230, 116, 142, 75, 177, 184, 181, - 173, 60, 200, 27, 103, 110, 224, 248, 178, 65, 185, 204, 1, 229, 82, 26, 40, 151, 57, 80, - 97, 46, 72, 15, 117, 27, 107, 165, 109, 139, 91, 192, 202, 183, 115, 219, 21, 173, 23, 115, - 164, 149, 121, 121, 251, 20, 196, 228, 6, 183, 91, 249, 187, 149, 109, 249, 245, 105, 176, 253, - 206, 111, 229, 231, 185, 250, 229, 61, 96, 101, 59, 222, 134, 89, 204, 227, 173, 28, 142, 71, - 214, 247, 185, 214, 202, 226, 28, 87, 38, 68, 7, 212, 39, 133, 72, 249, 138, 149, 5, 121, - 155, 20, 196, 4, 13, 151, 89, 249, 7, 198, 200, 189, 12, 80, 46, 3, 160, 92, 42, 135, - 182, 52, 46, 199, 0, 229, 210, 72, 104, 75, 46, 86, 169, 143, 113, 45, 17, 67, 75, 14, - 66, 193, 213, 11, 251, 249, 124, 86, 246, 70, 113, 3, 198, 77, 181, 17, 51, 14, 40, 23, - 229, 82, 50, 40, 151, 202, 115, 177, 253, 93, 196, 7, 64, 220, 137, 88, 139, 99, 243, 16, - 107, 220, 92, 78, 219, 189, 217, 202, 117, 244, 179, 30, 111, 224, 23, 118, 72, 236, 181, 85, - 173, 156, 136, 104, 224, 244, 252, 197, 202, 38, 28, 59, 13, 182, 223, 151, 228, 142, 147, 226, - 11, 121, 238, 97, 101, 117, 43, 143, 67, 44, 72, 234, 117, 220, 193, 202, 39, 173, 252, 250, - 145, 208, 185, 110, 178, 178, 36, 31, 171, 76, 40, 190, 66, 238, 188, 19, 237, 119, 136, 146, - 195, 248, 16, 51, 208, 249, 251, 49, 255, 126, 123, 216, 202, 166, 28, 91, 5, 40, 151, 57, - 160, 92, 106, 131, 182, 52, 46, 199, 0, 229, 210, 72, 104, 75, 46, 136, 233, 71, 243, 95, - 200, 121, 191, 68, 124, 97, 191, 211, 202, 27, 17, 127, 228, 103, 91, 249, 85, 62, 168, 192, - 141, 124, 172, 178, 65, 185, 40, 151, 146, 65, 185, 84, 158, 139, 237, 111, 79, 62, 64, 230, - 33, 43, 111, 183, 178, 76, 46, 214, 135, 128, 172, 139, 152, 185, 140, 59, 89, 223, 65, 92, - 173, 245, 59, 40, 195, 134, 148, 249, 115, 61, 95, 182, 114, 188, 149, 227, 16, 99, 236, 83, - 119, 171, 122, 126, 143, 146, 238, 108, 32, 58, 34, 211, 116, 155, 149, 165, 248, 56, 101, 67, - 76, 119, 61, 140, 223, 109, 58, 199, 202, 209, 86, 142, 64, 196, 251, 26, 69, 189, 187, 71, - 204, 207, 253, 147, 248, 56, 85, 128, 114, 81, 46, 53, 66, 91, 26, 151, 99, 128, 114, 105, - 36, 180, 41, 23, 196, 31, 244, 108, 252, 137, 127, 96, 110, 226, 227, 84, 1, 202, 37, 79, - 185, 148, 0, 202, 37, 175, 244, 92, 16, 157, 14, 159, 222, 121, 24, 239, 172, 248, 29, 135, - 162, 14, 217, 29, 86, 150, 206, 237, 243, 5, 72, 63, 3, 52, 41, 95, 139, 102, 183, 124, - 125, 167, 9, 145, 251, 25, 116, 204, 153, 186, 203, 202, 242, 124, 140, 42, 32, 134, 196, 125, - 141, 234, 51, 83, 126, 151, 112, 226, 231, 150, 166, 5, 202, 165, 136, 114, 169, 0, 218, 212, - 184, 28, 1, 202, 165, 145, 208, 166, 92, 16, 95, 146, 95, 229, 218, 142, 201, 199, 142, 159, - 198, 63, 196, 148, 27, 49, 227, 130, 114, 233, 81, 46, 37, 129, 114, 233, 169, 44, 23, 219, - 231, 242, 136, 78, 200, 76, 92, 137, 92, 231, 37, 183, 79, 95, 48, 114, 156, 59, 74, 69, - 252, 110, 70, 37, 51, 29, 217, 113, 246, 65, 122, 106, 229, 113, 125, 198, 202, 19, 120, 191, - 85, 66, 220, 29, 59, 22, 233, 73, 25, 198, 229, 231, 107, 123, 222, 119, 213, 160, 92, 152, - 114, 169, 8, 218, 212, 184, 28, 1, 202, 165, 145, 208, 182, 92, 16, 13, 25, 191, 26, 235, - 87, 20, 199, 241, 3, 100, 127, 228, 72, 55, 98, 110, 230, 99, 84, 5, 202, 69, 185, 148, - 12, 202, 165, 242, 92, 16, 51, 127, 157, 142, 241, 27, 39, 62, 12, 238, 109, 86, 230, 225, - 125, 245, 216, 107, 75, 90, 249, 20, 198, 207, 221, 221, 139, 24, 186, 150, 124, 78, 168, 44, - 136, 103, 122, 62, 136, 120, 136, 127, 28, 62, 142, 255, 108, 76, 48, 99, 91, 21, 172, 62, - 207, 69, 255, 196, 10, 227, 240, 133, 75, 63, 96, 101, 49, 222, 95, 157, 160, 92, 148, 75, - 197, 208, 182, 198, 229, 16, 80, 46, 141, 132, 182, 230, 130, 184, 210, 121, 40, 226, 143, 223, - 27, 0, 254, 197, 238, 15, 170, 250, 248, 81, 127, 200, 213, 87, 180, 222, 26, 185, 70, 1, - 210, 141, 152, 91, 242, 251, 173, 3, 148, 139, 114, 41, 25, 148, 75, 229, 185, 32, 158, 221, - 241, 187, 63, 87, 32, 174, 150, 250, 108, 96, 94, 87, 159, 173, 204, 235, 121, 178, 149, 29, - 49, 65, 7, 195, 98, 151, 177, 242, 38, 196, 172, 69, 183, 35, 158, 145, 249, 23, 98, 152, - 217, 125, 136, 99, 121, 254, 207, 199, 144, 14, 81, 21, 252, 248, 86, 54, 70, 60, 151, 228, - 83, 197, 230, 93, 98, 229, 16, 43, 219, 163, 134, 105, 147, 39, 97, 245, 91, 195, 202, 193, - 86, 190, 129, 24, 222, 230, 207, 28, 248, 239, 220, 207, 165, 119, 210, 174, 177, 114, 146, 149, - 93, 172, 44, 196, 219, 55, 137, 114, 105, 166, 46, 229, 210, 131, 182, 54, 46, 19, 160, 92, - 26, 9, 29, 202, 69, 68, 68, 26, 8, 209, 48, 235, 241, 33, 102, 143, 227, 24, 17, 17, - 17, 17, 17, 145, 218, 89, 103, 101, 17, 244, 79, 68, 112, 22, 199, 136, 136, 136, 136, 136, - 136, 52, 130, 117, 88, 94, 150, 235, 188, 184, 159, 33, 158, 101, 90, 129, 99, 69, 68, 68, - 68, 68, 68, 106, 101, 29, 149, 47, 82, 7, 166, 199, 167, 148, 222, 130, 227, 69, 68, 68, - 68, 68, 68, 106, 99, 157, 148, 167, 32, 22, 229, 244, 233, 160, 63, 219, 215, 133, 1, 238, - 193, 4, 147, 24, 136, 136, 136, 136, 136, 136, 84, 198, 58, 43, 11, 33, 22, 223, 203, 123, - 38, 199, 137, 136, 136, 136, 136, 136, 84, 206, 58, 39, 239, 65, 76, 165, 236, 107, 227, 44, - 106, 229, 189, 125, 93, 151, 176, 21, 111, 39, 34, 34, 34, 34, 34, 82, 41, 235, 152, 172, - 205, 61, 149, 2, 43, 241, 182, 34, 34, 34, 34, 34, 34, 149, 178, 142, 201, 251, 185, 167, - 146, 112, 1, 111, 39, 34, 34, 34, 34, 34, 82, 57, 235, 156, 92, 194, 189, 21, 114, 145, - 149, 37, 120, 59, 17, 17, 17, 17, 17, 145, 90, 88, 7, 101, 67, 43, 7, 89, 57, 211, - 202, 215, 17, 83, 42, 31, 229, 63, 231, 88, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, - 17, 17, 17, 17, 17, 17, 17, 145, 54, 3, 176, 156, 149, 83, 172, 108, 193, 175, 73, 253, - 236, 188, 252, 135, 149, 143, 88, 153, 159, 95, 235, 2, 203, 107, 99, 43, 135, 88, 89, 138, - 95, 107, 50, 171, 239, 50, 86, 190, 107, 229, 70, 42, 87, 91, 89, 145, 227, 69, 164, 27, - 236, 239, 123, 85, 43, 199, 91, 249, 52, 191, 214, 21, 150, 219, 89, 86, 62, 108, 101, 101, - 126, 173, 201, 172, 190, 59, 39, 62, 147, 189, 156, 97, 229, 177, 28, 47, 245, 177, 243, 241, - 62, 43, 167, 91, 121, 38, 191, 38, 50, 146, 189, 113, 94, 98, 229, 119, 120, 196, 37, 86, - 214, 227, 184, 20, 139, 91, 197, 202, 106, 252, 243, 58, 89, 125, 214, 182, 114, 153, 149, 63, - 91, 249, 147, 149, 235, 173, 188, 215, 202, 114, 20, 119, 96, 150, 111, 207, 14, 249, 215, 235, - 102, 245, 89, 192, 202, 171, 172, 92, 151, 171, 227, 177, 28, 215, 118, 150, 211, 162, 86, 238, - 206, 242, 251, 171, 149, 51, 173, 172, 207, 113, 77, 99, 117, 156, 199, 202, 229, 89, 189, 83, - 174, 178, 50, 31, 111, 215, 36, 136, 247, 216, 7, 173, 220, 103, 229, 239, 136, 243, 224, 141, - 150, 45, 40, 110, 161, 94, 82, 153, 75, 243, 175, 55, 129, 213, 105, 89, 43, 95, 179, 242, - 23, 43, 63, 179, 178, 79, 34, 102, 55, 43, 119, 34, 62, 27, 252, 115, 238, 169, 28, 35, - 82, 196, 222, 47, 143, 181, 178, 173, 149, 11, 173, 252, 159, 255, 33, 100, 118, 231, 216, 182, - 179, 156, 222, 148, 203, 239, 95, 86, 206, 179, 178, 21, 199, 53, 141, 213, 241, 169, 86, 30, - 202, 213, 157, 29, 200, 219, 52, 141, 213, 113, 43, 43, 223, 183, 242, 176, 149, 43, 173, 108, - 64, 175, 251, 231, 246, 9, 86, 126, 111, 229, 215, 86, 62, 138, 22, 94, 220, 180, 58, 111, - 106, 229, 223, 115, 206, 74, 240, 139, 129, 47, 67, 205, 223, 155, 118, 252, 175, 231, 234, 212, - 115, 59, 199, 181, 153, 229, 179, 166, 149, 43, 16, 239, 177, 31, 89, 121, 81, 34, 230, 93, - 136, 182, 193, 255, 90, 57, 199, 202, 146, 28, 83, 27, 196, 135, 241, 167, 226, 220, 12, 240, - 15, 103, 191, 35, 243, 120, 222, 206, 217, 207, 215, 181, 242, 57, 43, 255, 180, 114, 46, 191, - 94, 23, 171, 203, 242, 232, 239, 140, 229, 121, 227, 248, 36, 68, 7, 103, 9, 43, 215, 246, - 191, 140, 205, 120, 127, 117, 177, 186, 28, 96, 229, 1, 170, 159, 243, 63, 246, 45, 57, 190, - 205, 16, 239, 163, 148, 129, 15, 238, 38, 177, 186, 29, 78, 245, 77, 249, 48, 111, 215, 36, - 86, 191, 83, 185, 194, 57, 215, 32, 174, 100, 46, 102, 101, 95, 122, 237, 203, 188, 175, 186, - 89, 157, 190, 77, 117, 116, 47, 206, 189, 190, 1, 250, 191, 44, 221, 15, 161, 43, 178, 50, - 6, 196, 223, 193, 205, 244, 254, 233, 241, 6, 115, 171, 238, 82, 12, 99, 185, 60, 29, 113, - 33, 32, 197, 191, 55, 147, 237, 130, 186, 33, 26, 246, 126, 167, 101, 24, 111, 179, 108, 194, - 219, 54, 133, 213, 109, 69, 12, 254, 238, 189, 45, 176, 88, 46, 198, 47, 58, 177, 35, 114, - 187, 105, 60, 196, 223, 211, 61, 156, 68, 198, 127, 190, 10, 111, 83, 21, 116, 188, 3, 99, - 185, 204, 143, 193, 223, 253, 223, 172, 60, 61, 23, 179, 7, 189, 238, 190, 154, 223, 79, 237, - 172, 66, 171, 89, 249, 34, 250, 175, 38, 229, 221, 101, 101, 163, 92, 252, 230, 86, 46, 238, - 15, 153, 179, 237, 26, 249, 253, 214, 5, 113, 37, 98, 166, 86, 224, 253, 213, 197, 234, 178, - 134, 149, 59, 184, 130, 153, 95, 88, 89, 130, 183, 105, 35, 203, 227, 149, 156, 92, 142, 119, - 160, 23, 224, 109, 154, 0, 113, 133, 140, 27, 195, 41, 254, 183, 49, 183, 17, 221, 36, 136, - 43, 149, 227, 228, 144, 242, 33, 222, 95, 157, 172, 62, 139, 115, 5, 51, 39, 231, 98, 142, - 230, 23, 51, 171, 228, 118, 37, 82, 200, 222, 43, 207, 182, 114, 47, 191, 129, 50, 126, 245, - 120, 30, 222, 166, 109, 16, 141, 155, 162, 78, 128, 223, 217, 92, 135, 183, 105, 10, 171, 219, - 137, 92, 225, 2, 254, 29, 218, 200, 225, 202, 86, 175, 215, 113, 101, 51, 91, 231, 98, 126, - 194, 47, 154, 27, 243, 251, 105, 58, 171, 239, 23, 56, 129, 140, 95, 237, 127, 33, 199, 87, - 9, 221, 239, 192, 248, 35, 9, 41, 111, 201, 197, 248, 29, 87, 230, 119, 107, 154, 247, 25, - 103, 149, 122, 166, 149, 111, 81, 101, 123, 252, 138, 197, 199, 49, 120, 199, 162, 199, 63, 12, - 182, 229, 125, 214, 1, 197, 141, 254, 81, 238, 224, 125, 213, 13, 113, 133, 130, 59, 139, 61, - 141, 187, 2, 62, 41, 203, 97, 101, 164, 111, 245, 255, 195, 202, 126, 28, 223, 20, 136, 161, - 74, 169, 187, 99, 39, 91, 57, 150, 127, 136, 184, 205, 255, 100, 222, 79, 221, 172, 78, 111, - 229, 138, 78, 96, 27, 222, 95, 157, 172, 62, 79, 224, 10, 102, 206, 206, 197, 28, 193, 47, - 102, 158, 145, 223, 151, 200, 48, 136, 231, 222, 190, 199, 111, 162, 204, 161, 28, 223, 54, 150, - 195, 49, 156, 84, 198, 219, 7, 79, 228, 248, 166, 64, 12, 61, 98, 62, 244, 109, 87, 43, - 63, 224, 23, 16, 67, 72, 27, 119, 247, 213, 234, 180, 23, 87, 52, 179, 99, 46, 230, 86, - 126, 209, 220, 150, 223, 79, 147, 33, 134, 198, 167, 220, 102, 101, 117, 142, 175, 26, 186, 223, - 129, 241, 209, 8, 41, 7, 229, 98, 190, 202, 47, 34, 254, 158, 154, 57, 84, 17, 49, 164, - 204, 135, 138, 248, 248, 240, 113, 220, 142, 184, 90, 208, 136, 171, 228, 94, 15, 244, 95, 81, - 246, 91, 98, 254, 135, 226, 31, 108, 23, 228, 126, 158, 178, 47, 239, 175, 9, 16, 207, 89, - 248, 67, 148, 41, 123, 113, 124, 91, 32, 242, 242, 43, 150, 236, 55, 104, 208, 80, 62, 102, - 117, 155, 215, 202, 119, 250, 171, 60, 135, 63, 11, 51, 31, 34, 175, 212, 135, 159, 119, 254, - 27, 245, 135, 143, 232, 112, 229, 125, 30, 49, 190, 223, 239, 84, 120, 167, 171, 136, 15, 187, - 106, 220, 85, 24, 164, 47, 192, 236, 154, 123, 221, 175, 158, 243, 29, 39, 127, 30, 166, 113, - 141, 24, 105, 54, 196, 93, 138, 207, 208, 123, 201, 249, 197, 190, 231, 112, 124, 91, 88, 221, - 183, 192, 224, 223, 136, 243, 11, 152, 181, 62, 151, 48, 12, 98, 36, 201, 31, 168, 206, 110, - 206, 21, 101, 251, 247, 201, 72, 95, 116, 58, 152, 247, 85, 55, 171, 211, 10, 24, 28, 66, - 230, 23, 250, 22, 207, 197, 124, 128, 94, 119, 199, 228, 247, 211, 84, 136, 231, 166, 83, 231, - 234, 124, 43, 139, 114, 124, 29, 144, 254, 14, 239, 82, 7, 198, 219, 202, 126, 55, 53, 207, - 59, 39, 107, 229, 98, 246, 164, 215, 221, 133, 249, 253, 52, 146, 85, 114, 45, 43, 15, 114, - 205, 115, 110, 66, 92, 213, 104, 84, 35, 6, 113, 101, 60, 239, 98, 122, 125, 61, 68, 35, - 205, 111, 131, 245, 248, 135, 245, 241, 249, 184, 38, 178, 58, 238, 78, 245, 118, 62, 65, 65, - 43, 31, 66, 182, 122, 31, 76, 185, 56, 31, 95, 222, 184, 59, 21, 121, 72, 15, 67, 242, - 219, 249, 249, 47, 151, 69, 172, 220, 66, 49, 174, 81, 239, 51, 12, 94, 97, 153, 251, 94, - 66, 220, 209, 120, 183, 149, 159, 82, 140, 95, 249, 171, 253, 10, 89, 10, 98, 236, 248, 127, - 33, 62, 136, 189, 1, 112, 100, 34, 102, 47, 196, 67, 175, 206, 59, 98, 141, 29, 14, 35, - 193, 206, 209, 83, 16, 119, 207, 122, 229, 229, 28, 83, 23, 171, 203, 126, 136, 59, 198, 61, - 62, 252, 197, 135, 94, 180, 174, 83, 140, 184, 56, 243, 77, 244, 55, 46, 253, 34, 224, 94, - 28, 219, 36, 136, 9, 70, 82, 159, 183, 39, 82, 220, 70, 136, 231, 96, 243, 252, 179, 162, - 113, 23, 204, 172, 78, 219, 225, 145, 103, 20, 252, 223, 231, 211, 235, 143, 67, 204, 220, 229, - 249, 120, 27, 198, 219, 53, 11, 231, 99, 154, 10, 241, 28, 114, 254, 57, 101, 31, 102, 253, - 126, 52, 232, 111, 6, 29, 239, 192, 56, 196, 168, 43, 159, 40, 194, 127, 255, 126, 62, 94, - 67, 175, 251, 13, 141, 163, 172, 252, 49, 203, 255, 59, 160, 137, 176, 26, 5, 49, 142, 252, - 80, 60, 242, 5, 95, 228, 27, 86, 230, 229, 237, 235, 134, 248, 32, 123, 97, 174, 36, 27, - 39, 246, 243, 5, 17, 183, 208, 182, 176, 178, 44, 191, 222, 84, 136, 14, 152, 223, 241, 242, - 220, 230, 76, 68, 192, 49, 109, 225, 239, 31, 68, 131, 211, 199, 98, 238, 98, 229, 141, 104, - 201, 7, 112, 87, 216, 239, 123, 253, 236, 189, 212, 43, 201, 43, 172, 136, 103, 101, 182, 68, - 124, 224, 53, 230, 75, 166, 8, 226, 239, 123, 232, 197, 21, 189, 215, 218, 193, 223, 111, 86, - 254, 27, 143, 240, 59, 28, 207, 226, 184, 58, 89, 125, 86, 183, 242, 52, 43, 139, 240, 107, - 109, 101, 185, 60, 30, 241, 32, 127, 43, 47, 144, 117, 5, 70, 124, 78, 33, 238, 250, 55, - 98, 4, 204, 164, 16, 159, 211, 254, 221, 50, 247, 170, 127, 83, 224, 81, 208, 129, 233, 65, - 116, 134, 11, 191, 215, 253, 53, 143, 225, 159, 55, 6, 226, 150, 165, 63, 252, 222, 235, 105, - 229, 249, 21, 138, 212, 45, 229, 83, 121, 63, 34, 34, 34, 211, 98, 223, 51, 251, 211, 247, - 206, 192, 93, 53, 17, 145, 105, 194, 163, 168, 3, 211, 90, 136, 43, 44, 167, 33, 214, 127, - 96, 126, 107, 210, 199, 200, 251, 98, 93, 123, 35, 61, 75, 217, 91, 121, 159, 34, 34, 82, - 14, 196, 93, 242, 133, 248, 231, 93, 132, 184, 179, 145, 31, 54, 235, 15, 98, 55, 234, 57, - 50, 17, 233, 30, 168, 3, 211, 124, 72, 79, 57, 232, 15, 139, 249, 44, 36, 79, 162, 216, - 183, 80, 156, 243, 142, 79, 107, 31, 88, 20, 17, 105, 3, 196, 51, 73, 254, 108, 133, 95, - 72, 242, 187, 226, 103, 88, 89, 144, 227, 186, 2, 49, 25, 134, 175, 3, 213, 211, 184, 161, - 99, 34, 210, 77, 80, 7, 166, 249, 16, 179, 65, 248, 23, 131, 251, 149, 149, 247, 96, 200, - 44, 16, 72, 47, 158, 228, 15, 48, 215, 50, 6, 19, 233, 5, 43, 231, 174, 251, 144, 197, - 248, 23, 225, 11, 16, 157, 53, 159, 9, 234, 183, 136, 142, 151, 63, 228, 251, 115, 196, 74, - 164, 135, 89, 121, 90, 126, 187, 166, 176, 122, 61, 17, 177, 122, 184, 223, 13, 243, 185, 249, - 189, 206, 94, 119, 191, 50, 233, 235, 17, 248, 132, 10, 190, 94, 138, 199, 52, 103, 149, 212, - 4, 229, 210, 76, 202, 165, 249, 172, 174, 159, 198, 160, 195, 57, 174, 169, 80, 124, 94, 252, - 1, 120, 159, 241, 206, 39, 240, 56, 219, 202, 107, 172, 44, 138, 88, 1, 58, 175, 242, 161, - 99, 136, 9, 33, 216, 181, 28, 55, 10, 226, 89, 203, 148, 185, 235, 122, 148, 13, 202, 101, - 0, 148, 203, 212, 32, 22, 6, 231, 153, 211, 220, 140, 150, 123, 64, 60, 151, 145, 154, 169, - 172, 146, 153, 214, 48, 70, 7, 6, 241, 108, 200, 54, 136, 197, 224, 253, 51, 205, 63, 199, - 188, 61, 237, 19, 121, 248, 114, 30, 151, 32, 22, 36, 175, 173, 109, 137, 142, 157, 151, 1, - 136, 78, 201, 62, 24, 227, 106, 30, 226, 129, 49, 95, 157, 155, 29, 193, 177, 85, 192, 136, - 14, 12, 226, 193, 228, 113, 215, 133, 241, 55, 158, 55, 18, 26, 241, 176, 146, 213, 99, 37, - 43, 159, 192, 224, 204, 99, 195, 120, 236, 9, 104, 208, 130, 156, 14, 202, 69, 185, 148, 12, - 29, 202, 37, 197, 234, 120, 119, 127, 213, 231, 184, 129, 227, 154, 6, 51, 59, 47, 254, 133, - 235, 179, 95, 245, 212, 50, 116, 12, 29, 105, 92, 58, 40, 151, 1, 80, 46, 83, 101, 199, - 58, 149, 15, 142, 184, 88, 188, 52, 199, 142, 130, 152, 117, 149, 249, 221, 231, 85, 57, 182, - 12, 24, 209, 129, 177, 255, 222, 204, 202, 143, 56, 160, 128, 215, 251, 203, 168, 169, 35, 131, - 14, 157, 151, 89, 67, 76, 105, 233, 211, 247, 230, 249, 151, 83, 229, 179, 121, 97, 72, 7, - 198, 254, 61, 156, 95, 24, 147, 175, 77, 242, 4, 62, 86, 149, 16, 107, 215, 140, 187, 22, - 79, 138, 159, 159, 221, 120, 191, 117, 128, 114, 201, 83, 46, 37, 64, 135, 114, 41, 98, 245, - 187, 139, 43, 109, 174, 230, 184, 38, 193, 236, 207, 139, 171, 109, 232, 24, 186, 213, 184, 84, - 46, 4, 202, 101, 170, 16, 179, 84, 166, 28, 200, 177, 163, 32, 166, 243, 102, 151, 113, 92, - 89, 48, 164, 3, 99, 255, 190, 13, 49, 140, 119, 82, 115, 214, 37, 228, 99, 149, 13, 29, - 58, 47, 83, 129, 244, 80, 178, 143, 115, 92, 217, 80, 208, 129, 193, 224, 204, 53, 147, 250, - 44, 31, 171, 42, 136, 5, 195, 166, 229, 88, 222, 127, 149, 160, 92, 138, 40, 151, 41, 65, - 135, 114, 25, 6, 233, 213, 209, 27, 59, 137, 10, 166, 119, 94, 252, 234, 222, 254, 188, 255, - 42, 160, 91, 141, 75, 229, 66, 160, 92, 166, 206, 142, 247, 61, 174, 128, 185, 131, 227, 134, - 177, 248, 229, 144, 238, 32, 204, 93, 148, 184, 108, 40, 232, 192, 88, 121, 45, 255, 112, 6, - 14, 229, 227, 149, 13, 29, 57, 47, 73, 136, 85, 57, 125, 181, 122, 95, 89, 216, 23, 119, - 243, 117, 96, 124, 108, 178, 63, 47, 226, 183, 201, 252, 100, 250, 137, 91, 42, 139, 247, 241, - 204, 60, 229, 178, 95, 105, 171, 244, 206, 5, 210, 29, 152, 43, 144, 158, 85, 109, 82, 91, - 242, 241, 202, 134, 88, 131, 103, 20, 127, 86, 201, 199, 91, 222, 96, 229, 126, 122, 45, 229, - 29, 124, 156, 42, 64, 185, 140, 162, 92, 102, 9, 29, 202, 101, 20, 196, 103, 180, 15, 119, - 243, 241, 213, 191, 68, 220, 97, 30, 186, 214, 77, 93, 48, 252, 188, 248, 148, 252, 62, 12, - 249, 67, 136, 137, 97, 252, 106, 230, 71, 49, 122, 56, 198, 27, 249, 56, 101, 67, 135, 26, - 151, 80, 46, 3, 160, 92, 166, 206, 142, 247, 10, 174, 64, 102, 115, 142, 45, 130, 193, 231, - 223, 220, 3, 168, 112, 24, 41, 210, 29, 24, 255, 236, 245, 217, 121, 153, 183, 151, 125, 173, - 170, 115, 17, 231, 147, 87, 184, 103, 126, 81, 102, 39, 62, 102, 153, 208, 145, 243, 210, 7, - 241, 16, 210, 155, 173, 220, 215, 95, 167, 66, 126, 11, 236, 189, 86, 230, 71, 140, 107, 102, - 175, 231, 99, 148, 9, 233, 14, 12, 243, 55, 147, 175, 38, 234, 99, 22, 151, 177, 178, 180, - 149, 103, 35, 190, 100, 127, 147, 139, 99, 23, 240, 241, 202, 132, 152, 104, 32, 53, 85, 181, - 243, 63, 26, 111, 188, 172, 153, 216, 206, 167, 194, 254, 24, 250, 199, 140, 231, 121, 131, 161, - 210, 206, 24, 148, 139, 114, 41, 25, 58, 148, 75, 151, 96, 248, 121, 241, 135, 90, 159, 193, - 219, 56, 196, 119, 209, 117, 20, 159, 231, 23, 212, 214, 227, 237, 202, 132, 14, 53, 46, 161, - 92, 6, 64, 185, 76, 29, 162, 109, 152, 186, 80, 244, 121, 142, 45, 130, 120, 230, 141, 125, - 144, 227, 202, 132, 116, 7, 134, 249, 185, 219, 24, 137, 69, 32, 17, 223, 51, 103, 162, 248, - 179, 240, 33, 84, 248, 216, 5, 58, 114, 94, 230, 66, 220, 69, 73, 141, 103, 27, 199, 245, - 86, 94, 194, 63, 52, 151, 243, 113, 202, 132, 225, 29, 24, 127, 227, 28, 134, 33, 51, 164, - 33, 126, 7, 126, 117, 54, 197, 111, 149, 85, 114, 71, 9, 241, 229, 253, 125, 58, 126, 207, - 79, 80, 240, 165, 159, 103, 49, 235, 160, 184, 231, 95, 217, 195, 190, 80, 46, 125, 160, 92, - 166, 14, 29, 202, 165, 75, 48, 252, 188, 28, 141, 196, 23, 125, 143, 189, 182, 31, 111, 144, - 112, 13, 111, 87, 38, 116, 168, 113, 9, 229, 50, 0, 202, 165, 20, 118, 204, 35, 184, 18, - 136, 11, 70, 35, 103, 125, 180, 152, 245, 120, 67, 68, 91, 238, 41, 28, 91, 38, 140, 238, - 192, 188, 143, 183, 73, 65, 180, 147, 139, 70, 4, 125, 132, 227, 203, 132, 14, 156, 151, 57, - 236, 160, 11, 91, 241, 41, 133, 103, 195, 111, 153, 241, 237, 52, 255, 255, 133, 248, 120, 101, - 193, 240, 14, 204, 27, 56, 62, 5, 49, 75, 14, 15, 135, 235, 217, 134, 227, 203, 96, 199, - 217, 133, 15, 156, 241, 169, 70, 199, 238, 165, 91, 236, 147, 81, 124, 87, 105, 71, 142, 47, - 3, 148, 203, 0, 40, 151, 169, 66, 135, 114, 233, 18, 20, 159, 151, 211, 56, 54, 207, 94, - 95, 13, 253, 15, 251, 251, 119, 211, 57, 185, 255, 207, 171, 172, 65, 134, 14, 53, 46, 161, - 92, 6, 64, 185, 148, 2, 241, 172, 132, 223, 49, 101, 111, 231, 88, 102, 49, 199, 241, 70, - 230, 82, 142, 43, 27, 134, 119, 96, 78, 228, 248, 97, 80, 252, 220, 140, 79, 30, 83, 184, - 108, 201, 180, 161, 3, 231, 101, 14, 196, 34, 104, 69, 46, 183, 178, 135, 149, 167, 90, 89, - 4, 177, 242, 243, 154, 86, 222, 128, 88, 67, 97, 148, 205, 248, 120, 101, 65, 113, 7, 230, - 60, 142, 29, 6, 49, 164, 36, 101, 31, 142, 45, 131, 29, 231, 115, 124, 224, 204, 182, 28, - 59, 10, 138, 27, 17, 103, 113, 108, 25, 160, 92, 146, 160, 92, 166, 6, 29, 202, 165, 75, - 144, 62, 47, 254, 25, 189, 8, 199, 246, 32, 214, 233, 186, 42, 23, 239, 51, 90, 62, 13, - 177, 112, 103, 170, 115, 121, 14, 239, 163, 44, 232, 80, 227, 18, 202, 101, 0, 148, 75, 105, - 236, 184, 255, 201, 21, 49, 183, 114, 92, 158, 189, 62, 47, 226, 153, 10, 182, 11, 199, 150, - 13, 197, 29, 24, 127, 220, 98, 226, 165, 54, 108, 155, 203, 120, 71, 153, 74, 47, 148, 161, - 229, 231, 197, 43, 179, 22, 98, 156, 55, 243, 49, 121, 59, 112, 60, 179, 152, 119, 34, 189, - 125, 79, 37, 141, 126, 135, 226, 14, 204, 68, 211, 110, 34, 158, 143, 73, 41, 125, 182, 8, - 196, 176, 139, 212, 155, 227, 70, 142, 29, 7, 98, 127, 183, 242, 206, 204, 253, 28, 59, 109, - 80, 46, 133, 160, 92, 166, 2, 29, 202, 37, 207, 142, 183, 51, 87, 96, 10, 54, 226, 227, - 148, 5, 197, 231, 229, 104, 142, 205, 67, 44, 158, 156, 55, 119, 102, 53, 251, 239, 35, 233, - 53, 247, 64, 126, 251, 50, 161, 67, 141, 75, 40, 151, 1, 80, 46, 165, 177, 227, 110, 202, - 21, 201, 108, 204, 177, 61, 246, 218, 246, 28, 140, 152, 132, 101, 62, 142, 45, 27, 138, 59, - 48, 239, 230, 216, 113, 216, 118, 91, 242, 142, 50, 199, 113, 108, 153, 208, 242, 243, 226, 149, - 241, 85, 67, 217, 191, 48, 36, 1, 102, 177, 239, 227, 29, 228, 84, 118, 66, 144, 238, 192, - 252, 140, 227, 70, 177, 109, 150, 226, 157, 100, 222, 207, 177, 211, 134, 24, 194, 150, 114, 20, - 199, 142, 203, 182, 61, 150, 119, 150, 41, 117, 193, 62, 40, 151, 161, 160, 92, 102, 13, 29, - 202, 37, 15, 237, 239, 192, 20, 157, 151, 194, 239, 21, 196, 115, 72, 249, 241, 225, 222, 152, - 155, 251, 156, 12, 98, 178, 149, 148, 74, 206, 11, 58, 212, 184, 132, 114, 25, 0, 229, 82, - 42, 164, 159, 135, 59, 147, 227, 122, 144, 190, 59, 80, 122, 27, 44, 5, 197, 29, 152, 129, - 137, 97, 198, 129, 184, 211, 252, 32, 239, 204, 92, 193, 177, 101, 67, 139, 207, 139, 87, 230, - 127, 184, 38, 230, 84, 142, 27, 198, 226, 231, 67, 122, 63, 238, 12, 142, 47, 11, 210, 29, - 152, 137, 134, 143, 57, 196, 12, 13, 41, 165, 159, 36, 59, 198, 250, 124, 208, 204, 140, 111, - 207, 217, 182, 187, 242, 206, 50, 165, 206, 226, 3, 229, 50, 20, 148, 203, 172, 161, 67, 185, - 228, 161, 253, 29, 152, 162, 243, 178, 16, 199, 58, 196, 180, 208, 249, 47, 82, 31, 1, 176, - 18, 197, 248, 208, 133, 212, 152, 237, 231, 229, 227, 202, 130, 14, 53, 46, 161, 92, 6, 64, - 185, 148, 10, 241, 216, 1, 251, 139, 149, 197, 18, 177, 139, 97, 240, 153, 106, 31, 233, 179, - 10, 199, 86, 1, 233, 14, 204, 159, 57, 110, 18, 72, 15, 35, 251, 49, 199, 149, 13, 109, - 61, 47, 136, 41, 132, 83, 158, 207, 177, 163, 160, 248, 46, 204, 87, 56, 182, 44, 72, 119, - 96, 78, 230, 184, 81, 16, 29, 178, 148, 42, 58, 48, 219, 242, 65, 51, 51, 126, 150, 200, - 182, 221, 156, 119, 150, 41, 117, 82, 2, 40, 151, 161, 160, 92, 102, 13, 29, 202, 37, 15, - 49, 253, 176, 143, 175, 158, 102, 153, 104, 40, 237, 108, 32, 125, 94, 254, 196, 113, 61, 24, - 92, 12, 121, 79, 142, 113, 72, 15, 75, 219, 158, 227, 202, 128, 14, 53, 46, 161, 92, 6, - 64, 185, 148, 10, 49, 89, 148, 175, 157, 194, 246, 75, 196, 166, 26, 213, 151, 112, 92, 85, - 144, 238, 192, 220, 205, 113, 147, 64, 250, 25, 193, 7, 56, 174, 108, 104, 235, 121, 177, 3, - 175, 205, 53, 201, 44, 195, 177, 163, 32, 253, 133, 229, 42, 91, 197, 30, 221, 232, 192, 108, - 195, 7, 205, 204, 248, 42, 35, 138, 199, 57, 150, 218, 32, 243, 253, 243, 1, 51, 202, 229, - 49, 202, 101, 26, 124, 255, 124, 192, 76, 235, 114, 233, 18, 164, 199, 73, 63, 200, 113, 206, - 126, 190, 17, 250, 87, 116, 62, 151, 99, 122, 16, 29, 49, 86, 201, 121, 193, 244, 26, 151, - 59, 242, 78, 50, 149, 53, 46, 161, 92, 6, 64, 185, 148, 14, 233, 217, 171, 110, 73, 196, - 165, 86, 138, 223, 153, 227, 170, 130, 116, 7, 230, 94, 142, 155, 132, 109, 255, 37, 222, 161, - 249, 29, 199, 85, 1, 109, 60, 47, 40, 126, 88, 61, 121, 155, 127, 24, 20, 15, 25, 248, - 24, 199, 150, 5, 221, 232, 192, 60, 139, 15, 154, 153, 241, 236, 20, 72, 175, 209, 227, 74, - 189, 34, 235, 251, 231, 3, 102, 148, 203, 99, 148, 203, 52, 248, 254, 249, 128, 153, 214, 229, - 210, 37, 246, 187, 218, 132, 127, 121, 136, 161, 6, 243, 82, 156, 95, 253, 187, 51, 23, 227, - 171, 88, 47, 157, 143, 201, 67, 122, 13, 133, 74, 206, 11, 210, 141, 203, 235, 56, 110, 20, - 196, 98, 209, 41, 149, 53, 46, 161, 92, 6, 64, 185, 148, 206, 142, 191, 42, 210, 139, 57, - 110, 152, 139, 121, 10, 6, 99, 124, 209, 197, 249, 242, 251, 170, 18, 210, 29, 152, 135, 57, - 110, 18, 136, 165, 71, 216, 29, 28, 87, 5, 180, 241, 188, 216, 129, 55, 164, 202, 244, 44, - 199, 177, 163, 160, 120, 216, 197, 129, 28, 91, 22, 116, 163, 3, 179, 2, 31, 52, 115, 8, - 199, 142, 203, 182, 61, 138, 119, 150, 89, 158, 99, 167, 9, 202, 101, 40, 40, 151, 89, 67, - 135, 114, 153, 9, 196, 180, 246, 19, 95, 112, 42, 155, 255, 174, 232, 119, 215, 179, 46, 197, - 125, 146, 94, 47, 236, 120, 218, 107, 43, 82, 108, 79, 157, 15, 241, 223, 201, 113, 163, 216, - 54, 95, 224, 157, 100, 42, 107, 92, 66, 185, 12, 128, 114, 169, 132, 213, 225, 18, 174, 148, - 57, 37, 247, 250, 225, 252, 34, 70, 204, 94, 88, 54, 164, 59, 48, 110, 228, 34, 201, 41, - 136, 103, 254, 252, 57, 19, 246, 93, 142, 173, 10, 218, 118, 94, 236, 224, 171, 112, 109, 50, - 47, 224, 216, 81, 80, 220, 227, 223, 132, 99, 203, 130, 110, 116, 96, 124, 250, 81, 159, 146, - 142, 93, 193, 177, 227, 178, 109, 175, 231, 157, 97, 150, 183, 63, 199, 1, 229, 50, 20, 148, - 203, 172, 161, 67, 185, 76, 2, 177, 46, 202, 121, 136, 43, 98, 62, 252, 202, 215, 242, 90, - 144, 227, 234, 132, 184, 58, 199, 222, 153, 123, 125, 107, 244, 95, 209, 43, 156, 249, 198, 33, - 61, 254, 250, 23, 28, 87, 22, 59, 214, 249, 124, 112, 196, 239, 254, 241, 28, 91, 4, 241, - 16, 108, 170, 225, 226, 42, 107, 92, 66, 185, 244, 129, 114, 169, 140, 213, 225, 69, 92, 41, - 196, 34, 142, 115, 114, 180, 127, 127, 74, 175, 249, 157, 219, 149, 121, 63, 85, 66, 113, 7, - 102, 70, 23, 232, 81, 60, 81, 76, 101, 35, 150, 24, 218, 118, 94, 16, 189, 64, 158, 81, - 192, 157, 206, 177, 163, 216, 54, 223, 229, 157, 32, 254, 136, 230, 231, 216, 178, 160, 3, 29, - 24, 135, 226, 85, 167, 159, 205, 177, 163, 216, 54, 91, 241, 78, 50, 103, 113, 108, 25, 160, - 92, 146, 160, 92, 166, 6, 29, 202, 101, 92, 86, 159, 79, 115, 5, 205, 225, 28, 87, 39, - 171, 207, 103, 185, 130, 136, 47, 65, 159, 66, 212, 27, 89, 247, 230, 126, 126, 15, 70, 172, - 66, 109, 175, 95, 155, 139, 239, 169, 242, 25, 203, 83, 249, 224, 153, 87, 115, 108, 17, 139, - 253, 40, 111, 156, 83, 89, 227, 18, 202, 165, 15, 148, 75, 101, 16, 127, 255, 220, 24, 118, - 126, 129, 34, 53, 244, 244, 34, 222, 71, 213, 80, 220, 129, 249, 37, 38, 188, 3, 142, 152, - 77, 241, 102, 218, 79, 207, 174, 28, 95, 21, 180, 240, 188, 120, 165, 47, 229, 90, 153, 127, - 90, 217, 128, 99, 139, 88, 236, 43, 120, 7, 153, 179, 57, 182, 76, 232, 78, 7, 230, 165, - 124, 224, 204, 77, 86, 22, 230, 248, 34, 22, 187, 36, 210, 111, 72, 87, 201, 7, 25, 148, - 203, 0, 40, 151, 169, 66, 135, 114, 25, 151, 213, 231, 110, 174, 160, 185, 129, 227, 234, 132, - 226, 197, 218, 222, 141, 254, 206, 141, 223, 133, 217, 146, 183, 207, 179, 215, 247, 204, 197, 231, - 109, 203, 177, 101, 65, 122, 33, 77, 231, 239, 153, 145, 239, 51, 139, 217, 1, 241, 221, 90, - 164, 178, 247, 24, 148, 203, 92, 80, 46, 149, 67, 44, 128, 206, 252, 206, 247, 103, 248, 135, - 102, 39, 222, 190, 106, 40, 238, 192, 184, 137, 150, 10, 65, 122, 40, 150, 251, 163, 149, 69, - 56, 190, 74, 104, 217, 121, 241, 10, 239, 203, 181, 202, 252, 198, 202, 166, 28, 207, 44, 230, - 101, 72, 223, 197, 241, 47, 165, 181, 56, 190, 76, 232, 78, 7, 198, 135, 197, 252, 128, 15, - 158, 249, 150, 149, 165, 120, 27, 134, 24, 131, 158, 26, 10, 227, 174, 231, 248, 178, 64, 185, - 244, 129, 114, 153, 58, 116, 40, 151, 113, 89, 157, 238, 226, 74, 154, 171, 57, 174, 110, 94, - 39, 174, 36, 6, 27, 88, 199, 243, 118, 121, 136, 171, 127, 15, 211, 54, 174, 210, 14, 155, - 29, 207, 135, 188, 21, 241, 241, 227, 79, 224, 109, 28, 226, 251, 228, 32, 43, 127, 235, 223, - 100, 64, 101, 141, 75, 63, 22, 31, 60, 71, 185, 244, 83, 46, 83, 102, 245, 88, 2, 233, - 191, 105, 110, 75, 250, 172, 131, 125, 19, 127, 212, 1, 195, 59, 48, 238, 100, 140, 49, 218, - 200, 98, 246, 231, 13, 115, 38, 110, 171, 78, 27, 90, 118, 94, 188, 194, 11, 162, 255, 86, - 126, 158, 143, 113, 243, 135, 193, 252, 143, 106, 110, 207, 16, 113, 165, 114, 39, 43, 23, 231, - 131, 201, 208, 241, 204, 101, 64, 71, 58, 48, 206, 142, 181, 29, 31, 60, 199, 199, 150, 251, - 51, 71, 3, 31, 102, 246, 179, 69, 173, 188, 29, 209, 1, 77, 241, 198, 195, 198, 188, 93, - 153, 160, 92, 148, 75, 201, 208, 161, 92, 198, 97, 117, 58, 134, 43, 106, 222, 202, 113, 117, - 67, 204, 18, 151, 90, 124, 178, 231, 39, 40, 24, 130, 129, 24, 226, 252, 14, 164, 27, 101, - 254, 92, 192, 140, 167, 202, 158, 9, 196, 2, 199, 169, 245, 18, 122, 124, 6, 181, 99, 17, - 83, 216, 110, 108, 101, 55, 43, 199, 99, 240, 25, 45, 175, 123, 74, 101, 141, 75, 40, 23, - 229, 82, 51, 171, 203, 105, 92, 185, 132, 35, 121, 187, 58, 96, 116, 7, 198, 249, 103, 217, - 238, 160, 231, 149, 16, 67, 198, 54, 71, 122, 225, 202, 30, 127, 214, 164, 190, 231, 73, 114, - 208, 162, 243, 50, 7, 138, 31, 40, 98, 254, 75, 230, 158, 88, 138, 159, 200, 202, 111, 133, - 161, 67, 29, 24, 135, 226, 197, 65, 123, 188, 97, 112, 157, 149, 115, 179, 226, 99, 196, 135, - 53, 22, 220, 193, 124, 156, 42, 64, 185, 40, 151, 146, 161, 67, 185, 140, 130, 104, 220, 159, - 128, 104, 236, 248, 56, 236, 195, 173, 204, 195, 113, 77, 128, 226, 9, 94, 156, 47, 76, 121, - 18, 162, 33, 246, 60, 43, 207, 69, 124, 31, 29, 135, 244, 36, 0, 61, 135, 240, 113, 170, - 96, 199, 253, 4, 87, 100, 6, 60, 223, 148, 74, 27, 151, 80, 46, 76, 185, 84, 200, 234, - 178, 30, 87, 142, 248, 5, 244, 149, 120, 187, 58, 32, 221, 129, 241, 207, 222, 212, 221, 10, - 159, 234, 253, 86, 196, 52, 201, 223, 183, 242, 80, 255, 203, 73, 111, 227, 99, 214, 5, 45, - 58, 47, 115, 89, 133, 14, 229, 90, 206, 144, 223, 205, 89, 131, 247, 95, 5, 116, 172, 3, - 227, 48, 157, 15, 179, 158, 15, 242, 254, 171, 4, 229, 82, 68, 185, 76, 9, 58, 148, 75, - 151, 216, 239, 242, 48, 254, 229, 206, 66, 109, 231, 197, 142, 189, 20, 134, 119, 172, 70, 241, - 17, 13, 91, 240, 15, 51, 149, 54, 46, 161, 92, 242, 148, 75, 13, 172, 62, 87, 114, 5, - 115, 46, 228, 248, 186, 32, 221, 129, 185, 221, 202, 222, 252, 195, 25, 240, 206, 230, 99, 249, - 152, 117, 66, 75, 206, 75, 31, 171, 216, 126, 24, 239, 14, 75, 145, 27, 48, 131, 53, 100, - 166, 5, 29, 236, 192, 56, 59, 238, 171, 16, 119, 191, 102, 202, 175, 20, 236, 205, 251, 173, - 3, 148, 75, 158, 114, 41, 1, 58, 148, 75, 87, 216, 239, 115, 101, 20, 79, 237, 58, 46, - 191, 146, 249, 58, 222, 119, 213, 172, 14, 207, 201, 234, 50, 169, 11, 173, 44, 132, 6, 53, - 46, 161, 92, 156, 114, 169, 137, 213, 231, 149, 92, 193, 156, 29, 56, 190, 46, 40, 232, 192, - 100, 175, 189, 5, 197, 67, 246, 134, 241, 59, 25, 199, 240, 177, 154, 0, 45, 57, 47, 3, - 172, 114, 235, 32, 214, 23, 240, 95, 238, 184, 238, 182, 242, 90, 212, 181, 34, 103, 6, 29, - 237, 192, 56, 59, 246, 74, 86, 62, 142, 201, 26, 1, 30, 251, 41, 43, 79, 226, 253, 213, - 9, 202, 69, 185, 148, 12, 29, 202, 165, 237, 16, 147, 44, 248, 100, 10, 61, 254, 92, 81, - 106, 232, 69, 17, 143, 61, 197, 202, 178, 188, 239, 186, 88, 93, 158, 142, 244, 180, 206, 41, - 222, 153, 62, 24, 217, 67, 175, 104, 88, 227, 18, 202, 69, 185, 212, 4, 241, 204, 15, 63, - 191, 227, 126, 129, 38, 60, 36, 158, 193, 144, 14, 76, 246, 186, 79, 52, 226, 195, 197, 198, - 117, 35, 114, 171, 220, 55, 13, 90, 114, 94, 10, 89, 37, 87, 179, 114, 128, 149, 111, 88, - 185, 211, 202, 239, 17, 95, 60, 254, 175, 255, 255, 21, 86, 142, 70, 252, 161, 140, 156, 125, - 161, 10, 232, 112, 7, 166, 7, 49, 129, 130, 79, 91, 237, 211, 218, 249, 52, 177, 62, 100, - 207, 191, 224, 125, 44, 191, 231, 239, 63, 59, 211, 202, 30, 86, 22, 231, 237, 155, 68, 185, - 52, 147, 114, 145, 105, 66, 92, 161, 204, 59, 2, 49, 121, 194, 107, 16, 211, 41, 223, 140, - 248, 94, 241, 115, 210, 59, 47, 254, 179, 179, 16, 211, 39, 47, 193, 251, 108, 10, 171, 219, - 54, 136, 247, 86, 111, 172, 187, 95, 137, 245, 247, 215, 61, 86, 46, 64, 60, 255, 179, 36, - 109, 227, 223, 153, 41, 181, 54, 46, 161, 92, 148, 75, 197, 16, 15, 184, 223, 77, 117, 116, - 77, 91, 211, 106, 104, 7, 38, 23, 231, 235, 136, 157, 136, 24, 141, 212, 107, 51, 251, 51, - 49, 62, 249, 194, 85, 136, 103, 251, 54, 227, 237, 154, 6, 45, 57, 47, 34, 34, 34, 165, - 64, 92, 8, 203, 223, 5, 187, 5, 13, 185, 224, 37, 34, 245, 178, 207, 130, 151, 231, 62, - 27, 122, 188, 131, 182, 34, 199, 214, 9, 99, 118, 96, 186, 2, 45, 57, 47, 34, 34, 34, - 83, 135, 88, 217, 57, 255, 48, 168, 95, 137, 92, 151, 227, 68, 228, 209, 7, 177, 132, 199, - 29, 185, 207, 135, 158, 243, 57, 182, 110, 120, 20, 117, 96, 208, 162, 243, 34, 34, 34, 50, - 117, 246, 133, 247, 46, 250, 2, 172, 101, 234, 99, 17, 169, 143, 253, 221, 63, 39, 241, 51, - 191, 184, 113, 6, 125, 62, 244, 188, 136, 227, 235, 134, 14, 118, 96, 208, 129, 243, 34, 34, - 34, 50, 85, 246, 101, 183, 38, 250, 103, 180, 188, 30, 109, 120, 248, 83, 68, 166, 198, 254, - 230, 125, 17, 116, 119, 49, 98, 118, 200, 205, 172, 188, 218, 202, 53, 217, 207, 153, 79, 77, - 220, 184, 245, 172, 208, 177, 14, 12, 58, 114, 94, 68, 68, 68, 166, 10, 177, 82, 248, 97, - 185, 178, 58, 199, 136, 72, 119, 33, 102, 31, 244, 201, 56, 38, 177, 27, 239, 167, 9, 208, - 161, 14, 12, 58, 116, 94, 68, 68, 68, 68, 68, 166, 6, 49, 131, 224, 36, 154, 185, 64, - 226, 99, 58, 215, 129, 233, 204, 121, 17, 17, 17, 17, 17, 153, 10, 196, 179, 20, 119, 83, - 67, 120, 24, 159, 34, 122, 49, 222, 79, 83, 160, 35, 29, 24, 116, 236, 188, 136, 136, 136, - 136, 136, 76, 141, 53, 124, 183, 179, 114, 63, 53, 136, 83, 190, 100, 101, 81, 222, 190, 73, - 208, 145, 14, 140, 67, 135, 206, 139, 136, 136, 136, 136, 200, 84, 33, 166, 228, 125, 189, 149, - 243, 173, 220, 135, 152, 74, 253, 207, 86, 110, 179, 114, 138, 149, 141, 120, 155, 38, 66, 135, - 58, 48, 14, 29, 57, 47, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, - 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 21, 248, 127, 100, 55, 52, 29, 52, 81, 239, - 146, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130 - }; - }; - default_bitmap_font_t default_bitmap_font; -} - -#endif diff --git a/src/ogfx/static_resources/default_icon_64.hpp b/src/ogfx/static_resources/default_icon_64.hpp deleted file mode 100755 index 546b1dc..0000000 --- a/src/ogfx/static_resources/default_icon_64.hpp +++ /dev/null @@ -1,899 +0,0 @@ -#ifndef __default_icon_64_HPP__ -#define __default_icon_64_HPP__ - -namespace oxres -{ - struct default_icon_64_t { - const unsigned int size = 17682; - const unsigned char data[17682] = { - 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0, - 64, 0, 0, 0, 64, 8, 6, 0, 0, 0, 170, 105, 113, 222, 0, 0, 29, 95, 122, 84, - 88, 116, 82, 97, 119, 32, 112, 114, 111, 102, 105, 108, 101, 32, 116, 121, 112, 101, 32, 101, - 120, 105, 102, 0, 0, 120, 218, 237, 155, 89, 146, 29, 185, 210, 156, 223, 115, 21, 90, 66, - 98, 6, 150, 131, 209, 76, 59, 208, 242, 245, 121, 32, 139, 151, 236, 110, 201, 212, 191, 222, - 100, 98, 53, 89, 85, 231, 228, 201, 4, 98, 240, 112, 15, 68, 63, 251, 127, 252, 247, 243, - 252, 55, 254, 148, 236, 226, 19, 83, 169, 185, 229, 252, 242, 39, 182, 216, 124, 231, 135, 250, - 222, 63, 221, 254, 117, 111, 180, 127, 237, 79, 252, 222, 226, 247, 63, 94, 127, 126, 189, 225, - 121, 41, 240, 61, 220, 95, 107, 254, 174, 255, 121, 221, 253, 186, 193, 253, 214, 249, 41, 253, - 118, 163, 58, 191, 55, 198, 159, 111, 180, 239, 9, 190, 254, 229, 70, 223, 131, 130, 86, 228, - 249, 97, 125, 55, 106, 223, 141, 130, 191, 111, 184, 239, 6, 253, 110, 235, 205, 173, 150, 223, - 183, 48, 246, 253, 190, 126, 118, 82, 239, 223, 71, 255, 248, 123, 169, 86, 117, 87, 241, 151, - 223, 99, 193, 122, 43, 241, 156, 224, 253, 14, 46, 188, 252, 27, 194, 183, 128, 160, 191, 254, - 9, 157, 31, 34, 255, 186, 144, 184, 80, 95, 122, 37, 216, 191, 245, 91, 9, 6, 249, 39, - 59, 253, 250, 211, 88, 209, 217, 159, 43, 254, 126, 209, 31, 94, 249, 245, 147, 251, 231, 215, - 159, 191, 122, 43, 250, 239, 146, 240, 23, 35, 231, 95, 223, 255, 241, 245, 199, 165, 127, 246, - 138, 153, 254, 247, 248, 169, 223, 79, 254, 207, 215, 203, 235, 230, 93, 209, 95, 172, 175, 191, - 231, 172, 122, 108, 207, 236, 162, 199, 140, 169, 243, 183, 169, 159, 173, 216, 79, 92, 135, 59, - 162, 30, 93, 31, 150, 150, 185, 109, 38, 134, 42, 223, 245, 213, 248, 170, 68, 245, 36, 20, - 214, 59, 223, 193, 215, 116, 205, 121, 220, 117, 92, 116, 203, 117, 119, 220, 182, 239, 211, 77, - 150, 24, 253, 126, 124, 225, 7, 239, 167, 15, 246, 98, 13, 197, 55, 63, 241, 152, 195, 151, - 124, 185, 227, 75, 104, 97, 133, 138, 147, 167, 185, 61, 6, 255, 107, 45, 206, 30, 219, 222, - 249, 216, 211, 42, 79, 94, 142, 75, 189, 227, 102, 78, 113, 241, 111, 191, 158, 127, 251, 129, - 115, 100, 91, 231, 222, 250, 203, 86, 172, 203, 123, 25, 155, 101, 200, 115, 250, 151, 203, 240, - 136, 59, 159, 81, 147, 25, 248, 231, 235, 175, 127, 228, 215, 128, 7, 147, 172, 172, 20, 105, - 24, 118, 220, 91, 140, 228, 254, 131, 4, 193, 28, 29, 184, 48, 241, 253, 230, 160, 43, 235, - 187, 1, 38, 226, 209, 137, 197, 184, 128, 7, 240, 26, 185, 225, 178, 123, 139, 247, 197, 57, - 12, 89, 113, 80, 103, 233, 62, 68, 63, 240, 128, 75, 201, 47, 22, 233, 99, 8, 25, 223, - 84, 175, 71, 243, 145, 226, 236, 82, 159, 60, 47, 63, 188, 14, 152, 225, 137, 20, 114, 40, - 248, 166, 133, 142, 179, 98, 76, 196, 79, 137, 149, 24, 234, 41, 164, 152, 82, 202, 169, 164, - 154, 90, 234, 57, 228, 152, 83, 206, 185, 100, 129, 98, 47, 161, 196, 167, 164, 146, 75, 41, - 181, 180, 210, 107, 168, 177, 166, 154, 107, 169, 181, 182, 218, 155, 111, 1, 208, 76, 45, 183, - 210, 106, 107, 173, 119, 158, 217, 185, 115, 231, 211, 157, 11, 122, 31, 126, 132, 17, 71, 122, - 70, 30, 101, 212, 209, 70, 159, 132, 207, 140, 51, 205, 60, 203, 172, 179, 205, 190, 252, 10, - 11, 252, 88, 121, 149, 85, 87, 91, 125, 187, 77, 40, 237, 184, 211, 206, 187, 236, 186, 219, - 238, 135, 80, 59, 225, 57, 241, 164, 147, 79, 57, 245, 180, 211, 127, 121, 237, 115, 235, 223, - 190, 254, 133, 215, 220, 231, 53, 111, 158, 210, 133, 229, 151, 215, 120, 181, 148, 159, 91, 56, - 193, 73, 146, 207, 112, 152, 127, 162, 195, 227, 69, 46, 32, 160, 189, 124, 246, 86, 23, 163, - 151, 231, 228, 179, 183, 121, 178, 34, 121, 22, 153, 228, 179, 229, 228, 49, 60, 24, 183, 243, - 233, 184, 31, 223, 61, 254, 122, 84, 158, 251, 191, 242, 219, 83, 226, 31, 126, 243, 255, 85, - 207, 61, 114, 221, 191, 244, 220, 223, 253, 246, 79, 94, 91, 42, 67, 211, 60, 118, 179, 80, - 70, 125, 3, 217, 199, 251, 187, 118, 95, 187, 138, 221, 223, 190, 63, 255, 171, 55, 254, 237, - 247, 255, 127, 163, 255, 194, 141, 112, 217, 42, 242, 227, 126, 203, 9, 167, 20, 82, 103, 150, - 188, 215, 228, 39, 240, 253, 224, 191, 61, 87, 34, 70, 245, 95, 3, 167, 66, 236, 192, 72, - 46, 41, 236, 55, 81, 41, 222, 62, 90, 6, 175, 78, 94, 39, 112, 139, 54, 66, 206, 225, - 84, 222, 154, 155, 187, 248, 177, 242, 137, 251, 188, 167, 172, 118, 166, 221, 50, 246, 181, 198, - 0, 161, 253, 51, 169, 80, 99, 159, 52, 150, 203, 109, 12, 238, 48, 150, 62, 199, 181, 122, - 246, 88, 165, 204, 224, 119, 25, 147, 23, 18, 183, 223, 45, 133, 217, 55, 225, 215, 194, 209, - 71, 249, 173, 251, 67, 237, 47, 196, 189, 62, 68, 252, 231, 224, 236, 57, 51, 156, 51, 124, - 31, 236, 144, 5, 132, 188, 247, 57, 181, 145, 17, 218, 30, 64, 193, 53, 57, 165, 221, 227, - 120, 217, 243, 153, 235, 244, 39, 197, 249, 38, 54, 195, 126, 243, 232, 110, 45, 55, 71, 174, - 125, 55, 2, 249, 180, 54, 203, 26, 167, 102, 158, 186, 214, 217, 60, 114, 110, 214, 145, 90, - 209, 205, 210, 6, 118, 66, 36, 161, 202, 121, 150, 231, 233, 142, 13, 111, 153, 224, 237, 201, - 145, 143, 111, 237, 171, 238, 94, 23, 37, 96, 213, 153, 211, 114, 131, 219, 112, 15, 62, 238, - 230, 183, 233, 48, 206, 248, 245, 250, 243, 219, 27, 121, 234, 62, 105, 30, 31, 107, 63, 153, - 135, 57, 93, 90, 254, 126, 139, 24, 87, 119, 187, 56, 222, 193, 22, 21, 147, 234, 70, 44, - 176, 236, 150, 71, 235, 217, 219, 199, 65, 142, 51, 3, 217, 205, 142, 101, 177, 49, 113, 222, - 150, 33, 239, 118, 90, 31, 11, 103, 54, 62, 127, 183, 200, 246, 214, 51, 70, 177, 167, 249, - 141, 81, 162, 153, 145, 235, 226, 110, 197, 214, 86, 114, 240, 13, 44, 108, 241, 128, 92, 21, - 75, 207, 48, 86, 171, 102, 252, 172, 143, 18, 16, 250, 212, 179, 90, 202, 49, 237, 83, 211, - 217, 179, 140, 112, 86, 8, 101, 111, 219, 196, 28, 126, 202, 145, 117, 149, 177, 249, 112, 88, - 187, 59, 174, 97, 61, 103, 109, 222, 217, 43, 213, 129, 41, 113, 208, 19, 184, 186, 41, 236, - 0, 163, 25, 241, 19, 152, 115, 48, 192, 6, 108, 9, 54, 2, 10, 194, 83, 117, 95, 118, - 193, 190, 112, 3, 62, 124, 147, 194, 214, 99, 62, 159, 147, 2, 119, 63, 122, 50, 1, 173, - 224, 197, 118, 60, 58, 17, 225, 51, 159, 222, 166, 75, 96, 125, 111, 132, 125, 221, 227, 172, - 210, 219, 78, 3, 201, 1, 7, 238, 133, 29, 240, 201, 17, 202, 4, 13, 227, 60, 79, 8, - 83, 209, 254, 237, 162, 2, 149, 165, 239, 210, 71, 2, 104, 65, 225, 88, 222, 185, 65, 92, - 2, 207, 191, 74, 72, 223, 107, 189, 63, 192, 17, 127, 251, 254, 252, 122, 65, 217, 138, 3, - 210, 138, 169, 158, 26, 198, 94, 99, 19, 104, 189, 144, 162, 50, 46, 97, 175, 101, 135, 187, - 236, 18, 199, 38, 26, 84, 15, 113, 15, 6, 120, 136, 250, 165, 85, 173, 131, 61, 8, 217, - 108, 22, 33, 126, 72, 50, 42, 99, 47, 45, 141, 177, 139, 118, 190, 112, 103, 133, 253, 165, - 53, 217, 79, 10, 215, 170, 137, 187, 181, 82, 96, 108, 56, 155, 176, 62, 212, 71, 74, 71, - 44, 148, 4, 246, 74, 62, 80, 226, 192, 18, 174, 38, 84, 1, 145, 124, 148, 209, 1, 151, - 227, 43, 42, 38, 235, 242, 24, 50, 251, 17, 195, 234, 245, 89, 176, 163, 85, 129, 23, 43, - 85, 179, 231, 57, 128, 129, 220, 222, 226, 48, 209, 196, 35, 175, 167, 36, 121, 125, 146, 184, - 131, 240, 133, 218, 49, 91, 72, 153, 71, 186, 51, 170, 97, 197, 120, 110, 208, 167, 76, 124, - 205, 60, 106, 37, 45, 202, 206, 56, 122, 165, 217, 240, 107, 9, 153, 220, 225, 213, 25, 195, - 144, 99, 43, 102, 105, 206, 130, 184, 175, 104, 241, 70, 73, 61, 104, 145, 182, 120, 21, 186, - 102, 9, 208, 135, 235, 37, 207, 188, 118, 88, 121, 80, 8, 227, 9, 197, 145, 242, 196, 249, - 98, 239, 155, 162, 155, 91, 223, 189, 36, 216, 114, 108, 138, 108, 3, 161, 199, 110, 222, 217, - 181, 167, 70, 135, 96, 47, 70, 139, 145, 89, 249, 101, 229, 126, 194, 219, 10, 212, 125, 84, - 123, 175, 221, 247, 120, 46, 145, 85, 29, 81, 5, 158, 134, 243, 144, 191, 21, 56, 22, 92, - 242, 70, 132, 181, 181, 61, 193, 219, 52, 132, 162, 199, 135, 5, 153, 92, 144, 3, 124, 12, - 241, 32, 199, 220, 77, 222, 78, 237, 38, 190, 73, 38, 96, 207, 177, 181, 215, 119, 57, 80, - 182, 111, 150, 17, 69, 203, 202, 90, 231, 137, 107, 192, 29, 54, 121, 58, 112, 58, 65, 225, - 214, 177, 231, 158, 190, 229, 51, 152, 138, 127, 9, 59, 192, 243, 217, 7, 143, 27, 192, 34, - 69, 88, 1, 80, 74, 230, 122, 2, 2, 178, 10, 49, 218, 30, 245, 25, 88, 50, 142, 39, - 179, 18, 88, 95, 20, 122, 132, 10, 89, 62, 210, 122, 217, 19, 172, 226, 57, 35, 151, 102, - 184, 227, 252, 212, 154, 242, 205, 123, 133, 224, 181, 88, 198, 153, 30, 212, 108, 61, 64, 134, - 194, 134, 228, 44, 177, 141, 66, 112, 117, 62, 147, 197, 75, 214, 115, 241, 128, 155, 175, 226, - 79, 31, 74, 70, 60, 191, 13, 153, 58, 208, 198, 10, 134, 69, 124, 129, 222, 176, 76, 18, - 36, 13, 60, 169, 237, 133, 173, 236, 188, 232, 249, 40, 134, 102, 132, 41, 171, 150, 52, 153, - 147, 164, 133, 196, 181, 232, 26, 203, 134, 225, 245, 30, 38, 198, 127, 207, 155, 209, 113, 101, - 18, 71, 241, 200, 96, 23, 16, 39, 159, 33, 223, 89, 81, 215, 71, 9, 32, 2, 170, 237, - 21, 166, 156, 165, 103, 41, 36, 1, 181, 122, 166, 187, 117, 73, 160, 65, 18, 243, 184, 161, - 21, 145, 2, 211, 242, 72, 219, 31, 15, 153, 216, 123, 37, 252, 66, 201, 86, 2, 171, 219, - 176, 78, 106, 34, 60, 238, 110, 80, 169, 233, 118, 247, 34, 119, 105, 249, 161, 164, 163, 92, - 46, 21, 99, 128, 125, 147, 145, 164, 136, 150, 69, 141, 3, 247, 224, 118, 20, 17, 144, 223, - 15, 54, 211, 26, 245, 42, 1, 32, 212, 39, 254, 155, 209, 190, 37, 1, 205, 198, 56, 212, - 150, 23, 191, 229, 124, 204, 240, 33, 60, 100, 122, 144, 103, 63, 100, 27, 20, 8, 108, 26, - 40, 245, 40, 127, 21, 238, 205, 95, 240, 17, 163, 115, 213, 155, 85, 210, 169, 240, 20, 21, - 4, 36, 107, 167, 102, 12, 188, 155, 31, 10, 152, 128, 195, 17, 57, 62, 18, 144, 34, 13, - 171, 79, 200, 188, 165, 51, 254, 27, 150, 133, 181, 192, 174, 235, 152, 67, 21, 186, 129, 88, - 41, 2, 187, 44, 111, 245, 196, 158, 250, 243, 26, 128, 84, 130, 64, 201, 212, 20, 59, 5, - 152, 200, 88, 120, 32, 192, 66, 229, 50, 118, 62, 5, 112, 74, 18, 99, 38, 102, 96, 101, - 104, 5, 253, 182, 167, 12, 132, 71, 104, 250, 82, 126, 182, 240, 177, 223, 152, 200, 252, 64, - 2, 164, 30, 28, 96, 8, 241, 217, 14, 82, 64, 24, 102, 64, 138, 236, 42, 100, 178, 79, - 88, 218, 99, 148, 27, 192, 241, 233, 134, 186, 94, 185, 5, 130, 116, 75, 200, 183, 173, 114, - 25, 74, 128, 84, 89, 153, 181, 171, 200, 192, 4, 199, 129, 134, 59, 238, 230, 7, 136, 91, - 149, 97, 162, 27, 15, 47, 69, 31, 79, 38, 4, 210, 104, 6, 122, 94, 112, 138, 61, 99, - 109, 155, 234, 45, 144, 216, 8, 129, 169, 20, 75, 31, 16, 18, 234, 88, 107, 100, 213, 31, - 101, 123, 120, 96, 103, 152, 206, 226, 5, 41, 176, 11, 165, 172, 189, 162, 38, 4, 2, 85, - 122, 1, 216, 131, 48, 144, 163, 225, 45, 235, 45, 162, 129, 150, 155, 96, 175, 3, 212, 148, - 92, 208, 133, 71, 207, 17, 135, 81, 161, 35, 214, 96, 129, 220, 23, 103, 97, 161, 209, 165, - 80, 112, 148, 152, 32, 129, 200, 19, 21, 38, 193, 234, 1, 245, 200, 205, 164, 208, 220, 86, - 14, 158, 78, 82, 96, 246, 68, 170, 17, 249, 77, 162, 163, 112, 201, 164, 90, 87, 139, 43, - 69, 219, 250, 147, 92, 101, 196, 150, 224, 92, 229, 252, 67, 136, 240, 220, 36, 192, 77, 142, - 235, 181, 210, 84, 196, 157, 136, 105, 39, 178, 52, 124, 40, 226, 91, 177, 64, 53, 222, 168, - 68, 194, 191, 92, 2, 43, 250, 104, 78, 223, 19, 24, 39, 69, 142, 85, 130, 158, 60, 245, - 212, 93, 70, 212, 163, 213, 43, 240, 111, 35, 184, 186, 7, 179, 131, 178, 47, 222, 212, 5, - 94, 215, 222, 152, 138, 231, 58, 182, 11, 236, 186, 167, 144, 96, 228, 76, 211, 155, 100, 97, - 193, 60, 4, 92, 144, 7, 182, 246, 78, 201, 111, 1, 60, 160, 230, 173, 133, 30, 36, 101, - 163, 248, 149, 74, 186, 168, 213, 12, 162, 85, 165, 63, 220, 50, 98, 97, 16, 102, 19, 227, - 34, 188, 64, 173, 235, 164, 108, 72, 221, 7, 81, 43, 69, 22, 120, 216, 12, 138, 196, 224, - 148, 120, 42, 97, 243, 24, 20, 145, 155, 117, 162, 32, 201, 112, 161, 42, 73, 87, 150, 63, - 137, 226, 153, 192, 135, 67, 21, 25, 170, 136, 51, 53, 41, 58, 2, 183, 140, 254, 226, 226, - 97, 208, 214, 214, 47, 174, 71, 218, 239, 6, 248, 39, 160, 46, 33, 239, 66, 47, 16, 4, - 162, 41, 105, 89, 248, 54, 33, 177, 225, 226, 99, 186, 182, 223, 77, 140, 96, 214, 140, 147, - 11, 201, 78, 100, 93, 156, 95, 31, 245, 127, 20, 88, 183, 138, 12, 191, 98, 41, 75, 26, - 4, 42, 251, 67, 51, 221, 111, 160, 26, 108, 39, 31, 166, 198, 76, 242, 17, 46, 112, 19, - 86, 116, 158, 84, 222, 13, 163, 161, 34, 128, 167, 16, 63, 239, 177, 166, 182, 70, 145, 167, - 164, 24, 61, 39, 89, 177, 17, 1, 26, 201, 35, 128, 63, 8, 185, 180, 21, 68, 60, 148, - 226, 68, 226, 10, 14, 201, 199, 245, 72, 213, 77, 158, 123, 195, 191, 73, 11, 80, 38, 73, - 143, 37, 103, 16, 83, 4, 185, 128, 24, 45, 178, 221, 129, 10, 144, 64, 10, 201, 194, 14, - 122, 204, 253, 41, 61, 240, 176, 96, 76, 176, 126, 30, 117, 215, 163, 199, 69, 210, 136, 13, - 81, 60, 214, 38, 203, 187, 74, 224, 54, 101, 210, 224, 160, 42, 31, 133, 68, 79, 108, 53, - 63, 178, 204, 80, 12, 201, 74, 191, 57, 138, 58, 200, 134, 37, 186, 42, 59, 192, 99, 195, - 98, 26, 252, 100, 73, 7, 226, 68, 97, 74, 113, 215, 216, 39, 232, 66, 201, 118, 174, 166, - 154, 10, 95, 220, 59, 8, 60, 151, 54, 64, 160, 1, 222, 152, 42, 167, 27, 235, 231, 242, - 67, 161, 210, 23, 63, 235, 18, 215, 4, 229, 131, 229, 60, 124, 18, 154, 20, 124, 216, 133, - 136, 12, 136, 177, 6, 100, 93, 190, 10, 177, 8, 1, 223, 146, 99, 235, 64, 198, 133, 244, - 202, 82, 252, 1, 12, 46, 105, 15, 1, 126, 67, 231, 237, 39, 201, 3, 196, 38, 49, 73, - 72, 146, 159, 33, 37, 101, 1, 118, 59, 37, 104, 63, 208, 73, 161, 182, 226, 116, 32, 233, - 168, 121, 81, 232, 36, 237, 230, 72, 30, 104, 130, 131, 156, 61, 20, 77, 129, 196, 43, 0, - 137, 197, 79, 72, 249, 14, 240, 194, 172, 32, 204, 205, 41, 223, 131, 113, 78, 65, 54, 53, - 11, 159, 241, 40, 39, 141, 89, 164, 42, 163, 83, 72, 150, 71, 80, 5, 213, 195, 92, 20, - 80, 149, 68, 132, 6, 44, 114, 165, 97, 120, 40, 85, 44, 56, 69, 224, 156, 216, 137, 45, - 192, 108, 19, 67, 65, 202, 69, 112, 163, 53, 27, 137, 192, 145, 132, 60, 30, 5, 244, 218, - 76, 101, 194, 30, 179, 200, 233, 60, 92, 181, 96, 145, 16, 156, 13, 137, 254, 253, 165, 208, - 196, 127, 88, 120, 130, 233, 128, 102, 232, 78, 200, 168, 219, 183, 4, 29, 209, 36, 164, 23, - 161, 43, 128, 36, 187, 21, 242, 38, 104, 136, 117, 160, 187, 149, 23, 85, 74, 133, 65, 61, - 29, 110, 54, 236, 215, 237, 29, 116, 110, 63, 109, 52, 68, 30, 69, 34, 131, 48, 206, 68, - 3, 213, 211, 152, 167, 173, 53, 201, 197, 198, 82, 60, 55, 23, 43, 202, 166, 89, 20, 146, - 150, 9, 4, 174, 96, 234, 161, 78, 72, 7, 35, 180, 8, 175, 34, 9, 138, 8, 122, 179, - 147, 67, 122, 170, 128, 44, 92, 198, 132, 1, 194, 17, 162, 87, 102, 181, 104, 130, 178, 3, - 74, 210, 6, 6, 145, 3, 240, 119, 0, 158, 138, 82, 95, 47, 38, 112, 117, 83, 47, 96, - 62, 32, 113, 137, 83, 45, 241, 62, 213, 110, 138, 228, 67, 228, 217, 104, 159, 212, 34, 122, - 143, 135, 131, 207, 19, 0, 131, 251, 129, 144, 157, 253, 151, 214, 193, 250, 168, 150, 106, 193, - 86, 3, 7, 53, 165, 159, 234, 68, 95, 144, 50, 146, 2, 182, 46, 86, 208, 169, 141, 94, - 98, 10, 1, 124, 178, 174, 68, 51, 120, 128, 13, 211, 170, 134, 229, 36, 157, 233, 51, 60, - 126, 174, 80, 129, 25, 29, 130, 184, 45, 174, 211, 116, 59, 159, 96, 25, 64, 73, 220, 74, - 132, 202, 26, 234, 132, 31, 207, 18, 164, 160, 186, 127, 36, 26, 218, 192, 46, 183, 62, 13, - 85, 73, 50, 52, 124, 25, 170, 134, 129, 56, 104, 137, 138, 87, 146, 13, 192, 41, 201, 50, - 109, 123, 11, 247, 88, 92, 40, 169, 63, 8, 157, 164, 88, 188, 40, 233, 151, 76, 123, 57, - 57, 37, 106, 143, 89, 249, 240, 91, 59, 27, 36, 129, 6, 27, 223, 89, 29, 5, 66, 107, - 163, 201, 50, 162, 105, 0, 131, 136, 154, 70, 38, 227, 41, 107, 154, 136, 205, 9, 220, 171, - 84, 170, 49, 243, 203, 228, 200, 171, 33, 86, 156, 215, 205, 208, 122, 243, 179, 43, 113, 182, - 114, 39, 118, 34, 59, 6, 98, 12, 171, 196, 212, 155, 12, 54, 74, 119, 146, 16, 165, 89, - 163, 1, 90, 209, 68, 181, 43, 155, 53, 205, 27, 216, 104, 115, 9, 43, 131, 113, 112, 164, - 98, 21, 49, 63, 75, 113, 180, 111, 179, 2, 168, 19, 214, 188, 146, 180, 78, 25, 46, 36, - 2, 132, 143, 113, 97, 229, 59, 124, 102, 163, 201, 177, 3, 40, 58, 212, 1, 192, 78, 210, - 91, 243, 137, 192, 185, 39, 172, 97, 184, 71, 232, 69, 76, 189, 229, 178, 32, 88, 241, 16, - 192, 6, 1, 108, 81, 127, 3, 101, 121, 147, 134, 219, 10, 96, 221, 82, 14, 226, 128, 41, - 9, 49, 179, 101, 196, 47, 208, 145, 249, 173, 135, 192, 82, 5, 214, 38, 22, 142, 129, 181, - 160, 105, 201, 68, 101, 85, 81, 72, 28, 39, 71, 244, 157, 211, 35, 172, 162, 122, 85, 16, - 66, 138, 3, 52, 87, 237, 134, 187, 11, 171, 177, 128, 213, 131, 5, 113, 104, 9, 165, 140, - 86, 130, 209, 104, 65, 183, 233, 241, 31, 35, 62, 127, 90, 113, 164, 203, 33, 13, 155, 225, - 12, 170, 240, 225, 118, 176, 66, 138, 2, 79, 103, 150, 227, 65, 106, 140, 213, 132, 97, 90, - 49, 14, 153, 69, 26, 160, 98, 163, 176, 91, 202, 64, 119, 137, 152, 197, 168, 93, 233, 57, - 28, 214, 173, 43, 179, 96, 112, 160, 17, 245, 38, 4, 196, 215, 55, 23, 231, 97, 162, 218, - 128, 45, 199, 114, 219, 114, 88, 41, 147, 102, 67, 44, 90, 107, 100, 115, 230, 105, 42, 75, - 138, 62, 111, 231, 9, 197, 189, 237, 231, 23, 205, 24, 48, 97, 100, 111, 167, 72, 149, 55, - 2, 210, 11, 95, 246, 117, 63, 73, 133, 126, 57, 138, 105, 128, 240, 234, 12, 234, 106, 83, - 191, 176, 40, 14, 112, 70, 159, 92, 55, 101, 152, 179, 227, 79, 233, 232, 79, 120, 87, 109, - 41, 101, 135, 141, 122, 120, 81, 254, 246, 139, 163, 198, 230, 99, 78, 111, 67, 14, 55, 142, - 14, 42, 101, 196, 49, 232, 55, 200, 253, 30, 197, 218, 198, 149, 26, 79, 147, 194, 226, 158, - 106, 206, 225, 226, 36, 148, 27, 214, 206, 84, 101, 29, 84, 127, 32, 7, 171, 160, 36, 242, - 11, 89, 116, 11, 240, 94, 162, 11, 44, 110, 177, 9, 8, 14, 121, 85, 30, 114, 114, 173, - 139, 173, 91, 89, 5, 54, 81, 248, 12, 201, 113, 242, 109, 107, 18, 118, 32, 210, 199, 174, - 127, 104, 154, 40, 222, 196, 178, 216, 26, 194, 168, 114, 132, 250, 82, 37, 196, 198, 236, 117, - 73, 233, 58, 159, 173, 143, 201, 211, 34, 193, 244, 18, 149, 174, 227, 0, 79, 105, 30, 136, - 36, 88, 235, 146, 90, 4, 126, 244, 147, 26, 154, 235, 89, 121, 126, 171, 49, 85, 13, 197, - 83, 31, 138, 162, 234, 136, 38, 238, 69, 117, 253, 17, 131, 1, 159, 89, 183, 64, 18, 162, - 83, 4, 73, 218, 83, 94, 91, 133, 123, 186, 119, 14, 8, 237, 96, 227, 241, 64, 98, 71, - 248, 35, 222, 4, 195, 34, 93, 250, 254, 2, 79, 224, 95, 173, 1, 157, 73, 12, 33, 18, - 42, 25, 212, 213, 226, 245, 175, 202, 76, 122, 253, 211, 166, 18, 1, 10, 89, 71, 110, 181, - 114, 33, 111, 84, 104, 126, 7, 68, 37, 171, 102, 86, 106, 198, 233, 17, 56, 179, 85, 29, - 102, 218, 123, 81, 221, 90, 34, 52, 183, 201, 19, 18, 108, 164, 197, 2, 107, 233, 158, 146, - 176, 179, 248, 71, 4, 52, 34, 193, 223, 241, 6, 174, 158, 199, 128, 23, 37, 74, 165, 73, - 141, 100, 113, 40, 80, 208, 71, 213, 157, 172, 116, 120, 207, 33, 179, 40, 140, 214, 75, 98, - 107, 206, 161, 22, 231, 215, 175, 137, 151, 2, 94, 110, 140, 224, 92, 249, 0, 12, 151, 144, - 13, 107, 79, 18, 22, 104, 192, 49, 186, 199, 226, 143, 0, 78, 72, 168, 176, 145, 240, 254, - 112, 213, 187, 172, 238, 223, 201, 222, 146, 244, 68, 80, 103, 76, 17, 7, 7, 173, 128, 218, - 190, 202, 159, 227, 29, 36, 157, 157, 4, 255, 12, 145, 26, 4, 92, 208, 97, 236, 160, 74, - 1, 161, 1, 180, 201, 171, 87, 79, 42, 131, 190, 25, 255, 138, 45, 234, 172, 8, 74, 220, - 117, 210, 146, 169, 255, 95, 3, 223, 25, 231, 69, 138, 18, 244, 104, 55, 228, 115, 67, 48, - 44, 194, 62, 249, 228, 73, 229, 122, 42, 133, 0, 158, 13, 111, 25, 254, 167, 145, 72, 70, - 144, 247, 10, 21, 146, 227, 118, 18, 91, 68, 187, 61, 4, 114, 253, 164, 59, 22, 175, 212, - 129, 178, 47, 177, 34, 169, 92, 196, 156, 224, 24, 10, 127, 138, 159, 138, 118, 204, 203, 249, - 253, 20, 250, 108, 17, 73, 62, 24, 97, 254, 173, 34, 41, 79, 97, 27, 78, 100, 45, 188, - 184, 111, 195, 69, 69, 29, 176, 188, 43, 248, 51, 15, 74, 26, 16, 167, 77, 138, 222, 226, - 66, 223, 29, 46, 133, 73, 108, 162, 27, 238, 247, 176, 179, 121, 79, 51, 178, 255, 79, 203, - 20, 66, 71, 145, 59, 21, 134, 182, 132, 227, 68, 7, 16, 53, 76, 6, 92, 21, 128, 83, - 106, 199, 142, 196, 17, 74, 47, 173, 199, 169, 203, 11, 12, 5, 5, 145, 2, 34, 75, 243, - 22, 35, 176, 170, 184, 106, 219, 34, 184, 151, 178, 216, 5, 49, 59, 226, 66, 149, 175, 88, - 163, 224, 216, 93, 87, 160, 174, 241, 17, 11, 143, 15, 223, 40, 198, 144, 170, 136, 40, 152, - 89, 185, 141, 208, 223, 188, 5, 138, 20, 36, 199, 18, 99, 32, 64, 85, 20, 4, 82, 83, - 68, 70, 32, 72, 174, 145, 222, 179, 126, 45, 249, 125, 139, 116, 184, 177, 196, 90, 144, 127, - 209, 89, 29, 18, 188, 97, 86, 18, 10, 69, 8, 42, 150, 137, 138, 129, 18, 0, 15, 81, - 149, 240, 81, 55, 200, 72, 53, 144, 170, 192, 24, 96, 106, 181, 104, 198, 21, 148, 149, 169, - 115, 31, 229, 188, 5, 77, 81, 7, 13, 141, 88, 16, 11, 248, 94, 88, 169, 37, 160, 110, - 159, 95, 76, 193, 154, 83, 69, 201, 175, 222, 242, 158, 219, 206, 125, 200, 254, 210, 154, 193, - 76, 182, 130, 160, 75, 0, 43, 117, 164, 144, 8, 112, 57, 229, 104, 91, 239, 83, 212, 146, - 160, 58, 168, 237, 78, 250, 16, 186, 224, 16, 242, 224, 181, 118, 149, 85, 57, 181, 201, 88, - 94, 5, 199, 216, 175, 91, 6, 213, 226, 120, 77, 196, 41, 189, 18, 206, 231, 161, 118, 81, - 56, 18, 50, 192, 190, 215, 12, 40, 193, 170, 168, 185, 41, 240, 193, 168, 99, 166, 220, 35, - 20, 108, 11, 251, 107, 206, 139, 250, 208, 89, 30, 43, 41, 46, 17, 19, 37, 194, 109, 208, - 34, 30, 192, 233, 249, 141, 222, 240, 115, 66, 119, 200, 182, 161, 119, 209, 218, 220, 70, 26, - 177, 231, 78, 24, 145, 162, 17, 160, 17, 175, 76, 144, 108, 157, 142, 32, 124, 69, 235, 82, - 126, 106, 2, 91, 67, 145, 12, 75, 164, 66, 193, 213, 98, 230, 126, 111, 169, 50, 98, 154, - 205, 96, 37, 211, 125, 113, 91, 143, 163, 94, 201, 166, 126, 176, 3, 161, 50, 32, 10, 171, - 149, 51, 23, 1, 164, 195, 97, 162, 37, 151, 74, 69, 145, 254, 200, 175, 5, 37, 63, 133, - 99, 153, 171, 18, 214, 84, 102, 122, 181, 226, 97, 194, 115, 127, 108, 102, 60, 170, 30, 193, - 202, 7, 236, 183, 246, 16, 21, 1, 144, 250, 101, 181, 215, 122, 110, 42, 68, 69, 221, 104, - 136, 72, 26, 166, 102, 130, 85, 96, 121, 246, 118, 180, 220, 126, 132, 82, 228, 182, 180, 198, - 78, 84, 215, 201, 198, 2, 203, 54, 56, 123, 151, 188, 31, 193, 249, 233, 17, 6, 170, 45, - 39, 182, 23, 200, 5, 158, 151, 78, 159, 92, 37, 70, 151, 39, 32, 163, 33, 31, 11, 212, - 254, 89, 222, 176, 213, 13, 105, 241, 226, 43, 89, 63, 66, 128, 141, 76, 157, 103, 163, 85, - 176, 165, 95, 58, 197, 96, 55, 87, 104, 217, 9, 163, 53, 16, 36, 79, 212, 203, 203, 58, - 196, 208, 169, 12, 96, 30, 85, 168, 119, 54, 201, 23, 148, 235, 144, 8, 56, 49, 200, 1, - 92, 77, 170, 91, 83, 171, 236, 246, 225, 252, 165, 53, 119, 255, 169, 188, 234, 167, 80, 13, - 213, 201, 70, 163, 195, 152, 182, 122, 147, 0, 19, 246, 149, 232, 189, 42, 119, 97, 254, 100, - 112, 147, 174, 20, 168, 82, 104, 51, 193, 252, 203, 128, 127, 41, 79, 178, 76, 7, 96, 176, - 86, 103, 157, 183, 123, 20, 74, 132, 43, 157, 73, 23, 171, 32, 151, 0, 233, 56, 106, 5, - 170, 95, 65, 18, 178, 214, 83, 159, 43, 113, 213, 171, 224, 106, 5, 6, 43, 177, 196, 136, - 231, 117, 40, 181, 18, 155, 2, 95, 100, 25, 97, 40, 178, 167, 228, 27, 95, 215, 210, 24, - 46, 72, 145, 230, 99, 180, 186, 168, 73, 101, 196, 250, 30, 188, 94, 48, 153, 197, 208, 4, - 34, 51, 35, 9, 86, 201, 80, 200, 64, 207, 152, 188, 75, 118, 82, 13, 208, 48, 69, 166, - 26, 237, 249, 74, 157, 1, 199, 146, 234, 167, 218, 160, 50, 72, 130, 98, 237, 102, 57, 244, - 88, 187, 249, 47, 220, 184, 32, 37, 137, 113, 223, 212, 141, 164, 64, 74, 75, 179, 150, 121, - 153, 151, 206, 117, 100, 28, 83, 84, 67, 130, 53, 69, 116, 30, 82, 52, 59, 98, 200, 117, - 184, 227, 199, 246, 41, 176, 240, 88, 86, 140, 206, 218, 210, 107, 138, 7, 245, 21, 88, 26, - 59, 130, 20, 139, 191, 97, 40, 117, 56, 240, 193, 148, 38, 147, 180, 46, 20, 2, 30, 167, - 120, 227, 190, 81, 15, 112, 150, 209, 77, 115, 15, 108, 77, 22, 66, 78, 18, 222, 212, 220, - 1, 82, 135, 27, 244, 95, 203, 168, 191, 58, 213, 4, 194, 121, 198, 201, 81, 244, 58, 24, - 84, 169, 237, 119, 27, 54, 75, 105, 129, 166, 5, 79, 43, 181, 193, 62, 222, 202, 47, 68, - 85, 248, 117, 245, 156, 200, 65, 98, 236, 165, 58, 12, 181, 171, 96, 88, 91, 19, 33, 23, - 196, 142, 129, 24, 73, 172, 62, 164, 94, 241, 4, 6, 49, 136, 142, 46, 36, 110, 129, 59, - 228, 174, 238, 126, 138, 20, 92, 86, 70, 154, 68, 174, 224, 87, 117, 136, 143, 186, 0, 189, - 212, 146, 128, 168, 242, 234, 186, 39, 70, 228, 22, 59, 173, 239, 100, 235, 71, 152, 72, 14, - 130, 60, 106, 83, 214, 244, 38, 247, 58, 185, 142, 75, 128, 68, 196, 48, 126, 202, 81, 60, - 204, 73, 214, 192, 255, 118, 7, 100, 22, 37, 91, 231, 124, 60, 96, 10, 81, 169, 205, 83, - 252, 23, 9, 134, 17, 224, 69, 234, 161, 173, 14, 14, 123, 24, 91, 159, 145, 228, 240, 240, - 76, 225, 3, 251, 156, 77, 57, 56, 90, 134, 67, 190, 118, 118, 74, 229, 216, 243, 167, 33, - 40, 253, 245, 171, 213, 124, 174, 228, 145, 144, 137, 90, 111, 66, 201, 191, 221, 14, 172, 15, - 106, 2, 128, 132, 102, 36, 244, 26, 200, 20, 179, 47, 200, 2, 51, 118, 21, 100, 13, 51, - 252, 130, 202, 178, 76, 165, 42, 105, 225, 92, 26, 75, 154, 26, 57, 156, 173, 131, 94, 89, - 43, 76, 14, 207, 182, 140, 141, 38, 80, 248, 138, 249, 35, 242, 140, 218, 168, 224, 93, 122, - 102, 2, 228, 15, 197, 8, 233, 1, 72, 190, 146, 87, 196, 219, 135, 236, 78, 202, 172, 7, - 194, 218, 143, 66, 136, 215, 10, 18, 162, 52, 209, 180, 202, 66, 237, 64, 194, 109, 19, 2, - 221, 81, 240, 224, 129, 210, 166, 91, 122, 232, 168, 36, 135, 106, 240, 122, 196, 24, 32, 163, - 217, 189, 124, 14, 215, 31, 201, 245, 142, 170, 141, 48, 113, 138, 75, 81, 107, 120, 65, 57, - 217, 219, 80, 35, 118, 10, 253, 173, 53, 69, 112, 1, 72, 203, 105, 6, 86, 103, 78, 139, - 236, 207, 141, 93, 146, 1, 144, 193, 8, 215, 69, 126, 36, 69, 176, 164, 176, 82, 213, 180, - 207, 107, 201, 186, 174, 202, 156, 192, 32, 41, 134, 33, 98, 21, 164, 174, 86, 96, 7, 207, - 79, 107, 11, 62, 107, 146, 4, 115, 77, 163, 204, 71, 98, 123, 245, 25, 212, 175, 194, 40, - 85, 67, 7, 19, 232, 136, 31, 49, 219, 218, 26, 153, 233, 3, 64, 177, 159, 217, 205, 58, - 78, 42, 176, 253, 85, 62, 2, 239, 248, 247, 130, 14, 49, 210, 126, 199, 156, 243, 182, 254, - 235, 54, 179, 63, 255, 155, 219, 232, 40, 11, 6, 64, 129, 85, 243, 19, 150, 34, 192, 143, - 188, 172, 9, 131, 153, 20, 49, 212, 72, 120, 37, 32, 153, 159, 43, 238, 0, 135, 171, 175, - 197, 112, 127, 88, 207, 190, 200, 2, 231, 249, 154, 16, 176, 187, 150, 164, 232, 142, 76, 138, - 97, 151, 117, 109, 172, 97, 240, 168, 163, 243, 170, 107, 176, 79, 157, 8, 86, 145, 60, 72, - 165, 117, 198, 224, 16, 234, 75, 7, 107, 154, 12, 191, 9, 57, 170, 219, 6, 22, 154, 10, - 176, 122, 114, 226, 169, 73, 53, 251, 105, 95, 83, 206, 218, 197, 1, 43, 159, 183, 130, 165, - 227, 235, 239, 239, 175, 47, 254, 115, 212, 120, 187, 226, 71, 185, 161, 169, 226, 227, 8, 141, - 151, 95, 194, 179, 172, 51, 191, 162, 128, 152, 16, 222, 170, 139, 58, 224, 2, 42, 142, 245, - 246, 150, 69, 157, 58, 15, 195, 112, 218, 206, 86, 117, 78, 101, 215, 133, 252, 101, 226, 243, - 163, 127, 228, 4, 0, 35, 161, 207, 250, 108, 160, 7, 200, 23, 169, 34, 119, 26, 130, 162, - 33, 78, 141, 117, 41, 46, 22, 150, 121, 42, 44, 127, 14, 51, 95, 29, 103, 168, 201, 191, - 213, 91, 157, 214, 246, 214, 44, 167, 78, 89, 167, 178, 72, 179, 4, 148, 13, 216, 81, 211, - 204, 152, 19, 237, 23, 107, 31, 20, 114, 117, 107, 251, 70, 103, 178, 157, 51, 68, 34, 64, - 106, 157, 30, 14, 117, 241, 236, 96, 69, 39, 171, 34, 194, 129, 114, 3, 139, 231, 50, 176, - 2, 5, 184, 208, 19, 109, 36, 23, 9, 44, 138, 129, 180, 48, 47, 198, 250, 138, 250, 193, - 6, 188, 80, 63, 224, 233, 121, 46, 135, 189, 168, 126, 75, 51, 4, 135, 192, 129, 234, 83, - 246, 254, 222, 133, 87, 229, 134, 89, 188, 29, 45, 18, 97, 52, 160, 60, 165, 145, 204, 134, - 28, 125, 173, 211, 172, 126, 103, 131, 66, 203, 204, 27, 77, 27, 244, 82, 85, 227, 49, 91, - 167, 102, 169, 237, 184, 200, 121, 205, 152, 120, 247, 16, 127, 224, 14, 48, 235, 161, 18, 247, - 144, 72, 212, 72, 110, 134, 73, 19, 69, 146, 118, 124, 6, 162, 91, 197, 110, 69, 8, 193, - 90, 136, 170, 72, 139, 218, 145, 98, 189, 233, 60, 57, 233, 28, 182, 223, 227, 160, 153, 44, - 86, 222, 94, 188, 84, 144, 141, 101, 32, 208, 160, 94, 148, 95, 112, 17, 89, 140, 235, 82, - 229, 95, 12, 14, 228, 71, 138, 162, 142, 89, 251, 120, 212, 250, 207, 119, 140, 36, 235, 152, - 171, 94, 65, 102, 199, 42, 106, 198, 82, 61, 117, 130, 42, 42, 106, 157, 242, 117, 69, 209, - 119, 180, 185, 1, 124, 104, 32, 69, 6, 90, 3, 158, 134, 239, 184, 142, 82, 209, 110, 139, - 249, 92, 46, 116, 7, 115, 166, 198, 109, 34, 252, 124, 252, 103, 200, 0, 0, 197, 176, 154, - 208, 177, 99, 158, 250, 192, 88, 186, 128, 243, 178, 83, 34, 117, 218, 177, 179, 245, 55, 38, - 172, 79, 103, 54, 243, 37, 75, 239, 192, 87, 253, 213, 235, 118, 26, 189, 208, 76, 211, 64, - 41, 236, 169, 3, 223, 63, 15, 2, 75, 2, 64, 164, 145, 180, 175, 22, 116, 86, 212, 91, - 74, 198, 65, 102, 69, 189, 117, 245, 168, 79, 114, 246, 74, 82, 1, 12, 167, 230, 103, 124, - 103, 85, 46, 228, 123, 180, 43, 126, 131, 83, 200, 86, 92, 175, 158, 107, 27, 247, 96, 37, - 206, 159, 225, 183, 57, 238, 236, 27, 11, 194, 144, 80, 149, 62, 234, 3, 253, 135, 104, 82, - 248, 196, 145, 118, 203, 47, 143, 15, 43, 249, 16, 242, 171, 233, 157, 65, 165, 28, 219, 166, - 147, 52, 221, 38, 57, 184, 235, 117, 61, 14, 67, 235, 142, 150, 102, 27, 235, 33, 26, 137, - 249, 145, 141, 169, 86, 29, 162, 78, 216, 132, 211, 249, 249, 130, 33, 36, 29, 195, 59, 9, - 35, 101, 175, 14, 237, 168, 165, 154, 205, 202, 214, 242, 168, 238, 246, 80, 41, 144, 75, 140, - 25, 224, 12, 210, 13, 154, 53, 211, 88, 213, 50, 140, 208, 105, 8, 22, 52, 77, 77, 65, - 93, 147, 116, 132, 221, 0, 251, 26, 248, 200, 100, 155, 130, 20, 21, 68, 161, 174, 72, 81, - 104, 244, 45, 11, 26, 160, 240, 245, 103, 18, 113, 240, 96, 29, 18, 98, 169, 163, 113, 2, - 204, 99, 211, 39, 160, 104, 180, 3, 101, 157, 191, 93, 209, 173, 255, 141, 227, 177, 54, 197, - 37, 187, 197, 78, 181, 135, 14, 85, 109, 24, 43, 15, 40, 81, 212, 156, 46, 149, 48, 184, - 16, 186, 199, 1, 16, 209, 208, 223, 49, 126, 17, 67, 153, 59, 182, 231, 167, 67, 254, 53, - 200, 143, 211, 105, 145, 82, 123, 93, 112, 226, 105, 166, 215, 178, 225, 208, 111, 212, 154, 66, - 181, 127, 59, 106, 124, 254, 233, 172, 145, 130, 129, 225, 116, 232, 80, 179, 218, 230, 168, 5, - 77, 26, 22, 235, 34, 132, 123, 188, 218, 13, 128, 213, 255, 190, 7, 119, 207, 109, 137, 163, - 43, 113, 244, 176, 35, 31, 155, 232, 186, 179, 118, 214, 250, 109, 73, 103, 160, 36, 29, 171, - 42, 214, 11, 93, 187, 103, 175, 150, 241, 202, 250, 63, 49, 26, 241, 90, 32, 90, 177, 3, - 152, 170, 202, 91, 103, 199, 254, 170, 133, 100, 109, 250, 108, 243, 45, 84, 243, 95, 147, 105, - 149, 212, 208, 73, 227, 58, 150, 199, 4, 135, 78, 79, 154, 159, 200, 245, 169, 243, 147, 31, - 86, 6, 190, 68, 168, 120, 254, 99, 178, 208, 14, 231, 17, 39, 8, 116, 116, 16, 81, 161, - 65, 0, 117, 176, 236, 64, 177, 107, 188, 0, 27, 65, 124, 1, 55, 111, 229, 71, 69, 210, - 106, 143, 206, 177, 27, 143, 183, 49, 165, 113, 197, 230, 55, 196, 64, 46, 138, 58, 131, 84, - 170, 200, 93, 44, 71, 168, 243, 104, 142, 71, 115, 44, 200, 71, 82, 192, 210, 205, 223, 146, - 141, 116, 251, 108, 20, 172, 15, 60, 70, 100, 177, 142, 74, 220, 125, 98, 117, 5, 135, 39, - 79, 217, 208, 49, 217, 120, 108, 62, 193, 9, 119, 250, 136, 205, 94, 45, 70, 235, 240, 112, - 134, 10, 88, 177, 53, 118, 169, 34, 29, 191, 148, 232, 34, 15, 175, 141, 126, 216, 184, 172, - 70, 171, 242, 61, 149, 209, 172, 169, 216, 23, 149, 60, 129, 85, 83, 227, 17, 80, 255, 198, - 175, 24, 131, 250, 143, 144, 31, 183, 107, 6, 74, 17, 252, 226, 37, 71, 147, 14, 222, 236, - 251, 168, 155, 255, 225, 99, 68, 91, 66, 246, 118, 188, 212, 235, 158, 235, 187, 123, 174, 175, - 106, 169, 89, 8, 63, 156, 205, 249, 96, 198, 97, 88, 0, 163, 80, 7, 27, 50, 74, 74, - 105, 182, 198, 137, 216, 147, 250, 9, 96, 234, 234, 35, 218, 40, 84, 89, 54, 182, 170, 97, - 51, 13, 78, 156, 63, 6, 51, 200, 4, 151, 53, 60, 37, 229, 247, 204, 31, 168, 81, 255, - 221, 161, 87, 82, 106, 96, 220, 86, 55, 131, 196, 66, 47, 84, 155, 213, 43, 136, 242, 122, - 71, 135, 178, 127, 127, 205, 16, 105, 80, 161, 13, 18, 227, 169, 125, 86, 145, 101, 137, 81, - 235, 50, 107, 14, 99, 94, 135, 171, 247, 222, 177, 43, 14, 130, 214, 199, 217, 81, 16, 80, - 71, 234, 29, 57, 55, 187, 198, 220, 246, 29, 122, 201, 237, 161, 108, 43, 93, 145, 225, 214, - 106, 132, 39, 156, 114, 107, 200, 199, 104, 190, 161, 170, 84, 49, 134, 166, 71, 109, 20, 76, - 190, 26, 214, 47, 81, 119, 78, 231, 47, 207, 157, 105, 145, 254, 158, 196, 202, 235, 212, 178, - 234, 223, 201, 62, 58, 6, 51, 19, 13, 223, 208, 213, 219, 197, 192, 175, 254, 207, 97, 214, - 127, 158, 208, 252, 237, 59, 92, 15, 222, 136, 18, 91, 213, 14, 84, 197, 186, 86, 253, 109, - 149, 132, 6, 172, 121, 27, 140, 116, 155, 255, 48, 24, 73, 191, 96, 100, 127, 205, 74, 236, - 218, 71, 210, 112, 17, 169, 85, 146, 17, 46, 74, 184, 27, 34, 12, 247, 188, 173, 152, 126, - 16, 171, 144, 108, 43, 235, 201, 106, 217, 109, 117, 217, 65, 180, 161, 97, 143, 215, 132, 188, - 242, 177, 200, 243, 58, 21, 201, 146, 221, 20, 231, 92, 139, 26, 43, 154, 204, 98, 235, 249, - 14, 232, 222, 222, 237, 51, 92, 87, 63, 71, 253, 174, 212, 122, 116, 66, 5, 141, 126, 74, - 196, 15, 96, 229, 64, 249, 129, 204, 98, 244, 48, 216, 184, 223, 47, 32, 212, 97, 215, 229, - 109, 45, 63, 136, 249, 87, 101, 67, 72, 121, 103, 149, 116, 198, 71, 146, 19, 118, 187, 104, - 54, 51, 68, 73, 201, 214, 32, 195, 30, 138, 145, 26, 64, 37, 215, 135, 51, 46, 207, 29, - 63, 35, 122, 73, 125, 75, 77, 220, 232, 118, 54, 39, 58, 48, 54, 208, 131, 160, 203, 136, - 217, 23, 129, 84, 28, 181, 78, 13, 198, 149, 47, 93, 87, 251, 84, 83, 164, 72, 114, 84, - 112, 28, 79, 122, 107, 43, 151, 107, 33, 182, 52, 3, 104, 121, 133, 0, 134, 27, 196, 163, - 97, 58, 117, 141, 190, 153, 196, 32, 74, 6, 74, 128, 216, 194, 195, 109, 227, 71, 249, 158, - 247, 119, 117, 215, 124, 29, 232, 209, 16, 43, 148, 152, 34, 172, 225, 10, 96, 239, 126, 92, - 120, 121, 199, 149, 68, 165, 117, 39, 2, 146, 130, 90, 165, 56, 139, 141, 81, 249, 148, 158, - 31, 90, 165, 246, 167, 5, 103, 130, 45, 106, 168, 146, 64, 119, 21, 218, 157, 82, 168, 94, - 99, 117, 189, 6, 157, 108, 184, 159, 188, 0, 218, 48, 115, 105, 106, 115, 47, 103, 122, 141, - 212, 34, 177, 140, 198, 188, 44, 175, 46, 201, 140, 241, 13, 100, 218, 184, 136, 152, 53, 161, - 169, 1, 183, 228, 99, 211, 188, 114, 177, 170, 91, 132, 225, 164, 85, 213, 57, 173, 209, 156, - 74, 58, 34, 147, 54, 244, 90, 44, 173, 82, 152, 37, 216, 120, 52, 32, 83, 239, 212, 189, - 2, 199, 198, 44, 53, 184, 101, 110, 71, 28, 58, 248, 58, 32, 250, 88, 198, 171, 168, 169, - 238, 124, 61, 228, 76, 204, 244, 64, 41, 163, 64, 80, 27, 94, 72, 43, 92, 110, 14, 157, - 31, 53, 155, 79, 185, 51, 137, 9, 107, 190, 119, 58, 241, 125, 126, 126, 248, 215, 223, 187, - 248, 62, 248, 119, 0, 56, 101, 191, 245, 72, 183, 114, 18, 136, 41, 42, 197, 147, 74, 20, - 34, 229, 211, 181, 80, 65, 247, 72, 241, 36, 165, 52, 119, 104, 188, 99, 223, 196, 184, 72, - 175, 33, 172, 162, 115, 140, 231, 78, 244, 89, 225, 249, 166, 29, 86, 85, 23, 61, 166, 24, - 208, 100, 101, 189, 64, 16, 112, 132, 40, 88, 226, 76, 94, 92, 26, 254, 115, 231, 125, 151, - 254, 119, 192, 69, 188, 237, 199, 95, 93, 22, 221, 55, 28, 40, 223, 132, 52, 167, 104, 28, - 144, 17, 200, 225, 69, 253, 61, 214, 1, 35, 5, 0, 13, 121, 57, 150, 111, 196, 168, 152, - 36, 105, 241, 249, 160, 138, 180, 73, 209, 102, 241, 209, 38, 163, 252, 76, 153, 183, 127, 154, - 50, 255, 199, 239, 207, 255, 233, 133, 255, 239, 221, 72, 212, 186, 61, 255, 19, 187, 127, 241, - 97, 132, 149, 181, 233, 0, 0, 1, 132, 105, 67, 67, 80, 73, 67, 67, 32, 112, 114, 111, - 102, 105, 108, 101, 0, 0, 120, 156, 125, 145, 61, 72, 195, 64, 28, 197, 95, 211, 74, 69, - 170, 14, 22, 17, 113, 200, 80, 157, 44, 20, 21, 113, 212, 42, 20, 161, 66, 168, 21, 90, - 117, 48, 185, 244, 11, 154, 52, 36, 45, 46, 142, 130, 107, 193, 193, 143, 197, 170, 131, 139, - 179, 174, 14, 174, 130, 32, 248, 1, 226, 232, 228, 164, 232, 34, 37, 254, 47, 41, 180, 136, - 241, 224, 184, 31, 239, 238, 61, 238, 222, 1, 66, 163, 204, 52, 43, 16, 3, 52, 189, 106, - 166, 18, 113, 49, 147, 93, 21, 131, 175, 8, 160, 15, 131, 0, 98, 50, 179, 140, 57, 73, - 74, 194, 115, 124, 221, 195, 199, 215, 187, 40, 207, 242, 62, 247, 231, 232, 85, 115, 22, 3, - 124, 34, 241, 44, 51, 204, 42, 241, 6, 241, 244, 102, 213, 224, 188, 79, 28, 102, 69, 89, - 37, 62, 39, 30, 55, 233, 130, 196, 143, 92, 87, 92, 126, 227, 92, 112, 88, 224, 153, 97, - 51, 157, 154, 39, 14, 19, 139, 133, 14, 86, 58, 152, 21, 77, 141, 120, 138, 56, 162, 106, - 58, 229, 11, 25, 151, 85, 206, 91, 156, 181, 114, 141, 181, 238, 201, 95, 24, 202, 233, 43, - 203, 92, 167, 57, 130, 4, 22, 177, 4, 9, 34, 20, 212, 80, 66, 25, 85, 68, 105, 213, - 73, 177, 144, 162, 253, 184, 135, 127, 216, 241, 75, 228, 82, 200, 85, 2, 35, 199, 2, 42, - 208, 32, 59, 126, 240, 63, 248, 221, 173, 149, 159, 156, 112, 147, 66, 113, 160, 235, 197, 182, - 63, 70, 129, 224, 46, 208, 172, 219, 246, 247, 177, 109, 55, 79, 0, 255, 51, 112, 165, 183, - 253, 149, 6, 48, 243, 73, 122, 189, 173, 69, 142, 128, 254, 109, 224, 226, 186, 173, 41, 123, - 192, 229, 14, 48, 244, 100, 200, 166, 236, 72, 126, 154, 66, 62, 15, 188, 159, 209, 55, 101, - 129, 129, 91, 160, 103, 205, 237, 173, 181, 143, 211, 7, 32, 77, 93, 37, 111, 128, 131, 67, - 96, 172, 64, 217, 235, 30, 239, 238, 238, 236, 237, 223, 51, 173, 254, 126, 0, 74, 241, 114, - 151, 40, 2, 220, 52, 0, 0, 13, 26, 105, 84, 88, 116, 88, 77, 76, 58, 99, 111, 109, - 46, 97, 100, 111, 98, 101, 46, 120, 109, 112, 0, 0, 0, 0, 0, 60, 63, 120, 112, 97, - 99, 107, 101, 116, 32, 98, 101, 103, 105, 110, 61, 34, 239, 187, 191, 34, 32, 105, 100, 61, - 34, 87, 53, 77, 48, 77, 112, 67, 101, 104, 105, 72, 122, 114, 101, 83, 122, 78, 84, 99, - 122, 107, 99, 57, 100, 34, 63, 62, 10, 60, 120, 58, 120, 109, 112, 109, 101, 116, 97, 32, - 120, 109, 108, 110, 115, 58, 120, 61, 34, 97, 100, 111, 98, 101, 58, 110, 115, 58, 109, 101, - 116, 97, 47, 34, 32, 120, 58, 120, 109, 112, 116, 107, 61, 34, 88, 77, 80, 32, 67, 111, - 114, 101, 32, 52, 46, 52, 46, 48, 45, 69, 120, 105, 118, 50, 34, 62, 10, 32, 60, 114, - 100, 102, 58, 82, 68, 70, 32, 120, 109, 108, 110, 115, 58, 114, 100, 102, 61, 34, 104, 116, - 116, 112, 58, 47, 47, 119, 119, 119, 46, 119, 51, 46, 111, 114, 103, 47, 49, 57, 57, 57, - 47, 48, 50, 47, 50, 50, 45, 114, 100, 102, 45, 115, 121, 110, 116, 97, 120, 45, 110, 115, - 35, 34, 62, 10, 32, 32, 60, 114, 100, 102, 58, 68, 101, 115, 99, 114, 105, 112, 116, 105, - 111, 110, 32, 114, 100, 102, 58, 97, 98, 111, 117, 116, 61, 34, 34, 10, 32, 32, 32, 32, - 120, 109, 108, 110, 115, 58, 120, 109, 112, 77, 77, 61, 34, 104, 116, 116, 112, 58, 47, 47, - 110, 115, 46, 97, 100, 111, 98, 101, 46, 99, 111, 109, 47, 120, 97, 112, 47, 49, 46, 48, - 47, 109, 109, 47, 34, 10, 32, 32, 32, 32, 120, 109, 108, 110, 115, 58, 115, 116, 69, 118, - 116, 61, 34, 104, 116, 116, 112, 58, 47, 47, 110, 115, 46, 97, 100, 111, 98, 101, 46, 99, - 111, 109, 47, 120, 97, 112, 47, 49, 46, 48, 47, 115, 84, 121, 112, 101, 47, 82, 101, 115, - 111, 117, 114, 99, 101, 69, 118, 101, 110, 116, 35, 34, 10, 32, 32, 32, 32, 120, 109, 108, - 110, 115, 58, 100, 99, 61, 34, 104, 116, 116, 112, 58, 47, 47, 112, 117, 114, 108, 46, 111, - 114, 103, 47, 100, 99, 47, 101, 108, 101, 109, 101, 110, 116, 115, 47, 49, 46, 49, 47, 34, - 10, 32, 32, 32, 32, 120, 109, 108, 110, 115, 58, 71, 73, 77, 80, 61, 34, 104, 116, 116, - 112, 58, 47, 47, 119, 119, 119, 46, 103, 105, 109, 112, 46, 111, 114, 103, 47, 120, 109, 112, - 47, 34, 10, 32, 32, 32, 32, 120, 109, 108, 110, 115, 58, 116, 105, 102, 102, 61, 34, 104, - 116, 116, 112, 58, 47, 47, 110, 115, 46, 97, 100, 111, 98, 101, 46, 99, 111, 109, 47, 116, - 105, 102, 102, 47, 49, 46, 48, 47, 34, 10, 32, 32, 32, 32, 120, 109, 108, 110, 115, 58, - 120, 109, 112, 61, 34, 104, 116, 116, 112, 58, 47, 47, 110, 115, 46, 97, 100, 111, 98, 101, - 46, 99, 111, 109, 47, 120, 97, 112, 47, 49, 46, 48, 47, 34, 10, 32, 32, 32, 120, 109, - 112, 77, 77, 58, 68, 111, 99, 117, 109, 101, 110, 116, 73, 68, 61, 34, 103, 105, 109, 112, - 58, 100, 111, 99, 105, 100, 58, 103, 105, 109, 112, 58, 53, 97, 97, 52, 98, 49, 57, 56, - 45, 53, 56, 100, 101, 45, 52, 100, 102, 56, 45, 57, 54, 54, 51, 45, 53, 54, 98, 97, - 98, 50, 50, 100, 57, 54, 51, 56, 34, 10, 32, 32, 32, 120, 109, 112, 77, 77, 58, 73, - 110, 115, 116, 97, 110, 99, 101, 73, 68, 61, 34, 120, 109, 112, 46, 105, 105, 100, 58, 102, - 100, 48, 54, 102, 54, 56, 99, 45, 48, 98, 54, 55, 45, 52, 55, 49, 102, 45, 56, 97, - 50, 97, 45, 100, 51, 48, 54, 100, 99, 52, 98, 56, 54, 97, 56, 34, 10, 32, 32, 32, - 120, 109, 112, 77, 77, 58, 79, 114, 105, 103, 105, 110, 97, 108, 68, 111, 99, 117, 109, 101, - 110, 116, 73, 68, 61, 34, 120, 109, 112, 46, 100, 105, 100, 58, 50, 98, 53, 57, 100, 99, - 49, 56, 45, 97, 48, 51, 97, 45, 52, 100, 53, 57, 45, 56, 56, 48, 97, 45, 56, 56, - 99, 54, 51, 53, 57, 48, 54, 98, 49, 52, 34, 10, 32, 32, 32, 100, 99, 58, 70, 111, - 114, 109, 97, 116, 61, 34, 105, 109, 97, 103, 101, 47, 112, 110, 103, 34, 10, 32, 32, 32, - 71, 73, 77, 80, 58, 65, 80, 73, 61, 34, 50, 46, 48, 34, 10, 32, 32, 32, 71, 73, - 77, 80, 58, 80, 108, 97, 116, 102, 111, 114, 109, 61, 34, 76, 105, 110, 117, 120, 34, 10, - 32, 32, 32, 71, 73, 77, 80, 58, 84, 105, 109, 101, 83, 116, 97, 109, 112, 61, 34, 49, - 54, 52, 57, 57, 55, 51, 55, 57, 48, 55, 54, 55, 49, 55, 51, 34, 10, 32, 32, 32, - 71, 73, 77, 80, 58, 86, 101, 114, 115, 105, 111, 110, 61, 34, 50, 46, 49, 48, 46, 51, - 48, 34, 10, 32, 32, 32, 116, 105, 102, 102, 58, 79, 114, 105, 101, 110, 116, 97, 116, 105, - 111, 110, 61, 34, 49, 34, 10, 32, 32, 32, 120, 109, 112, 58, 67, 114, 101, 97, 116, 111, - 114, 84, 111, 111, 108, 61, 34, 71, 73, 77, 80, 32, 50, 46, 49, 48, 34, 62, 10, 32, - 32, 32, 60, 120, 109, 112, 77, 77, 58, 72, 105, 115, 116, 111, 114, 121, 62, 10, 32, 32, - 32, 32, 60, 114, 100, 102, 58, 83, 101, 113, 62, 10, 32, 32, 32, 32, 32, 60, 114, 100, - 102, 58, 108, 105, 10, 32, 32, 32, 32, 32, 32, 115, 116, 69, 118, 116, 58, 97, 99, 116, - 105, 111, 110, 61, 34, 115, 97, 118, 101, 100, 34, 10, 32, 32, 32, 32, 32, 32, 115, 116, - 69, 118, 116, 58, 99, 104, 97, 110, 103, 101, 100, 61, 34, 47, 34, 10, 32, 32, 32, 32, - 32, 32, 115, 116, 69, 118, 116, 58, 105, 110, 115, 116, 97, 110, 99, 101, 73, 68, 61, 34, - 120, 109, 112, 46, 105, 105, 100, 58, 51, 102, 102, 101, 98, 52, 98, 50, 45, 50, 99, 53, - 49, 45, 52, 102, 54, 56, 45, 56, 56, 50, 48, 45, 99, 55, 101, 55, 53, 52, 48, 55, - 53, 99, 97, 51, 34, 10, 32, 32, 32, 32, 32, 32, 115, 116, 69, 118, 116, 58, 115, 111, - 102, 116, 119, 97, 114, 101, 65, 103, 101, 110, 116, 61, 34, 71, 105, 109, 112, 32, 50, 46, - 49, 48, 32, 40, 76, 105, 110, 117, 120, 41, 34, 10, 32, 32, 32, 32, 32, 32, 115, 116, - 69, 118, 116, 58, 119, 104, 101, 110, 61, 34, 50, 48, 50, 50, 45, 48, 52, 45, 49, 53, - 84, 48, 48, 58, 48, 51, 58, 49, 48, 43, 48, 50, 58, 48, 48, 34, 47, 62, 10, 32, - 32, 32, 32, 60, 47, 114, 100, 102, 58, 83, 101, 113, 62, 10, 32, 32, 32, 60, 47, 120, - 109, 112, 77, 77, 58, 72, 105, 115, 116, 111, 114, 121, 62, 10, 32, 32, 60, 47, 114, 100, - 102, 58, 68, 101, 115, 99, 114, 105, 112, 116, 105, 111, 110, 62, 10, 32, 60, 47, 114, 100, - 102, 58, 82, 68, 70, 62, 10, 60, 47, 120, 58, 120, 109, 112, 109, 101, 116, 97, 62, 10, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 10, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 10, 60, 63, 120, 112, 97, 99, 107, 101, 116, 32, 101, 110, - 100, 61, 34, 119, 34, 63, 62, 72, 241, 114, 133, 0, 0, 0, 6, 98, 75, 71, 68, 0, - 255, 0, 157, 0, 209, 55, 56, 181, 18, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 15, - 97, 0, 0, 15, 97, 1, 168, 63, 167, 105, 0, 0, 0, 7, 116, 73, 77, 69, 7, 230, - 4, 14, 22, 3, 10, 202, 197, 230, 211, 0, 0, 24, 126, 73, 68, 65, 84, 120, 218, 237, - 122, 121, 144, 156, 199, 117, 223, 175, 175, 239, 156, 115, 119, 102, 239, 3, 88, 92, 139, 155, - 160, 120, 8, 16, 111, 136, 37, 90, 180, 73, 198, 169, 136, 82, 172, 40, 150, 19, 91, 150, - 29, 187, 162, 200, 149, 84, 172, 148, 195, 18, 21, 151, 93, 177, 108, 185, 74, 145, 109, 217, - 114, 164, 136, 166, 25, 210, 148, 68, 136, 18, 33, 30, 34, 9, 18, 16, 65, 226, 220, 37, - 1, 44, 128, 221, 197, 46, 246, 158, 157, 217, 217, 185, 190, 249, 142, 238, 206, 31, 59, 75, - 46, 22, 0, 41, 197, 82, 98, 39, 120, 85, 93, 61, 61, 245, 205, 87, 243, 126, 253, 222, - 235, 247, 250, 247, 128, 107, 114, 77, 174, 201, 53, 185, 38, 215, 228, 154, 92, 147, 107, 242, - 255, 167, 144, 127, 96, 239, 213, 255, 88, 1, 32, 43, 230, 149, 131, 174, 24, 100, 197, 115, - 186, 49, 84, 99, 232, 21, 179, 94, 5, 132, 254, 135, 8, 192, 74, 133, 41, 0, 6, 192, - 236, 54, 59, 98, 123, 123, 110, 237, 238, 75, 118, 175, 105, 113, 211, 107, 108, 33, 178, 156, - 33, 205, 41, 226, 132, 42, 83, 35, 82, 32, 145, 214, 8, 195, 72, 7, 85, 79, 122, 115, - 229, 160, 50, 55, 81, 158, 155, 60, 50, 121, 110, 236, 208, 204, 112, 46, 82, 170, 10, 192, - 3, 16, 0, 144, 141, 113, 37, 96, 254, 175, 0, 176, 188, 139, 12, 128, 249, 64, 231, 3, - 237, 183, 118, 220, 178, 167, 213, 205, 220, 18, 55, 237, 235, 146, 166, 179, 33, 97, 218, 9, - 83, 48, 98, 112, 2, 193, 0, 198, 20, 24, 83, 32, 36, 2, 161, 17, 64, 66, 104, 18, - 65, 33, 64, 164, 235, 136, 224, 35, 80, 117, 120, 81, 77, 150, 131, 114, 113, 49, 40, 95, - 88, 172, 87, 78, 143, 47, 230, 142, 191, 50, 122, 238, 216, 254, 209, 243, 99, 0, 22, 27, - 160, 132, 171, 44, 229, 255, 24, 0, 203, 59, 45, 62, 218, 243, 137, 222, 59, 59, 238, 122, - 160, 197, 201, 220, 151, 177, 211, 215, 167, 237, 152, 229, 26, 38, 76, 78, 27, 138, 202, 134, - 162, 17, 8, 13, 1, 18, 1, 52, 2, 33, 17, 64, 195, 198, 28, 129, 144, 112, 197, 247, - 75, 192, 128, 132, 144, 8, 224, 203, 58, 60, 89, 67, 201, 175, 200, 153, 202, 194, 240, 116, - 121, 225, 240, 43, 163, 163, 207, 124, 253, 248, 224, 113, 13, 228, 0, 84, 87, 129, 241, 51, - 3, 128, 0, 160, 156, 8, 235, 63, 109, 253, 131, 221, 253, 233, 205, 159, 238, 112, 219, 126, - 46, 99, 167, 237, 184, 105, 131, 51, 128, 82, 217, 80, 114, 165, 114, 151, 174, 151, 193, 88, - 189, 198, 10, 171, 88, 9, 198, 50, 56, 104, 88, 74, 45, 172, 33, 239, 149, 212, 116, 185, - 56, 126, 54, 151, 219, 255, 141, 215, 7, 190, 253, 198, 116, 225, 12, 128, 2, 128, 250, 10, - 55, 249, 169, 2, 64, 1, 24, 15, 109, 251, 147, 61, 219, 210, 59, 63, 215, 29, 235, 189, - 35, 99, 55, 81, 91, 112, 16, 42, 175, 170, 236, 242, 250, 29, 229, 150, 148, 213, 141, 29, - 86, 8, 160, 72, 8, 141, 16, 154, 4, 111, 63, 71, 169, 4, 99, 18, 148, 74, 208, 198, - 188, 12, 206, 242, 123, 34, 29, 160, 228, 87, 48, 85, 42, 214, 206, 230, 230, 95, 126, 106, - 112, 248, 145, 39, 223, 156, 56, 12, 96, 174, 225, 34, 63, 49, 16, 228, 106, 187, 254, 47, - 122, 126, 189, 227, 67, 93, 247, 127, 190, 47, 190, 225, 227, 109, 78, 7, 183, 184, 0, 33, - 242, 178, 29, 90, 253, 39, 201, 42, 229, 65, 67, 68, 186, 142, 51, 133, 97, 228, 189, 124, - 84, 10, 74, 94, 53, 170, 150, 165, 14, 171, 10, 145, 175, 16, 249, 156, 2, 166, 32, 194, - 18, 212, 114, 77, 238, 38, 109, 17, 75, 59, 70, 44, 97, 113, 102, 155, 4, 142, 73, 96, - 114, 13, 202, 150, 222, 169, 73, 136, 106, 224, 97, 178, 180, 24, 188, 57, 157, 59, 240, 244, - 224, 133, 111, 60, 62, 48, 125, 8, 192, 108, 195, 34, 126, 108, 215, 224, 87, 80, 158, 255, - 225, 117, 127, 177, 119, 71, 250, 250, 63, 95, 19, 95, 223, 155, 16, 73, 16, 130, 37, 112, - 73, 227, 180, 34, 141, 24, 212, 88, 147, 75, 214, 43, 103, 5, 2, 13, 66, 0, 131, 49, - 88, 156, 163, 26, 17, 165, 180, 242, 170, 97, 125, 108, 174, 186, 112, 250, 249, 243, 231, 142, - 134, 33, 157, 1, 224, 135, 50, 34, 190, 242, 205, 186, 242, 98, 49, 147, 100, 62, 208, 215, - 182, 102, 91, 123, 102, 93, 119, 58, 182, 169, 43, 237, 174, 237, 72, 218, 177, 164, 195, 224, - 90, 64, 220, 230, 216, 100, 39, 141, 206, 38, 241, 193, 45, 29, 238, 45, 183, 109, 204, 124, - 247, 11, 223, 63, 245, 151, 51, 53, 57, 8, 96, 97, 69, 140, 120, 87, 97, 43, 149, 231, - 68, 24, 255, 237, 198, 71, 63, 117, 67, 102, 207, 95, 175, 79, 110, 106, 118, 184, 11, 178, - 164, 61, 8, 85, 0, 145, 0, 85, 32, 68, 53, 230, 75, 215, 32, 178, 241, 156, 2, 161, - 114, 105, 38, 10, 10, 17, 24, 5, 66, 21, 160, 80, 47, 85, 75, 126, 117, 222, 143, 194, - 185, 132, 233, 86, 214, 55, 183, 210, 142, 100, 115, 169, 213, 236, 59, 191, 43, 243, 254, 145, - 245, 201, 141, 19, 25, 179, 245, 2, 85, 246, 208, 88, 46, 56, 242, 210, 240, 196, 203, 223, - 28, 60, 242, 131, 39, 78, 156, 126, 190, 228, 213, 206, 86, 130, 122, 88, 143, 194, 52, 163, - 218, 54, 5, 224, 154, 4, 153, 184, 193, 123, 155, 173, 173, 31, 88, 159, 186, 51, 105, 17, - 249, 198, 120, 57, 7, 160, 214, 112, 137, 31, 251, 60, 55, 254, 234, 230, 111, 253, 251, 157, - 77, 239, 123, 168, 221, 233, 164, 148, 172, 192, 134, 168, 183, 205, 124, 101, 212, 38, 87, 113, - 131, 229, 152, 160, 73, 136, 162, 95, 192, 80, 97, 56, 56, 56, 113, 114, 228, 185, 243, 111, - 30, 177, 73, 211, 64, 135, 219, 117, 161, 205, 105, 207, 101, 172, 108, 37, 97, 36, 106, 174, - 136, 123, 113, 35, 225, 37, 141, 180, 55, 80, 253, 65, 58, 178, 78, 95, 31, 51, 35, 241, - 244, 224, 204, 137, 185, 133, 176, 232, 73, 207, 31, 170, 191, 169, 1, 152, 0, 210, 54, 35, - 189, 159, 189, 115, 235, 7, 111, 232, 109, 254, 133, 254, 118, 119, 83, 91, 82, 16, 203, 208, - 240, 101, 128, 177, 124, 53, 122, 225, 244, 220, 190, 207, 126, 123, 232, 203, 74, 99, 160, 113, - 132, 94, 53, 54, 44, 3, 32, 190, 122, 211, 223, 253, 214, 245, 205, 55, 253, 215, 54, 167, - 147, 82, 66, 87, 61, 37, 175, 30, 181, 201, 82, 128, 211, 36, 128, 130, 15, 133, 0, 154, - 46, 5, 185, 217, 218, 140, 126, 118, 244, 224, 228, 99, 131, 175, 190, 220, 227, 174, 127, 245, - 186, 204, 251, 206, 246, 167, 183, 148, 50, 86, 51, 76, 102, 48, 70, 24, 165, 132, 42, 70, - 184, 207, 169, 225, 89, 204, 169, 74, 133, 250, 201, 252, 49, 86, 73, 238, 187, 189, 189, 169, - 254, 59, 181, 176, 62, 242, 226, 249, 177, 111, 61, 61, 48, 115, 34, 39, 103, 230, 27, 62, - 78, 0, 196, 0, 116, 126, 230, 246, 117, 119, 239, 237, 207, 254, 242, 230, 78, 183, 191, 53, - 33, 192, 40, 193, 76, 169, 142, 67, 231, 243, 199, 63, 247, 173, 83, 127, 112, 161, 20, 189, - 138, 165, 163, 51, 186, 18, 8, 4, 0, 253, 147, 235, 255, 251, 207, 223, 148, 189, 229, 137, - 222, 88, 159, 113, 153, 242, 208, 151, 28, 95, 154, 4, 136, 224, 193, 147, 101, 212, 100, 9, - 229, 112, 65, 21, 252, 121, 175, 18, 45, 86, 43, 81, 169, 90, 139, 42, 85, 169, 67, 95, - 35, 138, 134, 10, 99, 179, 167, 166, 11, 111, 220, 220, 178, 231, 216, 205, 173, 239, 47, 52, - 219, 77, 54, 5, 154, 65, 84, 138, 128, 184, 141, 24, 164, 150, 148, 34, 37, 70, 68, 206, - 100, 246, 28, 135, 181, 112, 177, 58, 17, 62, 159, 123, 172, 251, 246, 157, 243, 95, 108, 73, - 24, 187, 11, 94, 229, 248, 143, 70, 47, 254, 237, 23, 95, 57, 249, 156, 6, 38, 26, 38, - 14, 0, 174, 160, 164, 231, 161, 15, 175, 251, 200, 237, 155, 50, 191, 186, 169, 45, 222, 28, - 55, 57, 138, 94, 136, 215, 70, 10, 163, 15, 127, 247, 244, 239, 31, 157, 242, 126, 208, 8, - 144, 225, 106, 16, 200, 131, 189, 159, 204, 254, 114, 223, 111, 12, 110, 73, 239, 108, 21, 84, - 92, 193, 72, 20, 52, 9, 225, 235, 50, 74, 97, 30, 51, 222, 68, 116, 161, 124, 126, 126, - 188, 114, 97, 226, 100, 254, 196, 200, 129, 217, 87, 71, 203, 178, 50, 197, 33, 242, 9, 154, - 42, 185, 44, 86, 205, 152, 45, 65, 135, 211, 165, 123, 227, 125, 122, 123, 211, 142, 112, 77, - 188, 199, 230, 140, 118, 82, 66, 58, 57, 229, 25, 70, 121, 140, 17, 102, 18, 80, 6, 104, - 165, 180, 10, 35, 29, 121, 82, 69, 69, 165, 213, 52, 131, 113, 193, 98, 177, 139, 165, 160, - 82, 250, 206, 248, 163, 217, 187, 119, 143, 125, 121, 71, 103, 234, 22, 95, 250, 250, 204, 92, - 110, 240, 249, 161, 177, 175, 127, 229, 71, 103, 159, 5, 48, 217, 56, 254, 8, 128, 196, 61, - 253, 169, 235, 62, 117, 219, 218, 135, 118, 245, 164, 118, 183, 38, 44, 84, 252, 8, 175, 13, - 231, 39, 62, 251, 248, 224, 231, 207, 22, 194, 103, 26, 32, 92, 98, 9, 36, 193, 211, 206, - 215, 118, 63, 249, 189, 247, 101, 222, 127, 135, 197, 236, 75, 85, 215, 10, 165, 176, 128, 41, - 239, 130, 58, 85, 60, 49, 247, 250, 220, 193, 211, 79, 79, 60, 117, 162, 40, 23, 78, 1, - 184, 208, 120, 97, 177, 133, 181, 123, 27, 227, 155, 195, 38, 43, 19, 109, 78, 237, 192, 214, - 244, 14, 210, 238, 118, 154, 38, 227, 201, 72, 121, 189, 10, 225, 38, 78, 69, 175, 201, 173, - 140, 193, 140, 56, 103, 194, 97, 132, 26, 132, 128, 234, 37, 4, 34, 169, 100, 61, 148, 65, - 197, 151, 245, 98, 32, 131, 41, 2, 114, 214, 98, 241, 179, 245, 40, 44, 60, 57, 249, 213, - 206, 95, 188, 117, 238, 177, 93, 221, 233, 117, 154, 68, 152, 42, 45, 202, 193, 169, 185, 195, - 143, 31, 27, 254, 139, 239, 188, 53, 251, 106, 227, 127, 4, 0, 12, 70, 72, 215, 151, 31, - 220, 252, 111, 239, 220, 148, 253, 213, 158, 38, 155, 149, 253, 8, 47, 15, 229, 134, 127, 237, - 127, 12, 62, 84, 12, 213, 115, 0, 230, 87, 6, 71, 230, 171, 186, 222, 28, 223, 145, 111, - 183, 187, 62, 146, 52, 82, 116, 57, 234, 3, 64, 174, 62, 139, 199, 70, 254, 122, 241, 143, - 7, 190, 240, 194, 55, 199, 254, 234, 155, 3, 139, 39, 30, 175, 235, 250, 243, 0, 142, 3, - 24, 1, 48, 119, 127, 219, 71, 74, 15, 174, 255, 68, 253, 166, 182, 61, 254, 135, 123, 30, - 144, 187, 91, 111, 87, 107, 226, 125, 204, 100, 194, 245, 101, 185, 39, 210, 193, 118, 131, 89, - 27, 28, 35, 214, 97, 11, 39, 107, 25, 102, 147, 41, 120, 202, 16, 52, 193, 5, 137, 9, - 206, 98, 130, 49, 135, 83, 102, 115, 42, 76, 74, 184, 73, 64, 172, 72, 69, 102, 164, 3, - 229, 240, 88, 169, 199, 238, 159, 59, 82, 60, 52, 210, 158, 142, 30, 200, 198, 77, 218, 20, - 19, 180, 187, 201, 238, 222, 214, 153, 184, 103, 99, 214, 202, 252, 240, 236, 252, 140, 6, 202, - 0, 234, 26, 40, 126, 239, 205, 220, 235, 27, 178, 86, 53, 237, 26, 123, 82, 142, 193, 146, - 182, 209, 212, 149, 50, 218, 247, 159, 206, 159, 94, 225, 10, 111, 31, 131, 250, 229, 220, 179, - 211, 119, 182, 222, 179, 53, 107, 183, 246, 155, 204, 124, 27, 0, 137, 8, 23, 171, 35, 229, - 71, 47, 126, 237, 91, 0, 190, 11, 224, 52, 128, 124, 195, 236, 162, 223, 221, 242, 5, 245, - 43, 91, 62, 173, 183, 55, 239, 208, 59, 179, 187, 72, 139, 221, 70, 12, 106, 242, 72, 135, - 118, 41, 200, 183, 251, 178, 178, 77, 48, 99, 131, 43, 98, 29, 182, 176, 51, 166, 201, 155, - 12, 131, 36, 133, 33, 99, 220, 140, 28, 110, 72, 139, 113, 101, 49, 174, 77, 70, 169, 73, - 41, 53, 40, 225, 156, 130, 81, 13, 205, 67, 21, 82, 165, 101, 45, 109, 102, 138, 133, 133, - 196, 133, 192, 61, 186, 169, 61, 105, 108, 50, 5, 96, 8, 32, 155, 16, 98, 77, 198, 190, - 238, 214, 245, 201, 221, 126, 16, 148, 206, 204, 121, 243, 141, 58, 161, 186, 255, 84, 126, 160, - 55, 109, 78, 143, 229, 107, 116, 108, 190, 86, 138, 89, 220, 201, 151, 188, 225, 177, 98, 48, - 210, 136, 31, 122, 101, 30, 32, 133, 50, 78, 173, 75, 108, 122, 176, 201, 204, 216, 203, 129, - 208, 96, 2, 77, 118, 202, 181, 96, 249, 175, 23, 14, 157, 0, 48, 211, 48, 53, 13, 64, - 63, 190, 247, 25, 146, 182, 147, 112, 77, 11, 148, 18, 162, 149, 102, 82, 73, 163, 18, 21, - 147, 229, 168, 176, 129, 16, 108, 182, 133, 219, 229, 24, 118, 214, 52, 120, 147, 97, 232, 132, - 176, 2, 151, 91, 158, 201, 141, 154, 65, 13, 79, 48, 225, 115, 202, 35, 65, 169, 230, 148, - 80, 70, 64, 25, 1, 3, 64, 160, 180, 212, 145, 14, 2, 70, 217, 66, 187, 211, 181, 248, - 198, 194, 193, 233, 158, 140, 255, 177, 148, 195, 9, 161, 18, 148, 42, 196, 45, 138, 206, 180, - 145, 233, 111, 143, 223, 153, 113, 152, 121, 112, 100, 113, 10, 64, 9, 64, 245, 249, 161, 194, - 91, 251, 6, 115, 7, 246, 13, 230, 158, 255, 246, 201, 185, 167, 199, 138, 193, 217, 134, 11, - 4, 171, 1, 208, 111, 149, 79, 44, 110, 75, 236, 170, 180, 216, 109, 31, 138, 27, 9, 66, - 64, 64, 136, 70, 76, 216, 200, 218, 205, 107, 74, 222, 162, 119, 166, 124, 106, 164, 113, 174, - 70, 199, 238, 27, 37, 113, 211, 5, 97, 18, 96, 18, 0, 161, 82, 129, 133, 50, 180, 74, - 97, 161, 213, 151, 181, 205, 6, 51, 215, 58, 134, 219, 98, 26, 70, 218, 48, 117, 146, 91, - 190, 203, 172, 170, 201, 173, 146, 96, 214, 34, 163, 102, 137, 81, 81, 163, 148, 135, 140, 80, - 77, 9, 161, 140, 104, 70, 160, 41, 129, 166, 82, 41, 29, 69, 42, 12, 21, 212, 66, 140, - 39, 22, 230, 10, 198, 164, 103, 31, 233, 181, 132, 222, 226, 152, 132, 48, 166, 65, 136, 130, - 193, 9, 50, 49, 211, 232, 203, 184, 55, 246, 183, 216, 189, 207, 159, 201, 95, 84, 26, 11, - 13, 107, 40, 54, 204, 126, 166, 97, 189, 254, 202, 12, 113, 101, 38, 168, 94, 156, 219, 127, - 110, 79, 230, 142, 77, 205, 86, 75, 191, 197, 44, 128, 72, 80, 170, 145, 176, 226, 172, 51, - 214, 190, 121, 114, 241, 98, 126, 204, 27, 27, 7, 80, 217, 145, 186, 94, 245, 36, 187, 97, - 26, 4, 132, 42, 2, 77, 169, 148, 154, 215, 35, 207, 41, 5, 249, 110, 13, 181, 201, 226, - 78, 135, 45, 172, 102, 195, 160, 73, 97, 70, 49, 110, 213, 76, 102, 23, 57, 179, 10, 148, - 154, 121, 74, 141, 34, 161, 188, 74, 8, 11, 9, 161, 154, 64, 51, 2, 205, 9, 20, 215, - 90, 17, 169, 148, 14, 66, 21, 214, 165, 10, 23, 13, 102, 206, 117, 196, 186, 75, 143, 30, - 25, 58, 48, 21, 156, 201, 217, 134, 222, 153, 176, 169, 99, 8, 13, 66, 52, 24, 37, 72, - 58, 6, 233, 106, 114, 214, 239, 234, 138, 111, 63, 54, 154, 159, 44, 250, 106, 126, 217, 93, - 87, 93, 174, 92, 49, 21, 134, 134, 10, 38, 203, 23, 143, 110, 73, 109, 223, 219, 108, 53, - 103, 13, 198, 0, 162, 192, 25, 65, 218, 74, 154, 61, 137, 206, 237, 227, 197, 177, 92, 222, - 47, 78, 154, 48, 106, 140, 17, 213, 158, 200, 194, 20, 6, 209, 138, 18, 41, 193, 107, 97, - 37, 94, 141, 22, 123, 41, 161, 235, 108, 238, 100, 77, 195, 72, 11, 3, 9, 110, 250, 22, - 179, 202, 130, 91, 11, 140, 154, 243, 132, 138, 121, 80, 94, 4, 161, 181, 165, 180, 25, 140, - 64, 11, 162, 149, 1, 45, 133, 210, 146, 69, 82, 194, 143, 100, 88, 11, 85, 176, 200, 169, - 152, 78, 155, 153, 197, 182, 120, 91, 121, 255, 233, 225, 55, 95, 186, 112, 250, 96, 54, 129, - 141, 9, 155, 117, 57, 6, 3, 33, 0, 33, 4, 174, 201, 208, 145, 178, 219, 182, 116, 196, - 119, 189, 49, 146, 159, 90, 168, 171, 217, 6, 8, 234, 189, 106, 1, 0, 208, 83, 254, 120, - 197, 212, 214, 241, 78, 183, 235, 195, 105, 43, 21, 227, 140, 128, 16, 9, 193, 41, 50, 78, - 218, 233, 75, 246, 94, 119, 177, 116, 177, 48, 180, 112, 110, 186, 20, 46, 212, 52, 145, 170, - 59, 209, 13, 174, 45, 170, 36, 17, 181, 176, 26, 247, 100, 165, 135, 17, 214, 107, 113, 187, - 217, 20, 60, 41, 12, 229, 50, 211, 55, 153, 89, 225, 204, 90, 32, 212, 200, 19, 194, 22, - 64, 88, 101, 169, 178, 36, 4, 208, 38, 180, 180, 181, 150, 182, 86, 145, 161, 148, 228, 161, - 148, 218, 11, 101, 88, 9, 85, 176, 192, 168, 152, 140, 25, 241, 98, 214, 205, 250, 25, 55, - 229, 157, 154, 157, 157, 122, 228, 240, 232, 75, 237, 77, 129, 147, 180, 249, 142, 132, 37, 40, - 37, 75, 9, 129, 45, 24, 90, 18, 102, 211, 246, 206, 196, 174, 129, 177, 252, 116, 174, 38, - 103, 86, 6, 190, 119, 3, 0, 0, 212, 201, 197, 35, 185, 20, 75, 191, 213, 98, 183, 252, - 92, 218, 74, 90, 140, 45, 213, 3, 6, 103, 200, 56, 105, 119, 99, 122, 205, 77, 211, 181, - 137, 234, 241, 220, 192, 116, 161, 62, 95, 205, 216, 25, 149, 49, 91, 9, 131, 201, 235, 81, - 45, 230, 201, 74, 23, 165, 188, 203, 228, 86, 218, 224, 60, 206, 133, 118, 152, 17, 24, 204, - 168, 50, 42, 74, 148, 240, 69, 80, 86, 1, 136, 191, 244, 143, 181, 1, 173, 28, 232, 40, - 14, 21, 186, 90, 71, 150, 148, 33, 243, 101, 132, 106, 32, 131, 114, 164, 130, 121, 78, 197, - 69, 71, 36, 22, 44, 97, 4, 109, 137, 140, 76, 88, 110, 84, 245, 253, 197, 239, 28, 155, - 61, 156, 136, 87, 42, 41, 135, 239, 78, 58, 130, 179, 198, 49, 110, 9, 134, 108, 220, 74, - 246, 181, 196, 182, 29, 58, 155, 187, 88, 10, 244, 76, 195, 18, 244, 123, 1, 0, 0, 242, - 245, 194, 193, 137, 22, 179, 245, 124, 218, 74, 237, 77, 89, 9, 139, 93, 98, 9, 41, 171, - 47, 213, 253, 126, 66, 164, 241, 210, 196, 193, 169, 197, 250, 98, 37, 109, 55, 171, 102, 209, - 194, 164, 146, 118, 93, 86, 219, 9, 104, 167, 193, 204, 148, 224, 60, 198, 56, 108, 198, 35, - 131, 138, 58, 35, 194, 35, 148, 213, 9, 72, 184, 84, 102, 107, 19, 90, 199, 128, 40, 1, - 29, 38, 181, 10, 99, 74, 134, 86, 40, 67, 94, 15, 165, 170, 248, 145, 95, 12, 165, 63, - 99, 80, 115, 204, 21, 137, 5, 206, 89, 104, 10, 166, 58, 18, 109, 42, 193, 211, 10, 138, - 122, 79, 30, 29, 27, 48, 236, 194, 100, 54, 110, 222, 153, 180, 13, 193, 232, 18, 8, 166, - 160, 200, 198, 204, 244, 154, 102, 103, 227, 190, 193, 185, 17, 253, 206, 125, 129, 126, 47, 0, - 52, 128, 232, 208, 252, 43, 23, 146, 60, 121, 186, 217, 74, 223, 149, 52, 99, 142, 96, 20, - 32, 10, 130, 18, 52, 59, 73, 177, 54, 213, 121, 67, 103, 60, 179, 246, 153, 209, 31, 78, - 45, 134, 139, 213, 54, 187, 43, 76, 138, 148, 8, 164, 151, 6, 84, 155, 96, 70, 82, 48, - 225, 114, 70, 44, 202, 148, 32, 76, 50, 74, 35, 10, 170, 200, 82, 194, 101, 64, 43, 23, - 90, 38, 161, 194, 180, 86, 65, 82, 203, 32, 38, 101, 96, 5, 81, 72, 171, 65, 20, 149, - 252, 168, 94, 136, 84, 120, 209, 98, 177, 11, 174, 17, 47, 114, 198, 66, 202, 180, 230, 148, - 235, 110, 167, 15, 113, 222, 164, 115, 94, 206, 255, 211, 35, 47, 156, 237, 73, 25, 83, 217, - 184, 185, 55, 237, 8, 78, 9, 5, 1, 96, 25, 12, 217, 152, 145, 237, 72, 136, 214, 231, - 206, 20, 206, 53, 10, 163, 112, 245, 49, 120, 53, 9, 95, 207, 191, 54, 174, 165, 62, 150, - 181, 155, 63, 144, 48, 221, 148, 201, 25, 8, 85, 160, 84, 35, 105, 185, 164, 59, 209, 210, - 183, 189, 165, 239, 150, 177, 210, 136, 63, 152, 59, 87, 232, 113, 215, 212, 109, 110, 155, 82, - 71, 45, 140, 136, 164, 160, 194, 97, 148, 153, 148, 17, 65, 8, 24, 8, 8, 33, 148, 52, - 204, 158, 104, 153, 128, 14, 83, 90, 5, 41, 173, 252, 132, 148, 190, 19, 200, 64, 120, 97, - 136, 178, 31, 6, 197, 122, 228, 205, 105, 141, 225, 152, 72, 141, 57, 34, 86, 97, 140, 68, - 148, 106, 5, 77, 1, 197, 209, 102, 245, 224, 66, 105, 68, 191, 52, 247, 92, 240, 194, 217, - 194, 185, 45, 109, 78, 37, 19, 51, 239, 76, 218, 130, 18, 66, 64, 0, 56, 38, 71, 115, - 204, 232, 134, 146, 228, 141, 241, 242, 249, 198, 93, 162, 124, 55, 0, 86, 146, 24, 209, 64, - 113, 96, 106, 162, 52, 241, 74, 187, 219, 186, 37, 102, 216, 221, 142, 97, 46, 129, 64, 20, - 28, 67, 160, 45, 222, 148, 92, 151, 110, 191, 109, 166, 62, 102, 159, 206, 77, 140, 174, 79, - 246, 87, 64, 116, 156, 0, 105, 70, 133, 197, 8, 55, 8, 97, 156, 128, 82, 16, 74, 161, - 4, 209, 202, 132, 150, 46, 116, 152, 208, 202, 79, 42, 229, 39, 164, 12, 220, 80, 250, 166, - 23, 6, 180, 18, 68, 178, 88, 15, 189, 124, 32, 235, 23, 5, 181, 134, 18, 70, 211, 172, - 201, 44, 143, 49, 42, 65, 160, 161, 40, 180, 226, 128, 162, 248, 249, 31, 222, 182, 108, 210, - 193, 51, 167, 230, 79, 221, 212, 155, 72, 180, 196, 205, 27, 93, 147, 97, 41, 159, 1, 226, - 150, 32, 105, 71, 172, 59, 62, 58, 63, 59, 91, 149, 163, 0, 42, 0, 244, 101, 0, 216, - 212, 49, 35, 29, 185, 0, 28, 0, 70, 227, 114, 52, 28, 175, 141, 207, 237, 31, 127, 246, - 197, 117, 241, 94, 43, 38, 172, 157, 174, 97, 81, 206, 8, 64, 36, 4, 35, 72, 152, 54, - 171, 69, 213, 174, 167, 134, 94, 25, 93, 27, 95, 63, 218, 108, 53, 41, 169, 101, 130, 18, - 234, 80, 48, 65, 193, 40, 192, 40, 52, 7, 148, 128, 142, 44, 173, 35, 91, 169, 192, 149, - 42, 116, 163, 200, 119, 130, 40, 48, 234, 81, 64, 43, 65, 40, 139, 245, 208, 47, 120, 81, - 109, 86, 105, 117, 206, 229, 201, 225, 152, 145, 94, 224, 140, 7, 148, 80, 69, 64, 180, 214, - 12, 144, 12, 237, 143, 153, 171, 35, 123, 240, 234, 80, 254, 196, 158, 245, 233, 27, 91, 19, - 102, 175, 193, 151, 178, 90, 70, 9, 18, 182, 97, 164, 93, 209, 185, 111, 48, 119, 182, 81, - 73, 250, 151, 0, 96, 51, 135, 253, 217, 205, 127, 243, 165, 143, 175, 251, 228, 195, 255, 188, - 239, 19, 191, 116, 95, 207, 253, 247, 45, 212, 242, 11, 163, 181, 209, 18, 128, 106, 168, 163, - 226, 254, 137, 23, 14, 199, 153, 59, 106, 113, 99, 187, 107, 152, 73, 75, 112, 16, 162, 192, - 152, 134, 201, 168, 115, 174, 116, 46, 152, 45, 213, 222, 220, 148, 218, 50, 71, 136, 230, 74, - 75, 135, 128, 112, 2, 70, 160, 41, 180, 102, 90, 43, 174, 116, 36, 164, 138, 140, 80, 133, - 102, 24, 5, 134, 47, 67, 238, 133, 1, 41, 7, 161, 92, 108, 40, 63, 23, 170, 96, 212, - 160, 206, 233, 164, 145, 153, 182, 152, 235, 9, 202, 35, 16, 162, 161, 9, 160, 232, 149, 148, - 39, 0, 80, 139, 180, 111, 18, 125, 186, 47, 27, 251, 39, 45, 9, 203, 94, 46, 240, 76, - 65, 17, 51, 121, 115, 169, 234, 133, 3, 83, 213, 51, 0, 242, 151, 0, 16, 233, 144, 36, - 88, 106, 248, 186, 204, 245, 191, 182, 189, 121, 235, 198, 142, 88, 251, 218, 53, 137, 158, 59, - 138, 181, 66, 105, 184, 58, 60, 211, 48, 155, 202, 107, 115, 71, 135, 142, 79, 15, 190, 212, - 234, 54, 37, 77, 206, 55, 218, 66, 48, 193, 8, 108, 33, 96, 27, 172, 229, 59, 103, 14, - 140, 180, 88, 29, 195, 29, 110, 103, 73, 234, 136, 74, 29, 25, 26, 32, 208, 68, 105, 77, - 34, 173, 72, 168, 36, 13, 100, 72, 125, 25, 81, 47, 138, 80, 13, 67, 93, 14, 162, 176, - 88, 15, 253, 188, 23, 86, 231, 2, 233, 95, 96, 196, 56, 149, 20, 153, 11, 174, 72, 149, - 56, 17, 97, 164, 165, 42, 5, 69, 61, 239, 229, 112, 44, 119, 4, 79, 142, 63, 186, 154, - 135, 100, 0, 172, 127, 115, 107, 215, 166, 187, 183, 182, 124, 50, 19, 51, 118, 101, 227, 166, - 177, 164, 127, 35, 30, 24, 156, 88, 130, 181, 63, 126, 116, 230, 28, 128, 209, 203, 92, 224, - 228, 226, 209, 114, 143, 221, 51, 156, 181, 51, 247, 102, 157, 140, 209, 226, 54, 187, 235, 82, - 189, 55, 27, 16, 234, 196, 194, 201, 169, 6, 8, 181, 249, 96, 33, 247, 189, 177, 23, 95, - 213, 145, 60, 37, 24, 235, 53, 25, 109, 117, 77, 131, 52, 217, 174, 101, 152, 65, 203, 179, - 195, 199, 134, 122, 98, 125, 227, 77, 102, 243, 162, 210, 81, 20, 169, 0, 82, 71, 74, 41, - 21, 72, 169, 124, 41, 165, 23, 73, 89, 11, 35, 89, 9, 162, 112, 209, 143, 252, 133, 122, - 88, 207, 215, 163, 218, 116, 164, 194, 17, 78, 205, 83, 9, 209, 60, 98, 243, 120, 209, 147, - 94, 48, 89, 189, 168, 78, 228, 143, 232, 163, 185, 215, 201, 223, 141, 60, 74, 30, 126, 235, - 63, 44, 83, 116, 2, 128, 251, 241, 27, 90, 251, 254, 221, 222, 181, 15, 126, 250, 182, 222, - 207, 223, 181, 57, 251, 240, 214, 142, 196, 205, 29, 105, 199, 96, 132, 92, 114, 251, 199, 24, - 129, 45, 152, 67, 116, 164, 14, 143, 149, 78, 146, 171, 16, 34, 206, 239, 109, 255, 252, 199, - 62, 216, 179, 247, 79, 251, 146, 61, 182, 38, 33, 198, 42, 35, 209, 129, 201, 3, 79, 255, - 151, 99, 127, 244, 149, 170, 170, 45, 95, 54, 42, 0, 54, 5, 233, 250, 204, 174, 143, 221, - 183, 167, 107, 219, 175, 172, 111, 110, 91, 239, 75, 79, 63, 59, 242, 198, 15, 143, 142, 248, - 95, 250, 167, 107, 63, 58, 212, 27, 239, 53, 35, 93, 239, 84, 136, 186, 8, 72, 11, 163, - 44, 65, 9, 181, 8, 40, 215, 208, 74, 107, 21, 74, 45, 171, 74, 171, 60, 1, 157, 50, - 168, 51, 238, 242, 228, 12, 64, 203, 3, 249, 19, 234, 240, 220, 171, 116, 120, 241, 44, 157, - 171, 207, 208, 153, 112, 84, 100, 82, 101, 247, 222, 29, 173, 107, 54, 182, 198, 250, 83, 142, - 216, 217, 228, 24, 55, 52, 199, 140, 205, 77, 174, 97, 196, 45, 14, 131, 211, 198, 126, 175, - 38, 151, 9, 148, 214, 56, 63, 87, 209, 95, 121, 113, 248, 149, 63, 59, 56, 245, 48, 121, - 23, 86, 40, 254, 187, 219, 63, 247, 145, 187, 123, 238, 250, 226, 186, 84, 79, 92, 48, 130, - 130, 63, 135, 183, 10, 111, 93, 120, 110, 252, 197, 175, 254, 229, 208, 163, 79, 3, 184, 216, - 200, 174, 0, 32, 198, 8, 237, 253, 237, 235, 126, 241, 222, 27, 59, 55, 60, 152, 176, 204, - 254, 243, 133, 201, 3, 47, 158, 46, 126, 241, 158, 174, 7, 206, 108, 111, 222, 161, 24, 69, - 60, 84, 245, 166, 72, 133, 41, 64, 185, 26, 90, 0, 68, 17, 144, 58, 37, 172, 36, 168, - 85, 48, 153, 83, 224, 48, 203, 51, 222, 108, 56, 226, 126, 233, 198, 190, 246, 252, 103, 24, - 139, 146, 148, 74, 195, 224, 42, 110, 25, 186, 201, 52, 16, 115, 13, 102, 218, 6, 131, 37, - 216, 18, 47, 73, 201, 21, 88, 30, 114, 73, 106, 163, 1, 204, 44, 214, 241, 141, 67, 99, - 23, 255, 243, 247, 71, 190, 14, 224, 111, 200, 123, 112, 6, 177, 223, 234, 255, 205, 123, 238, - 233, 221, 251, 71, 155, 154, 251, 186, 226, 166, 133, 64, 85, 49, 93, 155, 82, 111, 21, 78, - 29, 249, 193, 232, 75, 95, 123, 108, 228, 153, 3, 141, 114, 211, 3, 64, 40, 152, 155, 97, - 173, 157, 119, 173, 219, 112, 211, 29, 107, 55, 223, 43, 24, 105, 30, 206, 151, 191, 110, 84, - 119, 190, 180, 167, 237, 182, 106, 214, 206, 16, 66, 180, 33, 181, 52, 180, 86, 20, 128, 38, - 132, 70, 148, 240, 64, 107, 4, 243, 94, 94, 254, 168, 248, 116, 122, 243, 230, 227, 191, 177, - 169, 141, 127, 186, 167, 217, 182, 4, 95, 162, 201, 150, 40, 180, 168, 65, 184, 144, 171, 180, - 15, 144, 85, 249, 28, 121, 91, 253, 249, 114, 128, 125, 39, 167, 230, 127, 243, 127, 158, 126, - 66, 3, 143, 0, 56, 249, 94, 228, 40, 5, 224, 222, 213, 114, 219, 206, 127, 181, 237, 227, - 127, 184, 45, 179, 113, 79, 75, 44, 5, 70, 21, 106, 178, 140, 217, 218, 140, 60, 95, 28, - 62, 126, 100, 118, 240, 137, 175, 14, 60, 249, 66, 85, 5, 147, 0, 170, 130, 24, 170, 223, - 222, 102, 134, 42, 76, 114, 129, 236, 3, 219, 54, 110, 171, 132, 178, 78, 117, 243, 249, 181, - 226, 166, 241, 181, 177, 254, 64, 80, 65, 148, 86, 196, 151, 30, 93, 12, 22, 233, 120, 249, - 130, 73, 211, 39, 55, 108, 232, 172, 220, 223, 213, 68, 255, 89, 79, 147, 221, 154, 118, 25, - 40, 147, 151, 115, 16, 80, 13, 197, 174, 164, 252, 229, 215, 255, 74, 3, 115, 101, 31, 223, - 31, 152, 206, 253, 246, 19, 103, 158, 10, 149, 254, 91, 0, 199, 0, 148, 126, 28, 122, 156, - 2, 48, 13, 34, 186, 126, 239, 134, 207, 254, 235, 221, 29, 215, 253, 250, 218, 84, 71, 34, - 110, 26, 0, 141, 224, 203, 42, 22, 252, 2, 38, 171, 211, 185, 137, 242, 244, 43, 195, 197, - 139, 47, 63, 50, 240, 236, 143, 38, 235, 139, 51, 91, 157, 157, 53, 87, 196, 148, 193, 12, - 106, 115, 155, 197, 44, 155, 180, 103, 73, 218, 53, 101, 75, 139, 75, 214, 39, 28, 178, 185, - 201, 229, 125, 148, 70, 109, 166, 208, 125, 173, 9, 171, 53, 27, 23, 36, 229, 50, 112, 166, - 174, 78, 179, 175, 242, 235, 119, 118, 250, 242, 239, 67, 165, 49, 81, 240, 240, 212, 137, 169, - 139, 255, 113, 223, 185, 125, 74, 227, 73, 0, 39, 26, 183, 70, 242, 39, 233, 15, 224, 0, - 82, 119, 183, 223, 114, 227, 47, 109, 185, 239, 119, 182, 100, 214, 222, 214, 22, 79, 179, 165, - 90, 60, 130, 34, 1, 234, 178, 138, 114, 88, 66, 222, 43, 84, 103, 107, 243, 167, 138, 126, - 105, 112, 170, 60, 63, 120, 42, 55, 53, 52, 56, 157, 155, 214, 145, 89, 113, 184, 19, 26, - 92, 104, 169, 34, 179, 18, 86, 83, 125, 237, 216, 178, 165, 45, 254, 190, 76, 204, 216, 154, - 180, 121, 175, 107, 177, 236, 77, 107, 50, 137, 206, 180, 117, 89, 15, 193, 82, 233, 124, 53, - 222, 243, 82, 32, 52, 128, 146, 23, 225, 204, 76, 57, 124, 244, 240, 248, 155, 127, 126, 112, - 106, 31, 128, 253, 141, 123, 205, 202, 114, 42, 252, 147, 116, 136, 44, 159, 181, 22, 128, 182, - 127, 185, 241, 254, 15, 126, 168, 111, 247, 167, 54, 54, 119, 237, 108, 137, 37, 168, 99, 176, - 70, 175, 192, 18, 13, 30, 193, 135, 47, 61, 212, 101, 13, 190, 242, 116, 45, 170, 5, 94, - 228, 149, 66, 229, 87, 34, 29, 148, 36, 66, 127, 233, 198, 73, 58, 148, 42, 215, 228, 72, - 198, 44, 26, 183, 13, 240, 76, 92, 144, 184, 77, 47, 99, 163, 222, 49, 127, 92, 213, 5, - 52, 52, 188, 64, 98, 170, 88, 215, 7, 207, 207, 207, 125, 233, 249, 243, 7, 78, 229, 130, - 253, 0, 14, 173, 8, 218, 234, 239, 211, 35, 180, 108, 13, 14, 1, 233, 252, 100, 255, 189, - 119, 221, 218, 179, 243, 99, 27, 51, 29, 55, 180, 197, 147, 70, 220, 18, 16, 76, 95, 78, - 163, 55, 62, 47, 247, 9, 128, 188, 163, 212, 210, 144, 141, 0, 183, 188, 94, 101, 246, 111, - 3, 160, 175, 232, 243, 74, 3, 213, 32, 194, 92, 201, 215, 199, 198, 138, 133, 167, 78, 76, - 29, 127, 226, 228, 252, 139, 0, 94, 5, 48, 180, 130, 49, 214, 63, 173, 38, 169, 229, 68, - 196, 5, 208, 118, 119, 215, 245, 215, 223, 179, 254, 134, 95, 88, 223, 212, 118, 107, 79, 186, - 169, 163, 201, 177, 136, 107, 48, 112, 174, 222, 49, 225, 85, 100, 234, 101, 13, 22, 203, 254, - 254, 182, 210, 239, 152, 254, 210, 111, 222, 185, 210, 211, 0, 180, 6, 252, 72, 161, 228, 133, - 152, 92, 240, 162, 19, 19, 197, 233, 253, 131, 179, 39, 159, 122, 171, 112, 8, 192, 17, 0, - 103, 27, 229, 175, 127, 181, 158, 129, 191, 111, 155, 220, 74, 32, 44, 0, 105, 0, 221, 31, - 221, 180, 231, 230, 221, 221, 27, 239, 232, 74, 166, 118, 118, 36, 227, 237, 105, 199, 20, 174, - 201, 96, 9, 2, 193, 213, 219, 221, 31, 132, 94, 129, 105, 126, 215, 118, 25, 137, 80, 42, - 120, 129, 68, 165, 30, 97, 182, 84, 15, 207, 205, 85, 114, 131, 19, 139, 35, 143, 188, 54, - 117, 98, 214, 147, 39, 27, 62, 62, 214, 216, 113, 255, 189, 186, 70, 126, 218, 125, 130, 180, - 145, 154, 218, 13, 48, 218, 187, 221, 100, 223, 135, 214, 111, 221, 218, 223, 210, 186, 57, 27, - 115, 214, 54, 57, 102, 75, 202, 17, 201, 132, 205, 77, 219, 32, 68, 112, 5, 206, 52, 24, - 147, 151, 208, 239, 10, 33, 164, 14, 17, 233, 0, 245, 200, 71, 217, 175, 135, 249, 170, 239, - 205, 44, 214, 23, 166, 23, 235, 179, 135, 71, 10, 163, 207, 158, 89, 56, 231, 73, 61, 2, - 96, 180, 81, 221, 21, 126, 210, 6, 170, 159, 69, 167, 232, 234, 226, 196, 108, 0, 18, 7, - 144, 2, 208, 108, 80, 154, 217, 144, 74, 181, 246, 183, 54, 183, 182, 37, 220, 166, 76, 204, - 76, 113, 170, 45, 198, 180, 208, 144, 132, 82, 77, 106, 161, 31, 46, 214, 235, 181, 66, 181, - 94, 25, 152, 92, 88, 24, 154, 175, 207, 251, 82, 231, 27, 196, 198, 124, 227, 142, 191, 216, - 80, 184, 254, 191, 219, 66, 247, 179, 106, 149, 189, 90, 67, 229, 50, 40, 188, 97, 41, 70, - 99, 136, 198, 96, 171, 186, 73, 163, 134, 98, 97, 131, 205, 9, 26, 159, 151, 239, 249, 213, - 207, 178, 137, 242, 154, 92, 147, 107, 114, 77, 174, 201, 53, 185, 38, 215, 228, 154, 252, 191, - 44, 255, 11, 186, 123, 33, 219, 12, 195, 59, 78, 0, 0, 0, 0, 73, 69, 78, 68, 174, - 66, 96, 130 - }; - }; - default_icon_64_t default_icon_64; -} - -#endif diff --git a/src/ogfx/static_resources/default_light_texture.hpp b/src/ogfx/static_resources/default_light_texture.hpp deleted file mode 100755 index 7d1d590..0000000 --- a/src/ogfx/static_resources/default_light_texture.hpp +++ /dev/null @@ -1,2784 +0,0 @@ -#ifndef __default_light_texture_HPP__ -#define __default_light_texture_HPP__ - -namespace oxres -{ - struct default_light_texture_t { - const unsigned int size = 55395; - const unsigned char data[55395] = { - 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 2, - 0, 0, 0, 2, 0, 8, 6, 0, 0, 0, 244, 120, 212, 250, 0, 0, 1, 133, 105, 67, - 67, 80, 73, 67, 67, 32, 112, 114, 111, 102, 105, 108, 101, 0, 0, 40, 145, 125, 145, 61, - 72, 195, 80, 20, 133, 79, 83, 181, 34, 85, 65, 59, 136, 56, 100, 168, 78, 22, 68, 69, - 28, 181, 10, 69, 168, 16, 106, 133, 86, 29, 76, 94, 250, 35, 52, 105, 72, 82, 92, 28, - 5, 215, 130, 131, 63, 139, 85, 7, 23, 103, 93, 29, 92, 5, 65, 240, 7, 196, 209, 201, - 73, 209, 69, 74, 188, 47, 41, 180, 136, 241, 194, 227, 125, 156, 119, 207, 225, 189, 251, 0, - 161, 86, 98, 154, 213, 54, 6, 104, 186, 109, 166, 18, 113, 49, 147, 93, 17, 67, 175, 232, - 64, 0, 125, 232, 65, 88, 102, 150, 49, 43, 73, 73, 248, 214, 215, 61, 245, 82, 221, 197, - 120, 150, 127, 223, 159, 213, 173, 230, 44, 6, 4, 68, 226, 25, 102, 152, 54, 241, 58, 241, - 212, 166, 109, 112, 222, 39, 142, 176, 162, 172, 18, 159, 19, 143, 154, 116, 65, 226, 71, 174, - 43, 30, 191, 113, 46, 184, 44, 240, 204, 136, 153, 78, 205, 17, 71, 136, 197, 66, 11, 43, - 45, 204, 138, 166, 70, 60, 73, 28, 85, 53, 157, 242, 133, 140, 199, 42, 231, 45, 206, 90, - 169, 194, 26, 247, 228, 47, 12, 231, 244, 229, 37, 174, 211, 26, 66, 2, 11, 88, 132, 4, - 17, 10, 42, 216, 64, 9, 54, 98, 180, 235, 164, 88, 72, 209, 121, 220, 199, 63, 232, 250, - 37, 114, 41, 228, 218, 0, 35, 199, 60, 202, 208, 32, 187, 126, 240, 63, 248, 61, 91, 43, - 63, 49, 238, 37, 133, 227, 64, 251, 139, 227, 124, 12, 3, 161, 93, 160, 94, 117, 156, 239, - 99, 199, 169, 159, 0, 193, 103, 224, 74, 111, 250, 203, 53, 96, 250, 147, 244, 106, 83, 139, - 30, 1, 189, 219, 192, 197, 117, 83, 83, 246, 128, 203, 29, 96, 224, 201, 144, 77, 217, 149, - 130, 180, 132, 124, 30, 120, 63, 163, 111, 202, 2, 253, 183, 64, 215, 170, 55, 183, 198, 57, - 78, 31, 128, 52, 205, 42, 121, 3, 28, 28, 2, 35, 5, 202, 94, 243, 121, 119, 103, 235, - 220, 254, 237, 105, 204, 239, 7, 238, 159, 114, 114, 98, 183, 230, 91, 0, 0, 0, 6, 98, - 75, 71, 68, 0, 13, 0, 8, 0, 2, 225, 206, 79, 90, 0, 0, 0, 9, 112, 72, 89, - 115, 0, 0, 46, 35, 0, 0, 46, 35, 1, 120, 165, 63, 118, 0, 0, 0, 7, 116, 73, - 77, 69, 7, 230, 6, 1, 18, 24, 37, 237, 136, 251, 250, 0, 0, 0, 25, 116, 69, 88, - 116, 67, 111, 109, 109, 101, 110, 116, 0, 67, 114, 101, 97, 116, 101, 100, 32, 119, 105, 116, - 104, 32, 71, 73, 77, 80, 87, 129, 14, 23, 0, 0, 32, 0, 73, 68, 65, 84, 120, 218, - 236, 189, 237, 118, 228, 56, 172, 100, 27, 212, 204, 251, 191, 241, 136, 247, 199, 233, 62, 215, - 173, 34, 16, 59, 152, 89, 46, 219, 69, 174, 213, 171, 93, 153, 74, 137, 250, 34, 2, 1, - 32, 32, 157, 113, 198, 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, - 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, - 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, - 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, - 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, - 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, - 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, - 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, - 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, - 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, - 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, - 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, 25, 103, 156, 113, 198, - 215, 29, 227, 92, 130, 51, 206, 248, 158, 99, 206, 57, 36, 105, 140, 49, 255, 253, 251, 127, - 95, 236, 197, 103, 47, 45, 20, 143, 253, 173, 254, 253, 239, 156, 254, 253, 251, 140, 51, 206, - 56, 0, 224, 140, 51, 206, 216, 52, 238, 225, 187, 60, 55, 222, 237, 9, 183, 157, 205, 177, - 202, 207, 43, 160, 112, 198, 25, 103, 28, 0, 112, 198, 25, 199, 192, 247, 6, 125, 152, 119, - 118, 62, 62, 159, 191, 225, 189, 158, 205, 113, 119, 126, 247, 31, 160, 240, 47, 72, 248, 248, - 255, 243, 132, 156, 113, 198, 1, 0, 103, 156, 241, 147, 13, 189, 251, 174, 51, 230, 171, 239, - 39, 252, 237, 59, 128, 192, 124, 28, 103, 54, 236, 192, 10, 164, 180, 160, 224, 151, 147, 61, - 160, 224, 140, 51, 14, 0, 56, 227, 140, 175, 104, 228, 63, 198, 192, 155, 247, 171, 50, 158, - 175, 190, 151, 35, 244, 194, 119, 13, 255, 108, 140, 184, 26, 35, 62, 195, 99, 148, 191, 61, - 44, 193, 25, 103, 28, 0, 112, 198, 25, 95, 209, 179, 79, 141, 249, 104, 60, 122, 10, 14, - 200, 111, 94, 241, 244, 233, 191, 159, 0, 96, 26, 80, 224, 182, 153, 9, 160, 56, 128, 224, - 140, 51, 14, 0, 56, 227, 140, 223, 109, 240, 71, 240, 46, 237, 120, 249, 137, 49, 239, 182, - 253, 157, 33, 0, 75, 217, 55, 70, 124, 5, 18, 20, 2, 4, 204, 22, 156, 39, 247, 140, - 51, 14, 0, 56, 227, 140, 87, 12, 254, 44, 188, 245, 127, 255, 126, 151, 241, 215, 194, 192, - 142, 226, 251, 238, 111, 5, 30, 123, 194, 6, 204, 134, 173, 216, 49, 228, 214, 179, 127, 128, - 5, 119, 188, 89, 1, 132, 3, 6, 206, 56, 227, 0, 128, 51, 206, 72, 61, 252, 149, 151, - 77, 140, 251, 104, 12, 237, 0, 134, 152, 48, 1, 149, 119, 61, 2, 86, 32, 9, 33, 236, - 84, 3, 208, 248, 127, 197, 14, 172, 188, 127, 183, 175, 217, 237, 235, 99, 105, 226, 1, 6, - 103, 28, 0, 112, 198, 25, 199, 232, 119, 239, 70, 197, 2, 124, 52, 138, 41, 205, 159, 26, - 246, 21, 8, 249, 180, 75, 85, 48, 10, 83, 53, 61, 191, 2, 56, 136, 186, 135, 192, 128, - 50, 7, 213, 103, 243, 35, 32, 56, 111, 195, 25, 7, 0, 156, 113, 198, 223, 97, 240, 87, - 70, 216, 213, 219, 143, 16, 32, 56, 22, 192, 1, 11, 247, 222, 118, 116, 255, 187, 223, 111, - 34, 2, 68, 1, 196, 202, 67, 167, 201, 126, 21, 240, 152, 96, 222, 147, 126, 127, 0, 193, - 25, 7, 0, 156, 113, 198, 207, 50, 248, 157, 209, 118, 180, 127, 151, 7, 224, 40, 255, 157, - 100, 63, 7, 28, 220, 123, 188, 147, 0, 152, 40, 2, 82, 16, 48, 129, 247, 79, 13, 120, - 119, 252, 9, 127, 71, 255, 125, 146, 9, 207, 56, 0, 224, 140, 51, 126, 152, 209, 151, 241, - 248, 59, 131, 47, 249, 28, 128, 1, 61, 245, 221, 146, 63, 65, 160, 48, 27, 96, 176, 251, - 222, 207, 134, 105, 32, 236, 193, 51, 44, 208, 229, 19, 36, 96, 129, 110, 187, 197, 6, 252, - 251, 239, 3, 2, 206, 56, 0, 224, 140, 51, 190, 159, 225, 39, 194, 60, 137, 247, 62, 192, - 59, 68, 192, 133, 251, 253, 59, 202, 248, 222, 169, 15, 144, 8, 255, 184, 223, 59, 22, 193, - 133, 8, 102, 1, 48, 38, 60, 214, 46, 88, 56, 97, 130, 51, 14, 0, 56, 227, 140, 47, - 104, 244, 233, 223, 79, 218, 191, 242, 250, 63, 26, 141, 43, 244, 248, 71, 97, 192, 18, 99, - 191, 91, 41, 144, 24, 251, 78, 218, 87, 102, 223, 137, 1, 36, 84, 254, 138, 33, 32, 251, - 122, 71, 252, 255, 223, 127, 187, 220, 130, 185, 2, 2, 71, 153, 240, 140, 3, 0, 206, 56, - 227, 115, 141, 126, 151, 196, 71, 254, 174, 12, 54, 253, 237, 43, 12, 1, 221, 143, 147, 12, - 166, 30, 191, 251, 183, 219, 46, 165, 255, 137, 7, 191, 2, 18, 180, 66, 224, 213, 24, 127, - 5, 16, 102, 3, 68, 90, 64, 49, 198, 184, 207, 219, 121, 198, 1, 0, 103, 156, 241, 121, - 222, 126, 151, 200, 39, 224, 233, 83, 58, 159, 102, 235, 187, 106, 0, 170, 34, 72, 141, 255, - 14, 72, 160, 140, 1, 21, 15, 154, 225, 177, 200, 247, 93, 185, 32, 145, 22, 118, 76, 2, - 78, 0, 52, 223, 221, 21, 99, 112, 24, 129, 51, 14, 0, 56, 227, 140, 247, 122, 252, 149, - 103, 238, 178, 253, 221, 51, 127, 21, 70, 111, 183, 52, 208, 85, 7, 188, 67, 247, 159, 120, - 255, 20, 28, 204, 96, 94, 180, 49, 144, 196, 21, 0, 5, 24, 130, 86, 220, 7, 28, 175, - 243, 248, 167, 188, 70, 193, 191, 223, 223, 250, 181, 164, 177, 5, 29, 7, 12, 156, 113, 0, - 192, 25, 103, 236, 27, 126, 231, 221, 175, 152, 129, 202, 251, 38, 96, 129, 120, 242, 3, 130, - 134, 29, 198, 96, 101, 196, 118, 183, 113, 158, 121, 90, 254, 183, 235, 145, 191, 34, 3, 220, - 49, 9, 93, 146, 223, 19, 16, 16, 33, 162, 119, 228, 6, 156, 196, 193, 51, 14, 0, 56, - 227, 140, 13, 131, 95, 25, 243, 202, 144, 15, 0, 12, 18, 67, 95, 133, 23, 166, 88, 158, - 64, 229, 253, 19, 128, 81, 129, 131, 174, 23, 65, 242, 78, 79, 8, 62, 200, 231, 239, 208, - 255, 119, 128, 224, 105, 184, 137, 193, 38, 32, 64, 193, 190, 38, 48, 248, 2, 224, 224, 128, - 129, 51, 14, 0, 56, 227, 12, 227, 237, 83, 99, 77, 66, 3, 207, 237, 29, 27, 224, 246, - 65, 126, 35, 192, 52, 172, 12, 121, 119, 140, 87, 58, 3, 190, 179, 43, 96, 66, 233, 203, - 120, 213, 46, 47, 64, 218, 47, 223, 251, 119, 223, 55, 4, 7, 171, 207, 73, 233, 225, 10, - 32, 84, 191, 61, 64, 224, 140, 3, 0, 206, 56, 163, 145, 228, 117, 25, 248, 9, 141, 239, - 246, 33, 3, 44, 100, 152, 128, 110, 30, 78, 53, 208, 109, 79, 64, 128, 43, 19, 236, 74, - 16, 105, 156, 191, 51, 226, 36, 254, 79, 123, 0, 12, 249, 174, 127, 59, 10, 130, 78, 130, - 216, 129, 0, 7, 6, 102, 193, 44, 76, 179, 221, 199, 92, 130, 121, 128, 192, 25, 7, 0, - 156, 241, 55, 3, 0, 98, 236, 41, 173, 255, 244, 246, 175, 198, 32, 127, 76, 254, 187, 196, - 26, 254, 144, 174, 128, 9, 35, 64, 233, 125, 210, 56, 136, 104, 7, 184, 239, 42, 163, 61, - 148, 87, 2, 188, 146, 28, 248, 46, 25, 224, 157, 140, 127, 247, 249, 211, 232, 71, 34, 66, - 106, 114, 6, 14, 16, 56, 227, 0, 128, 51, 126, 186, 193, 175, 12, 226, 138, 13, 168, 12, - 121, 82, 235, 79, 142, 167, 141, 125, 116, 199, 175, 230, 154, 202, 254, 146, 60, 1, 119, 140, - 84, 40, 168, 139, 185, 15, 99, 144, 87, 219, 59, 99, 158, 200, 254, 58, 143, 63, 253, 189, - 75, 250, 235, 140, 248, 104, 140, 185, 99, 16, 218, 57, 31, 32, 112, 198, 1, 0, 103, 252, - 52, 0, 48, 26, 79, 221, 197, 255, 95, 53, 250, 52, 87, 64, 202, 59, 1, 18, 111, 63, - 237, 250, 183, 50, 138, 180, 215, 64, 101, 232, 95, 109, 18, 148, 52, 0, 234, 126, 231, 218, - 9, 75, 60, 91, 223, 149, 238, 105, 243, 59, 146, 3, 16, 123, 248, 10, 43, 9, 14, 16, - 56, 227, 0, 128, 51, 126, 130, 225, 239, 12, 179, 75, 240, 115, 49, 247, 87, 98, 253, 59, - 9, 124, 233, 111, 198, 230, 123, 72, 132, 120, 232, 126, 119, 1, 65, 23, 142, 160, 89, 252, - 130, 12, 193, 12, 231, 66, 115, 0, 118, 66, 6, 59, 9, 128, 29, 163, 144, 128, 136, 19, - 26, 56, 227, 0, 128, 51, 190, 181, 209, 127, 122, 252, 206, 72, 83, 175, 157, 74, 1, 83, - 35, 77, 75, 1, 95, 5, 7, 164, 140, 240, 149, 174, 128, 2, 140, 65, 229, 213, 119, 185, - 3, 19, 48, 19, 59, 204, 65, 2, 12, 42, 227, 155, 214, 244, 19, 15, 156, 50, 5, 78, - 160, 136, 106, 5, 68, 160, 224, 0, 129, 51, 14, 0, 56, 227, 59, 121, 251, 212, 120, 175, - 98, 253, 59, 25, 253, 122, 225, 119, 213, 220, 186, 6, 66, 244, 189, 74, 133, 131, 42, 240, - 176, 186, 142, 14, 108, 188, 74, 253, 19, 239, 156, 24, 248, 196, 123, 215, 134, 241, 119, 134, - 157, 2, 130, 87, 254, 174, 140, 124, 199, 12, 16, 32, 112, 31, 54, 224, 140, 3, 0, 206, - 248, 234, 134, 191, 51, 250, 221, 255, 59, 47, 190, 51, 168, 3, 126, 63, 3, 16, 32, 237, - 85, 31, 164, 159, 73, 92, 13, 208, 169, 19, 118, 251, 116, 94, 126, 199, 12, 116, 37, 129, - 59, 122, 253, 187, 0, 225, 149, 166, 64, 132, 45, 88, 25, 225, 143, 231, 89, 234, 254, 67, - 47, 62, 217, 254, 227, 111, 86, 9, 137, 135, 13, 56, 227, 0, 128, 51, 190, 156, 225, 127, - 165, 188, 47, 169, 20, 32, 159, 201, 204, 107, 154, 223, 187, 114, 63, 234, 197, 15, 248, 174, - 37, 154, 0, 4, 40, 84, 251, 174, 206, 199, 85, 14, 208, 99, 209, 144, 65, 210, 240, 103, - 55, 155, 127, 7, 80, 80, 6, 97, 71, 24, 136, 84, 10, 144, 80, 193, 127, 142, 115, 128, - 192, 25, 7, 0, 156, 241, 39, 141, 127, 106, 248, 19, 138, 158, 54, 251, 121, 181, 44, 48, - 249, 206, 169, 9, 82, 22, 96, 136, 203, 243, 82, 6, 129, 202, 248, 142, 198, 155, 79, 26, - 7, 165, 198, 223, 85, 7, 8, 204, 93, 208, 131, 38, 250, 253, 82, 222, 13, 48, 241, 224, - 223, 177, 93, 7, 6, 238, 3, 2, 206, 56, 0, 224, 140, 207, 50, 250, 206, 0, 175, 12, - 253, 142, 194, 95, 10, 12, 18, 0, 224, 234, 255, 73, 153, 160, 107, 10, 212, 205, 35, 17, - 15, 34, 70, 153, 136, 7, 117, 121, 0, 148, 238, 239, 140, 180, 243, 200, 221, 54, 137, 2, - 160, 26, 15, 122, 135, 53, 216, 141, 237, 83, 239, 255, 110, 230, 114, 55, 199, 72, 180, 6, - 244, 15, 16, 184, 207, 106, 117, 198, 1, 0, 103, 252, 14, 0, 144, 212, 234, 59, 13, 254, - 87, 141, 191, 243, 218, 83, 102, 192, 177, 13, 4, 4, 80, 6, 192, 229, 35, 236, 190, 171, - 78, 173, 175, 51, 242, 180, 5, 240, 234, 152, 183, 88, 248, 192, 237, 43, 85, 5, 76, 255, - 189, 138, 229, 39, 140, 128, 211, 253, 39, 33, 132, 138, 246, 239, 206, 241, 86, 45, 76, 84, - 254, 251, 176, 2, 103, 28, 0, 112, 198, 75, 70, 127, 140, 49, 11, 227, 79, 169, 253, 202, - 3, 223, 169, 253, 175, 226, 247, 31, 101, 125, 165, 188, 87, 64, 151, 221, 79, 228, 128, 59, - 15, 219, 169, 4, 82, 192, 208, 37, 4, 118, 146, 189, 46, 137, 144, 122, 250, 175, 54, 0, - 114, 0, 224, 157, 138, 128, 206, 123, 167, 201, 124, 93, 7, 65, 146, 67, 64, 74, 2, 159, - 223, 221, 250, 181, 127, 65, 34, 56, 116, 52, 4, 206, 56, 0, 224, 140, 223, 238, 245, 83, - 32, 64, 192, 129, 107, 8, 244, 138, 110, 0, 221, 62, 221, 87, 210, 22, 216, 121, 231, 164, - 18, 192, 25, 112, 183, 29, 249, 140, 0, 4, 1, 195, 62, 160, 161, 127, 165, 233, 79, 21, - 62, 184, 205, 126, 59, 240, 64, 64, 67, 146, 83, 48, 27, 163, 63, 228, 245, 4, 72, 30, - 192, 52, 192, 226, 36, 10, 158, 113, 0, 192, 25, 145, 209, 167, 158, 184, 51, 202, 59, 224, - 129, 202, 2, 87, 96, 163, 251, 29, 237, 236, 71, 107, 246, 19, 61, 129, 149, 119, 237, 114, - 8, 40, 72, 232, 188, 253, 217, 28, 191, 154, 83, 151, 24, 216, 101, 244, 119, 64, 35, 245, - 216, 5, 65, 194, 106, 155, 85, 23, 64, 7, 30, 170, 253, 223, 170, 181, 252, 157, 92, 112, - 82, 50, 248, 204, 23, 232, 0, 129, 3, 43, 71, 86, 248, 140, 3, 0, 206, 216, 54, 254, - 31, 141, 147, 75, 188, 219, 245, 216, 119, 203, 2, 169, 72, 80, 10, 48, 164, 44, 251, 191, - 219, 190, 19, 237, 161, 217, 252, 164, 116, 175, 3, 43, 46, 121, 48, 209, 6, 88, 129, 12, - 251, 56, 137, 85, 10, 184, 237, 165, 247, 151, 1, 118, 148, 254, 0, 6, 86, 161, 103, 78, - 24, 0, 178, 175, 157, 109, 255, 115, 220, 3, 2, 206, 56, 0, 224, 140, 206, 235, 119, 244, - 253, 101, 140, 39, 77, 240, 235, 60, 115, 53, 222, 254, 84, 159, 172, 247, 110, 170, 255, 21, - 128, 224, 126, 243, 138, 135, 223, 189, 207, 21, 13, 191, 219, 46, 152, 170, 2, 146, 54, 191, - 21, 168, 72, 132, 129, 158, 6, 116, 200, 39, 231, 185, 146, 192, 103, 146, 32, 53, 188, 50, - 219, 38, 9, 133, 43, 230, 2, 39, 253, 25, 70, 225, 63, 223, 31, 32, 112, 198, 1, 0, - 103, 124, 4, 0, 164, 124, 175, 107, 217, 155, 120, 241, 157, 209, 189, 192, 254, 5, 62, 167, - 106, 125, 59, 185, 2, 43, 54, 98, 22, 191, 155, 15, 224, 52, 67, 96, 224, 60, 253, 142, - 214, 87, 96, 196, 71, 184, 189, 3, 14, 20, 0, 116, 128, 197, 25, 127, 194, 6, 116, 158, - 61, 77, 20, 148, 250, 178, 60, 247, 125, 82, 211, 239, 178, 253, 201, 177, 157, 20, 241, 17, - 17, 58, 227, 0, 128, 99, 248, 203, 236, 254, 29, 33, 159, 174, 213, 239, 101, 246, 247, 209, - 216, 92, 133, 49, 119, 21, 3, 171, 227, 76, 237, 53, 33, 234, 24, 0, 151, 55, 64, 65, - 195, 138, 201, 160, 30, 190, 123, 167, 93, 12, 191, 83, 248, 35, 6, 124, 24, 47, 60, 21, - 0, 18, 48, 230, 196, 59, 239, 140, 183, 99, 15, 146, 106, 128, 84, 83, 128, 210, 255, 238, - 187, 234, 223, 78, 75, 160, 5, 18, 7, 4, 28, 0, 112, 198, 223, 103, 248, 5, 189, 120, - 53, 6, 252, 149, 4, 192, 142, 97, 16, 96, 5, 36, 158, 127, 32, 99, 176, 157, 0, 80, - 149, 97, 159, 86, 7, 116, 255, 118, 21, 2, 14, 24, 56, 47, 154, 176, 3, 211, 128, 6, - 162, 243, 79, 183, 217, 249, 108, 197, 74, 164, 9, 134, 105, 107, 224, 87, 164, 128, 105, 147, - 32, 146, 253, 95, 25, 246, 52, 111, 224, 128, 128, 51, 14, 0, 56, 198, 255, 23, 67, 78, - 179, 252, 233, 191, 83, 153, 224, 180, 153, 144, 196, 187, 251, 9, 204, 165, 50, 252, 157, 97, - 79, 141, 253, 238, 119, 73, 71, 63, 162, 9, 144, 128, 139, 68, 15, 128, 150, 0, 62, 13, - 212, 0, 158, 123, 197, 0, 8, 48, 2, 43, 54, 33, 165, 231, 119, 0, 64, 98, 208, 119, - 188, 247, 149, 97, 39, 97, 128, 54, 249, 240, 128, 129, 3, 0, 206, 248, 97, 70, 255, 33, - 232, 147, 100, 226, 191, 3, 0, 144, 48, 64, 226, 161, 167, 141, 131, 92, 187, 223, 196, 128, - 39, 181, 255, 110, 63, 191, 75, 247, 223, 109, 71, 36, 127, 41, 0, 112, 199, 113, 94, 62, - 241, 250, 147, 109, 18, 175, 158, 196, 235, 135, 49, 232, 206, 219, 86, 240, 221, 110, 21, 0, - 9, 59, 208, 57, 30, 16, 112, 0, 192, 25, 63, 208, 235, 39, 134, 218, 37, 255, 173, 158, - 155, 39, 61, 95, 25, 124, 151, 60, 72, 53, 0, 92, 62, 0, 101, 6, 28, 243, 64, 152, - 133, 93, 6, 224, 85, 15, 63, 125, 199, 73, 2, 96, 149, 253, 31, 61, 106, 226, 173, 128, - 119, 178, 255, 213, 24, 233, 93, 207, 157, 54, 13, 34, 106, 128, 175, 148, 235, 17, 32, 81, - 197, 253, 187, 125, 221, 16, 60, 204, 3, 2, 254, 190, 241, 127, 207, 37, 248, 241, 134, 63, - 241, 212, 59, 239, 95, 6, 48, 16, 143, 186, 99, 1, 166, 50, 129, 33, 151, 233, 191, 171, - 20, 184, 2, 26, 85, 233, 225, 85, 236, 35, 105, 12, 244, 4, 82, 9, 99, 208, 133, 37, - 146, 182, 194, 174, 65, 146, 171, 209, 175, 216, 30, 183, 253, 37, 175, 208, 215, 253, 126, 197, - 72, 16, 5, 196, 234, 183, 18, 75, 84, 124, 158, 239, 78, 127, 133, 29, 16, 87, 61, 47, - 221, 113, 201, 118, 90, 188, 131, 115, 206, 255, 249, 217, 1, 2, 135, 1, 56, 227, 123, 2, - 128, 171, 1, 0, 171, 207, 47, 224, 125, 187, 239, 73, 153, 224, 115, 17, 123, 254, 127, 183, - 251, 95, 26, 26, 80, 177, 88, 174, 12, 204, 21, 120, 243, 157, 225, 30, 27, 239, 100, 98, - 72, 168, 146, 159, 107, 249, 219, 133, 8, 210, 68, 191, 46, 201, 112, 42, 19, 13, 34, 30, - 187, 163, 246, 137, 231, 92, 177, 4, 175, 148, 250, 145, 216, 253, 138, 93, 72, 62, 39, 146, - 195, 43, 134, 160, 61, 206, 1, 1, 7, 0, 156, 241, 189, 60, 127, 66, 241, 59, 32, 32, - 232, 237, 19, 64, 64, 60, 247, 157, 44, 255, 68, 16, 168, 219, 39, 201, 11, 32, 29, 0, - 43, 109, 0, 162, 34, 72, 188, 127, 10, 2, 58, 227, 237, 192, 129, 10, 166, 33, 161, 248, - 59, 195, 157, 116, 3, 124, 69, 3, 160, 51, 238, 137, 238, 191, 219, 79, 154, 228, 215, 133, - 19, 118, 19, 2, 223, 81, 13, 176, 218, 247, 233, 48, 120, 0, 192, 25, 223, 200, 240, 119, - 6, 59, 245, 212, 119, 202, 4, 59, 67, 159, 54, 243, 121, 37, 57, 80, 202, 213, 3, 137, - 71, 239, 24, 6, 186, 143, 132, 25, 160, 13, 123, 200, 239, 186, 122, 124, 210, 6, 216, 101, - 225, 75, 188, 82, 128, 254, 46, 49, 248, 212, 224, 82, 144, 81, 245, 2, 112, 158, 61, 5, - 0, 83, 172, 233, 144, 171, 251, 39, 192, 162, 149, 9, 46, 246, 127, 74, 6, 15, 0, 56, - 227, 155, 25, 127, 231, 181, 239, 148, 238, 237, 36, 17, 174, 140, 92, 210, 224, 39, 173, 18, - 160, 191, 33, 49, 100, 194, 20, 80, 239, 126, 55, 57, 144, 120, 246, 35, 220, 222, 25, 91, - 151, 52, 248, 238, 50, 192, 10, 104, 208, 250, 254, 29, 70, 160, 107, 229, 155, 52, 248, 25, - 16, 32, 172, 128, 4, 81, 253, 91, 25, 248, 103, 195, 32, 199, 68, 76, 200, 24, 88, 195, - 175, 147, 32, 120, 0, 192, 25, 95, 214, 248, 211, 108, 126, 247, 55, 49, 252, 85, 150, 127, - 103, 56, 105, 55, 191, 180, 205, 240, 206, 190, 158, 158, 108, 82, 93, 224, 0, 0, 233, 42, - 232, 64, 193, 171, 157, 1, 43, 67, 61, 228, 213, 255, 58, 237, 0, 42, 2, 68, 13, 184, - 51, 246, 196, 91, 239, 142, 157, 182, 247, 117, 113, 126, 233, 181, 58, 126, 1, 47, 158, 236, - 143, 148, 253, 117, 115, 184, 11, 224, 115, 43, 8, 41, 28, 16, 112, 0, 192, 25, 127, 222, - 248, 95, 192, 120, 87, 6, 184, 210, 221, 119, 33, 2, 178, 93, 7, 62, 104, 47, 1, 247, - 93, 199, 42, 16, 230, 128, 108, 239, 216, 134, 105, 128, 199, 12, 126, 151, 176, 3, 41, 72, - 152, 198, 232, 119, 134, 116, 71, 223, 191, 219, 134, 120, 251, 20, 64, 56, 217, 94, 65, 131, - 77, 0, 6, 5, 2, 180, 116, 48, 173, 243, 223, 234, 0, 216, 156, 11, 5, 7, 210, 209, - 12, 56, 0, 224, 140, 47, 231, 245, 127, 188, 135, 23, 240, 156, 43, 163, 124, 25, 131, 154, - 198, 255, 87, 251, 36, 255, 167, 219, 200, 176, 19, 221, 188, 119, 68, 128, 168, 199, 95, 157, - 67, 23, 34, 72, 202, 245, 94, 97, 1, 136, 214, 127, 199, 26, 184, 248, 124, 194, 14, 56, - 195, 43, 241, 198, 64, 201, 254, 18, 48, 176, 235, 245, 87, 94, 254, 43, 94, 125, 197, 24, - 124, 252, 188, 50, 240, 171, 234, 2, 23, 6, 120, 2, 41, 151, 36, 120, 64, 192, 1, 0, - 103, 252, 97, 207, 191, 3, 4, 36, 20, 64, 192, 67, 210, 221, 47, 77, 36, 116, 20, 254, - 78, 229, 0, 97, 1, 210, 216, 61, 233, 7, 64, 140, 245, 78, 30, 192, 78, 50, 96, 10, - 2, 100, 188, 126, 151, 3, 224, 24, 131, 36, 222, 223, 25, 87, 2, 2, 36, 159, 4, 72, - 90, 6, 19, 176, 144, 36, 2, 222, 102, 142, 55, 220, 87, 194, 18, 84, 0, 192, 49, 3, - 119, 1, 6, 150, 251, 56, 64, 224, 0, 128, 51, 126, 191, 231, 79, 188, 244, 149, 66, 95, - 98, 160, 43, 99, 71, 232, 252, 68, 204, 199, 109, 71, 192, 1, 49, 234, 41, 189, 95, 177, - 10, 14, 92, 36, 160, 96, 215, 171, 79, 152, 1, 87, 218, 71, 60, 122, 34, 255, 219, 1, - 139, 46, 249, 79, 192, 248, 59, 3, 159, 122, 252, 187, 134, 158, 26, 216, 132, 57, 72, 18, - 249, 86, 159, 57, 253, 0, 247, 25, 213, 24, 64, 224, 227, 0, 128, 3, 0, 206, 248, 189, - 198, 255, 233, 221, 119, 94, 190, 243, 252, 105, 146, 96, 202, 30, 36, 148, 62, 233, 45, 208, - 229, 34, 116, 199, 78, 128, 65, 229, 225, 19, 160, 176, 11, 2, 170, 185, 56, 245, 186, 110, - 27, 151, 184, 215, 1, 154, 105, 88, 3, 226, 133, 239, 116, 2, 116, 198, 189, 3, 21, 196, - 176, 119, 6, 120, 132, 44, 193, 43, 159, 17, 137, 95, 186, 253, 80, 86, 203, 255, 4, 13, - 119, 248, 59, 10, 30, 14, 8, 56, 0, 224, 140, 223, 100, 248, 59, 79, 254, 218, 240, 176, - 147, 18, 63, 5, 115, 144, 178, 126, 2, 137, 70, 0, 9, 11, 36, 251, 112, 239, 5, 205, - 23, 32, 97, 1, 26, 239, 79, 18, 1, 43, 0, 177, 179, 22, 76, 229, 153, 255, 171, 243, - 154, 0, 88, 164, 160, 96, 134, 191, 233, 12, 254, 202, 24, 118, 64, 160, 250, 206, 149, 205, - 13, 249, 120, 255, 202, 216, 223, 15, 35, 189, 195, 14, 184, 255, 147, 142, 129, 213, 220, 68, - 126, 123, 128, 192, 1, 0, 103, 188, 223, 248, 239, 80, 249, 221, 103, 14, 28, 232, 77, 172, - 0, 53, 226, 84, 59, 32, 57, 158, 84, 199, 225, 119, 170, 2, 220, 182, 43, 189, 120, 194, - 34, 184, 253, 119, 202, 130, 149, 33, 79, 219, 3, 175, 12, 165, 125, 76, 55, 189, 255, 85, - 206, 0, 85, 10, 220, 205, 242, 95, 29, 135, 150, 11, 18, 9, 96, 42, 18, 116, 47, 192, - 4, 1, 12, 36, 95, 32, 217, 199, 12, 192, 5, 1, 18, 7, 4, 28, 0, 112, 198, 27, - 141, 191, 43, 239, 235, 140, 240, 78, 251, 95, 183, 63, 65, 35, 158, 82, 253, 148, 45, 216, - 49, 252, 148, 25, 232, 142, 53, 33, 104, 72, 188, 250, 52, 214, 223, 197, 221, 59, 175, 94, - 6, 8, 169, 49, 252, 169, 244, 47, 13, 21, 184, 207, 231, 27, 255, 77, 226, 242, 68, 254, - 119, 52, 134, 218, 81, 242, 82, 78, 245, 19, 79, 220, 121, 227, 206, 227, 95, 253, 159, 148, - 2, 226, 207, 14, 8, 56, 0, 224, 140, 215, 60, 255, 167, 97, 124, 138, 241, 16, 173, 254, - 87, 227, 251, 9, 88, 120, 54, 214, 73, 53, 254, 137, 102, 64, 199, 24, 72, 175, 39, 5, - 86, 158, 188, 99, 23, 72, 141, 127, 234, 193, 119, 222, 186, 123, 191, 39, 248, 110, 167, 238, - 63, 241, 242, 159, 231, 123, 139, 37, 14, 58, 175, 156, 48, 3, 187, 73, 127, 142, 33, 160, - 9, 120, 2, 12, 129, 147, 255, 221, 233, 9, 224, 140, 55, 73, 248, 123, 222, 43, 194, 28, - 44, 231, 116, 64, 192, 1, 0, 103, 236, 121, 254, 174, 188, 47, 109, 240, 243, 74, 232, 32, - 241, 214, 147, 125, 81, 163, 125, 65, 163, 46, 48, 103, 129, 223, 127, 188, 118, 211, 28, 55, - 77, 28, 236, 52, 2, 156, 135, 255, 138, 74, 96, 7, 36, 136, 54, 192, 128, 6, 188, 99, - 21, 4, 141, 121, 194, 18, 164, 127, 87, 198, 175, 155, 207, 109, 140, 245, 80, 86, 142, 167, - 230, 187, 169, 190, 252, 206, 25, 97, 183, 45, 85, 11, 164, 108, 129, 13, 27, 28, 16, 112, - 0, 192, 25, 123, 94, 127, 103, 4, 9, 8, 112, 241, 244, 143, 222, 186, 107, 236, 67, 69, - 129, 186, 239, 95, 21, 2, 34, 140, 130, 99, 11, 104, 227, 32, 231, 217, 191, 163, 41, 80, - 250, 25, 201, 5, 112, 44, 192, 0, 251, 162, 70, 125, 24, 131, 78, 189, 124, 199, 58, 76, - 213, 146, 191, 148, 21, 216, 81, 3, 76, 21, 0, 19, 0, 240, 202, 247, 52, 116, 224, 12, - 181, 99, 11, 18, 54, 161, 77, 18, 60, 32, 224, 0, 128, 51, 50, 227, 239, 60, 239, 87, - 147, 1, 137, 33, 79, 202, 5, 211, 198, 62, 73, 57, 160, 51, 214, 105, 66, 95, 194, 28, - 208, 223, 60, 141, 110, 82, 61, 64, 222, 209, 180, 53, 112, 103, 236, 171, 121, 116, 101, 131, - 179, 49, 236, 68, 0, 136, 24, 95, 167, 0, 232, 140, 255, 211, 48, 13, 99, 32, 9, 120, - 112, 49, 255, 29, 163, 239, 60, 108, 7, 86, 118, 75, 249, 86, 199, 217, 169, 32, 112, 134, - 191, 220, 239, 1, 2, 7, 0, 156, 177, 54, 254, 206, 99, 78, 60, 254, 231, 62, 175, 192, - 107, 167, 224, 64, 234, 195, 14, 36, 134, 175, 226, 119, 4, 8, 9, 48, 3, 59, 130, 61, - 110, 63, 59, 226, 64, 68, 13, 144, 228, 7, 116, 251, 155, 102, 255, 174, 190, 159, 52, 3, - 114, 189, 4, 136, 65, 23, 240, 214, 213, 128, 15, 194, 36, 188, 210, 42, 152, 138, 248, 36, - 64, 128, 54, 241, 113, 134, 247, 89, 34, 248, 138, 33, 79, 64, 193, 13, 143, 215, 253, 125, - 84, 3, 15, 0, 56, 99, 1, 0, 222, 157, 221, 191, 179, 109, 197, 46, 56, 143, 222, 121, - 236, 228, 183, 83, 190, 44, 177, 163, 239, 41, 51, 240, 74, 71, 65, 26, 231, 39, 61, 0, - 20, 236, 247, 149, 119, 151, 182, 253, 165, 201, 130, 105, 134, 191, 243, 226, 19, 111, 127, 245, - 155, 52, 172, 144, 104, 249, 79, 241, 134, 62, 10, 61, 248, 142, 89, 184, 67, 38, 97, 39, - 129, 112, 85, 69, 80, 49, 10, 55, 220, 39, 217, 246, 128, 128, 3, 0, 206, 104, 60, 255, - 119, 254, 173, 23, 25, 131, 196, 115, 127, 85, 14, 184, 251, 29, 217, 103, 7, 4, 58, 47, - 126, 71, 23, 128, 178, 8, 142, 21, 80, 195, 44, 56, 214, 32, 141, 253, 59, 93, 0, 169, - 207, 51, 72, 12, 187, 2, 22, 192, 245, 11, 160, 137, 130, 164, 3, 32, 41, 245, 35, 128, - 131, 238, 211, 197, 219, 63, 38, 84, 222, 170, 147, 8, 19, 175, 157, 2, 6, 235, 161, 155, - 239, 105, 143, 1, 251, 247, 1, 1, 7, 0, 252, 173, 0, 224, 50, 158, 55, 141, 183, 167, - 224, 64, 242, 9, 130, 59, 189, 4, 180, 49, 95, 41, 215, 25, 160, 222, 62, 49, 252, 239, - 202, 9, 160, 219, 174, 74, 251, 70, 97, 128, 187, 164, 196, 174, 141, 239, 14, 43, 64, 20, - 0, 159, 198, 174, 19, 29, 146, 217, 95, 149, 204, 215, 1, 136, 219, 0, 139, 46, 230, 239, - 142, 147, 120, 251, 73, 187, 95, 82, 5, 208, 25, 202, 143, 30, 251, 48, 158, 123, 55, 135, - 36, 79, 160, 218, 103, 7, 32, 168, 66, 224, 114, 206, 7, 4, 28, 0, 240, 55, 123, 254, - 175, 212, 240, 143, 205, 109, 82, 111, 158, 102, 238, 211, 190, 4, 82, 158, 0, 152, 24, 121, - 103, 148, 7, 96, 3, 118, 255, 238, 142, 77, 74, 251, 104, 195, 31, 53, 236, 64, 181, 127, - 210, 238, 151, 120, 253, 149, 145, 119, 134, 92, 198, 75, 119, 191, 219, 209, 1, 32, 222, 126, - 162, 250, 215, 213, 208, 59, 70, 128, 230, 32, 16, 163, 158, 48, 5, 21, 24, 184, 205, 60, - 103, 51, 167, 167, 225, 39, 236, 193, 169, 14, 56, 0, 224, 0, 128, 208, 107, 79, 106, 250, - 63, 126, 255, 209, 147, 191, 66, 79, 157, 102, 240, 147, 125, 62, 133, 139, 156, 209, 119, 85, - 8, 149, 145, 223, 81, 7, 76, 187, 4, 18, 225, 161, 110, 187, 41, 46, 8, 36, 237, 235, - 4, 76, 99, 244, 5, 13, 127, 210, 225, 143, 210, 252, 174, 34, 224, 41, 24, 84, 25, 106, - 41, 235, 16, 216, 121, 245, 196, 192, 203, 128, 131, 87, 84, 0, 39, 96, 7, 18, 106, 95, - 27, 222, 57, 245, 224, 137, 140, 240, 93, 128, 140, 187, 58, 246, 24, 227, 62, 214, 225, 0, - 128, 191, 201, 243, 175, 140, 188, 83, 1, 116, 198, 56, 105, 216, 67, 246, 183, 243, 155, 241, - 194, 111, 94, 73, 10, 236, 230, 48, 205, 62, 186, 36, 195, 39, 128, 33, 160, 193, 37, 1, - 238, 8, 250, 164, 101, 128, 132, 238, 127, 206, 37, 213, 255, 119, 70, 222, 25, 106, 194, 16, - 16, 53, 63, 151, 43, 208, 229, 20, 144, 223, 209, 223, 58, 145, 31, 105, 47, 91, 191, 251, - 158, 80, 252, 142, 41, 136, 101, 126, 197, 43, 7, 72, 82, 224, 201, 9, 248, 228, 241, 127, - 207, 37, 248, 163, 160, 203, 209, 227, 196, 35, 127, 133, 230, 87, 192, 64, 76, 8, 44, 82, - 93, 0, 1, 143, 190, 19, 48, 114, 199, 164, 44, 71, 10, 96, 84, 220, 51, 215, 200, 104, - 42, 75, 10, 236, 190, 191, 12, 72, 88, 205, 129, 228, 29, 236, 62, 215, 85, 104, 226, 163, - 52, 180, 203, 109, 88, 25, 205, 234, 122, 204, 230, 26, 184, 28, 9, 146, 76, 57, 1, 168, - 35, 160, 107, 110, 236, 99, 181, 191, 78, 123, 129, 254, 94, 170, 203, 73, 187, 60, 141, 238, - 223, 179, 1, 145, 151, 1, 135, 93, 15, 133, 51, 14, 3, 240, 163, 188, 255, 93, 67, 158, - 72, 3, 75, 89, 137, 95, 66, 243, 95, 0, 168, 144, 227, 119, 0, 65, 202, 187, 10, 82, - 131, 189, 155, 228, 71, 61, 251, 138, 81, 232, 140, 29, 49, 244, 50, 134, 107, 202, 235, 2, - 36, 113, 125, 242, 187, 213, 49, 169, 7, 159, 48, 0, 85, 19, 30, 25, 47, 155, 132, 9, - 18, 85, 64, 234, 217, 75, 123, 180, 191, 30, 30, 179, 99, 15, 118, 191, 171, 188, 245, 157, - 236, 254, 206, 243, 79, 42, 3, 254, 253, 255, 125, 152, 128, 3, 0, 126, 162, 225, 39, 94, - 252, 142, 183, 159, 252, 93, 121, 189, 23, 244, 126, 147, 68, 189, 119, 244, 15, 144, 250, 188, - 7, 53, 219, 236, 48, 14, 23, 100, 107, 82, 90, 63, 165, 253, 199, 198, 59, 76, 132, 131, - 244, 27, 190, 23, 244, 218, 118, 90, 4, 87, 192, 97, 183, 235, 95, 215, 184, 135, 24, 109, - 137, 183, 250, 157, 98, 162, 65, 239, 8, 3, 236, 108, 147, 232, 1, 184, 166, 65, 164, 50, - 224, 105, 224, 187, 237, 254, 247, 216, 7, 0, 28, 0, 240, 19, 0, 0, 241, 208, 223, 169, - 1, 64, 1, 128, 43, 241, 219, 137, 245, 59, 134, 32, 97, 14, 168, 199, 191, 219, 37, 144, - 120, 240, 169, 215, 47, 192, 76, 164, 239, 162, 75, 46, 164, 198, 223, 213, 252, 83, 111, 126, - 101, 240, 18, 173, 127, 231, 189, 119, 177, 254, 161, 58, 91, 127, 71, 16, 104, 26, 128, 176, - 211, 246, 151, 116, 249, 147, 178, 24, 62, 101, 3, 230, 198, 246, 82, 93, 98, 152, 232, 5, - 144, 88, 63, 101, 6, 78, 3, 161, 3, 0, 126, 156, 231, 255, 241, 122, 95, 202, 98, 238, - 41, 96, 120, 110, 155, 126, 238, 140, 245, 171, 29, 255, 118, 251, 6, 184, 223, 75, 121, 41, - 160, 12, 80, 33, 30, 250, 46, 35, 224, 36, 133, 167, 153, 75, 103, 192, 87, 251, 32, 106, - 127, 228, 59, 215, 0, 200, 121, 248, 100, 123, 87, 227, 79, 183, 79, 132, 126, 42, 163, 61, - 22, 198, 50, 233, 18, 232, 12, 178, 26, 227, 154, 120, 238, 164, 179, 223, 174, 214, 127, 212, - 254, 87, 188, 98, 192, 2, 130, 3, 2, 126, 223, 56, 73, 128, 191, 31, 96, 141, 198, 120, - 116, 148, 239, 85, 128, 130, 196, 96, 118, 52, 247, 78, 183, 189, 11, 0, 134, 93, 175, 126, - 132, 115, 217, 97, 5, 200, 103, 4, 12, 236, 202, 5, 175, 190, 191, 12, 56, 39, 172, 129, - 59, 143, 89, 252, 219, 57, 3, 68, 112, 232, 41, 24, 53, 13, 51, 225, 230, 81, 29, 219, - 229, 59, 80, 208, 52, 1, 240, 90, 109, 187, 74, 188, 92, 37, 186, 237, 58, 85, 171, 196, - 56, 53, 247, 110, 232, 191, 185, 17, 29, 232, 250, 56, 231, 219, 28, 155, 204, 143, 104, 63, - 84, 128, 244, 46, 216, 163, 18, 204, 206, 57, 79, 62, 192, 97, 0, 190, 157, 247, 223, 37, - 209, 185, 242, 190, 132, 146, 127, 87, 62, 192, 187, 180, 0, 72, 201, 96, 226, 133, 87, 116, - 190, 51, 228, 151, 120, 8, 32, 97, 9, 118, 189, 124, 82, 61, 32, 245, 173, 135, 87, 134, - 112, 231, 125, 239, 178, 182, 19, 67, 149, 120, 244, 52, 129, 143, 48, 8, 157, 23, 239, 246, - 185, 83, 247, 47, 227, 121, 119, 158, 116, 37, 243, 155, 180, 249, 149, 120, 210, 221, 80, 150, - 188, 167, 5, 75, 64, 126, 227, 188, 247, 127, 255, 125, 167, 30, 127, 53, 175, 3, 2, 14, - 0, 248, 110, 198, 159, 118, 243, 171, 202, 217, 174, 208, 208, 167, 160, 96, 7, 52, 124, 52, - 174, 23, 100, 17, 8, 109, 191, 171, 6, 216, 197, 229, 47, 227, 217, 13, 224, 45, 83, 35, - 79, 188, 233, 206, 19, 30, 27, 134, 158, 228, 3, 236, 82, 255, 169, 231, 250, 153, 45, 128, - 29, 48, 72, 218, 251, 238, 0, 129, 148, 230, 119, 191, 233, 142, 81, 133, 23, 170, 126, 2, - 157, 241, 22, 53, 182, 16, 4, 124, 60, 238, 187, 128, 195, 201, 9, 56, 0, 224, 219, 26, - 254, 202, 240, 145, 82, 60, 247, 55, 45, 247, 171, 64, 69, 167, 237, 239, 178, 237, 201, 103, - 169, 49, 127, 183, 193, 119, 66, 63, 130, 96, 132, 26, 119, 218, 36, 232, 105, 156, 43, 69, - 64, 98, 224, 187, 239, 29, 136, 32, 191, 37, 212, 238, 52, 140, 194, 84, 174, 12, 232, 142, - 227, 182, 219, 145, 255, 237, 114, 9, 136, 214, 127, 82, 18, 72, 27, 5, 237, 24, 237, 221, - 246, 190, 187, 13, 134, 72, 5, 64, 98, 216, 19, 176, 241, 191, 223, 29, 32, 240, 158, 113, - 114, 0, 126, 31, 160, 170, 140, 194, 5, 60, 240, 148, 46, 167, 191, 75, 247, 87, 25, 162, - 212, 96, 147, 74, 129, 148, 41, 232, 140, 59, 61, 175, 106, 14, 93, 198, 63, 101, 4, 230, - 230, 60, 170, 24, 123, 117, 140, 203, 204, 137, 72, 15, 239, 52, 59, 18, 184, 78, 83, 191, - 10, 193, 124, 156, 51, 109, 62, 84, 177, 27, 169, 40, 79, 149, 211, 208, 221, 179, 167, 81, - 186, 12, 240, 24, 250, 53, 169, 176, 235, 108, 72, 114, 27, 102, 193, 26, 185, 107, 226, 206, - 237, 22, 23, 65, 114, 224, 79, 13, 224, 189, 13, 96, 253, 120, 109, 111, 8, 118, 207, 56, - 12, 192, 151, 244, 254, 87, 94, 62, 73, 162, 35, 172, 192, 14, 203, 208, 25, 218, 36, 140, - 32, 213, 189, 6, 28, 16, 72, 18, 246, 40, 96, 88, 137, 238, 92, 6, 140, 209, 216, 190, - 19, 246, 89, 25, 56, 106, 84, 73, 124, 127, 247, 243, 89, 204, 159, 172, 3, 68, 46, 152, - 24, 210, 29, 111, 159, 120, 229, 221, 190, 211, 112, 0, 213, 14, 216, 237, 4, 72, 59, 11, - 190, 194, 2, 144, 109, 111, 200, 32, 116, 18, 190, 212, 147, 175, 246, 215, 133, 9, 104, 69, - 192, 50, 84, 113, 88, 128, 195, 0, 124, 69, 48, 117, 137, 81, 194, 157, 215, 213, 229, 14, - 84, 122, 245, 206, 192, 59, 3, 77, 0, 128, 107, 230, 51, 141, 49, 239, 206, 79, 0, 48, - 12, 112, 190, 174, 63, 0, 5, 0, 85, 134, 247, 10, 112, 16, 128, 227, 122, 27, 184, 231, - 138, 36, 5, 94, 230, 153, 232, 22, 204, 11, 128, 136, 138, 81, 232, 152, 1, 39, 47, 91, - 1, 163, 185, 1, 100, 86, 172, 3, 145, 178, 237, 254, 254, 184, 207, 187, 241, 94, 71, 193, - 2, 172, 128, 147, 26, 128, 169, 224, 90, 117, 94, 191, 3, 155, 221, 254, 187, 207, 59, 0, - 56, 13, 251, 36, 245, 9, 168, 43, 121, 224, 178, 74, 96, 206, 57, 14, 8, 56, 12, 192, - 87, 243, 252, 47, 237, 197, 252, 169, 66, 223, 110, 43, 97, 146, 3, 240, 106, 85, 192, 43, - 221, 2, 19, 64, 144, 0, 3, 73, 145, 132, 48, 101, 16, 86, 219, 76, 229, 57, 2, 59, - 159, 169, 49, 40, 159, 242, 232, 203, 151, 158, 185, 228, 64, 199, 8, 116, 222, 57, 241, 242, - 19, 175, 94, 218, 79, 10, 116, 114, 190, 206, 251, 239, 188, 237, 149, 23, 79, 88, 129, 180, - 94, 127, 53, 103, 151, 80, 152, 196, 236, 59, 102, 34, 85, 23, 252, 101, 187, 3, 2, 14, - 3, 240, 167, 141, 255, 104, 188, 49, 42, 176, 227, 22, 241, 174, 217, 143, 196, 227, 242, 36, - 36, 49, 225, 28, 47, 173, 169, 247, 206, 235, 175, 0, 128, 139, 39, 167, 229, 132, 50, 76, - 201, 12, 246, 209, 221, 159, 10, 180, 17, 117, 64, 151, 24, 232, 188, 203, 1, 89, 2, 226, - 8, 208, 74, 129, 21, 211, 224, 186, 22, 86, 49, 241, 234, 88, 46, 161, 145, 86, 77, 76, - 195, 90, 208, 99, 19, 6, 225, 227, 191, 175, 102, 174, 79, 102, 201, 29, 239, 146, 151, 71, - 166, 13, 123, 86, 159, 15, 253, 218, 172, 73, 202, 243, 45, 72, 111, 138, 213, 119, 171, 92, - 4, 210, 127, 66, 135, 9, 56, 0, 224, 43, 48, 40, 142, 74, 239, 60, 198, 164, 1, 79, - 103, 224, 18, 169, 221, 78, 144, 168, 171, 56, 120, 26, 241, 149, 241, 191, 128, 135, 62, 160, - 215, 46, 213, 93, 239, 174, 230, 183, 93, 231, 194, 238, 248, 87, 112, 223, 220, 223, 146, 239, - 32, 184, 58, 143, 11, 128, 186, 9, 238, 51, 53, 238, 171, 99, 57, 145, 32, 39, 6, 83, - 209, 218, 67, 190, 154, 161, 3, 132, 171, 253, 116, 210, 197, 31, 159, 205, 27, 128, 172, 10, - 172, 72, 76, 173, 177, 187, 71, 14, 40, 85, 70, 217, 25, 222, 85, 114, 225, 48, 64, 194, - 9, 250, 84, 134, 150, 116, 20, 148, 246, 195, 13, 110, 191, 207, 247, 228, 6, 12, 210, 25, - 7, 0, 124, 186, 247, 95, 121, 235, 73, 243, 31, 226, 205, 95, 90, 103, 7, 211, 182, 186, - 67, 94, 51, 223, 105, 254, 39, 162, 58, 67, 62, 87, 160, 107, 85, 123, 1, 0, 38, 241, - 56, 123, 117, 223, 102, 112, 62, 83, 60, 60, 80, 25, 80, 23, 79, 119, 140, 140, 91, 252, - 213, 120, 191, 149, 1, 179, 175, 128, 214, 138, 120, 238, 90, 38, 12, 69, 149, 201, 78, 61, - 78, 151, 27, 145, 178, 34, 43, 6, 162, 58, 255, 11, 26, 102, 105, 191, 186, 161, 186, 6, - 146, 207, 248, 167, 149, 2, 29, 51, 50, 31, 134, 184, 99, 16, 38, 0, 117, 50, 115, 171, - 126, 51, 37, 141, 57, 255, 231, 227, 195, 4, 228, 15, 249, 25, 185, 241, 79, 186, 247, 237, - 0, 1, 151, 124, 231, 196, 134, 232, 241, 165, 61, 85, 65, 178, 175, 196, 64, 59, 240, 52, - 27, 239, 56, 13, 133, 76, 177, 46, 129, 93, 194, 101, 117, 190, 43, 15, 238, 146, 151, 157, - 117, 239, 162, 243, 60, 119, 122, 204, 59, 143, 53, 73, 186, 211, 139, 191, 235, 114, 0, 146, - 10, 128, 221, 248, 126, 183, 191, 84, 36, 232, 54, 219, 209, 227, 144, 56, 120, 117, 108, 36, - 170, 211, 204, 35, 105, 1, 236, 242, 3, 170, 206, 130, 183, 57, 175, 187, 217, 246, 228, 3, - 28, 6, 224, 143, 26, 255, 196, 120, 37, 34, 63, 142, 122, 173, 104, 107, 87, 99, 238, 60, - 250, 174, 65, 144, 204, 28, 82, 96, 208, 53, 59, 170, 12, 161, 99, 28, 186, 78, 128, 164, - 146, 193, 245, 78, 160, 194, 64, 238, 188, 171, 24, 190, 0, 147, 226, 158, 141, 20, 212, 59, - 218, 246, 18, 43, 3, 164, 241, 232, 89, 48, 8, 171, 88, 112, 69, 247, 59, 79, 119, 181, - 255, 138, 233, 80, 227, 161, 190, 162, 235, 223, 197, 236, 135, 234, 142, 134, 78, 78, 121, 197, - 146, 205, 230, 156, 43, 239, 255, 25, 94, 120, 210, 233, 164, 39, 128, 243, 240, 167, 126, 205, - 45, 80, 195, 232, 12, 249, 240, 17, 154, 199, 201, 7, 56, 0, 224, 179, 152, 147, 132, 182, - 87, 240, 119, 2, 34, 186, 223, 147, 56, 184, 130, 125, 170, 241, 170, 213, 48, 21, 82, 94, - 82, 232, 12, 42, 1, 30, 59, 9, 126, 238, 123, 34, 144, 148, 158, 147, 155, 15, 17, 186, - 33, 44, 192, 14, 221, 79, 18, 251, 40, 181, 221, 137, 35, 77, 3, 132, 171, 210, 62, 218, - 136, 102, 101, 144, 62, 26, 224, 75, 89, 18, 228, 8, 64, 3, 41, 131, 36, 57, 3, 85, - 66, 168, 84, 199, 209, 105, 24, 102, 136, 197, 226, 73, 56, 231, 89, 50, 217, 157, 115, 247, - 153, 83, 177, 44, 247, 115, 154, 7, 29, 0, 240, 59, 60, 255, 213, 2, 238, 50, 201, 137, - 215, 255, 46, 37, 64, 1, 35, 77, 152, 1, 183, 255, 87, 202, 250, 118, 50, 247, 95, 217, - 87, 106, 204, 165, 189, 82, 65, 26, 78, 72, 1, 136, 251, 247, 132, 199, 33, 6, 127, 71, - 52, 40, 77, 62, 220, 241, 46, 101, 60, 104, 87, 199, 78, 148, 16, 5, 128, 204, 234, 184, - 183, 88, 63, 134, 234, 60, 159, 32, 136, 48, 16, 148, 1, 25, 27, 191, 35, 251, 112, 32, - 68, 224, 60, 158, 160, 139, 128, 11, 10, 54, 143, 225, 63, 0, 224, 183, 121, 253, 43, 143, - 215, 101, 231, 39, 53, 238, 73, 86, 127, 210, 225, 143, 106, 10, 16, 177, 154, 29, 163, 159, - 48, 16, 175, 200, 3, 107, 195, 56, 175, 60, 207, 46, 65, 144, 156, 11, 5, 34, 46, 1, - 144, 24, 109, 154, 140, 248, 74, 37, 0, 245, 26, 43, 163, 233, 12, 60, 217, 103, 199, 10, - 12, 195, 22, 116, 154, 1, 68, 30, 183, 242, 172, 47, 112, 13, 118, 141, 173, 59, 118, 103, - 108, 93, 73, 99, 21, 110, 113, 185, 32, 187, 0, 142, 156, 115, 7, 46, 158, 191, 113, 45, - 144, 199, 97, 1, 14, 0, 120, 167, 247, 255, 138, 122, 159, 54, 254, 159, 24, 127, 65, 246, - 128, 120, 158, 87, 3, 28, 8, 195, 145, 50, 4, 221, 49, 146, 120, 255, 142, 71, 222, 25, - 81, 193, 57, 186, 125, 184, 239, 4, 159, 45, 183, 0, 19, 74, 62, 237, 18, 248, 164, 200, - 87, 191, 189, 128, 129, 75, 75, 19, 187, 18, 189, 149, 129, 95, 129, 142, 29, 240, 210, 213, - 231, 211, 48, 128, 2, 79, 183, 82, 23, 116, 247, 240, 134, 192, 162, 211, 220, 79, 128, 207, - 37, 38, 242, 52, 138, 125, 145, 70, 83, 174, 71, 128, 3, 120, 29, 160, 56, 227, 0, 128, - 183, 26, 127, 65, 143, 93, 129, 87, 46, 241, 44, 126, 25, 6, 161, 50, 44, 151, 97, 42, - 100, 62, 19, 244, 216, 59, 35, 239, 60, 247, 180, 154, 128, 120, 214, 218, 184, 62, 14, 136, - 80, 201, 225, 85, 83, 31, 87, 15, 79, 88, 40, 53, 139, 31, 53, 38, 82, 31, 251, 118, - 192, 207, 45, 252, 42, 60, 81, 106, 188, 86, 96, 96, 183, 164, 143, 120, 228, 196, 72, 81, - 198, 130, 36, 120, 14, 104, 96, 157, 49, 164, 108, 69, 151, 72, 39, 101, 244, 186, 235, 5, - 113, 45, 158, 5, 23, 214, 232, 158, 69, 34, 225, 252, 11, 59, 51, 255, 167, 54, 240, 180, - 16, 62, 0, 96, 219, 248, 59, 67, 91, 109, 227, 22, 251, 221, 78, 128, 73, 205, 121, 162, - 179, 47, 104, 120, 59, 69, 64, 98, 52, 210, 252, 128, 132, 41, 73, 115, 37, 156, 7, 63, - 212, 11, 220, 36, 205, 127, 158, 199, 88, 25, 29, 34, 29, 60, 13, 16, 113, 226, 70, 46, - 161, 106, 7, 148, 116, 12, 210, 4, 207, 92, 183, 152, 63, 13, 7, 77, 182, 163, 76, 136, - 211, 255, 151, 178, 88, 53, 137, 221, 39, 158, 126, 149, 213, 63, 27, 128, 149, 128, 33, 153, - 235, 69, 18, 9, 211, 90, 254, 170, 146, 228, 35, 96, 168, 194, 19, 164, 139, 99, 151, 204, - 120, 198, 1, 0, 209, 216, 245, 142, 37, 159, 249, 222, 29, 135, 50, 3, 196, 72, 119, 44, - 196, 142, 0, 81, 194, 0, 140, 205, 237, 147, 99, 167, 201, 139, 14, 200, 116, 251, 187, 140, - 113, 188, 228, 227, 241, 196, 72, 19, 182, 193, 189, 229, 177, 20, 0, 0, 32, 0, 73, 68, - 65, 84, 177, 29, 212, 152, 211, 18, 57, 231, 157, 59, 99, 210, 189, 99, 59, 101, 119, 19, - 176, 32, 171, 115, 191, 27, 64, 54, 155, 239, 200, 60, 62, 26, 228, 74, 242, 246, 227, 51, - 114, 23, 231, 208, 133, 87, 58, 195, 183, 122, 94, 118, 18, 237, 82, 240, 83, 1, 182, 91, - 172, 97, 212, 51, 172, 225, 206, 93, 10, 168, 255, 83, 26, 120, 0, 192, 142, 247, 191, 211, - 103, 158, 80, 204, 36, 209, 111, 52, 134, 137, 148, 0, 74, 153, 12, 173, 11, 53, 116, 70, - 56, 241, 214, 157, 170, 96, 90, 58, 151, 80, 252, 233, 111, 72, 66, 228, 138, 146, 118, 32, - 97, 69, 253, 174, 66, 5, 4, 56, 118, 12, 193, 142, 234, 94, 2, 26, 36, 150, 181, 159, - 120, 159, 73, 226, 220, 211, 120, 56, 47, 123, 101, 212, 100, 152, 135, 180, 252, 173, 98, 148, - 42, 93, 131, 149, 22, 194, 220, 188, 46, 79, 64, 113, 47, 238, 69, 202, 96, 164, 250, 255, - 207, 115, 175, 104, 253, 217, 92, 7, 247, 156, 185, 114, 197, 101, 9, 226, 73, 10, 60, 0, - 32, 49, 254, 206, 0, 57, 89, 92, 34, 110, 147, 120, 205, 50, 108, 128, 243, 118, 119, 148, - 250, 72, 238, 3, 245, 178, 187, 6, 68, 132, 241, 16, 252, 174, 211, 63, 72, 146, 246, 146, - 121, 118, 115, 171, 188, 249, 14, 244, 84, 222, 31, 241, 148, 29, 248, 72, 189, 127, 25, 67, - 89, 197, 232, 87, 201, 111, 4, 76, 12, 115, 222, 43, 131, 235, 24, 20, 103, 124, 42, 129, - 157, 149, 87, 187, 99, 28, 231, 226, 190, 87, 101, 114, 52, 206, 191, 218, 71, 117, 45, 5, - 141, 188, 11, 135, 144, 253, 125, 4, 30, 10, 230, 237, 158, 87, 23, 62, 233, 174, 231, 9, - 1, 108, 34, 255, 191, 221, 248, 39, 18, 191, 151, 88, 121, 220, 8, 63, 115, 115, 89, 177, - 10, 19, 206, 255, 185, 120, 94, 128, 29, 72, 212, 3, 171, 243, 152, 202, 100, 134, 171, 125, - 205, 16, 16, 189, 67, 15, 128, 176, 11, 19, 0, 152, 4, 24, 18, 35, 153, 24, 192, 29, - 227, 79, 235, 172, 39, 56, 134, 147, 0, 118, 18, 190, 207, 125, 222, 102, 155, 78, 250, 246, - 249, 123, 169, 110, 25, 60, 131, 239, 147, 237, 186, 182, 185, 213, 231, 171, 223, 118, 219, 58, - 121, 223, 238, 247, 183, 57, 191, 180, 197, 239, 106, 159, 171, 223, 222, 102, 30, 119, 120, 126, - 39, 33, 240, 0, 0, 100, 252, 43, 131, 190, 50, 118, 78, 204, 135, 210, 249, 151, 120, 21, - 64, 162, 215, 127, 1, 38, 128, 26, 227, 228, 115, 233, 181, 60, 131, 29, 195, 78, 25, 8, - 202, 50, 144, 191, 73, 92, 222, 101, 132, 19, 67, 222, 121, 132, 175, 244, 1, 216, 97, 1, - 20, 24, 112, 226, 245, 77, 240, 239, 149, 71, 62, 128, 1, 38, 251, 233, 190, 123, 71, 127, - 128, 105, 126, 239, 140, 247, 199, 223, 221, 139, 253, 84, 115, 168, 190, 191, 31, 158, 122, 215, - 43, 160, 154, 187, 235, 3, 16, 27, 102, 101, 61, 1, 158, 231, 112, 171, 239, 51, 240, 159, - 253, 30, 16, 240, 255, 143, 19, 2, 232, 105, 84, 183, 192, 59, 35, 170, 224, 179, 143, 20, - 97, 210, 109, 207, 25, 202, 52, 223, 128, 0, 11, 87, 143, 46, 249, 4, 200, 42, 209, 106, - 167, 195, 95, 210, 9, 144, 236, 107, 138, 183, 7, 118, 255, 94, 85, 132, 76, 8, 46, 86, - 12, 192, 213, 176, 31, 43, 35, 74, 212, 255, 40, 101, 78, 88, 136, 221, 227, 36, 191, 39, - 140, 72, 151, 244, 183, 218, 223, 221, 204, 213, 101, 219, 119, 201, 120, 29, 200, 162, 215, 163, - 211, 40, 232, 128, 87, 87, 255, 79, 171, 23, 220, 51, 229, 104, 118, 215, 213, 209, 41, 22, - 118, 157, 21, 63, 190, 171, 183, 184, 116, 241, 1, 0, 7, 0, 32, 227, 175, 192, 27, 167, - 6, 41, 145, 251, 149, 188, 98, 221, 128, 192, 133, 198, 214, 41, 195, 176, 211, 249, 175, 59, - 135, 87, 228, 130, 9, 80, 73, 88, 1, 90, 230, 71, 1, 26, 189, 55, 43, 195, 65, 159, - 207, 132, 97, 208, 27, 190, 79, 141, 57, 213, 196, 127, 150, 133, 13, 179, 120, 119, 181, 244, - 18, 203, 100, 167, 9, 107, 238, 223, 31, 129, 227, 109, 64, 110, 87, 243, 190, 154, 115, 215, - 253, 209, 1, 147, 17, 158, 91, 215, 50, 58, 5, 115, 4, 64, 82, 137, 97, 119, 140, 103, - 14, 194, 242, 57, 60, 85, 1, 251, 47, 241, 143, 29, 115, 206, 75, 175, 83, 247, 196, 144, - 94, 102, 155, 234, 223, 78, 105, 112, 188, 56, 151, 228, 119, 149, 49, 114, 9, 145, 169, 172, - 176, 196, 43, 12, 104, 151, 191, 36, 185, 240, 213, 198, 61, 137, 28, 49, 121, 55, 201, 246, - 137, 62, 188, 51, 70, 43, 163, 208, 25, 98, 146, 124, 53, 131, 109, 164, 158, 186, 127, 110, - 35, 240, 121, 215, 174, 87, 234, 115, 5, 86, 212, 249, 243, 56, 179, 57, 126, 66, 157, 87, - 243, 233, 232, 253, 36, 134, 95, 133, 19, 92, 72, 160, 218, 247, 14, 245, 191, 250, 247, 115, - 94, 73, 190, 64, 245, 219, 213, 190, 78, 40, 224, 48, 0, 75, 193, 31, 202, 12, 84, 98, - 63, 137, 162, 95, 210, 108, 71, 111, 52, 226, 169, 200, 145, 130, 237, 119, 59, 23, 238, 156, - 59, 21, 89, 146, 246, 251, 29, 60, 169, 198, 142, 14, 125, 165, 22, 191, 50, 204, 180, 1, - 142, 22, 207, 229, 43, 96, 131, 188, 19, 46, 59, 222, 101, 149, 15, 245, 50, 187, 21, 99, - 226, 24, 134, 213, 111, 255, 53, 224, 85, 159, 0, 82, 109, 64, 186, 45, 142, 135, 113, 234, - 178, 231, 87, 138, 121, 79, 144, 209, 133, 15, 86, 199, 90, 121, 217, 174, 60, 50, 105, 18, - 229, 232, 251, 213, 123, 83, 253, 150, 208, 244, 29, 27, 82, 245, 102, 152, 144, 189, 56, 0, - 224, 24, 127, 43, 223, 218, 45, 138, 151, 249, 156, 230, 16, 232, 195, 226, 148, 120, 200, 175, - 214, 205, 203, 24, 103, 119, 14, 105, 248, 67, 13, 187, 177, 42, 145, 235, 174, 247, 208, 126, - 252, 222, 85, 20, 56, 134, 225, 2, 140, 0, 253, 183, 235, 33, 208, 93, 131, 25, 60, 95, - 212, 120, 38, 219, 237, 8, 254, 12, 121, 234, 183, 106, 219, 187, 42, 59, 148, 214, 77, 121, - 186, 109, 118, 212, 244, 86, 96, 236, 150, 215, 217, 127, 26, 245, 238, 254, 172, 192, 105, 50, - 231, 87, 187, 18, 58, 21, 189, 78, 112, 103, 37, 9, 77, 88, 39, 151, 127, 64, 203, 10, - 59, 182, 106, 9, 46, 78, 40, 224, 47, 6, 0, 15, 207, 191, 67, 215, 52, 193, 111, 167, - 91, 222, 43, 93, 244, 82, 113, 162, 180, 31, 65, 154, 81, 239, 174, 15, 217, 255, 213, 24, - 94, 74, 167, 95, 230, 122, 172, 22, 217, 75, 121, 152, 192, 125, 46, 101, 137, 127, 4, 16, - 144, 54, 188, 196, 48, 167, 218, 252, 171, 249, 118, 153, 249, 130, 70, 205, 129, 133, 43, 216, - 182, 98, 76, 156, 226, 94, 231, 57, 119, 243, 157, 208, 144, 79, 249, 206, 129, 50, 247, 194, - 121, 180, 50, 134, 191, 98, 10, 86, 96, 130, 198, 230, 255, 221, 246, 6, 108, 67, 5, 30, - 72, 50, 225, 181, 0, 1, 29, 243, 116, 235, 215, 164, 64, 129, 185, 28, 0, 240, 23, 142, - 68, 143, 222, 25, 181, 212, 40, 39, 245, 225, 105, 231, 63, 162, 127, 127, 153, 109, 87, 255, - 190, 128, 97, 118, 108, 4, 1, 12, 10, 206, 39, 237, 3, 64, 230, 77, 128, 24, 241, 182, - 187, 251, 211, 201, 251, 58, 201, 104, 210, 86, 87, 198, 128, 165, 44, 193, 52, 172, 87, 215, - 140, 104, 66, 214, 163, 2, 13, 83, 125, 136, 193, 121, 133, 85, 130, 223, 211, 248, 145, 124, - 136, 148, 249, 232, 212, 242, 186, 78, 128, 43, 0, 51, 1, 219, 209, 233, 230, 147, 228, 66, - 41, 203, 160, 167, 74, 131, 164, 213, 112, 117, 94, 215, 7, 176, 225, 84, 27, 159, 97, 149, - 182, 85, 243, 63, 185, 95, 127, 109, 62, 192, 95, 9, 0, 138, 184, 63, 241, 216, 47, 179, - 192, 39, 70, 153, 118, 246, 235, 188, 99, 242, 59, 34, 188, 227, 152, 137, 87, 43, 0, 118, - 0, 75, 66, 201, 59, 96, 65, 197, 125, 18, 241, 30, 34, 74, 212, 121, 118, 46, 76, 49, - 3, 198, 193, 197, 121, 73, 62, 64, 18, 11, 166, 101, 131, 85, 201, 25, 49, 184, 20, 232, - 188, 82, 94, 232, 64, 136, 94, 220, 119, 245, 204, 78, 49, 0, 52, 11, 47, 184, 242, 134, - 159, 64, 103, 26, 64, 232, 154, 23, 9, 2, 35, 194, 86, 116, 222, 187, 196, 74, 27, 73, - 8, 226, 9, 2, 238, 226, 121, 185, 245, 154, 6, 198, 1, 0, 63, 200, 251, 119, 70, 230, - 105, 76, 47, 229, 180, 184, 243, 118, 71, 8, 12, 46, 224, 169, 83, 89, 97, 23, 239, 119, - 30, 242, 171, 198, 127, 7, 140, 57, 227, 190, 147, 229, 239, 106, 202, 7, 96, 70, 92, 104, - 162, 170, 101, 38, 243, 234, 24, 130, 103, 140, 123, 108, 190, 15, 100, 155, 36, 25, 110, 229, - 233, 141, 198, 83, 127, 54, 204, 169, 60, 245, 27, 204, 129, 26, 250, 142, 226, 118, 77, 134, - 212, 48, 13, 36, 62, 77, 18, 246, 212, 24, 199, 78, 114, 185, 171, 220, 112, 141, 124, 42, - 102, 65, 226, 50, 198, 171, 228, 198, 180, 247, 64, 21, 194, 145, 88, 254, 67, 165, 67, 240, - 31, 166, 224, 127, 58, 7, 235, 175, 235, 23, 240, 215, 1, 128, 34, 241, 207, 45, 246, 67, - 125, 205, 242, 199, 5, 128, 24, 104, 74, 131, 167, 201, 102, 59, 165, 128, 36, 39, 193, 53, - 14, 218, 169, 10, 216, 237, 118, 72, 174, 159, 12, 56, 219, 149, 5, 150, 120, 94, 64, 151, - 156, 119, 53, 198, 219, 61, 135, 244, 60, 137, 87, 191, 235, 209, 81, 13, 252, 206, 131, 172, - 226, 246, 23, 120, 39, 87, 219, 117, 205, 115, 186, 227, 203, 24, 41, 215, 19, 128, 128, 41, - 215, 210, 87, 13, 0, 233, 238, 227, 10, 88, 221, 197, 111, 28, 211, 65, 231, 189, 74, 126, - 92, 9, 42, 85, 30, 191, 203, 9, 112, 21, 15, 221, 220, 201, 247, 43, 192, 121, 24, 128, - 191, 212, 251, 175, 188, 239, 213, 103, 79, 3, 239, 12, 203, 4, 251, 76, 40, 109, 98, 52, - 221, 188, 8, 72, 160, 134, 218, 25, 211, 116, 159, 73, 19, 37, 114, 13, 220, 118, 19, 156, - 95, 119, 95, 223, 9, 12, 86, 96, 207, 121, 84, 52, 9, 173, 50, 184, 196, 240, 119, 185, - 11, 255, 142, 91, 189, 82, 97, 103, 192, 170, 56, 110, 7, 116, 93, 66, 222, 14, 173, 191, - 162, 209, 43, 143, 220, 177, 0, 233, 181, 37, 221, 0, 43, 198, 131, 48, 29, 43, 15, 122, - 247, 58, 85, 207, 250, 132, 251, 28, 240, 94, 172, 182, 115, 224, 203, 129, 33, 137, 39, 39, - 30, 0, 240, 195, 189, 255, 142, 74, 93, 61, 20, 151, 94, 147, 255, 165, 165, 116, 171, 125, - 187, 44, 248, 75, 121, 34, 221, 187, 153, 3, 2, 166, 82, 163, 77, 58, 251, 81, 53, 198, - 234, 186, 9, 204, 195, 253, 182, 51, 244, 29, 125, 236, 90, 232, 94, 141, 193, 168, 216, 161, - 169, 44, 55, 129, 128, 100, 215, 157, 239, 2, 30, 240, 138, 74, 190, 228, 243, 21, 102, 48, - 215, 41, 47, 225, 235, 182, 163, 70, 156, 36, 183, 85, 181, 253, 157, 103, 76, 101, 151, 93, - 198, 190, 243, 116, 41, 117, 238, 106, 248, 201, 115, 67, 152, 153, 84, 159, 128, 130, 129, 97, - 88, 167, 191, 190, 52, 240, 175, 1, 0, 139, 178, 191, 196, 171, 78, 189, 242, 209, 24, 104, - 210, 64, 134, 206, 101, 69, 137, 38, 93, 9, 43, 35, 74, 152, 145, 249, 34, 219, 64, 1, - 197, 42, 30, 188, 219, 244, 231, 106, 64, 5, 97, 59, 158, 128, 108, 42, 203, 175, 144, 88, - 126, 65, 37, 132, 67, 203, 255, 46, 213, 116, 250, 14, 45, 190, 75, 169, 83, 96, 64, 23, - 113, 103, 120, 157, 71, 156, 100, 251, 187, 118, 179, 4, 36, 124, 52, 188, 85, 6, 126, 42, - 204, 227, 250, 31, 220, 13, 8, 168, 178, 230, 59, 33, 38, 194, 198, 17, 61, 7, 162, 227, - 64, 219, 254, 18, 246, 167, 202, 119, 168, 128, 216, 165, 181, 202, 227, 1, 0, 63, 204, 243, - 239, 178, 168, 47, 229, 25, 234, 146, 79, 112, 155, 226, 20, 63, 73, 152, 35, 177, 106, 65, - 47, 153, 180, 222, 21, 96, 47, 210, 182, 183, 35, 188, 142, 35, 56, 159, 148, 225, 112, 204, - 137, 22, 0, 162, 242, 194, 171, 253, 185, 103, 224, 185, 191, 78, 209, 207, 209, 233, 93, 82, - 227, 48, 76, 87, 231, 97, 187, 123, 236, 98, 176, 50, 243, 118, 94, 104, 119, 140, 180, 206, - 156, 170, 43, 62, 141, 149, 212, 135, 104, 158, 61, 0, 86, 234, 116, 157, 172, 177, 75, 252, - 35, 205, 115, 110, 245, 97, 142, 84, 155, 95, 134, 9, 232, 216, 149, 219, 60, 159, 183, 120, - 85, 4, 185, 223, 115, 243, 220, 255, 119, 62, 127, 19, 11, 240, 183, 231, 0, 12, 249, 110, - 117, 212, 203, 117, 94, 118, 226, 125, 11, 28, 99, 106, 221, 122, 56, 101, 48, 82, 131, 156, - 8, 25, 237, 52, 79, 210, 230, 177, 36, 46, 80, 68, 243, 25, 156, 24, 84, 151, 105, 172, - 96, 174, 4, 16, 56, 175, 57, 205, 71, 32, 94, 120, 69, 103, 147, 198, 50, 50, 76, 65, - 151, 240, 181, 10, 9, 220, 208, 19, 125, 190, 35, 221, 252, 63, 10, 199, 84, 161, 2, 119, - 76, 103, 168, 212, 24, 126, 90, 93, 32, 232, 229, 186, 18, 60, 25, 163, 233, 128, 83, 146, - 51, 224, 68, 135, 158, 215, 229, 46, 206, 233, 22, 235, 69, 65, 186, 97, 18, 1, 166, 255, - 173, 10, 248, 27, 64, 192, 223, 8, 0, 136, 33, 234, 22, 21, 1, 111, 83, 155, 222, 39, - 21, 34, 234, 0, 138, 196, 243, 21, 58, 0, 114, 1, 175, 61, 101, 21, 156, 177, 77, 98, - 253, 100, 95, 83, 25, 163, 179, 195, 248, 60, 207, 159, 100, 177, 119, 134, 206, 129, 130, 238, - 121, 173, 206, 159, 24, 234, 110, 193, 39, 251, 171, 60, 249, 174, 30, 188, 162, 161, 159, 134, - 130, 122, 232, 215, 194, 192, 56, 5, 62, 146, 180, 184, 162, 170, 85, 120, 247, 213, 185, 119, - 204, 67, 23, 191, 39, 137, 123, 9, 99, 144, 24, 111, 105, 93, 102, 168, 240, 249, 249, 8, - 198, 86, 115, 90, 129, 176, 148, 157, 112, 215, 144, 182, 114, 254, 223, 251, 241, 55, 48, 1, - 63, 30, 0, 60, 202, 254, 136, 129, 29, 128, 74, 78, 90, 1, 167, 205, 117, 58, 86, 97, - 23, 80, 80, 29, 129, 84, 221, 48, 137, 111, 239, 180, 242, 165, 106, 134, 59, 115, 79, 88, - 130, 157, 22, 197, 59, 172, 68, 162, 237, 223, 101, 203, 207, 198, 104, 211, 122, 255, 157, 30, - 7, 149, 167, 118, 201, 39, 64, 174, 22, 114, 210, 188, 133, 156, 107, 103, 28, 18, 86, 161, - 154, 219, 181, 96, 21, 20, 120, 212, 85, 27, 219, 167, 7, 76, 226, 233, 207, 152, 54, 13, - 125, 56, 9, 226, 213, 51, 118, 63, 60, 120, 215, 152, 199, 121, 245, 18, 43, 145, 172, 188, - 252, 87, 133, 143, 126, 185, 38, 63, 29, 4, 252, 104, 0, 208, 116, 250, 219, 161, 236, 137, - 192, 202, 14, 133, 254, 52, 102, 148, 50, 38, 94, 125, 66, 157, 79, 192, 16, 188, 82, 199, - 159, 128, 3, 23, 191, 119, 73, 143, 82, 158, 87, 32, 241, 110, 129, 210, 94, 146, 168, 211, - 224, 191, 0, 32, 160, 140, 129, 235, 200, 71, 153, 174, 68, 122, 183, 75, 186, 123, 130, 129, - 97, 140, 203, 91, 150, 128, 226, 26, 76, 249, 12, 241, 106, 62, 207, 178, 186, 221, 146, 199, - 202, 64, 62, 231, 116, 21, 76, 136, 83, 126, 236, 68, 147, 86, 34, 66, 29, 83, 83, 221, - 143, 235, 1, 4, 86, 32, 237, 90, 92, 175, 231, 103, 132, 137, 144, 185, 230, 238, 183, 67, - 190, 187, 226, 4, 219, 29, 0, 240, 205, 140, 127, 39, 50, 82, 149, 248, 17, 138, 157, 0, - 8, 98, 176, 47, 179, 31, 215, 169, 142, 196, 254, 137, 161, 188, 54, 12, 121, 26, 163, 95, - 25, 185, 110, 222, 149, 252, 49, 97, 47, 118, 18, 41, 19, 47, 222, 149, 147, 58, 112, 213, - 253, 174, 19, 197, 17, 240, 230, 135, 242, 172, 117, 210, 180, 72, 202, 90, 13, 119, 94, 94, - 165, 50, 231, 232, 221, 138, 85, 72, 18, 250, 220, 185, 57, 97, 154, 74, 125, 207, 101, 164, - 39, 210, 183, 36, 247, 193, 105, 255, 87, 70, 237, 217, 44, 135, 246, 4, 112, 215, 169, 99, - 58, 42, 54, 227, 46, 158, 137, 234, 61, 186, 213, 231, 56, 116, 173, 158, 7, 96, 18, 92, - 167, 199, 3, 0, 190, 217, 160, 241, 126, 231, 237, 147, 120, 60, 165, 160, 221, 223, 9, 11, - 241, 138, 230, 62, 9, 53, 164, 237, 102, 147, 16, 5, 169, 197, 95, 1, 21, 170, 15, 224, - 128, 5, 241, 238, 29, 43, 208, 25, 95, 154, 163, 81, 45, 194, 36, 225, 79, 141, 209, 186, - 12, 237, 60, 33, 168, 232, 244, 230, 5, 140, 178, 130, 107, 53, 129, 225, 174, 126, 239, 232, - 238, 170, 29, 49, 245, 18, 87, 12, 192, 234, 122, 116, 122, 4, 43, 128, 54, 27, 138, 188, - 147, 250, 37, 12, 136, 123, 78, 157, 72, 16, 205, 47, 232, 228, 153, 137, 36, 177, 75, 220, - 171, 250, 34, 208, 227, 17, 32, 179, 124, 6, 126, 114, 24, 224, 71, 2, 128, 135, 247, 239, - 140, 113, 103, 164, 39, 248, 13, 161, 182, 137, 32, 203, 142, 120, 15, 1, 52, 18, 11, 7, - 76, 189, 191, 138, 193, 133, 59, 20, 48, 8, 180, 84, 241, 18, 23, 192, 113, 199, 75, 52, - 3, 170, 231, 99, 154, 251, 59, 197, 243, 35, 4, 206, 101, 101, 248, 201, 126, 92, 226, 20, - 149, 2, 38, 2, 59, 171, 207, 105, 162, 86, 183, 95, 137, 213, 212, 83, 73, 223, 202, 184, - 189, 114, 29, 157, 145, 234, 212, 20, 171, 68, 185, 142, 206, 174, 12, 222, 179, 239, 2, 241, - 140, 37, 214, 144, 71, 170, 147, 35, 29, 227, 160, 6, 60, 57, 177, 36, 65, 143, 159, 228, - 2, 252, 231, 223, 63, 181, 42, 224, 167, 51, 0, 137, 2, 95, 226, 49, 83, 150, 97, 37, - 31, 76, 60, 99, 231, 73, 11, 26, 172, 29, 195, 151, 30, 91, 155, 198, 154, 40, 29, 238, - 170, 248, 93, 122, 61, 211, 95, 192, 248, 165, 57, 21, 146, 47, 245, 171, 170, 3, 104, 197, - 64, 215, 133, 142, 188, 47, 146, 15, 65, 237, 104, 227, 187, 134, 51, 206, 211, 239, 26, 11, - 37, 117, 228, 29, 179, 208, 29, 251, 82, 175, 73, 64, 213, 231, 136, 199, 62, 33, 165, 237, - 140, 216, 132, 199, 114, 44, 16, 57, 110, 23, 251, 223, 189, 14, 10, 89, 170, 138, 145, 152, - 234, 43, 12, 28, 152, 248, 177, 253, 2, 126, 28, 0, 88, 200, 253, 58, 79, 159, 54, 217, - 145, 120, 156, 125, 103, 155, 36, 4, 240, 138, 33, 167, 49, 127, 194, 4, 116, 172, 0, 101, - 39, 36, 94, 65, 225, 114, 49, 82, 214, 132, 26, 194, 143, 160, 130, 168, 255, 173, 174, 47, - 245, 222, 87, 199, 146, 49, 96, 29, 235, 68, 244, 215, 157, 215, 228, 222, 139, 202, 8, 116, - 243, 39, 153, 232, 78, 245, 46, 241, 228, 20, 110, 227, 128, 69, 213, 93, 142, 30, 223, 157, - 211, 19, 64, 222, 193, 121, 82, 197, 67, 2, 10, 186, 126, 4, 180, 44, 209, 177, 52, 21, - 19, 80, 61, 231, 14, 20, 185, 235, 223, 37, 124, 150, 231, 248, 19, 89, 128, 159, 202, 0, - 60, 179, 196, 59, 58, 150, 40, 198, 73, 94, 101, 111, 181, 240, 87, 49, 111, 183, 239, 164, - 53, 43, 233, 49, 159, 212, 179, 19, 195, 234, 64, 4, 1, 37, 73, 50, 158, 196, 75, 5, - 73, 194, 100, 167, 202, 71, 228, 132, 5, 174, 159, 180, 151, 251, 65, 128, 102, 119, 140, 78, - 13, 112, 7, 248, 116, 148, 173, 12, 213, 122, 201, 39, 107, 9, 24, 144, 212, 120, 187, 69, - 63, 205, 85, 168, 206, 179, 163, 158, 187, 223, 146, 246, 186, 207, 107, 81, 205, 121, 37, 255, - 75, 203, 28, 233, 117, 118, 207, 1, 73, 6, 148, 250, 220, 2, 146, 156, 153, 0, 150, 234, - 24, 52, 113, 178, 123, 254, 15, 0, 248, 194, 222, 255, 147, 2, 214, 194, 8, 39, 181, 255, - 2, 158, 178, 128, 135, 44, 3, 32, 118, 140, 33, 5, 40, 212, 27, 119, 226, 63, 43, 64, - 117, 189, 137, 9, 120, 69, 97, 144, 2, 128, 10, 40, 237, 212, 245, 119, 161, 2, 90, 66, - 232, 58, 254, 81, 207, 95, 224, 89, 115, 224, 178, 203, 84, 119, 9, 122, 221, 194, 233, 140, - 9, 97, 35, 58, 15, 221, 49, 5, 85, 254, 0, 173, 20, 32, 134, 200, 121, 162, 23, 0, - 60, 23, 96, 28, 86, 244, 117, 7, 46, 28, 216, 34, 177, 116, 10, 172, 170, 253, 116, 215, - 166, 106, 88, 68, 140, 176, 171, 92, 112, 10, 138, 14, 188, 145, 235, 119, 0, 192, 23, 52, - 254, 85, 252, 157, 120, 94, 171, 126, 0, 87, 99, 120, 47, 243, 162, 164, 134, 133, 54, 237, - 33, 13, 136, 232, 254, 21, 122, 208, 43, 227, 32, 229, 201, 128, 36, 188, 64, 216, 10, 7, - 210, 38, 0, 122, 73, 233, 159, 243, 172, 175, 5, 216, 112, 2, 63, 137, 183, 222, 149, 8, - 118, 101, 107, 206, 211, 237, 216, 3, 169, 87, 251, 147, 114, 193, 33, 74, 83, 83, 54, 108, - 202, 171, 14, 222, 0, 4, 116, 161, 137, 174, 47, 64, 117, 29, 46, 249, 178, 188, 97, 12, - 176, 19, 178, 113, 137, 143, 171, 38, 56, 119, 195, 204, 208, 30, 0, 157, 33, 39, 115, 159, - 198, 64, 59, 240, 83, 61, 27, 183, 106, 57, 104, 194, 26, 12, 21, 61, 21, 126, 90, 24, - 224, 199, 0, 128, 49, 198, 156, 115, 118, 20, 56, 53, 156, 73, 247, 53, 226, 249, 147, 250, - 127, 7, 18, 46, 227, 173, 143, 192, 64, 80, 202, 215, 85, 49, 92, 198, 195, 222, 237, 182, - 72, 19, 17, 105, 171, 94, 151, 48, 232, 194, 3, 93, 34, 224, 85, 120, 245, 84, 113, 178, - 186, 118, 19, 62, 103, 142, 109, 72, 106, 246, 101, 238, 55, 81, 30, 220, 126, 125, 31, 251, - 122, 122, 196, 93, 169, 93, 162, 112, 183, 82, 236, 163, 213, 13, 14, 108, 165, 242, 179, 213, - 57, 57, 182, 160, 99, 107, 170, 251, 229, 226, 231, 85, 120, 132, 104, 234, 119, 247, 128, 130, - 149, 9, 142, 65, 239, 131, 12, 176, 234, 202, 88, 37, 31, 154, 249, 81, 234, 128, 63, 153, - 1, 32, 250, 254, 110, 59, 42, 33, 235, 182, 169, 126, 179, 162, 88, 105, 185, 32, 217, 166, - 51, 138, 68, 126, 56, 101, 14, 82, 49, 30, 199, 80, 184, 243, 77, 100, 125, 43, 241, 163, - 41, 166, 200, 216, 205, 81, 225, 115, 146, 62, 59, 18, 167, 251, 175, 102, 177, 35, 33, 130, - 142, 233, 73, 90, 196, 86, 172, 128, 51, 64, 137, 78, 6, 93, 132, 43, 3, 115, 41, 75, - 214, 35, 201, 107, 180, 246, 188, 99, 27, 136, 103, 238, 66, 21, 78, 105, 176, 154, 223, 13, - 239, 237, 19, 68, 57, 96, 210, 129, 73, 146, 241, 79, 251, 37, 16, 54, 71, 11, 192, 233, - 18, 16, 119, 158, 187, 3, 0, 190, 136, 241, 167, 180, 125, 215, 34, 56, 245, 160, 213, 24, - 135, 68, 34, 152, 26, 197, 21, 83, 208, 41, 254, 117, 117, 255, 137, 193, 170, 22, 230, 43, - 4, 78, 9, 75, 64, 24, 2, 151, 232, 167, 230, 121, 72, 242, 7, 212, 120, 229, 52, 182, - 239, 98, 175, 180, 253, 111, 7, 2, 146, 30, 243, 29, 179, 80, 25, 237, 174, 54, 191, 50, - 14, 36, 121, 176, 218, 239, 51, 9, 174, 51, 14, 93, 185, 87, 165, 74, 56, 140, 199, 248, - 212, 252, 79, 90, 231, 190, 210, 238, 215, 177, 39, 221, 61, 93, 109, 79, 146, 242, 58, 163, - 220, 105, 19, 208, 246, 190, 78, 85, 176, 122, 246, 9, 112, 74, 175, 237, 174, 58, 228, 1, - 0, 127, 120, 60, 13, 54, 77, 228, 27, 205, 239, 147, 44, 238, 221, 198, 66, 196, 163, 21, - 244, 204, 167, 246, 50, 253, 105, 37, 132, 3, 11, 78, 160, 103, 215, 139, 79, 26, 33, 37, - 29, 5, 119, 26, 3, 57, 143, 121, 231, 185, 89, 133, 29, 92, 76, 221, 205, 105, 165, 152, - 168, 198, 224, 186, 103, 197, 9, 26, 201, 204, 159, 24, 41, 1, 218, 214, 201, 2, 119, 45, - 136, 9, 67, 144, 36, 31, 174, 50, 243, 59, 192, 68, 141, 226, 170, 185, 78, 247, 93, 199, - 222, 172, 230, 88, 81, 220, 31, 247, 189, 58, 143, 46, 95, 225, 18, 151, 207, 237, 128, 9, - 17, 36, 114, 73, 133, 196, 147, 23, 252, 221, 146, 133, 248, 41, 185, 0, 223, 30, 0, 60, - 186, 253, 9, 210, 164, 201, 98, 74, 140, 93, 162, 222, 150, 40, 11, 166, 251, 190, 196, 117, - 254, 47, 176, 13, 237, 5, 224, 40, 233, 238, 154, 174, 114, 13, 46, 0, 162, 210, 54, 194, - 174, 241, 78, 202, 184, 80, 16, 232, 64, 65, 202, 124, 56, 96, 177, 2, 21, 174, 249, 142, - 51, 72, 149, 39, 60, 213, 231, 138, 116, 42, 128, 78, 17, 113, 101, 148, 171, 230, 52, 36, - 31, 128, 202, 195, 14, 99, 116, 170, 125, 172, 188, 225, 170, 239, 61, 233, 9, 48, 10, 131, - 119, 107, 191, 108, 79, 218, 175, 199, 127, 38, 198, 57, 209, 156, 148, 113, 170, 12, 49, 97, - 21, 72, 183, 191, 142, 137, 162, 186, 5, 255, 153, 243, 79, 200, 5, 248, 214, 0, 224, 209, - 237, 207, 209, 210, 164, 147, 31, 245, 192, 169, 38, 0, 157, 211, 142, 215, 88, 237, 123, 194, - 243, 112, 108, 193, 110, 230, 126, 146, 11, 64, 128, 77, 165, 227, 144, 132, 81, 36, 223, 144, - 104, 138, 151, 120, 82, 224, 224, 188, 254, 97, 232, 220, 1, 12, 102, 199, 0, 8, 44, 136, - 142, 230, 165, 9, 133, 79, 22, 227, 25, 99, 159, 205, 115, 72, 218, 32, 175, 22, 98, 103, - 232, 110, 64, 5, 211, 127, 83, 209, 27, 234, 109, 18, 45, 128, 103, 187, 225, 238, 154, 58, - 227, 247, 100, 14, 40, 35, 35, 227, 233, 171, 152, 107, 106, 196, 43, 38, 230, 110, 64, 97, - 5, 32, 43, 35, 63, 131, 103, 63, 41, 111, 60, 0, 224, 15, 142, 164, 17, 143, 51, 158, - 9, 165, 157, 48, 5, 206, 75, 38, 32, 36, 201, 21, 184, 26, 163, 87, 177, 0, 73, 71, - 65, 7, 12, 8, 131, 176, 83, 18, 120, 109, 0, 1, 194, 200, 72, 188, 29, 115, 82, 227, - 95, 129, 173, 52, 39, 194, 9, 60, 57, 90, 211, 82, 154, 155, 222, 227, 4, 212, 179, 147, - 210, 117, 49, 250, 142, 50, 118, 137, 118, 105, 246, 184, 26, 239, 184, 242, 238, 59, 102, 130, - 180, 172, 29, 230, 190, 84, 160, 224, 14, 206, 137, 116, 183, 235, 140, 242, 42, 161, 144, 230, - 121, 72, 62, 196, 226, 90, 28, 175, 66, 32, 221, 53, 94, 49, 80, 228, 94, 173, 90, 20, - 119, 161, 132, 111, 15, 2, 190, 45, 0, 40, 188, 255, 85, 237, 63, 49, 112, 3, 50, 0, - 149, 193, 32, 53, 219, 52, 78, 44, 3, 102, 94, 145, 190, 117, 70, 104, 149, 244, 152, 202, - 250, 58, 227, 79, 99, 243, 10, 239, 151, 130, 235, 114, 5, 191, 25, 193, 117, 173, 140, 246, - 101, 88, 134, 206, 187, 175, 24, 0, 226, 49, 87, 94, 13, 209, 26, 144, 124, 253, 246, 48, - 180, 46, 97, 56, 170, 5, 184, 83, 18, 156, 134, 114, 30, 242, 226, 58, 174, 124, 240, 18, - 207, 54, 215, 11, 219, 42, 248, 141, 187, 54, 36, 4, 211, 205, 57, 5, 33, 212, 16, 18, - 3, 223, 173, 131, 183, 124, 117, 68, 199, 184, 60, 67, 23, 137, 65, 111, 27, 13, 253, 107, - 135, 190, 107, 40, 224, 219, 2, 128, 127, 234, 254, 19, 15, 79, 161, 1, 235, 42, 0, 156, - 138, 89, 167, 174, 231, 168, 232, 132, 54, 39, 108, 197, 142, 193, 118, 140, 194, 5, 230, 161, - 6, 40, 117, 140, 202, 5, 238, 149, 139, 245, 95, 0, 20, 38, 222, 62, 189, 174, 244, 90, - 8, 222, 163, 157, 114, 66, 7, 36, 43, 141, 136, 142, 9, 160, 76, 156, 0, 133, 220, 197, - 239, 47, 229, 130, 49, 93, 221, 124, 149, 229, 223, 121, 204, 68, 239, 224, 105, 48, 72, 134, - 57, 45, 95, 235, 106, 246, 87, 134, 44, 161, 211, 167, 152, 92, 239, 234, 126, 206, 198, 224, - 174, 42, 50, 8, 147, 179, 154, 195, 109, 214, 89, 162, 183, 80, 9, 29, 173, 158, 235, 27, - 178, 77, 79, 39, 137, 38, 60, 30, 0, 240, 27, 25, 0, 218, 171, 126, 136, 181, 241, 165, - 222, 63, 105, 212, 67, 89, 131, 202, 248, 206, 13, 150, 130, 120, 178, 42, 140, 186, 243, 174, - 29, 51, 177, 58, 47, 87, 114, 217, 29, 231, 2, 44, 192, 243, 115, 87, 218, 72, 140, 122, - 215, 6, 216, 37, 174, 37, 0, 97, 71, 223, 65, 234, 245, 36, 82, 64, 64, 168, 115, 215, - 110, 214, 101, 220, 87, 198, 241, 18, 147, 175, 29, 208, 219, 76, 21, 236, 186, 4, 64, 151, - 241, 238, 60, 227, 231, 247, 142, 201, 32, 198, 252, 50, 64, 162, 51, 90, 78, 242, 119, 21, - 215, 167, 57, 12, 43, 32, 212, 213, 236, 87, 222, 248, 0, 6, 56, 49, 210, 164, 188, 79, - 202, 218, 27, 203, 128, 140, 3, 0, 62, 147, 4, 128, 11, 39, 49, 250, 73, 102, 251, 128, - 191, 95, 29, 151, 36, 154, 85, 96, 129, 122, 232, 239, 138, 195, 75, 190, 158, 223, 209, 252, - 100, 78, 41, 147, 113, 133, 192, 44, 241, 172, 105, 187, 97, 183, 93, 7, 22, 156, 118, 128, - 3, 53, 50, 96, 105, 199, 123, 39, 236, 130, 171, 39, 23, 164, 131, 83, 239, 90, 13, 99, - 224, 188, 223, 203, 24, 243, 89, 120, 185, 132, 97, 72, 41, 127, 103, 184, 136, 168, 142, 154, - 109, 73, 47, 4, 18, 183, 167, 229, 138, 137, 132, 115, 162, 212, 183, 154, 235, 173, 190, 249, - 145, 99, 173, 72, 73, 103, 2, 34, 126, 185, 70, 223, 181, 44, 240, 91, 2, 128, 5, 245, - 79, 18, 238, 72, 150, 172, 3, 2, 212, 120, 211, 44, 242, 4, 200, 208, 121, 86, 198, 152, - 136, 4, 37, 70, 123, 0, 38, 132, 40, 6, 210, 250, 251, 221, 82, 60, 170, 228, 151, 200, - 13, 175, 182, 159, 102, 126, 215, 6, 128, 36, 225, 139, 10, 12, 80, 99, 79, 234, 174, 43, - 96, 34, 227, 161, 57, 67, 222, 117, 229, 115, 218, 240, 46, 27, 189, 51, 6, 46, 71, 129, - 116, 233, 211, 198, 119, 187, 30, 124, 7, 34, 232, 249, 17, 192, 68, 69, 135, 210, 238, 137, - 210, 126, 174, 129, 138, 57, 117, 251, 39, 108, 13, 185, 31, 187, 32, 245, 0, 128, 79, 48, - 254, 9, 181, 89, 25, 169, 132, 166, 165, 82, 172, 148, 113, 72, 146, 202, 136, 7, 191, 219, - 225, 142, 102, 242, 83, 160, 50, 67, 143, 126, 135, 169, 80, 184, 173, 155, 199, 142, 42, 33, - 237, 108, 72, 238, 111, 181, 207, 11, 108, 227, 242, 81, 40, 248, 117, 11, 230, 14, 155, 224, - 22, 119, 42, 21, 92, 25, 177, 11, 48, 18, 73, 159, 130, 41, 47, 57, 75, 68, 114, 200, - 245, 162, 186, 4, 36, 65, 205, 197, 191, 157, 17, 171, 60, 252, 91, 251, 201, 128, 46, 231, - 225, 35, 75, 115, 155, 185, 16, 6, 130, 2, 139, 106, 126, 174, 81, 148, 51, 254, 223, 82, - 28, 232, 187, 134, 0, 82, 79, 55, 53, 228, 84, 211, 223, 41, 15, 166, 44, 133, 128, 33, - 115, 215, 35, 1, 41, 213, 191, 9, 91, 64, 181, 0, 20, 128, 25, 103, 208, 41, 0, 112, - 215, 145, 38, 141, 146, 16, 207, 148, 23, 103, 34, 247, 155, 124, 47, 245, 57, 10, 132, 217, - 234, 158, 157, 91, 117, 40, 200, 129, 11, 151, 181, 79, 52, 244, 41, 229, 223, 133, 29, 92, - 105, 33, 1, 45, 228, 119, 9, 91, 225, 238, 81, 213, 132, 135, 10, 6, 237, 170, 234, 117, - 90, 9, 19, 60, 3, 151, 49, 156, 169, 86, 131, 211, 36, 112, 154, 254, 106, 152, 149, 231, - 241, 159, 121, 8, 151, 250, 68, 71, 202, 6, 29, 6, 224, 19, 141, 191, 66, 15, 126, 149, - 37, 222, 45, 236, 151, 88, 236, 155, 120, 129, 148, 157, 72, 141, 123, 66, 141, 211, 107, 36, - 224, 161, 82, 166, 32, 21, 71, 162, 115, 117, 247, 56, 209, 5, 184, 212, 119, 1, 148, 120, - 245, 70, 247, 155, 105, 64, 101, 90, 206, 153, 120, 245, 196, 83, 191, 140, 183, 69, 229, 84, - 93, 157, 119, 101, 196, 46, 177, 118, 187, 221, 111, 43, 207, 217, 137, 186, 16, 163, 78, 18, - 223, 186, 210, 67, 169, 86, 2, 116, 49, 108, 71, 223, 59, 198, 135, 24, 79, 25, 35, 234, - 64, 208, 138, 133, 72, 148, 23, 59, 64, 216, 61, 19, 171, 124, 136, 170, 90, 163, 99, 67, - 186, 107, 210, 253, 230, 219, 134, 2, 190, 21, 0, 248, 135, 254, 39, 73, 81, 180, 33, 204, - 4, 70, 133, 100, 13, 59, 161, 22, 98, 104, 41, 45, 77, 61, 94, 151, 89, 79, 235, 244, - 29, 147, 177, 43, 133, 76, 231, 125, 1, 240, 229, 90, 0, 167, 140, 1, 5, 72, 213, 126, - 170, 103, 226, 18, 203, 245, 24, 225, 223, 169, 225, 167, 219, 204, 226, 89, 39, 181, 212, 151, - 250, 242, 63, 25, 102, 227, 89, 235, 79, 169, 245, 209, 0, 23, 210, 144, 104, 199, 216, 173, - 0, 65, 5, 66, 46, 192, 18, 144, 12, 119, 170, 88, 120, 63, 188, 245, 1, 140, 214, 44, - 60, 253, 1, 140, 177, 26, 48, 71, 4, 136, 168, 52, 242, 19, 116, 221, 1, 51, 226, 88, - 167, 238, 185, 38, 161, 173, 3, 0, 62, 193, 251, 167, 6, 117, 213, 224, 103, 101, 252, 174, - 230, 197, 238, 242, 7, 174, 194, 8, 37, 26, 1, 180, 201, 13, 201, 93, 168, 12, 241, 5, - 174, 169, 243, 198, 105, 197, 68, 218, 144, 168, 251, 155, 206, 33, 105, 8, 212, 177, 62, 122, - 195, 57, 186, 78, 140, 41, 139, 65, 203, 252, 18, 195, 190, 98, 74, 102, 51, 143, 25, 204, - 101, 200, 83, 247, 93, 29, 246, 93, 176, 39, 73, 163, 158, 202, 168, 116, 157, 255, 20, 120, - 252, 214, 95, 129, 94, 248, 128, 191, 79, 25, 9, 247, 27, 87, 111, 223, 49, 41, 164, 22, - 63, 49, 246, 83, 191, 102, 247, 83, 143, 156, 92, 107, 119, 62, 93, 25, 100, 213, 113, 82, - 171, 107, 57, 231, 188, 198, 24, 223, 166, 60, 240, 219, 0, 128, 135, 247, 95, 233, 148, 167, - 66, 58, 35, 96, 11, 92, 137, 156, 51, 24, 142, 214, 21, 52, 142, 179, 240, 40, 137, 178, - 155, 196, 84, 5, 73, 24, 35, 45, 219, 75, 128, 200, 171, 29, 250, 104, 50, 165, 212, 11, - 30, 237, 10, 3, 93, 234, 75, 62, 93, 27, 227, 14, 188, 81, 65, 170, 206, 107, 113, 93, - 255, 40, 35, 145, 208, 207, 42, 22, 208, 107, 225, 49, 94, 192, 147, 70, 203, 70, 0, 140, - 146, 22, 189, 67, 94, 64, 102, 0, 163, 236, 188, 253, 85, 201, 162, 192, 239, 211, 126, 7, - 78, 92, 104, 46, 214, 189, 91, 44, 39, 97, 64, 48, 225, 66, 20, 212, 91, 79, 74, 0, - 37, 223, 95, 64, 13, 120, 125, 94, 143, 195, 0, 124, 2, 3, 176, 122, 144, 47, 176, 192, - 146, 253, 186, 197, 79, 134, 174, 118, 6, 34, 145, 218, 237, 40, 113, 34, 223, 187, 211, 199, - 96, 199, 195, 119, 0, 103, 138, 181, 2, 174, 142, 225, 66, 0, 196, 120, 191, 42, 59, 76, - 206, 127, 183, 183, 64, 2, 44, 28, 40, 146, 188, 64, 17, 237, 181, 238, 194, 109, 85, 226, - 90, 87, 218, 71, 61, 58, 234, 221, 59, 26, 155, 52, 28, 114, 180, 51, 49, 94, 206, 59, - 150, 124, 152, 193, 81, 200, 164, 201, 78, 114, 159, 213, 120, 192, 84, 11, 192, 197, 193, 171, - 12, 127, 87, 99, 159, 148, 54, 174, 128, 153, 0, 35, 48, 161, 93, 120, 94, 167, 105, 64, - 233, 183, 234, 18, 248, 83, 170, 0, 18, 227, 146, 36, 172, 145, 42, 2, 74, 163, 143, 13, - 3, 217, 81, 200, 73, 70, 249, 0, 64, 193, 177, 15, 93, 163, 161, 228, 122, 74, 175, 101, - 254, 239, 26, 115, 90, 237, 177, 74, 22, 77, 13, 60, 237, 39, 48, 12, 35, 149, 36, 101, - 170, 0, 156, 180, 170, 160, 2, 0, 174, 158, 251, 73, 63, 119, 96, 161, 243, 238, 186, 125, - 86, 172, 199, 13, 140, 252, 171, 134, 159, 24, 211, 217, 48, 146, 174, 155, 93, 151, 91, 145, - 26, 114, 201, 215, 242, 171, 241, 106, 147, 78, 136, 211, 128, 198, 164, 209, 84, 199, 62, 220, - 98, 161, 168, 202, 200, 147, 50, 70, 137, 245, 139, 16, 184, 198, 215, 63, 32, 224, 91, 148, - 4, 126, 11, 0, 240, 144, 253, 165, 37, 105, 2, 44, 192, 147, 130, 36, 139, 171, 75, 64, - 235, 146, 240, 92, 152, 33, 97, 45, 18, 15, 150, 214, 247, 239, 84, 20, 36, 249, 24, 180, - 95, 131, 148, 41, 0, 38, 198, 159, 50, 55, 213, 243, 64, 146, 18, 147, 207, 73, 197, 130, - 224, 243, 220, 237, 99, 26, 16, 32, 248, 188, 147, 214, 196, 36, 73, 208, 149, 244, 145, 78, - 129, 23, 244, 228, 136, 138, 161, 11, 165, 220, 242, 154, 11, 21, 32, 89, 229, 53, 116, 25, - 232, 116, 155, 105, 128, 212, 48, 243, 39, 117, 252, 221, 243, 67, 66, 13, 157, 71, 77, 40, - 251, 85, 85, 133, 187, 46, 183, 124, 7, 194, 14, 120, 144, 243, 248, 246, 173, 128, 191, 5, - 0, 120, 8, 255, 116, 141, 77, 58, 15, 219, 37, 0, 18, 3, 62, 10, 208, 48, 195, 69, - 89, 112, 62, 105, 214, 61, 49, 116, 148, 45, 32, 213, 22, 174, 47, 194, 59, 188, 244, 223, - 177, 45, 17, 37, 34, 30, 255, 206, 126, 171, 124, 1, 167, 83, 65, 255, 118, 70, 140, 138, - 211, 92, 141, 7, 185, 74, 58, 187, 26, 143, 137, 214, 114, 87, 139, 245, 173, 95, 75, 40, - 171, 228, 49, 2, 58, 166, 120, 38, 61, 5, 27, 85, 54, 122, 167, 129, 79, 132, 102, 220, - 125, 82, 99, 168, 46, 224, 61, 87, 243, 38, 52, 189, 0, 128, 233, 140, 181, 196, 85, 7, - 19, 64, 34, 101, 85, 28, 10, 230, 171, 134, 189, 18, 100, 93, 14, 0, 72, 198, 63, 93, - 255, 156, 28, 234, 4, 20, 110, 181, 32, 78, 241, 178, 187, 148, 230, 166, 219, 58, 214, 130, - 40, 14, 82, 45, 1, 151, 239, 144, 24, 116, 39, 24, 68, 213, 253, 136, 103, 47, 224, 205, - 82, 227, 238, 128, 194, 132, 115, 30, 226, 57, 2, 221, 51, 71, 152, 151, 105, 182, 251, 200, - 98, 145, 44, 109, 7, 10, 221, 34, 157, 208, 214, 52, 131, 158, 182, 229, 125, 150, 152, 93, - 193, 162, 222, 121, 191, 157, 167, 239, 146, 18, 87, 58, 0, 29, 16, 161, 101, 131, 106, 140, - 219, 19, 252, 84, 217, 253, 149, 183, 91, 85, 87, 16, 111, 184, 82, 245, 35, 106, 133, 21, - 144, 33, 130, 81, 2, 115, 212, 7, 240, 216, 1, 204, 174, 180, 143, 244, 39, 248, 246, 44, - 193, 151, 6, 0, 133, 236, 111, 66, 95, 58, 99, 222, 25, 0, 2, 30, 180, 160, 171, 220, - 66, 234, 60, 205, 10, 208, 72, 190, 108, 80, 133, 135, 41, 192, 66, 16, 67, 144, 52, 251, - 161, 231, 74, 115, 16, 8, 13, 191, 155, 176, 215, 121, 229, 137, 36, 113, 117, 189, 221, 60, - 39, 160, 254, 73, 155, 100, 194, 56, 189, 226, 205, 117, 76, 128, 243, 228, 233, 49, 147, 214, - 191, 215, 139, 94, 87, 87, 191, 78, 196, 108, 166, 241, 192, 39, 48, 126, 85, 9, 26, 189, - 174, 207, 12, 244, 1, 206, 237, 54, 30, 237, 13, 159, 137, 170, 185, 146, 3, 49, 206, 155, - 238, 206, 191, 3, 57, 2, 44, 16, 1, 3, 21, 224, 171, 194, 17, 164, 179, 224, 1, 0, - 155, 222, 255, 174, 118, 124, 178, 144, 17, 74, 189, 91, 120, 93, 118, 47, 145, 200, 117, 158, - 176, 212, 139, 14, 57, 170, 121, 71, 59, 159, 42, 227, 165, 218, 251, 169, 55, 157, 198, 216, - 201, 188, 18, 15, 62, 1, 22, 105, 104, 37, 57, 143, 149, 225, 77, 212, 17, 187, 121, 76, - 213, 37, 137, 130, 6, 219, 149, 74, 81, 90, 117, 54, 159, 119, 11, 181, 139, 233, 63, 141, - 219, 106, 251, 78, 153, 208, 37, 161, 209, 156, 130, 4, 104, 85, 191, 117, 224, 138, 210, 215, - 157, 216, 211, 44, 216, 133, 138, 41, 73, 114, 13, 58, 218, 189, 203, 105, 184, 11, 230, 235, - 54, 247, 104, 183, 129, 79, 101, 232, 237, 181, 255, 135, 185, 158, 95, 57, 25, 240, 59, 50, - 0, 212, 51, 161, 6, 124, 138, 199, 222, 119, 40, 127, 7, 60, 18, 85, 190, 212, 208, 57, - 99, 121, 193, 243, 175, 84, 238, 94, 109, 216, 67, 234, 220, 83, 0, 146, 102, 235, 239, 82, - 252, 187, 165, 156, 105, 127, 5, 242, 124, 147, 28, 128, 235, 177, 77, 215, 199, 192, 1, 222, - 52, 174, 75, 67, 16, 171, 88, 57, 145, 173, 157, 198, 251, 83, 113, 238, 137, 78, 64, 165, - 95, 48, 193, 60, 164, 76, 97, 48, 17, 40, 74, 192, 85, 149, 19, 224, 100, 119, 5, 140, - 51, 245, 186, 37, 222, 215, 160, 170, 8, 80, 3, 48, 38, 0, 56, 164, 157, 244, 170, 73, - 144, 212, 231, 123, 156, 118, 192, 191, 131, 8, 40, 30, 160, 75, 251, 73, 110, 196, 104, 118, - 97, 128, 25, 26, 170, 142, 206, 117, 199, 163, 161, 128, 196, 104, 86, 217, 238, 180, 221, 177, - 54, 183, 219, 161, 227, 137, 81, 167, 247, 56, 109, 217, 124, 193, 121, 239, 38, 27, 86, 140, - 128, 212, 231, 167, 184, 124, 0, 199, 16, 184, 191, 101, 140, 120, 146, 249, 223, 41, 254, 85, - 148, 243, 165, 188, 33, 206, 191, 251, 169, 22, 230, 91, 76, 181, 176, 243, 72, 137, 65, 239, - 214, 11, 34, 144, 67, 25, 2, 170, 42, 232, 68, 117, 118, 148, 247, 170, 251, 177, 211, 250, - 183, 99, 79, 92, 248, 97, 117, 126, 93, 55, 68, 137, 133, 27, 170, 18, 88, 114, 93, 127, - 217, 230, 43, 235, 2, 124, 89, 0, 240, 160, 254, 87, 241, 89, 167, 254, 231, 104, 114, 103, - 164, 19, 186, 182, 242, 40, 171, 239, 171, 152, 239, 74, 182, 152, 178, 31, 59, 116, 182, 12, - 101, 63, 130, 237, 8, 16, 216, 161, 204, 95, 105, 192, 148, 156, 131, 123, 126, 46, 48, 103, - 7, 76, 186, 115, 156, 98, 37, 166, 21, 115, 211, 121, 253, 175, 130, 111, 167, 82, 231, 140, - 222, 138, 229, 113, 141, 124, 6, 240, 224, 42, 99, 68, 19, 212, 100, 140, 23, 81, 239, 235, - 66, 17, 183, 120, 109, 61, 169, 12, 112, 70, 120, 22, 30, 127, 7, 42, 168, 172, 239, 46, - 56, 161, 251, 112, 157, 4, 21, 50, 17, 213, 181, 34, 128, 64, 33, 131, 241, 142, 176, 204, - 1, 0, 128, 62, 75, 164, 97, 19, 229, 179, 234, 129, 185, 128, 215, 240, 74, 27, 96, 170, - 87, 144, 212, 242, 187, 223, 189, 66, 53, 187, 243, 160, 33, 13, 98, 224, 119, 192, 72, 101, - 252, 170, 208, 5, 173, 16, 160, 234, 126, 50, 198, 157, 2, 12, 226, 173, 39, 212, 189, 12, - 77, 219, 45, 82, 51, 48, 252, 46, 155, 218, 121, 161, 206, 67, 172, 226, 206, 171, 134, 63, - 137, 102, 191, 235, 82, 247, 188, 62, 87, 113, 156, 174, 134, 221, 201, 236, 166, 198, 166, 51, - 50, 68, 56, 39, 169, 253, 167, 84, 122, 210, 246, 153, 38, 7, 210, 239, 105, 153, 105, 10, - 8, 86, 215, 171, 235, 175, 64, 165, 139, 15, 0, 128, 198, 159, 26, 71, 98, 184, 210, 242, - 58, 55, 191, 157, 36, 68, 162, 204, 214, 121, 113, 52, 201, 143, 158, 215, 5, 0, 197, 78, - 223, 249, 164, 113, 83, 218, 113, 143, 206, 151, 176, 2, 180, 58, 132, 92, 207, 42, 151, 225, - 82, 94, 254, 71, 158, 25, 210, 130, 183, 50, 206, 195, 80, 225, 164, 44, 139, 150, 26, 118, - 201, 113, 164, 159, 129, 244, 107, 134, 254, 132, 199, 118, 134, 221, 49, 2, 2, 158, 41, 173, - 7, 119, 202, 123, 137, 23, 45, 115, 191, 159, 191, 171, 88, 22, 82, 90, 87, 85, 20, 220, - 224, 122, 186, 126, 9, 142, 121, 113, 76, 67, 2, 126, 83, 6, 224, 185, 78, 222, 205, 125, - 250, 118, 198, 255, 203, 2, 128, 15, 141, 127, 104, 172, 91, 234, 235, 219, 47, 229, 201, 93, - 59, 180, 247, 211, 219, 76, 19, 9, 157, 199, 239, 246, 69, 190, 91, 121, 167, 23, 160, 145, - 211, 204, 249, 4, 32, 104, 211, 144, 171, 241, 164, 87, 6, 57, 105, 67, 76, 207, 249, 157, - 253, 1, 164, 172, 84, 210, 129, 130, 138, 1, 73, 128, 183, 51, 130, 157, 199, 70, 180, 250, - 87, 243, 172, 232, 253, 180, 175, 192, 71, 101, 62, 210, 240, 198, 129, 40, 103, 28, 221, 60, - 111, 232, 217, 211, 4, 187, 234, 250, 56, 193, 162, 33, 47, 180, 83, 93, 151, 142, 173, 233, - 186, 234, 173, 12, 238, 42, 68, 81, 9, 38, 37, 249, 3, 132, 233, 114, 161, 131, 85, 56, - 165, 3, 13, 109, 178, 228, 87, 149, 6, 254, 46, 12, 192, 12, 104, 243, 202, 163, 75, 67, - 1, 93, 141, 56, 245, 198, 43, 64, 224, 104, 221, 29, 47, 177, 122, 56, 119, 100, 99, 95, - 85, 31, 164, 153, 246, 87, 104, 52, 105, 150, 254, 206, 252, 42, 93, 251, 24, 141, 0, 0, - 32, 0, 73, 68, 65, 84, 240, 64, 170, 62, 170, 238, 127, 59, 201, 136, 151, 106, 97, 43, - 170, 138, 233, 192, 151, 51, 42, 187, 77, 83, 28, 165, 237, 152, 5, 231, 145, 255, 123, 126, - 55, 244, 246, 87, 29, 6, 87, 115, 75, 75, 250, 92, 95, 122, 18, 119, 175, 0, 218, 173, - 189, 132, 195, 169, 90, 137, 208, 137, 67, 173, 12, 104, 34, 12, 228, 202, 253, 186, 99, 59, - 240, 214, 229, 53, 56, 182, 196, 149, 15, 174, 188, 251, 132, 149, 120, 110, 179, 170, 30, 248, - 159, 141, 78, 18, 96, 228, 253, 87, 139, 87, 2, 4, 8, 101, 75, 59, 224, 37, 229, 82, - 137, 158, 190, 171, 102, 88, 37, 59, 18, 227, 66, 192, 17, 153, 59, 77, 158, 35, 0, 131, - 122, 204, 180, 35, 94, 98, 248, 9, 56, 161, 12, 202, 46, 152, 33, 250, 0, 21, 200, 148, - 250, 30, 18, 171, 110, 101, 137, 167, 236, 58, 179, 209, 88, 254, 20, 11, 79, 200, 24, 182, - 202, 203, 156, 11, 144, 68, 99, 214, 157, 247, 189, 202, 31, 72, 40, 113, 215, 56, 233, 249, - 155, 143, 130, 60, 207, 68, 72, 218, 53, 239, 14, 192, 24, 45, 147, 116, 10, 133, 238, 56, - 14, 88, 146, 240, 7, 105, 78, 116, 195, 115, 113, 236, 206, 52, 207, 6, 13, 143, 88, 217, - 228, 127, 237, 218, 87, 3, 2, 95, 14, 0, 124, 16, 255, 33, 141, 119, 18, 170, 190, 250, - 123, 134, 148, 59, 165, 171, 157, 129, 163, 106, 123, 164, 26, 128, 150, 210, 145, 100, 64, 162, - 50, 71, 25, 11, 151, 57, 223, 157, 195, 5, 188, 229, 228, 94, 143, 224, 94, 36, 114, 200, - 59, 30, 63, 125, 86, 156, 76, 245, 234, 123, 167, 96, 217, 121, 228, 93, 95, 122, 247, 236, - 85, 229, 123, 171, 174, 151, 85, 125, 127, 82, 90, 231, 60, 208, 68, 12, 204, 73, 228, 58, - 131, 236, 106, 252, 63, 158, 31, 45, 31, 163, 165, 116, 67, 190, 171, 221, 147, 33, 88, 49, - 14, 35, 248, 127, 71, 181, 19, 150, 201, 169, 68, 18, 134, 192, 229, 40, 80, 86, 153, 150, - 124, 118, 231, 118, 21, 160, 164, 3, 32, 7, 0, 52, 12, 0, 213, 179, 87, 184, 216, 117, - 20, 254, 138, 106, 36, 212, 39, 105, 72, 68, 189, 101, 129, 243, 78, 40, 101, 90, 129, 64, - 189, 127, 66, 39, 87, 30, 108, 101, 156, 210, 46, 127, 105, 83, 158, 33, 222, 195, 96, 199, - 224, 167, 229, 142, 213, 246, 87, 113, 189, 210, 150, 207, 233, 123, 33, 213, 213, 54, 164, 172, - 105, 197, 104, 173, 140, 231, 85, 176, 4, 196, 112, 116, 20, 61, 17, 196, 113, 33, 0, 199, - 72, 8, 80, 224, 213, 53, 185, 141, 55, 217, 133, 4, 136, 112, 205, 44, 24, 133, 180, 244, - 208, 85, 57, 56, 195, 60, 10, 54, 69, 98, 98, 73, 119, 3, 16, 200, 241, 221, 179, 65, - 129, 73, 242, 187, 161, 117, 200, 38, 5, 72, 7, 0, 60, 140, 63, 17, 40, 161, 165, 113, - 157, 39, 59, 11, 42, 55, 161, 190, 19, 21, 53, 109, 120, 176, 148, 94, 119, 253, 235, 169, - 23, 79, 19, 229, 18, 57, 91, 66, 199, 87, 159, 79, 213, 61, 22, 18, 29, 1, 55, 111, - 7, 10, 58, 240, 72, 128, 96, 34, 151, 76, 129, 216, 20, 203, 211, 32, 244, 111, 71, 115, - 86, 30, 109, 87, 146, 87, 41, 231, 117, 139, 238, 84, 223, 173, 111, 21, 187, 191, 12, 37, - 94, 253, 206, 37, 32, 82, 99, 217, 173, 79, 105, 239, 250, 142, 201, 72, 50, 233, 157, 65, - 223, 209, 236, 167, 231, 115, 139, 105, 55, 144, 240, 10, 1, 33, 164, 58, 192, 9, 4, 165, - 234, 134, 122, 60, 115, 180, 92, 209, 177, 9, 135, 1, 104, 40, 196, 68, 165, 110, 2, 166, - 160, 51, 106, 206, 232, 116, 134, 216, 121, 105, 110, 225, 72, 60, 226, 143, 219, 95, 155, 172, - 65, 42, 108, 52, 12, 0, 169, 234, 223, 105, 77, 191, 187, 214, 206, 88, 59, 22, 64, 33, - 152, 33, 64, 147, 36, 111, 82, 29, 11, 105, 157, 8, 248, 252, 221, 234, 89, 153, 1, 235, - 116, 137, 73, 250, 86, 11, 37, 201, 210, 30, 208, 152, 187, 120, 122, 213, 245, 142, 36, 249, - 85, 137, 99, 142, 198, 239, 250, 0, 184, 185, 74, 172, 53, 45, 201, 80, 39, 94, 55, 161, - 203, 171, 223, 220, 193, 190, 147, 184, 126, 170, 126, 248, 52, 248, 29, 83, 178, 171, 33, 144, - 244, 32, 216, 73, 126, 237, 20, 5, 191, 228, 248, 138, 0, 96, 168, 47, 83, 75, 105, 206, - 74, 0, 38, 169, 179, 78, 68, 99, 136, 247, 229, 58, 190, 13, 184, 189, 139, 7, 19, 32, - 145, 210, 251, 50, 134, 245, 185, 205, 21, 120, 236, 142, 21, 33, 215, 59, 101, 51, 46, 72, - 247, 87, 12, 192, 43, 243, 30, 205, 189, 167, 58, 4, 213, 49, 72, 109, 189, 203, 18, 191, - 23, 180, 250, 8, 222, 227, 185, 177, 93, 53, 111, 55, 15, 23, 135, 239, 186, 227, 77, 99, - 128, 93, 56, 128, 36, 174, 9, 120, 192, 171, 144, 198, 45, 95, 131, 239, 18, 53, 101, 238, - 179, 54, 64, 28, 173, 246, 32, 247, 157, 200, 249, 166, 149, 35, 43, 41, 106, 103, 47, 110, - 3, 168, 165, 62, 119, 229, 94, 48, 4, 191, 36, 3, 126, 165, 68, 192, 239, 162, 4, 168, - 23, 189, 47, 137, 229, 21, 80, 112, 226, 74, 190, 168, 151, 93, 121, 135, 171, 234, 128, 43, - 240, 160, 95, 209, 127, 39, 94, 43, 109, 124, 116, 53, 96, 69, 205, 185, 37, 215, 106, 55, - 179, 223, 209, 233, 132, 61, 32, 242, 206, 171, 28, 134, 41, 31, 242, 185, 54, 239, 97, 247, - 14, 184, 218, 243, 231, 121, 92, 198, 227, 114, 6, 134, 128, 130, 29, 165, 193, 138, 21, 168, - 74, 217, 58, 17, 151, 196, 59, 164, 244, 190, 0, 27, 208, 1, 18, 103, 140, 201, 181, 118, - 115, 32, 137, 134, 132, 198, 79, 101, 146, 87, 219, 61, 203, 240, 110, 195, 0, 80, 3, 237, - 104, 252, 9, 174, 21, 209, 49, 112, 96, 232, 203, 142, 47, 3, 0, 30, 241, 127, 90, 106, - 70, 188, 155, 4, 100, 36, 191, 25, 197, 131, 60, 54, 22, 102, 183, 111, 202, 150, 8, 252, - 61, 149, 181, 86, 166, 215, 58, 213, 68, 144, 242, 68, 185, 132, 145, 216, 41, 235, 123, 50, - 2, 87, 97, 36, 87, 127, 59, 125, 136, 68, 75, 34, 233, 104, 73, 159, 121, 154, 35, 144, - 36, 78, 41, 244, 8, 223, 181, 48, 142, 194, 51, 238, 152, 3, 7, 74, 210, 164, 54, 215, - 190, 214, 25, 156, 212, 91, 23, 52, 120, 137, 167, 78, 89, 85, 202, 92, 204, 226, 119, 180, - 83, 98, 10, 68, 92, 232, 66, 202, 67, 40, 73, 101, 65, 18, 50, 248, 146, 121, 0, 95, - 153, 1, 152, 218, 75, 144, 35, 139, 30, 81, 75, 75, 143, 65, 232, 232, 149, 183, 117, 41, - 43, 13, 35, 229, 124, 210, 190, 132, 46, 245, 174, 221, 32, 70, 142, 86, 35, 164, 234, 123, - 9, 43, 112, 61, 254, 222, 209, 0, 32, 128, 168, 138, 219, 143, 240, 223, 41, 120, 37, 158, - 226, 42, 233, 234, 42, 22, 103, 146, 208, 70, 40, 115, 39, 39, 124, 3, 99, 255, 14, 239, - 171, 2, 51, 207, 204, 122, 122, 94, 212, 192, 38, 74, 128, 196, 136, 17, 144, 176, 82, 69, - 172, 178, 217, 93, 181, 131, 139, 157, 211, 24, 188, 51, 222, 169, 209, 36, 237, 168, 93, 71, - 196, 85, 111, 9, 210, 61, 112, 128, 103, 236, 75, 133, 1, 190, 18, 0, 72, 188, 19, 133, - 84, 244, 74, 21, 240, 42, 110, 108, 146, 236, 149, 128, 17, 218, 154, 149, 212, 218, 175, 232, - 231, 43, 188, 30, 50, 198, 159, 176, 43, 142, 186, 222, 213, 20, 112, 192, 74, 129, 215, 76, - 153, 1, 7, 40, 36, 86, 49, 208, 25, 102, 39, 73, 77, 246, 65, 219, 3, 79, 192, 70, - 117, 66, 48, 221, 190, 136, 248, 78, 215, 176, 167, 98, 20, 86, 98, 57, 93, 105, 33, 49, - 124, 142, 158, 255, 104, 16, 239, 23, 140, 47, 169, 231, 119, 172, 193, 243, 122, 172, 66, 23, - 43, 77, 255, 234, 222, 174, 12, 255, 108, 206, 239, 25, 123, 95, 169, 229, 61, 219, 59, 175, - 0, 134, 83, 22, 164, 204, 18, 105, 34, 165, 6, 236, 116, 247, 113, 194, 123, 77, 146, 100, - 111, 249, 42, 131, 255, 60, 3, 95, 5, 4, 124, 9, 0, 176, 104, 253, 155, 26, 213, 87, - 195, 4, 105, 35, 152, 231, 28, 46, 177, 248, 117, 103, 236, 200, 98, 69, 193, 82, 231, 109, - 118, 234, 130, 206, 147, 93, 45, 24, 228, 250, 37, 194, 72, 4, 40, 85, 73, 124, 151, 185, - 214, 207, 253, 16, 61, 128, 14, 216, 236, 178, 19, 82, 102, 248, 93, 206, 130, 211, 87, 232, - 40, 212, 234, 185, 161, 30, 169, 26, 239, 92, 141, 55, 214, 105, 9, 208, 16, 128, 3, 4, - 149, 46, 64, 85, 231, 254, 140, 69, 175, 246, 183, 98, 38, 72, 43, 223, 85, 229, 130, 180, - 39, 155, 75, 227, 249, 87, 115, 173, 171, 253, 239, 116, 14, 164, 52, 127, 101, 240, 171, 106, - 15, 199, 104, 36, 153, 250, 43, 102, 105, 54, 94, 189, 243, 238, 211, 198, 66, 174, 234, 226, - 132, 0, 22, 11, 8, 53, 170, 10, 41, 97, 23, 14, 88, 45, 136, 36, 193, 206, 209, 178, - 201, 185, 208, 115, 164, 234, 130, 213, 245, 153, 226, 249, 9, 218, 184, 190, 9, 101, 237, 12, - 185, 66, 111, 62, 1, 33, 10, 142, 77, 88, 11, 154, 235, 64, 140, 125, 194, 16, 36, 236, - 89, 231, 21, 87, 97, 1, 210, 87, 94, 13, 93, 191, 98, 6, 186, 82, 179, 149, 231, 230, - 180, 251, 29, 64, 32, 162, 58, 43, 29, 249, 170, 204, 114, 101, 104, 87, 198, 246, 146, 111, - 86, 211, 209, 215, 79, 16, 113, 55, 244, 52, 233, 195, 32, 229, 130, 57, 169, 97, 215, 6, - 104, 185, 141, 97, 78, 194, 30, 110, 142, 244, 250, 36, 236, 68, 245, 140, 126, 41, 227, 255, - 85, 1, 192, 174, 247, 46, 67, 25, 79, 121, 41, 96, 129, 133, 115, 66, 170, 189, 91, 240, - 93, 126, 67, 218, 235, 192, 37, 246, 17, 86, 66, 224, 247, 73, 219, 227, 167, 183, 149, 24, - 193, 29, 80, 244, 110, 125, 3, 7, 26, 58, 160, 240, 17, 72, 184, 14, 128, 105, 87, 68, - 7, 28, 200, 34, 69, 194, 5, 115, 241, 158, 172, 52, 235, 103, 193, 30, 116, 10, 107, 157, - 7, 232, 126, 87, 121, 92, 43, 170, 252, 54, 239, 138, 139, 151, 187, 178, 64, 42, 198, 67, - 42, 8, 186, 208, 64, 117, 46, 157, 55, 223, 197, 176, 221, 250, 40, 173, 69, 125, 42, 54, - 168, 250, 55, 85, 145, 36, 225, 161, 174, 84, 181, 98, 5, 86, 247, 231, 146, 239, 28, 184, - 99, 147, 210, 110, 142, 7, 0, 44, 232, 255, 206, 136, 16, 15, 122, 2, 163, 213, 121, 179, - 206, 8, 74, 89, 18, 94, 229, 213, 82, 70, 130, 214, 205, 59, 175, 67, 102, 159, 238, 58, - 36, 76, 68, 226, 173, 238, 10, 22, 145, 12, 254, 213, 118, 87, 24, 70, 72, 101, 127, 201, - 125, 29, 234, 195, 40, 14, 132, 77, 101, 249, 29, 157, 70, 196, 0, 158, 189, 196, 36, 130, - 105, 34, 96, 18, 99, 87, 99, 76, 59, 163, 39, 177, 156, 128, 85, 157, 125, 197, 6, 140, - 34, 116, 64, 65, 5, 45, 225, 235, 50, 210, 87, 218, 0, 19, 94, 47, 103, 0, 137, 65, - 19, 160, 249, 73, 229, 195, 78, 229, 72, 149, 28, 250, 241, 62, 86, 64, 214, 177, 24, 142, - 161, 80, 225, 201, 171, 1, 118, 228, 154, 158, 28, 0, 179, 144, 81, 73, 220, 206, 91, 39, - 11, 20, 205, 65, 216, 17, 250, 153, 133, 23, 44, 248, 183, 51, 218, 130, 115, 29, 155, 215, - 148, 178, 45, 83, 62, 225, 110, 167, 173, 48, 169, 142, 32, 153, 245, 239, 144, 46, 38, 243, - 173, 64, 196, 52, 96, 197, 29, 127, 245, 187, 74, 123, 96, 101, 68, 174, 198, 24, 169, 241, - 236, 233, 98, 46, 176, 112, 10, 82, 209, 213, 98, 125, 107, 45, 132, 243, 241, 123, 151, 36, - 70, 217, 133, 14, 164, 12, 184, 13, 77, 2, 164, 202, 119, 73, 141, 123, 117, 204, 27, 122, - 239, 142, 33, 32, 58, 7, 50, 222, 184, 91, 127, 92, 63, 129, 174, 130, 100, 64, 160, 36, - 115, 255, 28, 59, 148, 48, 3, 255, 153, 243, 87, 72, 4, 252, 106, 33, 128, 46, 211, 248, - 218, 48, 212, 149, 72, 75, 90, 251, 159, 150, 229, 37, 198, 115, 135, 134, 151, 161, 181, 43, - 177, 34, 201, 39, 240, 17, 230, 228, 122, 3, 80, 75, 18, 45, 169, 240, 145, 51, 194, 180, - 57, 144, 3, 59, 157, 146, 160, 140, 225, 238, 114, 3, 4, 1, 129, 99, 8, 174, 194, 184, - 127, 252, 251, 42, 60, 94, 103, 184, 169, 33, 117, 113, 210, 167, 119, 237, 60, 39, 87, 13, - 208, 41, 231, 117, 20, 178, 99, 13, 86, 207, 254, 189, 184, 47, 164, 108, 78, 133, 71, 75, - 233, 249, 221, 238, 129, 68, 103, 191, 243, 238, 87, 89, 238, 174, 244, 143, 136, 248, 56, 202, - 156, 210, 231, 171, 132, 76, 218, 221, 175, 234, 71, 65, 40, 124, 242, 204, 18, 185, 230, 191, - 19, 0, 124, 160, 255, 157, 241, 118, 165, 101, 130, 52, 255, 51, 174, 182, 35, 37, 43, 67, - 65, 82, 96, 49, 31, 139, 177, 171, 17, 79, 152, 138, 106, 113, 114, 229, 96, 164, 157, 240, - 40, 174, 31, 101, 49, 168, 236, 114, 103, 244, 136, 198, 192, 170, 55, 1, 97, 40, 36, 174, - 7, 64, 152, 6, 7, 76, 28, 117, 127, 1, 128, 64, 152, 33, 154, 80, 59, 213, 135, 216, - 212, 24, 38, 234, 85, 17, 181, 63, 180, 132, 136, 39, 64, 62, 1, 196, 51, 174, 78, 202, - 13, 73, 78, 192, 13, 188, 217, 36, 39, 64, 230, 157, 149, 97, 15, 156, 23, 222, 209, 253, - 142, 222, 126, 2, 152, 59, 164, 190, 105, 25, 158, 99, 104, 170, 231, 230, 18, 15, 65, 72, - 94, 65, 114, 183, 39, 194, 151, 13, 3, 252, 81, 0, 48, 198, 152, 32, 7, 128, 120, 37, - 164, 52, 141, 80, 231, 36, 217, 136, 182, 126, 237, 186, 195, 73, 62, 78, 62, 197, 74, 228, - 18, 70, 164, 58, 94, 210, 30, 119, 5, 98, 146, 140, 117, 231, 249, 18, 33, 31, 66, 237, - 95, 0, 36, 41, 56, 6, 173, 190, 160, 77, 151, 72, 78, 193, 213, 208, 252, 42, 0, 242, - 138, 249, 234, 0, 222, 132, 32, 226, 213, 222, 240, 212, 91, 154, 242, 162, 63, 207, 172, 248, - 209, 44, 250, 85, 216, 225, 134, 158, 98, 90, 69, 64, 219, 240, 58, 186, 190, 3, 11, 14, - 96, 72, 76, 166, 151, 214, 191, 187, 134, 66, 68, 219, 128, 80, 249, 82, 221, 60, 39, 45, - 49, 148, 124, 123, 95, 210, 67, 161, 106, 86, 84, 37, 89, 10, 134, 16, 190, 68, 24, 224, - 43, 48, 0, 110, 113, 156, 192, 123, 92, 209, 210, 68, 8, 37, 109, 239, 75, 147, 190, 168, - 241, 115, 94, 172, 163, 205, 71, 99, 144, 211, 26, 117, 199, 162, 56, 189, 131, 52, 89, 208, - 37, 188, 209, 107, 65, 203, 253, 46, 104, 200, 29, 245, 159, 120, 240, 4, 0, 184, 251, 48, - 212, 247, 5, 184, 196, 18, 71, 43, 15, 241, 2, 84, 231, 84, 157, 215, 146, 122, 232, 50, - 32, 192, 237, 107, 229, 201, 187, 12, 112, 202, 114, 60, 61, 91, 167, 23, 64, 186, 246, 37, - 101, 100, 2, 6, 115, 135, 85, 216, 49, 194, 201, 247, 171, 60, 3, 137, 139, 39, 17, 181, - 192, 85, 37, 68, 151, 164, 151, 196, 235, 43, 181, 203, 41, 46, 53, 92, 129, 132, 213, 187, - 240, 101, 58, 4, 126, 135, 50, 64, 151, 201, 44, 248, 25, 205, 220, 223, 17, 23, 218, 233, - 205, 62, 196, 178, 180, 73, 24, 97, 7, 188, 236, 92, 175, 228, 218, 59, 48, 225, 128, 136, - 128, 199, 76, 128, 7, 5, 16, 164, 92, 144, 86, 8, 92, 0, 8, 8, 0, 180, 29, 176, - 218, 93, 211, 217, 48, 107, 174, 117, 175, 243, 160, 156, 174, 122, 23, 46, 112, 74, 131, 19, - 2, 143, 103, 89, 88, 101, 192, 119, 165, 125, 171, 121, 94, 170, 115, 16, 42, 3, 48, 94, - 156, 19, 41, 35, 164, 30, 188, 51, 252, 164, 57, 142, 163, 191, 41, 208, 147, 97, 64, 42, - 131, 157, 24, 105, 193, 243, 73, 104, 250, 97, 128, 8, 101, 196, 14, 0, 8, 141, 236, 42, - 206, 237, 60, 115, 42, 203, 235, 188, 98, 5, 219, 117, 73, 86, 3, 0, 131, 42, 70, 237, - 168, 247, 180, 227, 31, 161, 240, 41, 168, 112, 115, 218, 201, 9, 24, 234, 203, 250, 168, 135, - 79, 37, 126, 221, 53, 189, 160, 231, 157, 116, 38, 36, 33, 155, 46, 49, 140, 40, 67, 86, - 215, 60, 49, 178, 2, 70, 194, 9, 1, 73, 191, 198, 226, 135, 161, 128, 7, 100, 42, 168, - 142, 191, 163, 126, 87, 231, 63, 138, 235, 145, 180, 36, 214, 134, 49, 36, 30, 190, 196, 146, - 251, 146, 57, 116, 137, 118, 14, 8, 16, 230, 160, 123, 142, 156, 172, 176, 3, 59, 183, 124, - 82, 100, 119, 110, 29, 3, 34, 241, 124, 141, 177, 113, 207, 127, 38, 0, 88, 116, 255, 163, - 6, 171, 162, 145, 92, 210, 219, 142, 66, 221, 0, 212, 58, 53, 230, 93, 203, 88, 137, 105, - 14, 56, 25, 215, 213, 255, 103, 232, 241, 147, 216, 54, 245, 154, 9, 144, 112, 198, 222, 177, - 0, 52, 39, 195, 121, 209, 180, 204, 143, 84, 26, 56, 131, 78, 194, 3, 221, 124, 59, 224, - 162, 13, 227, 63, 155, 235, 57, 11, 246, 96, 46, 192, 72, 39, 248, 83, 197, 242, 137, 241, - 170, 58, 243, 57, 77, 248, 75, 125, 102, 123, 149, 232, 213, 237, 251, 150, 79, 110, 76, 178, - 225, 9, 40, 33, 148, 185, 243, 52, 29, 24, 160, 57, 8, 132, 21, 216, 205, 230, 79, 0, - 143, 155, 63, 109, 252, 211, 93, 103, 7, 158, 8, 195, 226, 216, 143, 49, 231, 212, 159, 202, - 3, 248, 211, 12, 192, 92, 44, 106, 41, 29, 158, 210, 217, 93, 236, 188, 218, 207, 165, 186, - 127, 119, 146, 253, 79, 155, 199, 144, 114, 191, 46, 203, 157, 24, 101, 226, 233, 79, 99, 212, - 156, 76, 50, 53, 158, 130, 161, 0, 82, 165, 32, 241, 92, 133, 36, 15, 160, 154, 255, 21, - 130, 73, 154, 19, 160, 13, 150, 192, 129, 27, 250, 254, 172, 216, 128, 17, 120, 156, 157, 222, - 255, 108, 140, 249, 83, 226, 214, 29, 71, 141, 177, 30, 33, 29, 47, 245, 170, 123, 210, 90, - 131, 96, 197, 158, 220, 13, 163, 224, 40, 114, 5, 94, 51, 161, 176, 73, 214, 186, 235, 105, - 224, 152, 133, 164, 41, 207, 132, 247, 118, 7, 236, 56, 144, 145, 136, 77, 253, 46, 175, 125, - 5, 40, 255, 62, 6, 0, 120, 189, 79, 163, 76, 226, 221, 35, 184, 248, 137, 26, 223, 52, - 11, 189, 91, 228, 83, 164, 235, 22, 112, 34, 180, 50, 194, 115, 167, 201, 137, 50, 222, 226, - 37, 30, 167, 118, 160, 173, 74, 60, 76, 186, 51, 146, 223, 37, 224, 37, 41, 233, 163, 189, - 0, 28, 48, 34, 94, 62, 81, 9, 172, 188, 58, 231, 21, 85, 223, 79, 240, 30, 204, 102, - 251, 85, 23, 186, 103, 19, 155, 75, 172, 31, 193, 84, 157, 152, 215, 121, 101, 43, 86, 96, - 60, 246, 169, 134, 218, 38, 30, 103, 103, 200, 105, 207, 121, 234, 205, 83, 131, 188, 98, 52, - 168, 209, 162, 249, 1, 116, 78, 213, 57, 79, 112, 223, 58, 176, 144, 104, 51, 80, 145, 162, - 52, 175, 128, 180, 64, 254, 43, 171, 0, 146, 214, 179, 195, 24, 24, 218, 229, 142, 128, 130, - 116, 155, 36, 115, 222, 37, 30, 82, 26, 188, 187, 14, 175, 0, 17, 66, 89, 119, 219, 59, - 41, 94, 98, 148, 29, 29, 79, 230, 36, 241, 210, 189, 93, 241, 32, 218, 55, 224, 130, 219, - 75, 60, 28, 33, 248, 76, 56, 218, 178, 2, 153, 132, 246, 36, 137, 130, 93, 9, 223, 211, - 152, 95, 225, 66, 216, 137, 250, 84, 33, 136, 74, 69, 144, 52, 228, 33, 192, 71, 139, 243, - 33, 165, 98, 68, 97, 47, 13, 49, 208, 18, 205, 74, 90, 152, 148, 230, 185, 26, 120, 2, - 82, 136, 106, 34, 53, 148, 171, 222, 16, 83, 117, 54, 255, 12, 24, 154, 68, 202, 153, 204, - 153, 42, 35, 254, 88, 0, 80, 81, 232, 187, 160, 225, 227, 254, 102, 179, 216, 82, 99, 95, - 189, 44, 201, 185, 80, 109, 253, 68, 210, 183, 123, 88, 211, 206, 128, 187, 192, 166, 243, 216, - 165, 154, 130, 31, 98, 49, 105, 210, 194, 247, 105, 92, 47, 241, 220, 129, 78, 197, 47, 137, - 235, 59, 195, 157, 246, 21, 24, 0, 220, 170, 160, 229, 47, 177, 210, 183, 4, 240, 206, 198, - 48, 57, 209, 28, 53, 139, 120, 85, 118, 149, 80, 182, 255, 26, 174, 143, 97, 131, 21, 125, - 79, 122, 202, 95, 13, 13, 126, 25, 102, 129, 26, 15, 234, 57, 127, 156, 195, 147, 253, 168, - 122, 31, 188, 106, 104, 8, 229, 77, 91, 1, 83, 185, 99, 210, 11, 130, 116, 2, 84, 115, - 125, 170, 123, 242, 241, 158, 118, 201, 134, 21, 80, 72, 218, 17, 59, 118, 99, 74, 255, 147, - 19, 247, 39, 242, 0, 254, 8, 0, 248, 144, 0, 184, 90, 92, 18, 217, 88, 162, 164, 230, - 226, 255, 164, 83, 159, 243, 198, 147, 132, 64, 247, 61, 73, 192, 19, 0, 56, 2, 134, 204, - 121, 202, 20, 56, 36, 213, 0, 148, 150, 79, 61, 108, 199, 100, 72, 44, 97, 144, 156, 239, - 21, 24, 125, 193, 243, 81, 200, 230, 144, 42, 3, 25, 176, 231, 18, 185, 174, 7, 85, 92, - 237, 203, 209, 166, 46, 27, 159, 198, 173, 85, 0, 242, 39, 56, 186, 33, 176, 190, 23, 70, - 161, 170, 55, 127, 58, 21, 55, 160, 215, 29, 8, 233, 216, 22, 87, 25, 225, 250, 30, 164, - 34, 62, 196, 59, 119, 9, 121, 85, 188, 159, 230, 61, 208, 150, 195, 20, 180, 62, 153, 24, - 65, 112, 38, 237, 53, 248, 33, 115, 163, 122, 9, 63, 158, 1, 32, 11, 182, 138, 69, 225, - 10, 25, 131, 41, 159, 252, 230, 18, 1, 43, 105, 214, 78, 107, 223, 197, 196, 19, 101, 66, - 87, 69, 160, 98, 14, 132, 182, 220, 97, 92, 232, 185, 36, 53, 253, 50, 140, 11, 21, 48, - 162, 138, 129, 46, 108, 228, 250, 79, 208, 6, 67, 180, 33, 145, 43, 53, 20, 0, 113, 36, - 79, 134, 116, 20, 124, 46, 222, 151, 89, 168, 167, 97, 199, 104, 61, 244, 115, 251, 14, 28, - 84, 237, 111, 29, 253, 46, 113, 213, 190, 206, 152, 59, 3, 70, 12, 153, 171, 115, 31, 6, - 148, 184, 252, 161, 170, 55, 130, 171, 126, 112, 236, 4, 221, 78, 0, 112, 116, 161, 128, 93, - 233, 220, 143, 231, 239, 24, 1, 2, 54, 72, 120, 163, 75, 164, 76, 175, 199, 95, 5, 0, - 92, 118, 189, 139, 121, 83, 3, 36, 179, 72, 117, 172, 194, 12, 140, 58, 1, 42, 148, 69, - 144, 1, 46, 228, 59, 103, 100, 210, 54, 192, 169, 33, 75, 147, 9, 93, 61, 125, 7, 16, - 168, 34, 161, 99, 32, 86, 219, 118, 237, 132, 87, 134, 56, 1, 8, 238, 111, 119, 223, 83, - 80, 233, 114, 0, 42, 144, 236, 12, 116, 247, 239, 105, 104, 245, 170, 84, 106, 22, 247, 254, - 54, 244, 174, 107, 217, 235, 186, 222, 205, 130, 150, 255, 200, 20, 36, 58, 250, 43, 163, 125, - 27, 86, 38, 165, 230, 213, 204, 189, 163, 203, 111, 3, 196, 111, 51, 71, 7, 22, 104, 119, - 190, 29, 85, 196, 105, 24, 20, 146, 253, 79, 37, 174, 105, 94, 199, 43, 224, 229, 211, 198, - 165, 175, 55, 118, 179, 251, 95, 233, 248, 71, 154, 228, 12, 67, 25, 81, 122, 191, 51, 170, - 180, 59, 30, 89, 212, 103, 48, 183, 89, 252, 94, 27, 6, 214, 221, 199, 180, 227, 94, 34, - 145, 92, 137, 5, 237, 52, 229, 33, 9, 150, 42, 64, 129, 51, 254, 67, 125, 117, 195, 5, - 192, 84, 119, 174, 221, 231, 31, 193, 201, 213, 0, 29, 10, 136, 232, 117, 191, 62, 252, 247, - 252, 237, 213, 92, 35, 61, 126, 87, 73, 36, 39, 9, 154, 23, 4, 89, 46, 36, 87, 49, - 151, 73, 169, 231, 142, 80, 214, 14, 216, 175, 140, 214, 8, 214, 49, 194, 198, 85, 140, 201, - 10, 116, 189, 90, 190, 58, 95, 184, 54, 207, 207, 86, 249, 22, 18, 175, 152, 170, 214, 186, - 9, 214, 235, 255, 57, 232, 186, 57, 222, 207, 98, 0, 10, 1, 32, 23, 6, 160, 158, 106, - 151, 0, 229, 186, 255, 209, 23, 59, 53, 114, 18, 235, 108, 165, 96, 1, 114, 199, 166, 11, - 76, 178, 120, 142, 5, 91, 226, 142, 159, 38, 17, 18, 118, 131, 122, 210, 83, 62, 9, 111, - 181, 8, 164, 70, 55, 233, 26, 152, 134, 3, 168, 32, 144, 99, 5, 42, 176, 223, 121, 109, - 180, 198, 188, 162, 224, 111, 213, 10, 128, 29, 45, 191, 242, 224, 93, 182, 251, 78, 7, 65, - 26, 18, 144, 88, 51, 159, 149, 50, 96, 170, 65, 160, 128, 230, 79, 104, 248, 42, 17, 110, - 138, 41, 10, 58, 15, 150, 118, 241, 163, 180, 183, 147, 74, 190, 31, 215, 58, 105, 185, 91, - 221, 227, 59, 164, 249, 5, 143, 85, 73, 4, 43, 8, 63, 252, 232, 16, 192, 40, 30, 206, - 142, 78, 79, 116, 233, 43, 32, 240, 113, 159, 239, 138, 143, 19, 61, 249, 180, 19, 97, 194, - 20, 204, 224, 58, 188, 226, 217, 16, 64, 65, 128, 148, 203, 175, 32, 247, 250, 10, 216, 128, - 81, 24, 186, 177, 177, 15, 7, 250, 156, 132, 115, 26, 14, 88, 93, 243, 25, 2, 105, 226, - 169, 116, 21, 4, 228, 61, 161, 205, 130, 58, 138, 187, 210, 212, 167, 128, 192, 169, 237, 237, - 188, 239, 43, 37, 196, 91, 125, 118, 59, 53, 32, 132, 166, 119, 52, 60, 53, 36, 171, 216, - 56, 213, 22, 160, 198, 208, 129, 5, 119, 93, 40, 80, 37, 243, 90, 133, 6, 102, 112, 175, - 19, 91, 80, 133, 85, 170, 82, 196, 255, 204, 233, 175, 169, 2, 128, 139, 209, 170, 228, 232, - 227, 203, 183, 99, 72, 223, 213, 189, 77, 27, 199, 118, 192, 224, 213, 5, 156, 170, 12, 118, - 116, 123, 103, 16, 136, 122, 98, 154, 40, 55, 197, 202, 239, 36, 30, 171, 167, 172, 196, 21, - 48, 65, 228, 154, 39, 90, 8, 228, 121, 187, 192, 125, 187, 0, 131, 226, 250, 94, 204, 6, - 136, 119, 61, 6, 238, 13, 239, 251, 227, 125, 191, 85, 39, 235, 221, 5, 128, 184, 84, 151, - 32, 14, 96, 160, 187, 24, 50, 49, 42, 255, 254, 255, 255, 153, 197, 223, 85, 34, 80, 131, - 219, 233, 239, 167, 137, 133, 59, 70, 183, 187, 54, 52, 33, 144, 174, 149, 183, 178, 254, 4, - 93, 247, 197, 106, 94, 55, 60, 47, 41, 203, 19, 113, 21, 6, 14, 168, 142, 127, 216, 241, - 79, 151, 4, 254, 106, 85, 0, 148, 222, 238, 188, 88, 170, 125, 159, 204, 137, 198, 131, 19, - 42, 94, 205, 2, 63, 23, 198, 196, 49, 13, 174, 66, 32, 237, 116, 72, 203, 232, 4, 175, - 1, 205, 9, 112, 212, 121, 2, 168, 104, 140, 49, 141, 37, 211, 186, 126, 137, 55, 9, 162, - 52, 63, 77, 8, 76, 251, 48, 84, 180, 250, 202, 155, 175, 18, 1, 93, 185, 212, 199, 197, - 249, 106, 24, 171, 171, 49, 8, 43, 67, 79, 21, 227, 58, 218, 123, 138, 229, 13, 221, 11, - 39, 132, 208, 244, 207, 80, 200, 221, 28, 187, 51, 130, 180, 108, 47, 245, 156, 19, 234, 159, - 24, 125, 146, 12, 250, 100, 125, 239, 192, 224, 187, 78, 128, 119, 97, 23, 110, 200, 110, 72, - 117, 66, 166, 251, 238, 219, 140, 79, 77, 2, 124, 36, 57, 36, 74, 128, 179, 88, 160, 146, - 158, 242, 196, 136, 82, 249, 212, 234, 65, 89, 37, 145, 84, 73, 48, 20, 236, 172, 202, 212, - 102, 56, 127, 90, 43, 46, 195, 124, 76, 241, 24, 117, 229, 245, 80, 111, 157, 178, 54, 85, - 188, 219, 73, 8, 83, 208, 50, 94, 248, 252, 210, 186, 63, 129, 99, 57, 46, 249, 228, 62, - 7, 76, 200, 188, 86, 127, 87, 199, 190, 228, 147, 14, 85, 236, 187, 3, 62, 21, 139, 65, - 24, 33, 5, 247, 103, 135, 57, 35, 21, 43, 238, 185, 189, 22, 207, 191, 251, 237, 4, 207, - 252, 104, 222, 77, 226, 196, 168, 112, 58, 18, 39, 205, 229, 224, 36, 172, 228, 132, 14, 210, - 52, 224, 60, 93, 247, 5, 238, 247, 132, 14, 80, 82, 222, 188, 124, 94, 62, 59, 17, 240, - 79, 48, 0, 59, 29, 251, 146, 236, 120, 215, 113, 143, 120, 175, 100, 190, 59, 137, 98, 132, - 29, 232, 174, 201, 42, 52, 242, 140, 185, 94, 193, 245, 234, 12, 98, 242, 2, 207, 133, 87, - 180, 163, 179, 79, 23, 104, 34, 134, 67, 216, 136, 68, 106, 247, 21, 15, 95, 97, 40, 224, - 21, 1, 161, 132, 29, 112, 11, 174, 22, 94, 127, 69, 207, 87, 222, 236, 84, 175, 26, 249, - 164, 244, 29, 19, 80, 189, 11, 171, 76, 110, 169, 14, 43, 86, 207, 136, 3, 232, 29, 173, - 238, 174, 27, 205, 93, 168, 114, 3, 110, 49, 1, 158, 21, 237, 77, 21, 249, 20, 220, 215, - 206, 211, 31, 240, 25, 33, 142, 81, 151, 107, 177, 99, 119, 100, 0, 215, 106, 126, 119, 51, - 223, 52, 12, 86, 42, 13, 254, 45, 33, 0, 66, 31, 207, 0, 109, 11, 122, 134, 149, 113, - 123, 103, 216, 128, 82, 88, 73, 111, 239, 142, 178, 38, 148, 191, 51, 156, 228, 26, 38, 33, - 140, 85, 254, 198, 21, 176, 48, 99, 227, 222, 18, 3, 221, 53, 236, 73, 152, 146, 196, 19, - 39, 115, 91, 205, 197, 37, 68, 18, 45, 8, 247, 247, 10, 44, 79, 227, 253, 92, 129, 193, - 80, 3, 22, 186, 170, 128, 167, 76, 111, 218, 253, 173, 242, 140, 73, 134, 122, 55, 63, 231, - 177, 238, 52, 212, 113, 134, 170, 171, 209, 119, 42, 118, 183, 88, 181, 128, 244, 158, 38, 53, - 164, 142, 126, 117, 254, 73, 23, 192, 36, 241, 112, 85, 57, 80, 221, 15, 167, 27, 144, 170, - 2, 186, 107, 113, 55, 247, 232, 103, 2, 128, 49, 198, 156, 115, 18, 143, 126, 54, 20, 87, - 82, 71, 154, 80, 61, 212, 200, 36, 212, 145, 91, 160, 171, 182, 190, 221, 245, 216, 1, 87, - 93, 102, 119, 66, 175, 83, 149, 63, 53, 231, 73, 192, 72, 34, 206, 243, 244, 222, 46, 101, - 146, 199, 132, 197, 185, 224, 92, 9, 69, 236, 140, 127, 42, 6, 180, 35, 18, 36, 173, 171, - 46, 158, 76, 78, 231, 237, 184, 246, 191, 233, 115, 42, 232, 189, 18, 192, 252, 236, 50, 232, - 132, 110, 84, 0, 143, 27, 26, 239, 174, 50, 33, 41, 41, 147, 234, 86, 194, 93, 171, 226, - 1, 230, 229, 178, 226, 59, 6, 130, 26, 190, 85, 223, 2, 137, 181, 52, 78, 202, 56, 87, - 231, 189, 58, 158, 99, 38, 94, 241, 226, 43, 134, 96, 4, 224, 237, 22, 175, 194, 248, 254, - 0, 224, 209, 3, 128, 180, 109, 117, 241, 30, 154, 184, 147, 124, 71, 74, 158, 210, 12, 126, - 234, 173, 61, 23, 103, 71, 185, 87, 2, 69, 137, 144, 198, 181, 56, 230, 4, 96, 162, 50, - 82, 83, 92, 68, 101, 23, 116, 85, 37, 131, 180, 42, 129, 38, 229, 13, 115, 78, 36, 236, - 115, 153, 243, 29, 141, 215, 79, 216, 137, 36, 81, 147, 128, 224, 20, 104, 86, 96, 96, 23, - 0, 172, 140, 252, 181, 248, 255, 51, 20, 209, 25, 224, 164, 214, 93, 15, 186, 189, 218, 23, - 209, 249, 32, 58, 11, 180, 57, 206, 74, 221, 174, 42, 105, 91, 117, 60, 220, 213, 36, 112, - 223, 187, 253, 59, 143, 58, 97, 33, 82, 239, 187, 154, 235, 101, 216, 17, 210, 50, 56, 209, - 2, 192, 97, 151, 207, 110, 10, 244, 105, 0, 96, 51, 185, 129, 148, 203, 85, 116, 203, 104, - 60, 30, 103, 140, 8, 245, 154, 44, 156, 83, 188, 95, 187, 235, 172, 182, 122, 89, 156, 178, - 89, 146, 28, 56, 27, 195, 147, 74, 22, 147, 102, 76, 21, 203, 145, 148, 102, 190, 146, 28, - 71, 216, 140, 97, 158, 157, 180, 237, 177, 155, 187, 99, 100, 104, 201, 226, 0, 134, 169, 203, - 134, 79, 68, 79, 220, 243, 190, 234, 178, 55, 3, 192, 151, 132, 208, 220, 2, 44, 0, 28, - 158, 121, 9, 31, 65, 199, 255, 107, 142, 239, 232, 245, 84, 72, 198, 1, 18, 21, 44, 194, - 179, 30, 157, 122, 217, 73, 121, 95, 82, 182, 231, 140, 182, 12, 229, 95, 53, 172, 34, 85, - 13, 52, 207, 225, 46, 152, 174, 149, 167, 79, 25, 1, 114, 190, 63, 191, 29, 240, 63, 244, - 255, 171, 49, 245, 9, 104, 204, 36, 254, 58, 129, 135, 72, 61, 22, 98, 96, 73, 249, 216, - 20, 143, 91, 15, 227, 249, 143, 226, 58, 237, 132, 57, 58, 42, 63, 53, 78, 105, 246, 245, - 128, 115, 167, 66, 53, 105, 103, 67, 66, 219, 119, 192, 245, 29, 202, 129, 142, 238, 79, 64, - 219, 104, 88, 160, 174, 177, 85, 71, 181, 127, 92, 164, 255, 143, 234, 250, 254, 209, 0, 98, - 170, 199, 62, 22, 244, 53, 89, 156, 213, 188, 43, 206, 144, 124, 12, 37, 84, 106, 133, 196, - 219, 85, 195, 0, 116, 6, 117, 197, 118, 116, 125, 5, 156, 49, 36, 33, 132, 29, 227, 77, - 156, 2, 1, 15, 155, 128, 56, 103, 64, 137, 126, 193, 170, 108, 176, 107, 255, 91, 129, 200, - 87, 114, 40, 254, 186, 110, 128, 187, 186, 247, 59, 141, 126, 136, 97, 238, 250, 169, 175, 22, - 74, 105, 191, 50, 129, 26, 172, 85, 110, 0, 73, 192, 19, 88, 236, 8, 80, 33, 108, 203, - 132, 94, 170, 59, 166, 3, 106, 41, 147, 209, 233, 212, 175, 158, 193, 11, 204, 133, 150, 141, - 17, 131, 125, 25, 3, 79, 192, 21, 185, 102, 21, 48, 112, 32, 129, 214, 180, 147, 5, 120, - 229, 85, 87, 255, 150, 1, 32, 2, 219, 174, 168, 90, 151, 87, 211, 25, 226, 213, 59, 116, - 43, 83, 28, 36, 29, 238, 186, 107, 173, 194, 59, 117, 236, 71, 231, 81, 119, 84, 61, 173, - 154, 72, 90, 9, 223, 13, 176, 170, 188, 240, 221, 181, 157, 52, 254, 169, 42, 38, 166, 114, - 149, 69, 146, 244, 72, 174, 209, 167, 179, 1, 159, 13, 0, 136, 17, 76, 122, 156, 191, 122, - 108, 66, 187, 87, 70, 121, 138, 39, 201, 37, 116, 63, 137, 193, 174, 22, 175, 29, 125, 128, - 39, 168, 153, 202, 146, 217, 46, 120, 109, 187, 56, 254, 132, 70, 170, 98, 50, 62, 54, 140, - 161, 109, 149, 147, 255, 95, 218, 147, 116, 190, 22, 191, 119, 207, 72, 154, 244, 88, 129, 217, - 167, 225, 151, 49, 152, 174, 58, 96, 213, 102, 119, 20, 116, 105, 98, 148, 110, 245, 181, 215, - 31, 21, 253, 186, 174, 126, 106, 88, 133, 97, 60, 180, 46, 111, 160, 243, 224, 137, 120, 79, - 69, 5, 119, 32, 33, 145, 226, 37, 235, 85, 5, 58, 118, 142, 77, 66, 26, 183, 188, 150, - 191, 12, 91, 241, 170, 17, 76, 251, 79, 36, 108, 137, 66, 112, 224, 128, 222, 253, 156, 223, - 103, 42, 2, 254, 201, 28, 128, 46, 209, 109, 37, 255, 219, 209, 103, 50, 158, 211, 43, 64, - 129, 10, 131, 172, 66, 10, 85, 230, 59, 49, 148, 29, 221, 218, 37, 65, 238, 118, 236, 27, - 1, 253, 187, 11, 198, 146, 70, 55, 43, 99, 176, 211, 121, 177, 3, 150, 52, 30, 175, 5, - 29, 43, 249, 174, 126, 221, 28, 46, 241, 10, 130, 234, 29, 112, 236, 77, 87, 94, 235, 114, - 89, 170, 204, 255, 203, 80, 159, 211, 176, 10, 50, 134, 188, 162, 191, 111, 245, 229, 125, 84, - 222, 183, 75, 222, 235, 60, 50, 82, 11, 223, 133, 80, 110, 177, 108, 120, 215, 54, 151, 120, - 222, 18, 83, 105, 36, 249, 19, 142, 1, 232, 174, 213, 174, 167, 222, 177, 140, 14, 128, 76, - 184, 45, 45, 217, 171, 230, 117, 55, 207, 235, 10, 248, 57, 38, 228, 211, 189, 255, 63, 193, - 0, 80, 4, 236, 98, 220, 50, 94, 173, 163, 154, 119, 40, 234, 110, 14, 93, 70, 253, 187, - 216, 138, 36, 123, 190, 138, 211, 79, 101, 225, 23, 82, 174, 185, 18, 32, 74, 247, 149, 120, - 199, 4, 140, 9, 24, 197, 36, 95, 32, 81, 147, 116, 128, 52, 233, 117, 32, 49, 29, 128, - 119, 180, 119, 149, 49, 200, 3, 120, 117, 221, 226, 93, 177, 83, 55, 216, 223, 173, 190, 39, - 5, 161, 239, 157, 65, 161, 32, 226, 249, 236, 187, 134, 64, 79, 249, 227, 91, 44, 161, 172, - 43, 219, 123, 39, 205, 76, 243, 5, 158, 57, 6, 55, 52, 178, 36, 233, 177, 234, 65, 65, - 68, 151, 158, 113, 124, 10, 56, 220, 115, 74, 231, 238, 152, 163, 202, 46, 145, 16, 218, 143, - 4, 0, 148, 250, 164, 11, 20, 141, 29, 207, 205, 69, 209, 209, 226, 29, 205, 220, 209, 146, - 36, 17, 48, 241, 176, 105, 249, 159, 194, 115, 73, 1, 194, 174, 126, 128, 251, 253, 170, 83, - 36, 97, 106, 42, 6, 161, 107, 222, 83, 53, 231, 33, 121, 3, 52, 187, 63, 13, 117, 165, - 229, 151, 29, 93, 77, 234, 198, 137, 135, 220, 121, 143, 4, 96, 85, 64, 99, 66, 96, 226, - 128, 128, 3, 43, 149, 90, 96, 213, 104, 136, 100, 157, 119, 173, 94, 119, 193, 202, 8, 175, - 87, 103, 244, 238, 102, 190, 78, 43, 63, 173, 10, 113, 229, 136, 29, 64, 188, 213, 235, 253, - 39, 121, 9, 218, 216, 190, 91, 243, 110, 0, 148, 72, 216, 104, 190, 48, 143, 111, 15, 0, - 94, 101, 14, 40, 133, 173, 198, 147, 159, 33, 197, 156, 118, 4, 124, 165, 123, 224, 42, 148, - 176, 171, 115, 32, 0, 134, 136, 36, 175, 2, 234, 121, 66, 218, 93, 192, 27, 126, 210, 237, - 4, 48, 80, 53, 191, 238, 89, 90, 37, 127, 74, 235, 56, 63, 97, 42, 220, 252, 137, 24, - 208, 104, 230, 72, 27, 10, 209, 103, 200, 45, 168, 99, 211, 59, 237, 126, 191, 74, 184, 19, - 160, 120, 105, 56, 192, 25, 86, 151, 244, 216, 181, 49, 22, 0, 26, 211, 204, 103, 197, 136, - 220, 224, 189, 238, 228, 107, 9, 173, 238, 0, 216, 78, 88, 196, 137, 48, 85, 66, 67, 14, - 108, 144, 114, 203, 196, 208, 19, 224, 184, 154, 155, 147, 67, 126, 103, 105, 228, 143, 0, 0, - 169, 72, 14, 89, 168, 92, 25, 158, 91, 32, 136, 17, 166, 82, 189, 175, 24, 231, 74, 220, - 134, 10, 233, 236, 120, 238, 116, 116, 215, 202, 209, 114, 9, 189, 78, 1, 92, 170, 126, 183, - 82, 245, 171, 246, 229, 180, 34, 210, 182, 203, 213, 62, 169, 128, 16, 45, 177, 172, 128, 1, - 209, 2, 232, 22, 230, 46, 241, 79, 15, 131, 181, 234, 89, 223, 229, 81, 184, 16, 65, 151, - 212, 218, 169, 244, 13, 227, 193, 210, 230, 59, 221, 179, 93, 137, 16, 189, 34, 84, 51, 196, - 99, 245, 84, 96, 230, 9, 34, 58, 53, 60, 7, 46, 110, 64, 93, 87, 122, 8, 137, 113, - 78, 115, 19, 104, 194, 102, 151, 31, 176, 83, 178, 151, 150, 127, 146, 117, 246, 231, 49, 0, - 15, 5, 64, 82, 18, 87, 105, 199, 83, 47, 155, 54, 84, 25, 5, 32, 168, 154, 219, 200, - 208, 176, 157, 39, 189, 67, 167, 39, 15, 14, 237, 158, 70, 65, 149, 99, 68, 198, 198, 125, - 73, 206, 191, 11, 225, 80, 195, 236, 84, 22, 187, 122, 254, 157, 198, 78, 59, 76, 9, 233, - 187, 144, 54, 20, 210, 2, 120, 36, 218, 22, 67, 92, 210, 244, 122, 120, 101, 151, 250, 54, - 194, 146, 167, 229, 171, 207, 167, 50, 137, 224, 206, 168, 187, 196, 61, 90, 33, 224, 188, 73, - 137, 135, 54, 92, 12, 251, 110, 60, 109, 106, 172, 156, 88, 154, 204, 181, 167, 215, 98, 167, - 217, 16, 1, 33, 174, 20, 117, 85, 114, 57, 13, 240, 34, 44, 194, 59, 157, 96, 11, 106, - 62, 75, 17, 240, 83, 0, 192, 135, 30, 0, 90, 24, 22, 215, 21, 144, 162, 124, 135, 170, - 168, 172, 111, 37, 61, 42, 213, 97, 6, 218, 202, 82, 47, 130, 132, 206, 56, 17, 207, 89, - 240, 119, 99, 115, 30, 29, 112, 35, 141, 104, 210, 26, 247, 209, 24, 111, 122, 205, 137, 208, - 82, 34, 46, 69, 0, 210, 5, 64, 132, 3, 27, 151, 250, 142, 141, 238, 154, 59, 218, 252, - 57, 254, 143, 214, 61, 209, 135, 184, 124, 246, 253, 120, 199, 238, 0, 56, 14, 227, 209, 167, - 249, 4, 183, 126, 213, 252, 127, 82, 215, 18, 139, 227, 58, 128, 65, 216, 5, 183, 166, 85, - 37, 147, 73, 175, 131, 202, 208, 39, 157, 253, 18, 53, 65, 106, 204, 221, 231, 119, 227, 177, - 119, 165, 143, 195, 128, 207, 228, 156, 40, 75, 226, 42, 20, 170, 92, 136, 249, 95, 147, 57, - 94, 213, 67, 64, 227, 250, 68, 6, 96, 133, 38, 43, 68, 58, 155, 155, 157, 8, 227, 60, - 1, 7, 165, 186, 5, 233, 66, 234, 101, 172, 22, 220, 9, 140, 70, 154, 172, 184, 3, 150, - 136, 176, 205, 43, 44, 198, 78, 5, 2, 213, 36, 119, 199, 157, 202, 75, 230, 104, 9, 211, - 78, 102, 191, 84, 203, 11, 83, 197, 192, 75, 255, 205, 61, 184, 180, 78, 72, 188, 30, 219, - 63, 75, 22, 47, 121, 49, 163, 170, 196, 241, 2, 215, 245, 18, 83, 54, 188, 0, 179, 228, - 128, 82, 114, 253, 200, 243, 116, 1, 54, 230, 85, 131, 161, 240, 253, 34, 37, 169, 244, 247, - 213, 154, 75, 0, 24, 149, 52, 119, 235, 212, 52, 107, 47, 125, 135, 37, 46, 41, 157, 94, - 91, 186, 159, 105, 128, 213, 202, 134, 85, 159, 141, 133, 205, 252, 222, 12, 128, 121, 17, 87, - 23, 140, 104, 246, 207, 198, 208, 92, 208, 43, 145, 121, 185, 169, 242, 158, 107, 26, 210, 133, - 54, 58, 41, 86, 137, 245, 86, 79, 202, 212, 72, 105, 77, 42, 80, 148, 10, 240, 184, 90, - 249, 142, 5, 24, 96, 219, 1, 239, 85, 7, 130, 104, 243, 29, 1, 207, 187, 107, 16, 180, - 35, 23, 172, 194, 104, 17, 22, 132, 86, 4, 36, 212, 165, 75, 98, 75, 179, 247, 29, 64, - 175, 116, 2, 18, 170, 85, 90, 135, 250, 42, 122, 152, 138, 190, 56, 118, 224, 121, 141, 220, - 177, 187, 115, 90, 101, 156, 87, 239, 56, 105, 54, 148, 156, 35, 145, 59, 150, 178, 102, 59, - 183, 185, 207, 228, 186, 188, 218, 198, 120, 39, 76, 145, 56, 127, 85, 67, 167, 63, 82, 5, - 112, 233, 207, 14, 170, 25, 79, 111, 236, 206, 131, 163, 55, 94, 252, 1, 144, 169, 235, 6, - 38, 200, 124, 184, 110, 100, 163, 249, 124, 53, 151, 20, 72, 116, 130, 68, 157, 17, 164, 192, - 208, 85, 44, 56, 99, 226, 88, 148, 1, 207, 173, 242, 180, 72, 217, 223, 202, 208, 147, 240, - 130, 10, 47, 122, 165, 130, 120, 1, 230, 97, 24, 22, 96, 60, 216, 132, 209, 48, 5, 23, - 220, 255, 101, 152, 45, 42, 115, 76, 64, 228, 52, 32, 61, 5, 109, 2, 96, 202, 49, 104, - 228, 59, 1, 48, 78, 158, 239, 78, 50, 121, 66, 176, 189, 227, 32, 117, 247, 119, 170, 110, - 221, 62, 149, 133, 75, 245, 34, 235, 224, 156, 7, 169, 238, 250, 73, 108, 207, 108, 192, 102, - 39, 94, 53, 129, 189, 248, 209, 0, 96, 135, 238, 158, 197, 69, 158, 202, 203, 160, 166, 88, - 137, 88, 74, 177, 57, 195, 73, 141, 100, 133, 226, 167, 161, 200, 134, 1, 18, 206, 171, 167, - 73, 78, 211, 120, 133, 195, 80, 100, 221, 253, 148, 241, 230, 43, 221, 251, 221, 222, 8, 164, - 66, 197, 105, 249, 79, 241, 100, 196, 209, 80, 207, 46, 4, 176, 50, 222, 82, 79, 249, 75, - 53, 69, 127, 201, 135, 53, 86, 215, 150, 200, 28, 87, 64, 101, 135, 174, 79, 19, 123, 211, - 253, 210, 207, 39, 248, 29, 105, 197, 77, 215, 192, 238, 153, 154, 98, 14, 212, 59, 232, 112, - 183, 14, 116, 115, 84, 1, 84, 102, 64, 157, 191, 194, 252, 77, 241, 138, 130, 105, 140, 59, - 1, 167, 82, 221, 231, 34, 105, 66, 247, 215, 0, 0, 5, 6, 191, 122, 25, 171, 242, 147, - 25, 120, 127, 83, 125, 22, 113, 245, 217, 132, 94, 234, 238, 75, 232, 30, 16, 247, 160, 118, - 117, 211, 206, 27, 74, 188, 246, 234, 133, 112, 225, 11, 87, 218, 83, 177, 40, 116, 97, 38, - 94, 39, 241, 126, 58, 26, 61, 109, 73, 236, 22, 119, 122, 109, 37, 31, 151, 95, 1, 6, - 201, 231, 10, 12, 200, 0, 56, 97, 171, 110, 225, 188, 224, 249, 19, 70, 128, 60, 203, 149, - 119, 71, 171, 58, 46, 177, 184, 185, 123, 6, 157, 199, 235, 88, 202, 25, 172, 31, 132, 177, - 148, 121, 182, 137, 241, 165, 107, 34, 9, 3, 210, 190, 40, 93, 12, 126, 6, 107, 232, 19, - 68, 78, 56, 215, 1, 109, 85, 199, 126, 252, 145, 241, 213, 0, 128, 43, 225, 113, 223, 59, - 74, 167, 66, 120, 142, 74, 147, 184, 124, 230, 239, 98, 68, 4, 104, 177, 21, 99, 64, 251, - 141, 79, 224, 9, 147, 253, 36, 139, 161, 91, 152, 137, 17, 160, 236, 9, 121, 134, 42, 189, - 0, 215, 32, 136, 44, 134, 35, 252, 239, 50, 94, 255, 0, 243, 114, 30, 254, 101, 188, 118, - 183, 143, 138, 161, 232, 66, 23, 171, 133, 86, 134, 213, 185, 12, 69, 155, 48, 120, 4, 64, - 116, 139, 117, 71, 171, 211, 82, 203, 25, 0, 187, 29, 167, 192, 85, 171, 72, 117, 66, 178, - 91, 7, 165, 190, 69, 110, 226, 180, 164, 206, 31, 5, 87, 83, 125, 136, 101, 0, 130, 165, - 119, 212, 0, 0, 32, 0, 73, 68, 65, 84, 219, 51, 228, 27, 7, 165, 243, 252, 93, 182, - 226, 91, 0, 128, 119, 137, 212, 236, 52, 212, 153, 13, 202, 171, 30, 130, 1, 30, 20, 26, - 203, 127, 197, 40, 190, 122, 77, 187, 94, 228, 213, 203, 51, 213, 103, 171, 186, 5, 140, 130, - 13, 189, 120, 47, 29, 64, 216, 105, 12, 228, 40, 90, 151, 44, 70, 246, 173, 128, 9, 184, - 0, 21, 252, 172, 4, 232, 0, 3, 245, 248, 169, 166, 129, 99, 55, 28, 11, 227, 84, 20, - 29, 64, 216, 169, 12, 34, 97, 139, 149, 83, 32, 245, 138, 139, 157, 195, 66, 195, 129, 169, - 247, 174, 130, 161, 234, 60, 122, 183, 206, 209, 178, 204, 25, 172, 65, 238, 126, 208, 223, 16, - 118, 164, 210, 119, 89, 49, 140, 83, 188, 116, 115, 183, 37, 251, 151, 5, 7, 95, 129, 1, - 248, 221, 39, 237, 20, 165, 146, 166, 64, 221, 226, 68, 233, 220, 174, 122, 96, 6, 94, 10, - 1, 74, 151, 50, 157, 118, 119, 141, 28, 56, 114, 8, 59, 145, 31, 222, 93, 144, 200, 130, - 153, 84, 32, 208, 38, 70, 85, 86, 126, 162, 226, 39, 192, 62, 144, 100, 194, 202, 208, 14, - 0, 34, 58, 224, 64, 88, 0, 25, 230, 224, 130, 94, 121, 117, 45, 8, 229, 76, 192, 87, - 247, 188, 77, 245, 61, 23, 8, 179, 48, 12, 91, 231, 234, 216, 73, 30, 194, 108, 12, 158, - 10, 106, 220, 197, 194, 147, 245, 249, 130, 219, 206, 224, 223, 213, 218, 58, 205, 123, 61, 1, - 43, 59, 26, 38, 169, 43, 211, 251, 29, 172, 133, 154, 115, 254, 57, 0, 96, 81, 207, 56, - 130, 69, 251, 157, 0, 195, 45, 24, 51, 184, 193, 174, 177, 133, 123, 217, 220, 49, 43, 133, - 171, 93, 233, 74, 66, 39, 78, 3, 136, 158, 26, 216, 228, 101, 171, 158, 185, 119, 81, 134, - 180, 58, 96, 4, 215, 104, 55, 252, 65, 170, 51, 72, 142, 128, 192, 182, 4, 8, 92, 250, - 85, 39, 224, 50, 76, 64, 85, 105, 208, 133, 41, 46, 112, 62, 52, 155, 127, 24, 166, 201, - 177, 38, 87, 115, 189, 105, 189, 124, 103, 148, 83, 131, 233, 192, 99, 151, 183, 51, 195, 227, - 173, 132, 109, 200, 179, 245, 138, 65, 115, 134, 220, 173, 13, 174, 169, 155, 123, 87, 158, 9, - 136, 50, 172, 174, 219, 86, 98, 149, 24, 239, 118, 102, 59, 169, 237, 239, 13, 0, 254, 145, - 51, 172, 98, 70, 59, 9, 17, 239, 240, 22, 233, 203, 154, 210, 249, 211, 160, 83, 247, 224, - 19, 182, 96, 66, 106, 138, 116, 65, 219, 57, 47, 154, 81, 93, 133, 13, 222, 225, 129, 144, - 18, 157, 87, 74, 159, 146, 74, 4, 26, 111, 166, 207, 40, 1, 6, 68, 136, 39, 45, 3, - 116, 219, 118, 64, 135, 50, 3, 132, 117, 91, 237, 247, 50, 239, 152, 243, 62, 7, 188, 199, - 73, 82, 107, 181, 159, 25, 172, 91, 52, 201, 77, 5, 115, 64, 75, 88, 95, 53, 82, 35, - 120, 87, 73, 168, 46, 1, 92, 207, 117, 99, 54, 14, 11, 77, 242, 235, 238, 175, 83, 50, - 37, 78, 18, 117, 106, 218, 243, 254, 12, 49, 160, 207, 98, 0, 118, 123, 33, 39, 9, 52, - 238, 133, 223, 121, 1, 18, 186, 153, 138, 212, 116, 198, 185, 83, 190, 115, 215, 112, 54, 30, - 123, 10, 140, 220, 139, 67, 22, 57, 90, 170, 148, 24, 202, 241, 194, 203, 217, 209, 181, 50, - 52, 108, 250, 76, 174, 50, 231, 43, 241, 159, 174, 246, 184, 51, 250, 18, 79, 210, 187, 22, - 139, 220, 128, 191, 39, 37, 130, 163, 89, 91, 168, 242, 225, 106, 126, 228, 30, 187, 138, 12, - 71, 75, 59, 73, 236, 180, 193, 149, 196, 243, 129, 136, 232, 85, 165, 219, 145, 176, 128, 148, - 61, 75, 203, 167, 135, 57, 103, 39, 197, 43, 249, 170, 43, 23, 2, 157, 47, 172, 227, 21, - 43, 225, 62, 95, 229, 73, 73, 92, 15, 1, 201, 127, 127, 70, 47, 128, 207, 78, 2, 220, - 69, 193, 14, 33, 83, 185, 222, 87, 95, 26, 153, 135, 187, 163, 119, 58, 52, 47, 213, 37, - 40, 171, 23, 63, 17, 29, 73, 132, 52, 62, 35, 89, 49, 17, 64, 153, 205, 34, 92, 9, - 159, 200, 128, 179, 46, 119, 195, 25, 38, 7, 60, 42, 48, 208, 233, 48, 92, 225, 162, 231, - 188, 124, 103, 200, 59, 202, 254, 130, 76, 64, 117, 221, 46, 96, 208, 187, 231, 148, 244, 135, - 144, 88, 137, 41, 121, 14, 100, 222, 159, 46, 249, 149, 50, 61, 187, 73, 118, 228, 56, 164, - 18, 129, 228, 59, 40, 112, 48, 86, 140, 30, 1, 217, 191, 107, 253, 127, 151, 52, 115, 218, - 28, 136, 72, 214, 119, 85, 36, 149, 157, 152, 111, 184, 38, 95, 14, 0, 12, 72, 123, 36, - 117, 188, 196, 64, 205, 55, 62, 36, 132, 154, 171, 196, 122, 70, 131, 8, 39, 164, 251, 82, - 239, 249, 137, 84, 187, 69, 116, 247, 126, 237, 0, 192, 9, 12, 40, 89, 56, 103, 56, 127, - 210, 5, 141, 212, 36, 19, 229, 183, 148, 201, 32, 177, 115, 162, 246, 167, 194, 240, 62, 85, - 254, 42, 213, 63, 10, 58, 36, 159, 189, 47, 112, 79, 71, 112, 191, 105, 150, 191, 75, 188, - 237, 158, 125, 71, 91, 39, 186, 17, 9, 147, 246, 170, 3, 148, 50, 114, 149, 83, 49, 193, - 243, 59, 27, 16, 246, 238, 53, 131, 0, 149, 119, 0, 6, 218, 198, 151, 190, 183, 132, 237, - 169, 216, 132, 255, 253, 238, 71, 132, 0, 26, 143, 125, 40, 215, 161, 175, 126, 71, 36, 96, - 233, 139, 60, 130, 23, 157, 10, 186, 80, 196, 78, 106, 88, 187, 223, 85, 148, 104, 69, 185, - 173, 106, 126, 105, 119, 195, 93, 96, 82, 209, 173, 164, 187, 215, 43, 204, 196, 20, 207, 9, - 32, 11, 63, 121, 126, 136, 55, 171, 230, 190, 85, 70, 142, 132, 3, 136, 170, 160, 10, 96, - 64, 18, 252, 40, 8, 121, 5, 240, 56, 208, 189, 147, 208, 183, 187, 200, 43, 88, 171, 186, - 251, 71, 52, 41, 136, 210, 93, 162, 156, 74, 186, 23, 82, 163, 59, 140, 147, 225, 126, 147, - 202, 181, 147, 231, 41, 249, 253, 78, 15, 7, 218, 218, 184, 170, 186, 24, 134, 249, 93, 62, - 227, 63, 41, 4, 208, 181, 159, 28, 141, 231, 220, 93, 92, 71, 255, 146, 142, 124, 21, 146, - 117, 181, 160, 100, 65, 114, 113, 123, 186, 96, 37, 101, 127, 21, 115, 48, 140, 39, 62, 13, - 245, 55, 224, 182, 201, 185, 14, 48, 175, 212, 3, 167, 76, 82, 103, 152, 39, 100, 98, 58, - 207, 51, 165, 123, 147, 206, 118, 207, 223, 117, 42, 122, 93, 146, 159, 180, 238, 5, 80, 109, - 219, 133, 26, 18, 175, 136, 24, 169, 228, 58, 187, 48, 142, 204, 125, 39, 162, 57, 187, 158, - 165, 243, 186, 29, 51, 144, 120, 253, 211, 188, 215, 238, 221, 156, 225, 245, 153, 33, 187, 146, - 174, 103, 20, 68, 189, 226, 164, 57, 27, 213, 37, 52, 175, 236, 86, 202, 158, 76, 229, 33, - 236, 111, 9, 0, 186, 228, 176, 213, 226, 79, 84, 236, 42, 227, 238, 106, 122, 43, 93, 230, - 9, 95, 200, 164, 92, 240, 85, 122, 79, 225, 11, 172, 226, 225, 36, 47, 59, 93, 188, 137, - 135, 146, 128, 64, 183, 64, 76, 3, 184, 166, 184, 48, 139, 204, 203, 218, 25, 25, 162, 144, - 214, 237, 227, 210, 58, 225, 47, 105, 179, 74, 219, 14, 239, 196, 245, 19, 79, 95, 230, 217, - 145, 234, 30, 13, 206, 163, 123, 53, 103, 133, 196, 192, 73, 39, 187, 25, 172, 105, 212, 144, - 184, 68, 57, 250, 238, 80, 163, 236, 168, 123, 25, 102, 149, 26, 182, 207, 112, 28, 119, 88, - 3, 170, 220, 231, 58, 187, 142, 205, 231, 210, 149, 31, 142, 130, 189, 253, 180, 150, 192, 159, - 85, 6, 232, 228, 119, 187, 27, 209, 221, 172, 234, 129, 157, 96, 193, 159, 13, 122, 174, 144, - 153, 19, 5, 162, 177, 164, 87, 94, 8, 218, 73, 203, 149, 228, 80, 10, 43, 201, 114, 157, - 198, 163, 77, 64, 131, 19, 69, 154, 13, 235, 227, 232, 67, 74, 255, 38, 160, 214, 45, 96, - 180, 127, 64, 101, 240, 175, 77, 70, 163, 3, 9, 21, 221, 95, 105, 1, 84, 243, 117, 101, - 137, 19, 128, 4, 114, 78, 93, 254, 0, 125, 6, 36, 46, 62, 69, 22, 253, 164, 148, 208, - 209, 190, 195, 252, 191, 18, 251, 233, 152, 44, 242, 89, 181, 6, 106, 195, 17, 250, 93, 9, - 216, 73, 243, 164, 234, 30, 186, 4, 188, 97, 174, 79, 149, 24, 73, 156, 174, 78, 134, 121, - 121, 220, 31, 17, 2, 248, 7, 197, 144, 184, 119, 183, 96, 79, 245, 89, 214, 196, 24, 58, - 36, 61, 229, 75, 130, 220, 220, 221, 139, 157, 122, 19, 171, 251, 53, 66, 180, 219, 45, 66, - 41, 96, 113, 106, 92, 106, 94, 158, 14, 29, 87, 247, 117, 128, 243, 76, 20, 18, 73, 206, - 9, 89, 88, 157, 177, 158, 198, 120, 185, 123, 208, 121, 173, 180, 98, 129, 176, 0, 213, 223, - 210, 127, 105, 254, 213, 243, 151, 122, 231, 68, 122, 151, 44, 150, 110, 45, 115, 116, 106, 71, - 217, 18, 217, 104, 210, 81, 142, 178, 2, 105, 73, 155, 91, 235, 186, 174, 123, 163, 241, 56, - 5, 206, 177, 98, 80, 147, 181, 236, 149, 60, 45, 146, 79, 51, 197, 146, 126, 59, 97, 33, - 199, 116, 38, 121, 95, 180, 74, 100, 121, 109, 126, 106, 18, 96, 103, 136, 221, 131, 51, 193, - 66, 186, 50, 234, 19, 190, 204, 211, 208, 198, 9, 165, 36, 177, 164, 168, 68, 47, 188, 187, - 102, 151, 246, 227, 150, 59, 42, 97, 73, 178, 94, 42, 200, 147, 34, 233, 238, 217, 112, 84, - 61, 105, 205, 73, 153, 13, 55, 199, 87, 74, 164, 18, 13, 4, 87, 207, 95, 121, 237, 14, - 32, 144, 197, 144, 150, 252, 209, 36, 219, 174, 1, 16, 1, 235, 171, 80, 12, 125, 126, 103, - 240, 126, 144, 80, 6, 121, 198, 71, 227, 37, 10, 60, 11, 68, 39, 32, 49, 76, 10, 214, - 182, 196, 153, 113, 128, 176, 74, 244, 78, 152, 180, 170, 148, 250, 213, 46, 138, 21, 219, 242, - 14, 166, 227, 83, 199, 159, 2, 0, 73, 139, 71, 247, 59, 162, 25, 237, 164, 111, 159, 15, - 222, 108, 12, 132, 203, 168, 29, 198, 187, 157, 224, 33, 237, 174, 195, 48, 158, 205, 239, 0, - 104, 206, 40, 18, 48, 65, 227, 238, 52, 131, 158, 38, 224, 117, 70, 103, 167, 41, 209, 171, - 192, 214, 45, 64, 164, 66, 133, 24, 215, 68, 179, 255, 18, 83, 239, 235, 230, 208, 201, 178, - 166, 34, 78, 169, 254, 126, 146, 28, 54, 205, 123, 149, 244, 219, 232, 222, 211, 9, 175, 27, - 121, 134, 40, 11, 162, 224, 186, 207, 55, 172, 17, 52, 59, 158, 50, 114, 110, 109, 171, 170, - 13, 92, 238, 216, 52, 107, 239, 52, 235, 57, 101, 33, 159, 239, 248, 171, 33, 147, 31, 11, - 0, 136, 103, 70, 51, 53, 21, 60, 132, 85, 188, 75, 13, 85, 214, 61, 112, 29, 114, 117, - 205, 40, 18, 42, 205, 229, 25, 252, 201, 123, 55, 213, 231, 38, 144, 107, 151, 50, 67, 238, - 133, 119, 198, 158, 180, 72, 117, 139, 148, 163, 241, 94, 17, 127, 161, 77, 109, 100, 60, 222, - 46, 4, 80, 105, 3, 116, 140, 197, 101, 158, 79, 82, 6, 155, 26, 104, 170, 34, 234, 226, - 231, 175, 26, 121, 2, 144, 59, 195, 225, 214, 141, 20, 0, 118, 108, 228, 128, 107, 236, 187, - 215, 112, 18, 242, 28, 205, 90, 60, 27, 135, 168, 98, 68, 136, 126, 72, 5, 48, 134, 1, - 23, 201, 121, 80, 70, 72, 0, 96, 252, 21, 0, 224, 93, 154, 212, 84, 208, 102, 2, 207, - 161, 75, 12, 236, 146, 209, 72, 22, 177, 67, 167, 174, 65, 197, 103, 34, 200, 177, 113, 31, - 186, 115, 165, 158, 125, 117, 222, 132, 82, 159, 0, 241, 83, 52, 78, 18, 15, 211, 235, 79, - 19, 20, 37, 175, 146, 72, 174, 229, 5, 153, 1, 71, 249, 39, 109, 108, 83, 225, 28, 242, - 12, 36, 229, 159, 18, 75, 12, 77, 75, 238, 200, 2, 63, 55, 214, 182, 185, 49, 7, 210, - 174, 252, 51, 156, 131, 36, 167, 107, 119, 223, 180, 92, 119, 128, 239, 118, 89, 55, 186, 6, - 207, 13, 103, 231, 143, 26, 255, 63, 13, 0, 200, 67, 78, 12, 104, 117, 131, 40, 237, 227, - 12, 223, 128, 8, 156, 200, 99, 146, 133, 235, 119, 2, 168, 119, 178, 53, 174, 108, 205, 213, - 54, 87, 253, 184, 165, 60, 17, 113, 199, 19, 74, 85, 221, 18, 154, 211, 37, 135, 38, 64, - 43, 9, 133, 116, 11, 168, 211, 248, 119, 219, 147, 122, 118, 226, 249, 239, 202, 81, 19, 74, - 149, 230, 76, 36, 137, 187, 93, 220, 57, 17, 175, 162, 149, 34, 19, 56, 34, 95, 33, 198, - 76, 245, 64, 170, 178, 108, 162, 64, 40, 195, 6, 13, 245, 26, 253, 239, 244, 186, 211, 242, - 87, 10, 126, 15, 0, 88, 220, 204, 238, 161, 169, 110, 58, 93, 8, 58, 234, 191, 162, 120, - 72, 63, 107, 218, 67, 220, 37, 254, 140, 230, 69, 249, 83, 15, 206, 48, 244, 156, 91, 100, - 157, 151, 68, 189, 202, 17, 126, 150, 120, 162, 36, 71, 224, 223, 243, 186, 0, 27, 226, 228, - 141, 119, 202, 8, 119, 107, 211, 159, 243, 170, 196, 125, 72, 57, 98, 39, 181, 61, 33, 152, - 167, 114, 190, 73, 89, 32, 189, 38, 180, 65, 15, 85, 41, 149, 153, 183, 192, 115, 57, 130, - 243, 118, 108, 199, 212, 251, 100, 115, 223, 185, 166, 239, 0, 122, 210, 186, 215, 197, 219, 187, - 144, 193, 234, 122, 77, 192, 12, 186, 22, 237, 41, 75, 248, 199, 238, 211, 87, 1, 0, 206, - 3, 164, 229, 34, 137, 234, 88, 87, 106, 228, 212, 4, 157, 199, 51, 141, 71, 65, 128, 137, - 154, 135, 235, 85, 47, 96, 87, 96, 101, 183, 213, 50, 185, 15, 169, 36, 169, 32, 64, 35, - 73, 147, 52, 43, 248, 153, 137, 60, 192, 115, 176, 98, 141, 28, 40, 164, 137, 143, 206, 187, - 233, 168, 212, 85, 204, 63, 5, 152, 85, 18, 173, 243, 160, 59, 0, 185, 195, 132, 165, 13, - 112, 72, 201, 27, 89, 168, 199, 198, 220, 168, 49, 79, 222, 95, 23, 26, 34, 235, 207, 206, - 187, 76, 115, 89, 104, 171, 117, 137, 119, 84, 36, 210, 223, 221, 26, 67, 4, 126, 166, 97, - 42, 187, 223, 87, 204, 230, 151, 170, 16, 248, 10, 0, 96, 66, 99, 88, 121, 164, 73, 12, - 246, 213, 204, 213, 142, 246, 119, 15, 181, 171, 12, 152, 47, 188, 88, 233, 203, 249, 174, 22, - 154, 239, 2, 28, 110, 81, 124, 37, 39, 161, 98, 103, 104, 43, 102, 186, 80, 187, 28, 15, - 103, 220, 147, 185, 36, 85, 50, 206, 24, 86, 178, 190, 84, 176, 135, 220, 43, 170, 57, 65, - 66, 112, 51, 120, 63, 201, 187, 56, 194, 117, 42, 201, 213, 161, 207, 8, 53, 142, 59, 239, - 92, 55, 23, 10, 148, 104, 254, 145, 107, 178, 180, 42, 229, 27, 96, 155, 238, 254, 57, 193, - 54, 218, 199, 160, 43, 27, 127, 69, 182, 120, 5, 92, 190, 66, 34, 247, 151, 1, 0, 187, - 104, 184, 235, 15, 237, 218, 233, 170, 160, 142, 40, 109, 79, 133, 133, 186, 5, 221, 61, 148, - 100, 49, 216, 173, 243, 77, 129, 206, 171, 15, 235, 132, 231, 157, 60, 27, 100, 129, 39, 12, - 141, 128, 231, 190, 195, 70, 41, 124, 150, 100, 158, 177, 17, 94, 155, 196, 243, 116, 141, 91, - 18, 175, 120, 190, 192, 246, 236, 120, 227, 164, 162, 102, 165, 156, 151, 2, 100, 26, 247, 223, - 106, 252, 34, 86, 186, 167, 141, 235, 67, 159, 69, 146, 200, 60, 130, 123, 226, 206, 153, 84, - 82, 145, 202, 162, 234, 249, 74, 122, 197, 188, 194, 64, 253, 14, 230, 228, 71, 3, 128, 78, - 78, 177, 91, 76, 119, 181, 228, 59, 74, 167, 66, 101, 174, 61, 172, 99, 45, 118, 117, 204, - 223, 121, 141, 137, 55, 180, 211, 175, 96, 110, 190, 8, 51, 220, 119, 226, 33, 186, 69, 109, - 26, 195, 177, 203, 56, 76, 227, 193, 237, 198, 251, 119, 129, 208, 48, 207, 192, 42, 86, 60, - 55, 175, 31, 5, 157, 36, 25, 115, 23, 136, 186, 48, 66, 199, 242, 237, 128, 50, 23, 106, - 74, 67, 10, 67, 190, 132, 246, 29, 70, 136, 148, 183, 81, 32, 247, 206, 247, 158, 200, 169, - 175, 222, 57, 87, 34, 77, 218, 61, 15, 120, 95, 40, 104, 164, 239, 244, 95, 31, 2, 232, - 104, 198, 105, 22, 83, 183, 224, 174, 30, 16, 39, 210, 145, 42, 109, 117, 114, 155, 142, 250, - 161, 236, 6, 121, 64, 223, 9, 40, 210, 210, 195, 119, 44, 6, 20, 240, 77, 240, 153, 163, - 46, 105, 62, 2, 53, 114, 85, 29, 49, 137, 249, 209, 94, 21, 201, 189, 32, 236, 198, 191, - 251, 184, 27, 16, 176, 250, 206, 221, 19, 2, 166, 136, 56, 11, 165, 197, 147, 144, 192, 16, - 11, 175, 237, 118, 232, 27, 27, 159, 185, 103, 117, 190, 248, 222, 62, 247, 117, 235, 247, 138, - 134, 237, 50, 113, 35, 120, 190, 135, 97, 52, 42, 25, 247, 148, 73, 232, 222, 71, 162, 2, - 59, 55, 159, 143, 191, 10, 0, 164, 70, 143, 196, 74, 73, 243, 13, 210, 208, 195, 181, 129, - 173, 0, 74, 39, 85, 73, 202, 23, 83, 3, 251, 25, 200, 146, 202, 102, 38, 234, 107, 233, - 139, 68, 250, 63, 16, 217, 102, 34, 22, 68, 141, 157, 84, 39, 100, 14, 0, 166, 8, 208, - 25, 193, 117, 74, 61, 124, 125, 48, 244, 31, 141, 195, 45, 222, 96, 137, 232, 40, 236, 148, - 88, 18, 80, 65, 193, 31, 5, 124, 93, 13, 247, 124, 97, 126, 180, 54, 188, 107, 84, 230, - 216, 82, 170, 174, 152, 176, 130, 116, 141, 38, 239, 160, 224, 179, 154, 74, 160, 119, 37, 222, - 157, 122, 171, 235, 198, 71, 219, 72, 207, 134, 141, 160, 235, 241, 151, 96, 2, 190, 26, 0, - 72, 141, 34, 137, 227, 145, 182, 176, 221, 3, 209, 181, 200, 156, 13, 8, 168, 94, 198, 116, - 193, 122, 53, 158, 255, 187, 219, 17, 167, 138, 103, 36, 177, 134, 120, 218, 206, 80, 185, 6, - 84, 206, 184, 85, 247, 51, 245, 38, 6, 88, 136, 233, 34, 77, 60, 62, 154, 36, 247, 17, - 4, 220, 170, 107, 207, 171, 249, 118, 221, 47, 73, 41, 218, 110, 153, 157, 243, 186, 72, 126, - 199, 10, 148, 85, 213, 53, 187, 222, 51, 9, 253, 85, 199, 28, 6, 84, 237, 94, 135, 119, - 228, 23, 36, 44, 156, 107, 148, 67, 213, 30, 59, 149, 190, 97, 88, 175, 36, 151, 97, 54, - 236, 215, 104, 28, 202, 157, 117, 247, 232, 0, 4, 23, 135, 36, 249, 168, 89, 192, 28, 229, - 70, 98, 132, 3, 120, 198, 84, 248, 38, 49, 244, 243, 77, 47, 236, 46, 224, 26, 205, 130, - 217, 137, 112, 56, 227, 228, 106, 198, 119, 66, 36, 51, 88, 188, 18, 209, 166, 46, 254, 232, - 232, 194, 46, 239, 132, 60, 223, 212, 160, 173, 158, 205, 249, 240, 236, 159, 116, 63, 9, 7, - 16, 214, 193, 121, 208, 130, 247, 248, 54, 94, 241, 220, 120, 87, 156, 94, 133, 123, 15, 9, - 144, 164, 239, 33, 13, 23, 78, 3, 122, 200, 115, 241, 110, 3, 179, 147, 12, 186, 122, 15, - 82, 118, 40, 1, 34, 164, 74, 164, 243, 226, 147, 222, 18, 3, 174, 47, 95, 122, 124, 85, - 37, 192, 116, 49, 223, 233, 106, 37, 240, 187, 169, 94, 56, 162, 242, 238, 4, 104, 36, 114, - 62, 221, 2, 48, 222, 248, 146, 19, 73, 211, 1, 190, 167, 20, 24, 189, 119, 206, 200, 82, - 182, 135, 118, 61, 172, 26, 139, 208, 196, 85, 103, 236, 70, 0, 134, 232, 188, 42, 79, 189, - 51, 246, 207, 191, 239, 5, 96, 88, 109, 59, 193, 130, 74, 128, 74, 197, 36, 164, 160, 142, - 122, 192, 55, 184, 166, 21, 96, 32, 12, 160, 99, 157, 146, 142, 128, 157, 200, 216, 12, 223, - 255, 223, 221, 32, 204, 1, 15, 23, 158, 27, 193, 61, 167, 33, 220, 42, 28, 32, 192, 230, - 209, 92, 48, 129, 53, 203, 37, 53, 254, 245, 0, 32, 241, 240, 156, 241, 233, 190, 115, 158, - 222, 16, 87, 246, 123, 181, 129, 72, 69, 165, 82, 175, 57, 73, 156, 121, 197, 227, 167, 153, - 187, 196, 219, 113, 170, 102, 196, 75, 76, 26, 111, 56, 99, 88, 221, 99, 242, 44, 117, 207, - 30, 137, 177, 38, 96, 34, 173, 228, 152, 128, 109, 185, 27, 32, 113, 131, 125, 172, 206, 243, - 14, 152, 149, 132, 33, 32, 49, 120, 194, 158, 164, 137, 124, 85, 103, 67, 199, 86, 77, 213, - 73, 119, 148, 225, 218, 145, 55, 38, 202, 117, 127, 122, 141, 167, 242, 206, 105, 175, 23, 194, - 136, 16, 128, 210, 229, 87, 184, 92, 162, 157, 166, 118, 127, 53, 0, 72, 234, 154, 9, 186, - 39, 241, 24, 247, 240, 57, 36, 186, 43, 62, 66, 40, 169, 106, 31, 137, 55, 228, 30, 204, - 29, 239, 172, 51, 234, 211, 24, 219, 174, 121, 135, 75, 168, 234, 190, 119, 9, 55, 148, 13, - 34, 82, 210, 164, 140, 78, 192, 171, 77, 22, 122, 87, 81, 112, 3, 112, 211, 209, 250, 79, - 70, 224, 54, 247, 179, 171, 14, 112, 224, 204, 37, 34, 18, 112, 68, 222, 149, 97, 22, 233, - 91, 125, 153, 175, 147, 230, 222, 233, 243, 78, 114, 33, 92, 185, 36, 101, 154, 198, 230, 26, - 53, 195, 119, 144, 172, 45, 169, 160, 153, 147, 76, 79, 228, 199, 85, 176, 97, 221, 62, 87, - 189, 3, 82, 166, 229, 119, 245, 102, 248, 20, 230, 224, 179, 1, 128, 163, 114, 157, 71, 229, - 114, 3, 58, 239, 138, 208, 175, 169, 71, 66, 22, 192, 223, 241, 0, 16, 145, 143, 1, 140, - 11, 97, 67, 100, 232, 179, 81, 28, 163, 51, 222, 105, 61, 184, 51, 178, 2, 127, 83, 21, - 182, 4, 189, 119, 20, 50, 213, 65, 119, 52, 116, 215, 44, 233, 6, 158, 190, 30, 159, 85, - 30, 252, 173, 58, 95, 160, 98, 8, 232, 115, 158, 54, 241, 154, 47, 174, 41, 196, 59, 28, - 134, 225, 112, 207, 189, 3, 143, 169, 23, 88, 245, 8, 32, 202, 161, 110, 13, 28, 112, 189, - 216, 149, 72, 118, 235, 51, 13, 109, 13, 248, 174, 77, 200, 56, 18, 86, 111, 40, 171, 246, - 24, 16, 216, 146, 182, 214, 127, 188, 103, 195, 111, 7, 0, 99, 12, 42, 150, 178, 90, 64, - 73, 220, 215, 37, 163, 13, 240, 50, 172, 94, 160, 164, 77, 228, 239, 100, 74, 222, 241, 219, - 9, 169, 175, 89, 44, 60, 93, 91, 223, 106, 49, 73, 22, 114, 42, 56, 51, 197, 148, 223, - 40, 66, 239, 232, 115, 23, 62, 32, 20, 108, 231, 13, 147, 184, 244, 4, 32, 84, 198, 251, - 93, 197, 244, 111, 249, 4, 193, 110, 145, 35, 57, 7, 157, 225, 218, 109, 90, 147, 230, 78, - 116, 76, 218, 124, 225, 93, 123, 55, 176, 239, 202, 86, 159, 96, 160, 74, 100, 91, 129, 155, - 36, 198, 238, 214, 229, 93, 176, 254, 217, 215, 213, 129, 175, 85, 110, 215, 8, 215, 10, 218, - 86, 190, 146, 24, 38, 21, 106, 159, 18, 58, 248, 237, 0, 96, 206, 153, 38, 9, 13, 243, - 64, 87, 55, 128, 122, 224, 68, 165, 175, 50, 54, 187, 73, 33, 187, 94, 238, 238, 126, 187, - 242, 197, 10, 244, 12, 213, 10, 88, 110, 225, 119, 6, 151, 246, 110, 79, 41, 215, 41, 70, - 167, 11, 2, 135, 41, 158, 157, 239, 128, 0, 57, 143, 21, 248, 114, 70, 206, 129, 150, 213, - 253, 185, 197, 98, 250, 110, 63, 52, 227, 223, 245, 189, 160, 32, 141, 230, 10, 168, 113, 50, - 136, 71, 60, 0, 99, 68, 19, 32, 137, 129, 118, 12, 198, 40, 60, 205, 148, 238, 239, 40, - 239, 207, 54, 238, 116, 189, 123, 231, 220, 220, 179, 233, 108, 208, 108, 12, 125, 194, 150, 56, - 150, 33, 101, 212, 190, 15, 0, 0, 6, 223, 25, 41, 103, 212, 86, 55, 164, 171, 65, 117, - 141, 121, 210, 132, 155, 212, 19, 79, 144, 56, 141, 31, 211, 112, 65, 151, 221, 220, 49, 31, - 105, 183, 197, 21, 56, 35, 101, 145, 187, 2, 71, 115, 99, 251, 185, 177, 253, 43, 73, 126, - 142, 249, 232, 202, 44, 59, 227, 79, 98, 254, 210, 175, 84, 255, 29, 120, 253, 213, 182, 171, - 16, 132, 171, 26, 112, 236, 75, 250, 30, 209, 184, 111, 229, 169, 209, 248, 184, 99, 189, 200, - 121, 82, 22, 203, 37, 233, 18, 101, 81, 87, 161, 211, 85, 56, 185, 250, 252, 185, 249, 188, - 187, 188, 142, 119, 133, 30, 40, 144, 216, 101, 129, 58, 45, 135, 169, 94, 89, 178, 10, 239, - 252, 82, 65, 240, 96, 207, 191, 39, 0, 248, 231, 36, 102, 184, 16, 15, 121, 49, 8, 250, - 112, 166, 194, 36, 187, 61, 157, 19, 175, 181, 3, 69, 164, 39, 117, 133, 232, 7, 92, 88, - 38, 124, 161, 29, 32, 73, 178, 180, 147, 151, 118, 110, 188, 172, 137, 156, 241, 110, 66, 212, - 128, 215, 44, 161, 205, 233, 54, 221, 119, 21, 213, 255, 12, 55, 208, 164, 63, 105, 77, 229, - 19, 229, 193, 234, 90, 223, 6, 76, 17, 6, 98, 7, 92, 15, 237, 39, 102, 38, 107, 196, - 59, 186, 252, 209, 117, 106, 66, 134, 79, 198, 8, 77, 249, 242, 186, 217, 172, 51, 149, 146, - 30, 53, 174, 35, 156, 127, 34, 144, 181, 3, 68, 156, 34, 172, 187, 7, 180, 154, 171, 98, - 17, 254, 179, 205, 7, 246, 252, 251, 2, 128, 197, 73, 16, 57, 221, 196, 99, 238, 98, 245, - 41, 109, 191, 91, 222, 183, 139, 46, 157, 90, 23, 81, 175, 27, 27, 222, 181, 83, 37, 124, - 39, 13, 53, 193, 34, 60, 1, 200, 233, 208, 117, 183, 159, 87, 250, 177, 119, 94, 73, 162, - 112, 151, 130, 96, 106, 160, 87, 255, 190, 11, 131, 127, 23, 219, 221, 139, 237, 110, 249, 228, - 192, 27, 0, 237, 14, 204, 144, 176, 157, 75, 42, 35, 146, 207, 105, 248, 165, 187, 55, 93, - 70, 186, 75, 50, 118, 165, 163, 175, 52, 4, 162, 146, 209, 142, 201, 34, 201, 167, 105, 79, - 134, 174, 42, 40, 101, 241, 126, 183, 71, 220, 137, 106, 13, 245, 210, 243, 84, 232, 140, 232, - 105, 252, 206, 230, 80, 127, 132, 1, 160, 74, 90, 52, 121, 204, 137, 243, 36, 168, 252, 213, - 7, 140, 212, 31, 187, 126, 6, 196, 147, 160, 165, 99, 157, 140, 174, 138, 133, 184, 163, 14, - 221, 252, 104, 252, 235, 14, 233, 186, 234, 51, 146, 160, 38, 224, 109, 58, 15, 124, 5, 2, - 186, 234, 143, 202, 208, 221, 112, 33, 158, 226, 212, 255, 109, 140, 110, 117, 172, 46, 249, 239, - 22, 207, 9, 184, 205, 179, 123, 155, 249, 56, 3, 152, 104, 57, 56, 195, 231, 128, 197, 16, - 147, 179, 166, 204, 161, 123, 231, 146, 117, 99, 183, 137, 146, 91, 231, 58, 37, 202, 78, 106, - 119, 108, 128, 151, 177, 241, 30, 118, 185, 64, 239, 236, 103, 144, 128, 42, 183, 254, 118, 226, - 63, 85, 210, 96, 251, 188, 252, 136, 16, 192, 63, 12, 64, 242, 50, 39, 66, 51, 206, 155, - 35, 223, 239, 162, 81, 66, 241, 40, 56, 135, 142, 206, 159, 5, 93, 214, 169, 148, 165, 116, - 38, 53, 238, 174, 25, 143, 83, 50, 75, 196, 109, 164, 172, 14, 152, 188, 244, 55, 88, 72, - 137, 54, 63, 245, 60, 187, 28, 8, 226, 233, 223, 144, 65, 168, 4, 121, 110, 99, 252, 171, - 134, 64, 206, 99, 156, 0, 232, 56, 80, 230, 104, 111, 23, 23, 38, 101, 114, 211, 220, 211, - 196, 160, 82, 239, 52, 53, 88, 46, 249, 172, 59, 247, 1, 222, 189, 213, 241, 238, 224, 28, - 158, 199, 35, 6, 108, 132, 172, 221, 0, 115, 166, 204, 31, 205, 97, 112, 108, 49, 45, 77, - 36, 64, 99, 0, 166, 229, 63, 219, 253, 136, 16, 64, 120, 209, 38, 160, 9, 7, 188, 201, - 206, 75, 112, 10, 84, 19, 208, 86, 157, 94, 248, 142, 82, 158, 123, 104, 157, 33, 120, 37, - 94, 158, 24, 99, 74, 71, 119, 47, 196, 142, 119, 151, 130, 151, 68, 194, 119, 128, 249, 211, - 126, 229, 83, 175, 121, 172, 50, 94, 49, 77, 216, 187, 155, 251, 246, 204, 13, 160, 2, 66, - 180, 100, 112, 194, 107, 225, 24, 155, 36, 225, 140, 196, 205, 103, 225, 153, 166, 239, 74, 181, - 63, 193, 103, 40, 237, 147, 224, 168, 247, 78, 42, 122, 215, 11, 150, 120, 206, 11, 89, 187, - 100, 192, 182, 192, 57, 19, 39, 143, 36, 59, 39, 96, 137, 56, 144, 51, 56, 127, 1, 166, - 96, 252, 164, 36, 192, 223, 21, 219, 122, 133, 2, 218, 105, 72, 49, 192, 139, 65, 95, 122, - 98, 108, 210, 50, 194, 170, 89, 13, 145, 20, 78, 99, 224, 187, 10, 89, 73, 139, 91, 210, - 141, 143, 54, 41, 114, 215, 141, 40, 205, 17, 153, 92, 1, 16, 146, 24, 203, 219, 24, 109, - 39, 237, 219, 197, 250, 103, 241, 89, 245, 111, 133, 243, 159, 225, 2, 74, 65, 232, 109, 222, - 171, 36, 87, 96, 192, 103, 162, 218, 15, 237, 250, 183, 147, 144, 58, 213, 231, 195, 116, 244, - 178, 75, 172, 163, 173, 159, 119, 215, 236, 9, 215, 97, 218, 116, 45, 41, 183, 163, 225, 24, - 90, 137, 148, 178, 140, 116, 187, 110, 173, 158, 63, 137, 1, 72, 59, 224, 253, 206, 99, 239, - 52, 23, 153, 192, 48, 238, 190, 240, 4, 100, 124, 244, 238, 82, 143, 221, 93, 99, 39, 120, - 68, 226, 229, 84, 108, 133, 36, 0, 118, 158, 141, 204, 2, 158, 120, 114, 59, 242, 203, 157, - 236, 44, 209, 36, 72, 61, 141, 91, 123, 213, 3, 68, 76, 104, 199, 211, 239, 228, 131, 29, - 21, 123, 203, 119, 25, 164, 243, 235, 158, 167, 85, 44, 150, 72, 125, 239, 148, 146, 82, 54, - 138, 2, 118, 146, 20, 249, 212, 68, 33, 165, 166, 116, 95, 239, 106, 96, 67, 122, 118, 116, - 235, 207, 128, 239, 214, 43, 153, 254, 85, 14, 15, 93, 79, 82, 118, 187, 90, 211, 74, 160, - 246, 25, 12, 192, 255, 213, 231, 141, 46, 198, 146, 178, 4, 211, 160, 195, 46, 150, 211, 205, - 225, 250, 240, 217, 245, 248, 222, 245, 134, 254, 23, 80, 37, 199, 118, 231, 182, 43, 36, 212, - 85, 90, 184, 237, 135, 185, 111, 83, 60, 86, 54, 130, 57, 14, 115, 127, 147, 115, 112, 244, - 95, 229, 33, 77, 240, 251, 42, 201, 114, 52, 160, 237, 82, 95, 106, 212, 121, 67, 195, 44, - 22, 179, 89, 204, 171, 122, 227, 105, 174, 41, 245, 170, 41, 35, 208, 25, 249, 27, 236, 55, - 81, 115, 124, 254, 238, 22, 175, 166, 32, 13, 149, 82, 199, 193, 209, 207, 119, 243, 187, 1, - 65, 116, 103, 92, 110, 213, 74, 116, 250, 176, 205, 243, 189, 184, 197, 194, 142, 41, 48, 32, - 33, 31, 106, 72, 5, 175, 153, 22, 235, 201, 29, 56, 16, 175, 200, 122, 119, 206, 219, 52, - 128, 237, 183, 143, 207, 204, 1, 152, 208, 131, 37, 30, 220, 40, 80, 172, 235, 159, 77, 42, - 2, 166, 49, 22, 41, 242, 31, 155, 47, 204, 216, 124, 193, 86, 94, 80, 165, 44, 150, 120, - 42, 201, 194, 183, 195, 0, 81, 26, 56, 173, 154, 24, 27, 139, 200, 234, 89, 165, 215, 224, - 149, 132, 191, 202, 104, 210, 12, 253, 213, 117, 90, 149, 245, 117, 222, 125, 87, 251, 239, 170, - 17, 186, 133, 142, 206, 185, 99, 190, 94, 145, 39, 222, 5, 208, 221, 179, 64, 243, 115, 186, - 115, 220, 5, 206, 196, 67, 165, 130, 68, 163, 0, 15, 73, 157, 254, 4, 247, 232, 29, 78, - 36, 49, 188, 93, 101, 7, 21, 125, 146, 177, 37, 221, 220, 6, 4, 17, 180, 69, 244, 143, - 0, 0, 201, 11, 56, 194, 197, 182, 82, 185, 234, 234, 58, 41, 117, 41, 101, 82, 156, 239, - 188, 153, 132, 10, 119, 70, 136, 148, 2, 185, 242, 43, 66, 95, 118, 72, 218, 189, 72, 175, - 36, 119, 145, 133, 142, 94, 55, 119, 45, 137, 218, 156, 123, 86, 171, 133, 232, 134, 199, 73, - 146, 238, 186, 109, 93, 254, 64, 82, 22, 72, 181, 1, 136, 199, 61, 181, 151, 224, 55, 224, - 122, 225, 12, 118, 82, 189, 64, 68, 98, 92, 21, 11, 121, 158, 102, 184, 54, 58, 112, 62, - 0, 11, 70, 242, 106, 134, 250, 92, 132, 1, 89, 163, 157, 48, 109, 26, 178, 28, 240, 26, - 80, 229, 210, 180, 85, 119, 98, 255, 62, 109, 124, 10, 0, 248, 16, 203, 72, 47, 24, 161, - 167, 43, 163, 87, 149, 151, 140, 130, 54, 221, 101, 38, 222, 1, 120, 28, 67, 65, 123, 172, - 147, 107, 227, 40, 171, 29, 105, 207, 78, 107, 59, 85, 116, 75, 140, 42, 97, 139, 28, 139, - 64, 174, 67, 119, 28, 23, 151, 191, 155, 115, 169, 60, 232, 138, 42, 191, 27, 131, 237, 234, - 252, 87, 243, 73, 12, 253, 78, 215, 192, 138, 49, 80, 0, 196, 41, 235, 113, 135, 247, 75, - 208, 99, 157, 47, 172, 7, 73, 155, 238, 142, 149, 234, 52, 3, 170, 107, 66, 66, 60, 201, - 123, 50, 228, 123, 54, 172, 0, 68, 215, 8, 135, 150, 222, 237, 86, 9, 37, 96, 176, 98, - 150, 137, 166, 139, 19, 246, 25, 225, 252, 62, 37, 254, 255, 105, 0, 224, 67, 54, 99, 202, - 0, 144, 134, 27, 9, 101, 38, 176, 240, 71, 167, 22, 26, 84, 25, 26, 110, 64, 47, 62, - 161, 28, 211, 115, 169, 202, 25, 119, 75, 93, 94, 5, 86, 187, 125, 226, 169, 71, 70, 141, - 58, 145, 168, 77, 146, 245, 220, 241, 170, 24, 44, 41, 215, 155, 6, 68, 164, 137, 127, 105, - 12, 221, 233, 24, 36, 201, 138, 55, 120, 127, 6, 48, 20, 148, 1, 144, 246, 216, 137, 68, - 237, 113, 39, 65, 150, 40, 23, 86, 253, 236, 29, 187, 152, 56, 103, 43, 67, 55, 12, 53, - 238, 156, 147, 10, 212, 172, 142, 241, 202, 122, 77, 236, 205, 78, 197, 70, 210, 213, 143, 72, - 163, 127, 74, 5, 128, 244, 185, 73, 128, 50, 212, 89, 69, 211, 76, 243, 247, 165, 117, 24, - 96, 188, 56, 71, 201, 203, 21, 87, 249, 7, 213, 203, 241, 49, 217, 176, 123, 121, 86, 15, - 251, 21, 94, 223, 228, 243, 234, 58, 186, 107, 209, 45, 50, 14, 5, 171, 241, 86, 230, 3, - 164, 118, 137, 118, 221, 124, 239, 199, 117, 115, 74, 107, 29, 240, 28, 226, 66, 53, 244, 51, - 183, 40, 37, 157, 243, 158, 219, 220, 234, 19, 95, 159, 207, 239, 78, 3, 152, 157, 207, 8, - 21, 156, 202, 10, 83, 150, 231, 153, 252, 69, 243, 73, 72, 55, 55, 2, 46, 87, 251, 162, - 73, 142, 41, 120, 149, 185, 214, 59, 231, 224, 128, 74, 146, 189, 79, 222, 165, 52, 41, 47, - 237, 28, 249, 10, 248, 73, 156, 32, 26, 230, 153, 255, 63, 1, 48, 110, 125, 194, 248, 19, - 66, 64, 149, 120, 78, 133, 74, 135, 222, 83, 46, 152, 36, 187, 85, 165, 68, 4, 213, 167, - 106, 89, 169, 114, 159, 123, 232, 7, 244, 24, 156, 124, 114, 146, 191, 144, 208, 248, 213, 231, - 55, 184, 7, 169, 130, 224, 0, 222, 167, 187, 167, 201, 249, 173, 188, 214, 85, 114, 28, 213, - 21, 80, 224, 197, 119, 186, 255, 206, 208, 58, 149, 64, 199, 42, 36, 149, 1, 183, 242, 108, - 123, 162, 20, 72, 246, 185, 98, 82, 232, 245, 239, 188, 69, 53, 160, 130, 188, 87, 115, 99, - 59, 235, 69, 202, 183, 190, 117, 130, 103, 164, 135, 125, 74, 203, 83, 45, 147, 33, 214, 218, - 185, 99, 81, 119, 214, 173, 20, 12, 144, 94, 48, 93, 111, 151, 229, 115, 245, 19, 25, 128, - 105, 78, 124, 245, 80, 94, 170, 203, 173, 4, 30, 238, 116, 78, 43, 239, 51, 1, 53, 196, - 51, 92, 177, 9, 201, 124, 171, 158, 212, 43, 42, 240, 105, 72, 199, 6, 67, 208, 121, 207, - 85, 174, 197, 71, 207, 221, 189, 40, 122, 176, 34, 29, 227, 210, 205, 101, 229, 209, 238, 148, - 237, 117, 9, 165, 93, 221, 244, 92, 176, 13, 149, 151, 93, 221, 143, 91, 251, 2, 75, 228, - 89, 169, 174, 199, 199, 99, 211, 62, 7, 148, 226, 166, 202, 136, 36, 177, 80, 98, 189, 6, - 104, 253, 184, 147, 48, 190, 141, 97, 166, 201, 161, 169, 32, 86, 162, 133, 79, 98, 219, 206, - 168, 167, 170, 149, 100, 251, 202, 217, 73, 43, 9, 156, 17, 30, 198, 11, 159, 15, 70, 236, - 54, 215, 121, 183, 37, 113, 218, 25, 213, 9, 143, 125, 202, 248, 236, 36, 64, 183, 32, 188, - 130, 26, 9, 245, 182, 90, 216, 43, 196, 214, 105, 239, 187, 250, 242, 29, 109, 131, 119, 60, - 80, 59, 25, 234, 10, 31, 184, 212, 27, 22, 216, 126, 130, 151, 218, 25, 26, 71, 53, 187, - 69, 230, 21, 250, 217, 53, 242, 73, 26, 246, 208, 18, 192, 149, 40, 207, 173, 62, 110, 47, - 213, 137, 128, 210, 186, 189, 240, 221, 60, 51, 183, 114, 234, 94, 202, 242, 10, 134, 88, 238, - 133, 0, 253, 74, 26, 48, 185, 53, 200, 85, 1, 56, 144, 148, 52, 171, 114, 239, 236, 52, - 108, 196, 43, 162, 54, 149, 87, 190, 155, 40, 73, 128, 16, 201, 235, 114, 215, 193, 37, 76, - 86, 70, 214, 137, 50, 37, 182, 102, 135, 17, 255, 207, 62, 63, 43, 9, 240, 79, 228, 0, - 80, 175, 51, 105, 2, 51, 140, 1, 38, 244, 213, 213, 120, 108, 9, 117, 69, 90, 129, 166, - 222, 253, 147, 17, 185, 224, 117, 116, 215, 119, 192, 185, 116, 76, 205, 245, 226, 125, 150, 88, - 174, 71, 87, 118, 228, 242, 65, 174, 224, 222, 13, 112, 45, 86, 243, 190, 181, 46, 53, 213, - 195, 240, 145, 235, 112, 235, 87, 33, 159, 74, 215, 193, 201, 159, 86, 207, 242, 52, 11, 113, - 210, 235, 97, 23, 52, 81, 45, 3, 7, 122, 137, 247, 184, 18, 8, 74, 22, 122, 90, 70, - 90, 177, 7, 67, 89, 146, 217, 78, 146, 178, 171, 10, 72, 99, 224, 169, 130, 229, 52, 172, - 153, 187, 46, 169, 83, 226, 12, 249, 13, 24, 137, 39, 75, 144, 230, 233, 220, 96, 109, 33, - 182, 237, 63, 251, 153, 115, 142, 159, 166, 4, 40, 64, 93, 175, 104, 236, 46, 17, 111, 26, - 131, 221, 81, 197, 46, 41, 45, 165, 229, 105, 247, 171, 234, 60, 186, 196, 192, 1, 12, 21, - 49, 186, 78, 233, 174, 50, 200, 157, 49, 116, 101, 46, 21, 32, 163, 0, 99, 24, 79, 236, - 99, 162, 95, 5, 18, 254, 53, 168, 23, 69, 224, 240, 187, 187, 0, 99, 10, 0, 164, 83, - 34, 188, 12, 120, 232, 218, 44, 119, 53, 221, 93, 216, 106, 151, 114, 166, 134, 154, 234, 33, - 40, 0, 4, 73, 63, 130, 25, 204, 139, 234, 25, 84, 198, 96, 54, 231, 213, 25, 137, 1, - 246, 253, 124, 222, 238, 198, 72, 237, 200, 29, 239, 120, 185, 46, 111, 167, 123, 30, 223, 217, - 153, 49, 41, 95, 254, 24, 34, 32, 85, 30, 169, 230, 66, 220, 156, 237, 39, 51, 0, 46, - 118, 219, 121, 196, 163, 240, 254, 92, 108, 155, 72, 244, 238, 202, 17, 87, 52, 217, 104, 24, - 133, 42, 254, 61, 0, 72, 73, 217, 133, 74, 217, 106, 52, 247, 131, 178, 22, 3, 204, 165, - 243, 236, 221, 125, 167, 231, 62, 1, 224, 163, 96, 229, 249, 210, 127, 52, 244, 195, 48, 62, - 228, 26, 77, 0, 70, 170, 248, 189, 212, 87, 76, 12, 245, 122, 24, 73, 140, 151, 84, 6, - 220, 234, 51, 191, 93, 172, 190, 218, 158, 48, 4, 212, 67, 38, 125, 27, 104, 66, 98, 210, - 213, 80, 161, 119, 184, 27, 143, 79, 188, 248, 161, 58, 231, 161, 186, 198, 59, 204, 133, 196, - 242, 59, 102, 1, 82, 134, 122, 245, 199, 157, 118, 191, 130, 207, 8, 93, 191, 168, 180, 111, - 247, 142, 191, 163, 20, 253, 219, 50, 0, 29, 53, 59, 11, 175, 142, 232, 152, 87, 12, 194, - 14, 29, 222, 25, 150, 103, 210, 26, 73, 88, 124, 229, 248, 206, 83, 175, 246, 191, 50, 82, - 23, 164, 191, 29, 216, 73, 180, 250, 157, 225, 174, 12, 230, 243, 188, 158, 30, 191, 26, 22, - 72, 98, 141, 78, 86, 70, 250, 82, 174, 254, 232, 104, 214, 11, 48, 26, 42, 230, 82, 129, - 197, 119, 150, 191, 86, 20, 182, 128, 97, 32, 139, 127, 71, 109, 39, 57, 19, 130, 236, 194, - 106, 97, 190, 181, 95, 133, 33, 176, 13, 217, 78, 226, 161, 8, 53, 20, 251, 29, 92, 119, - 226, 25, 119, 180, 122, 7, 34, 86, 115, 25, 225, 57, 141, 226, 223, 9, 224, 73, 18, 232, - 94, 105, 244, 51, 205, 185, 38, 2, 81, 67, 251, 33, 136, 111, 9, 0, 212, 120, 193, 2, - 192, 224, 25, 243, 165, 244, 208, 0, 6, 77, 5, 227, 208, 177, 18, 132, 222, 165, 198, 178, - 242, 96, 47, 173, 251, 30, 208, 196, 149, 180, 114, 194, 209, 88, 180, 90, 160, 82, 216, 170, - 88, 131, 46, 99, 94, 6, 92, 77, 120, 174, 46, 59, 255, 249, 219, 187, 97, 80, 146, 198, - 63, 213, 194, 186, 2, 26, 215, 3, 232, 124, 204, 9, 184, 229, 197, 93, 72, 8, 133, 62, - 175, 210, 158, 122, 223, 202, 8, 221, 141, 177, 119, 30, 249, 74, 33, 241, 6, 243, 17, 240, - 94, 41, 248, 112, 198, 168, 43, 189, 117, 115, 76, 181, 6, 168, 32, 86, 154, 255, 225, 74, - 32, 239, 198, 88, 165, 221, 251, 156, 128, 211, 43, 10, 128, 137, 156, 111, 53, 239, 164, 119, - 13, 109, 33, 222, 149, 100, 15, 73, 250, 44, 13, 0, 103, 64, 223, 107, 237, 127, 173, 4, - 32, 15, 49, 53, 104, 59, 20, 219, 10, 84, 84, 242, 193, 213, 241, 71, 240, 192, 239, 162, - 111, 193, 69, 232, 119, 131, 180, 244, 5, 164, 47, 75, 130, 172, 59, 143, 136, 198, 166, 19, - 35, 67, 190, 119, 127, 191, 170, 130, 231, 234, 242, 87, 13, 125, 164, 181, 18, 31, 237, 21, - 224, 170, 8, 232, 254, 200, 124, 43, 185, 227, 59, 96, 20, 186, 239, 92, 236, 156, 60, 39, - 9, 27, 64, 132, 119, 82, 5, 199, 36, 230, 76, 215, 14, 194, 86, 164, 224, 163, 114, 182, - 210, 22, 218, 201, 218, 84, 61, 15, 164, 43, 235, 40, 28, 171, 29, 70, 129, 174, 113, 118, - 173, 253, 44, 13, 128, 63, 193, 0, 116, 244, 125, 170, 201, 79, 41, 208, 78, 76, 232, 163, - 7, 182, 162, 149, 59, 218, 159, 228, 13, 184, 16, 128, 203, 208, 238, 218, 193, 142, 55, 221, - 139, 142, 165, 88, 37, 185, 209, 100, 61, 53, 159, 185, 144, 130, 0, 195, 177, 242, 154, 171, - 235, 68, 218, 139, 58, 237, 6, 183, 224, 85, 222, 125, 183, 8, 124, 204, 7, 152, 13, 3, - 54, 12, 139, 176, 98, 15, 70, 67, 177, 18, 129, 21, 87, 139, 238, 64, 59, 245, 200, 93, - 169, 159, 235, 4, 72, 91, 249, 210, 228, 192, 85, 210, 220, 44, 60, 225, 68, 76, 74, 198, - 219, 79, 18, 222, 86, 49, 104, 226, 56, 56, 48, 49, 2, 96, 148, 28, 87, 102, 77, 160, - 57, 4, 59, 206, 15, 145, 86, 238, 188, 246, 17, 50, 72, 4, 60, 236, 168, 21, 254, 8, - 0, 176, 3, 14, 146, 18, 173, 203, 32, 64, 137, 139, 241, 16, 9, 92, 119, 30, 50, 115, - 171, 144, 167, 192, 49, 93, 162, 152, 123, 24, 137, 40, 144, 235, 201, 64, 197, 140, 200, 177, - 59, 99, 223, 37, 225, 109, 161, 108, 240, 220, 60, 207, 249, 126, 24, 87, 39, 240, 227, 152, - 140, 78, 151, 226, 94, 128, 2, 18, 198, 121, 82, 180, 149, 192, 21, 169, 139, 190, 225, 2, - 69, 203, 253, 156, 247, 156, 150, 254, 237, 118, 242, 235, 154, 54, 73, 117, 243, 166, 234, 216, - 183, 120, 181, 65, 151, 0, 87, 37, 190, 117, 6, 208, 209, 206, 9, 251, 72, 117, 46, 28, - 11, 163, 240, 56, 43, 137, 230, 91, 189, 200, 24, 9, 151, 236, 130, 87, 39, 83, 95, 57, - 33, 247, 198, 188, 254, 4, 171, 251, 101, 1, 128, 139, 77, 94, 134, 226, 25, 141, 129, 169, - 188, 197, 202, 40, 168, 1, 15, 78, 58, 83, 128, 37, 112, 250, 243, 187, 215, 110, 108, 48, - 35, 213, 124, 58, 160, 145, 8, 51, 145, 235, 74, 159, 1, 137, 171, 11, 202, 48, 13, 247, - 194, 224, 126, 92, 12, 46, 253, 170, 240, 119, 63, 62, 31, 170, 75, 137, 100, 128, 213, 173, - 94, 46, 250, 227, 190, 46, 245, 218, 8, 21, 35, 115, 131, 103, 182, 91, 232, 171, 115, 34, - 49, 114, 7, 0, 110, 8, 4, 186, 223, 220, 139, 207, 111, 115, 12, 53, 158, 222, 106, 251, - 36, 111, 129, 8, 156, 37, 96, 199, 49, 63, 106, 12, 152, 211, 117, 216, 113, 208, 8, 147, - 145, 0, 14, 250, 60, 201, 220, 183, 119, 85, 3, 116, 160, 211, 49, 65, 195, 60, 211, 56, - 57, 242, 179, 74, 0, 165, 63, 211, 11, 128, 80, 75, 93, 71, 186, 97, 94, 42, 18, 183, - 185, 33, 253, 228, 18, 247, 58, 185, 77, 66, 161, 38, 15, 155, 243, 182, 94, 45, 129, 145, - 241, 26, 118, 21, 189, 220, 226, 71, 98, 230, 148, 214, 92, 233, 211, 19, 239, 134, 120, 162, - 110, 251, 91, 89, 114, 81, 34, 149, 91, 181, 226, 149, 214, 122, 252, 93, 119, 191, 46, 54, - 95, 25, 105, 215, 123, 64, 139, 185, 144, 94, 5, 183, 120, 140, 252, 14, 222, 1, 114, 95, - 171, 196, 68, 137, 197, 222, 119, 222, 159, 180, 116, 175, 187, 55, 84, 149, 175, 235, 79, 146, - 48, 3, 73, 66, 222, 171, 122, 252, 207, 125, 116, 225, 26, 199, 138, 144, 115, 117, 121, 15, - 163, 97, 90, 136, 6, 10, 181, 129, 127, 13, 3, 208, 197, 222, 41, 96, 73, 50, 157, 103, - 67, 255, 142, 134, 33, 160, 21, 7, 43, 160, 210, 25, 195, 174, 17, 196, 213, 176, 9, 212, - 67, 87, 79, 237, 180, 123, 0, 0, 32, 0, 73, 68, 65, 84, 227, 77, 72, 60, 228, 144, - 208, 244, 227, 225, 49, 175, 194, 3, 100, 191, 79, 129, 159, 213, 253, 33, 37, 161, 19, 48, - 29, 206, 219, 162, 21, 22, 29, 67, 213, 229, 55, 60, 89, 128, 91, 175, 229, 200, 56, 166, - 103, 69, 55, 75, 190, 209, 85, 117, 30, 59, 160, 137, 208, 176, 187, 210, 190, 212, 240, 211, - 142, 109, 228, 184, 211, 56, 35, 55, 4, 207, 43, 227, 158, 232, 21, 236, 36, 159, 142, 5, - 8, 114, 161, 170, 142, 125, 35, 9, 185, 149, 23, 237, 0, 84, 197, 58, 80, 170, 191, 235, - 25, 224, 74, 240, 136, 8, 16, 85, 77, 236, 202, 63, 63, 181, 15, 192, 167, 3, 128, 49, - 198, 156, 115, 86, 170, 109, 84, 82, 214, 25, 48, 25, 131, 219, 9, 0, 17, 205, 1, 162, - 66, 168, 6, 113, 171, 97, 9, 136, 64, 78, 210, 180, 103, 168, 78, 148, 235, 0, 138, 83, - 179, 163, 37, 101, 73, 78, 197, 243, 222, 142, 5, 107, 115, 169, 207, 103, 232, 154, 242, 116, - 215, 120, 46, 104, 243, 231, 203, 125, 53, 47, 126, 87, 158, 215, 37, 250, 77, 3, 112, 158, - 97, 131, 217, 132, 20, 102, 3, 118, 171, 248, 100, 21, 191, 172, 158, 217, 21, 5, 63, 196, - 114, 0, 92, 188, 149, 100, 197, 83, 99, 119, 55, 140, 159, 3, 34, 130, 115, 88, 209, 192, - 36, 15, 66, 5, 75, 181, 195, 62, 116, 134, 135, 84, 40, 37, 12, 229, 78, 43, 98, 98, - 188, 93, 194, 41, 241, 214, 119, 122, 17, 140, 13, 230, 152, 120, 234, 244, 92, 150, 96, 250, - 51, 233, 255, 63, 197, 0, 84, 117, 254, 31, 61, 199, 68, 130, 215, 201, 154, 86, 241, 235, - 39, 240, 88, 25, 142, 75, 94, 160, 231, 42, 246, 167, 130, 89, 24, 234, 107, 207, 37, 38, - 180, 211, 121, 247, 174, 11, 161, 0, 224, 217, 185, 246, 59, 245, 231, 164, 157, 234, 16, 83, - 248, 235, 12, 53, 1, 114, 18, 107, 139, 250, 81, 201, 239, 94, 24, 120, 21, 94, 214, 202, - 219, 191, 23, 44, 137, 163, 80, 19, 197, 195, 157, 222, 239, 187, 29, 205, 170, 166, 72, 46, - 108, 178, 19, 95, 119, 57, 2, 68, 61, 208, 85, 29, 56, 218, 118, 183, 181, 52, 45, 107, - 148, 153, 75, 55, 191, 27, 24, 118, 7, 16, 42, 229, 192, 1, 174, 39, 169, 64, 112, 30, - 118, 202, 48, 81, 176, 208, 169, 101, 118, 247, 191, 98, 208, 200, 123, 52, 224, 241, 255, 138, - 42, 128, 9, 104, 199, 43, 248, 109, 21, 94, 168, 90, 11, 119, 139, 37, 245, 90, 87, 34, - 46, 207, 227, 95, 170, 155, 183, 36, 237, 141, 21, 120, 210, 148, 65, 217, 101, 24, 100, 168, - 109, 41, 147, 178, 173, 22, 151, 213, 75, 115, 1, 80, 115, 55, 219, 165, 140, 17, 81, 42, - 92, 181, 242, 157, 134, 90, 191, 32, 189, 73, 159, 3, 199, 22, 60, 179, 172, 187, 253, 19, - 143, 108, 22, 6, 167, 82, 167, 163, 128, 128, 232, 251, 83, 48, 147, 228, 112, 144, 10, 129, - 9, 41, 228, 202, 16, 83, 144, 245, 220, 215, 78, 95, 4, 25, 102, 102, 64, 6, 102, 199, - 3, 95, 189, 31, 73, 69, 73, 119, 156, 103, 200, 162, 50, 200, 148, 33, 88, 85, 94, 84, - 213, 24, 221, 177, 168, 92, 242, 59, 187, 178, 126, 107, 0, 224, 104, 250, 110, 129, 90, 197, - 178, 87, 146, 188, 3, 46, 120, 196, 187, 114, 241, 114, 87, 215, 254, 124, 25, 46, 99, 208, - 87, 148, 253, 8, 254, 238, 232, 239, 42, 28, 64, 141, 1, 165, 254, 137, 17, 164, 158, 109, - 197, 212, 208, 78, 119, 82, 31, 218, 169, 16, 250, 181, 240, 220, 157, 90, 226, 174, 216, 211, - 138, 13, 232, 158, 181, 42, 119, 64, 226, 113, 197, 169, 58, 62, 186, 122, 190, 220, 2, 125, - 47, 238, 73, 167, 239, 223, 121, 102, 93, 210, 223, 93, 252, 237, 140, 217, 74, 100, 72, 1, - 232, 160, 53, 234, 105, 188, 152, 122, 173, 137, 113, 35, 158, 241, 239, 144, 205, 77, 213, 1, - 21, 206, 159, 182, 255, 78, 42, 17, 82, 5, 198, 81, 48, 88, 157, 0, 82, 5, 222, 63, - 77, 245, 239, 75, 0, 128, 127, 242, 0, 72, 87, 56, 82, 187, 78, 188, 225, 148, 246, 238, - 132, 120, 156, 241, 75, 1, 204, 101, 22, 249, 213, 185, 186, 18, 70, 18, 223, 127, 2, 17, - 98, 52, 221, 121, 145, 174, 126, 83, 62, 89, 146, 136, 35, 237, 232, 242, 119, 160, 236, 35, - 115, 176, 42, 163, 235, 140, 38, 245, 160, 135, 121, 30, 38, 124, 246, 5, 158, 153, 138, 81, - 184, 10, 38, 192, 45, 174, 174, 249, 137, 163, 159, 157, 55, 238, 234, 223, 187, 138, 7, 106, - 192, 59, 64, 66, 233, 242, 142, 105, 72, 189, 117, 55, 127, 1, 250, 218, 205, 75, 5, 163, - 144, 228, 23, 76, 227, 233, 82, 70, 130, 24, 114, 2, 168, 168, 81, 31, 11, 102, 138, 48, - 12, 55, 92, 219, 93, 194, 102, 247, 158, 252, 81, 218, 255, 43, 49, 0, 105, 67, 25, 74, - 139, 18, 47, 181, 107, 246, 210, 125, 70, 105, 238, 42, 71, 192, 237, 131, 0, 138, 238, 225, - 185, 224, 53, 119, 121, 8, 221, 75, 229, 74, 55, 101, 188, 252, 142, 174, 174, 206, 47, 21, - 250, 161, 21, 17, 29, 96, 88, 1, 180, 91, 235, 16, 83, 87, 175, 223, 53, 27, 122, 134, - 14, 86, 96, 161, 202, 79, 161, 247, 169, 162, 78, 41, 29, 153, 44, 214, 157, 49, 75, 226, - 253, 10, 140, 255, 109, 12, 196, 52, 76, 196, 144, 244, 255, 140, 33, 35, 18, 196, 210, 94, - 220, 58, 149, 60, 174, 206, 193, 25, 122, 153, 253, 19, 32, 83, 189, 43, 132, 234, 38, 192, - 101, 0, 32, 157, 26, 233, 228, 94, 165, 131, 138, 46, 165, 125, 18, 126, 38, 0, 248, 199, - 251, 223, 201, 230, 39, 20, 126, 210, 192, 103, 87, 90, 119, 101, 184, 136, 2, 220, 21, 30, - 151, 148, 52, 174, 126, 127, 171, 175, 64, 24, 240, 218, 38, 221, 23, 137, 215, 126, 107, 157, - 51, 225, 238, 181, 171, 198, 112, 192, 97, 40, 203, 73, 160, 201, 148, 42, 192, 64, 85, 70, - 218, 85, 39, 172, 90, 4, 87, 77, 88, 180, 48, 230, 105, 27, 228, 157, 250, 246, 249, 194, - 34, 171, 133, 55, 246, 220, 206, 53, 246, 233, 244, 17, 104, 28, 155, 210, 252, 169, 78, 255, - 78, 89, 154, 128, 225, 37, 180, 119, 103, 60, 86, 185, 9, 175, 26, 56, 103, 172, 186, 120, - 120, 103, 188, 111, 195, 116, 36, 74, 134, 59, 198, 53, 85, 142, 116, 251, 73, 245, 21, 244, - 217, 21, 0, 127, 4, 0, 44, 66, 0, 50, 134, 174, 235, 33, 159, 38, 191, 93, 27, 15, - 190, 11, 87, 12, 0, 102, 166, 214, 201, 128, 196, 184, 209, 164, 191, 21, 208, 112, 84, 179, - 196, 186, 229, 81, 38, 103, 7, 204, 117, 231, 178, 50, 158, 93, 239, 1, 103, 240, 87, 215, - 247, 86, 157, 83, 48, 228, 133, 74, 170, 223, 63, 203, 255, 42, 170, 255, 233, 165, 118, 0, - 153, 40, 58, 38, 249, 42, 78, 6, 187, 187, 206, 196, 224, 167, 9, 127, 195, 44, 194, 169, - 225, 150, 234, 246, 191, 2, 212, 117, 34, 91, 44, 249, 68, 199, 180, 33, 207, 52, 236, 217, - 13, 25, 153, 17, 220, 131, 142, 230, 118, 96, 198, 81, 235, 19, 108, 227, 140, 118, 167, 128, - 72, 127, 231, 88, 76, 210, 236, 136, 118, 95, 252, 99, 222, 253, 151, 4, 0, 208, 48, 207, - 198, 176, 146, 94, 237, 67, 123, 249, 1, 187, 198, 138, 30, 111, 181, 125, 218, 96, 72, 96, - 241, 174, 188, 244, 75, 189, 82, 86, 199, 16, 8, 80, 232, 10, 88, 128, 238, 188, 46, 3, - 70, 8, 11, 32, 248, 130, 143, 198, 64, 223, 224, 89, 123, 130, 128, 231, 126, 239, 199, 125, - 94, 101, 236, 15, 195, 48, 117, 121, 42, 142, 149, 170, 158, 153, 180, 217, 139, 107, 101, 154, - 210, 193, 132, 5, 112, 34, 50, 196, 192, 82, 42, 214, 149, 175, 37, 33, 146, 212, 131, 164, - 251, 39, 224, 96, 245, 221, 29, 26, 110, 154, 104, 247, 138, 7, 222, 201, 228, 38, 121, 39, - 142, 185, 89, 57, 64, 20, 208, 201, 128, 217, 167, 35, 80, 109, 71, 242, 4, 254, 74, 0, - 48, 26, 163, 40, 99, 172, 146, 216, 121, 181, 248, 95, 208, 243, 37, 185, 2, 157, 113, 33, - 77, 138, 220, 62, 73, 163, 36, 82, 219, 46, 96, 192, 72, 29, 126, 53, 135, 46, 238, 94, - 81, 225, 163, 49, 200, 18, 203, 125, 232, 152, 9, 153, 231, 200, 201, 135, 86, 236, 201, 115, - 1, 24, 134, 138, 173, 146, 54, 119, 67, 80, 14, 172, 146, 231, 205, 93, 207, 46, 25, 144, - 24, 254, 68, 25, 46, 253, 142, 232, 244, 223, 198, 64, 164, 73, 109, 59, 97, 1, 74, 165, - 167, 114, 225, 148, 98, 118, 141, 130, 4, 223, 43, 167, 122, 72, 187, 14, 174, 214, 220, 85, - 56, 103, 151, 121, 24, 255, 95, 123, 103, 184, 28, 57, 178, 227, 106, 72, 251, 254, 143, 124, - 165, 251, 99, 207, 156, 117, 171, 147, 196, 135, 148, 103, 198, 110, 147, 17, 19, 237, 177, 85, - 146, 74, 165, 18, 64, 36, 9, 130, 235, 87, 245, 255, 19, 178, 216, 169, 56, 171, 122, 155, - 85, 98, 241, 175, 217, 255, 126, 21, 2, 64, 50, 206, 3, 2, 24, 201, 198, 83, 89, 148, - 170, 4, 85, 65, 214, 97, 36, 235, 42, 19, 188, 225, 235, 86, 239, 225, 108, 0, 245, 92, - 200, 213, 149, 137, 205, 1, 174, 213, 13, 0, 187, 2, 167, 142, 112, 184, 17, 195, 68, 178, - 251, 152, 125, 63, 37, 248, 235, 113, 189, 47, 168, 140, 184, 44, 156, 144, 146, 163, 216, 231, - 179, 126, 224, 150, 95, 230, 234, 58, 42, 118, 234, 61, 72, 214, 118, 153, 172, 239, 222, 248, - 151, 182, 11, 18, 112, 77, 167, 241, 81, 149, 128, 22, 204, 221, 224, 250, 80, 131, 34, 189, - 56, 191, 10, 168, 8, 48, 38, 118, 195, 201, 207, 171, 34, 197, 67, 188, 235, 193, 213, 160, - 188, 153, 16, 152, 40, 45, 221, 126, 47, 115, 237, 47, 245, 109, 183, 63, 131, 0, 60, 234, - 0, 136, 60, 159, 120, 220, 203, 200, 198, 228, 129, 232, 178, 238, 83, 125, 235, 213, 51, 99, - 58, 23, 217, 180, 171, 216, 94, 101, 231, 93, 177, 157, 147, 201, 221, 100, 184, 195, 40, 38, - 78, 105, 112, 99, 52, 201, 117, 117, 214, 201, 171, 247, 116, 202, 79, 127, 148, 122, 79, 131, - 149, 153, 208, 161, 122, 82, 228, 173, 126, 130, 160, 83, 1, 170, 10, 255, 231, 54, 43, 245, - 225, 73, 90, 8, 145, 238, 172, 143, 157, 26, 85, 129, 135, 91, 47, 37, 82, 122, 218, 37, - 64, 103, 8, 92, 112, 31, 207, 207, 179, 234, 56, 112, 18, 116, 215, 246, 72, 214, 191, 119, - 174, 29, 217, 199, 142, 213, 47, 181, 73, 174, 50, 94, 242, 154, 213, 117, 113, 228, 147, 252, - 125, 215, 115, 96, 165, 4, 84, 234, 116, 71, 254, 14, 112, 191, 46, 63, 207, 127, 163, 0, - 240, 43, 44, 1, 80, 201, 158, 12, 212, 233, 192, 144, 40, 4, 93, 102, 91, 173, 173, 186, - 253, 19, 73, 223, 145, 156, 180, 70, 128, 184, 25, 190, 85, 66, 110, 163, 114, 116, 32, 65, - 138, 247, 238, 66, 37, 88, 101, 236, 180, 96, 175, 178, 106, 190, 181, 118, 109, 172, 220, 210, - 78, 173, 39, 130, 85, 50, 127, 39, 77, 30, 226, 253, 253, 171, 108, 60, 81, 106, 158, 175, - 35, 215, 47, 241, 182, 239, 50, 205, 68, 1, 72, 167, 251, 9, 110, 183, 122, 0, 95, 16, - 172, 118, 122, 223, 59, 39, 192, 164, 229, 78, 170, 71, 23, 83, 176, 167, 237, 115, 84, 29, - 16, 248, 44, 42, 226, 67, 72, 21, 41, 112, 84, 115, 125, 200, 239, 29, 169, 232, 62, 219, - 46, 249, 169, 106, 26, 190, 100, 124, 21, 2, 208, 13, 176, 113, 89, 27, 205, 242, 63, 198, - 9, 31, 178, 100, 25, 160, 219, 71, 85, 137, 126, 22, 82, 110, 69, 12, 206, 224, 26, 38, - 30, 252, 221, 210, 129, 196, 173, 139, 187, 108, 159, 254, 62, 113, 50, 124, 94, 151, 100, 93, - 251, 42, 136, 11, 29, 47, 234, 8, 71, 5, 250, 43, 43, 227, 123, 241, 62, 72, 145, 164, - 196, 58, 71, 92, 166, 78, 7, 177, 36, 227, 75, 147, 190, 126, 151, 65, 211, 169, 118, 169, - 31, 61, 109, 253, 235, 20, 14, 2, 234, 73, 161, 101, 119, 60, 183, 22, 126, 40, 27, 163, - 157, 188, 71, 50, 53, 143, 16, 196, 67, 245, 72, 108, 170, 92, 188, 89, 171, 175, 230, 26, - 208, 207, 199, 93, 203, 228, 123, 144, 168, 29, 127, 38, 1, 248, 176, 12, 80, 101, 229, 213, - 191, 52, 235, 37, 142, 123, 68, 134, 238, 178, 106, 183, 212, 64, 93, 243, 58, 15, 247, 91, - 190, 143, 91, 129, 242, 224, 192, 131, 102, 148, 212, 232, 38, 29, 78, 212, 17, 131, 85, 246, - 95, 21, 197, 93, 98, 117, 24, 137, 179, 24, 185, 238, 151, 234, 170, 254, 171, 32, 137, 157, - 4, 41, 64, 82, 40, 57, 172, 62, 67, 234, 46, 71, 192, 194, 101, 239, 52, 59, 151, 201, - 54, 105, 17, 222, 78, 17, 224, 106, 159, 79, 240, 184, 10, 48, 35, 235, 246, 132, 104, 37, - 46, 135, 87, 112, 253, 100, 72, 200, 110, 17, 32, 185, 7, 137, 197, 180, 3, 220, 238, 92, - 15, 177, 122, 144, 46, 59, 119, 3, 174, 232, 178, 144, 154, 227, 125, 153, 142, 128, 175, 160, - 0, 144, 113, 180, 100, 120, 77, 90, 67, 176, 147, 209, 187, 215, 186, 204, 184, 178, 123, 237, - 150, 21, 118, 138, 26, 9, 225, 232, 228, 120, 53, 146, 61, 233, 70, 144, 234, 118, 77, 103, - 188, 83, 13, 178, 161, 69, 146, 106, 0, 116, 101, 127, 76, 150, 14, 142, 2, 216, 79, 245, - 22, 190, 221, 186, 253, 169, 122, 205, 159, 204, 11, 232, 178, 196, 174, 136, 49, 25, 187, 122, - 128, 215, 119, 15, 212, 55, 178, 120, 53, 148, 69, 16, 228, 147, 172, 183, 50, 25, 146, 120, - 193, 158, 160, 170, 64, 95, 47, 241, 130, 197, 67, 204, 77, 144, 128, 186, 140, 90, 226, 148, - 162, 36, 243, 237, 198, 68, 147, 214, 69, 66, 130, 119, 50, 239, 10, 180, 171, 150, 191, 100, - 121, 197, 117, 33, 253, 40, 2, 64, 253, 227, 137, 92, 76, 100, 239, 68, 186, 238, 0, 154, - 156, 183, 3, 224, 164, 202, 61, 145, 212, 105, 39, 4, 113, 100, 36, 211, 10, 221, 252, 2, - 7, 108, 149, 87, 128, 12, 160, 57, 146, 68, 6, 2, 185, 223, 75, 108, 50, 101, 215, 41, - 240, 81, 21, 168, 186, 17, 220, 216, 223, 163, 145, 236, 5, 94, 91, 129, 181, 83, 98, 146, - 126, 114, 82, 68, 150, 244, 182, 95, 16, 204, 73, 219, 158, 115, 25, 148, 234, 150, 176, 91, - 239, 212, 131, 157, 236, 152, 90, 0, 167, 234, 136, 187, 126, 244, 60, 147, 121, 2, 228, 30, - 232, 182, 237, 234, 1, 146, 89, 4, 73, 183, 132, 35, 28, 79, 165, 110, 85, 87, 67, 11, - 0, 239, 127, 171, 0, 240, 171, 40, 0, 238, 166, 89, 129, 193, 238, 84, 63, 21, 251, 72, - 156, 5, 171, 181, 231, 115, 99, 63, 2, 132, 133, 72, 215, 135, 120, 127, 123, 245, 187, 170, - 29, 174, 3, 97, 218, 165, 33, 213, 83, 0, 137, 137, 147, 171, 79, 88, 85, 228, 59, 165, - 229, 249, 121, 146, 101, 130, 163, 144, 4, 143, 226, 26, 147, 247, 219, 41, 86, 174, 98, 223, - 21, 93, 86, 215, 97, 165, 106, 220, 32, 163, 76, 30, 232, 59, 5, 132, 157, 85, 176, 228, - 167, 255, 173, 178, 51, 55, 138, 246, 134, 203, 7, 52, 195, 76, 11, 8, 73, 239, 60, 29, - 14, 68, 151, 113, 164, 218, 99, 63, 153, 109, 127, 133, 203, 3, 238, 189, 58, 210, 120, 20, - 100, 154, 18, 24, 153, 243, 169, 58, 26, 200, 181, 187, 55, 72, 186, 254, 77, 240, 255, 138, - 4, 160, 26, 255, 218, 89, 213, 10, 252, 93, 98, 85, 247, 71, 240, 128, 165, 227, 139, 37, - 94, 197, 127, 23, 160, 76, 50, 243, 39, 128, 211, 22, 175, 234, 90, 19, 85, 129, 218, 202, - 210, 125, 56, 213, 164, 203, 230, 171, 233, 134, 151, 122, 179, 158, 106, 160, 207, 217, 168, 4, - 151, 234, 165, 137, 170, 165, 176, 154, 17, 64, 136, 0, 185, 255, 82, 19, 151, 74, 21, 72, - 183, 165, 15, 239, 29, 66, 32, 240, 26, 42, 213, 75, 172, 46, 192, 41, 21, 87, 1, 126, - 85, 129, 219, 91, 32, 164, 242, 58, 81, 10, 36, 182, 12, 178, 90, 238, 162, 133, 157, 116, - 228, 241, 106, 93, 253, 217, 43, 79, 106, 1, 158, 223, 71, 170, 106, 116, 42, 193, 170, 157, - 175, 251, 126, 93, 141, 74, 208, 18, 190, 251, 190, 143, 31, 171, 0, 252, 167, 16, 80, 139, - 7, 36, 1, 212, 14, 128, 15, 189, 159, 40, 216, 1, 0, 205, 234, 169, 106, 81, 181, 27, - 118, 74, 65, 181, 76, 145, 14, 29, 234, 128, 223, 169, 35, 174, 24, 82, 242, 197, 107, 174, - 38, 32, 153, 2, 72, 205, 140, 186, 207, 170, 107, 163, 91, 85, 242, 63, 31, 152, 100, 233, - 168, 251, 108, 86, 89, 255, 202, 32, 232, 82, 221, 245, 145, 142, 43, 238, 20, 0, 98, 30, - 67, 127, 215, 173, 239, 186, 54, 192, 43, 0, 114, 193, 108, 190, 34, 20, 105, 87, 1, 81, - 3, 92, 225, 94, 7, 66, 148, 52, 85, 68, 45, 145, 190, 73, 102, 157, 204, 84, 72, 188, - 17, 156, 89, 81, 234, 142, 232, 250, 247, 137, 113, 18, 169, 47, 113, 223, 145, 50, 185, 57, - 142, 131, 76, 54, 252, 227, 21, 0, 87, 229, 124, 52, 114, 251, 243, 1, 73, 139, 230, 232, - 16, 153, 36, 251, 239, 20, 132, 143, 166, 53, 4, 120, 93, 6, 125, 22, 219, 87, 253, 243, - 196, 120, 136, 168, 24, 14, 100, 86, 30, 217, 29, 153, 162, 133, 129, 78, 77, 32, 179, 9, - 42, 130, 179, 170, 59, 32, 221, 5, 68, 57, 90, 221, 35, 93, 45, 68, 37, 255, 95, 141, - 218, 69, 228, 74, 82, 244, 232, 30, 230, 169, 188, 76, 71, 247, 62, 213, 154, 196, 21, 208, - 201, 250, 4, 212, 73, 107, 160, 91, 46, 72, 60, 242, 221, 64, 36, 114, 94, 10, 229, 247, - 132, 136, 184, 118, 205, 244, 253, 38, 231, 70, 238, 161, 231, 146, 192, 234, 239, 23, 80, 62, - 9, 137, 33, 120, 117, 137, 47, 231, 8, 124, 127, 127, 14, 1, 104, 92, 1, 165, 245, 218, - 236, 10, 240, 21, 130, 126, 90, 221, 79, 218, 214, 156, 131, 222, 25, 2, 233, 243, 70, 59, - 139, 47, 210, 9, 50, 225, 164, 226, 158, 92, 179, 180, 250, 222, 41, 3, 213, 242, 69, 119, - 222, 31, 51, 224, 21, 201, 168, 220, 252, 158, 246, 192, 207, 22, 189, 78, 170, 39, 163, 131, - 171, 76, 223, 169, 12, 103, 120, 175, 74, 220, 69, 113, 149, 217, 40, 124, 32, 165, 195, 99, - 136, 188, 79, 100, 100, 106, 242, 83, 101, 250, 215, 139, 253, 209, 122, 128, 43, 200, 88, 93, - 251, 227, 109, 200, 97, 39, 241, 95, 240, 51, 34, 247, 72, 170, 74, 80, 96, 118, 74, 222, - 5, 8, 70, 165, 90, 92, 224, 28, 136, 210, 145, 78, 34, 212, 198, 247, 233, 75, 196, 255, - 252, 235, 169, 255, 255, 130, 255, 115, 42, 218, 241, 200, 150, 143, 197, 127, 42, 36, 255, 231, - 3, 255, 104, 182, 115, 251, 93, 221, 160, 71, 113, 12, 247, 115, 181, 159, 234, 253, 116, 199, - 211, 66, 5, 56, 154, 247, 172, 199, 117, 37, 215, 71, 224, 125, 56, 194, 229, 246, 167, 230, - 125, 11, 28, 215, 93, 47, 114, 109, 213, 252, 63, 33, 137, 233, 251, 239, 200, 37, 53, 178, - 90, 129, 66, 146, 129, 236, 246, 247, 87, 127, 35, 178, 45, 37, 4, 55, 252, 125, 226, 153, - 223, 101, 178, 23, 4, 64, 169, 95, 114, 160, 202, 201, 142, 199, 124, 226, 153, 176, 99, 64, - 179, 42, 96, 59, 228, 205, 163, 86, 253, 252, 41, 97, 163, 67, 163, 210, 107, 85, 169, 41, - 244, 179, 56, 204, 231, 144, 168, 219, 203, 123, 226, 223, 46, 0, 252, 74, 10, 64, 39, 221, - 146, 214, 54, 250, 224, 76, 204, 110, 200, 4, 60, 55, 205, 144, 168, 9, 180, 144, 49, 153, - 12, 216, 41, 12, 174, 162, 158, 168, 21, 149, 179, 162, 128, 42, 67, 84, 24, 50, 165, 79, - 226, 246, 191, 85, 123, 161, 196, 189, 16, 136, 187, 158, 123, 16, 28, 77, 198, 211, 153, 5, - 209, 236, 226, 185, 63, 58, 226, 153, 86, 250, 187, 34, 168, 196, 78, 53, 145, 206, 41, 137, - 72, 7, 236, 144, 245, 97, 226, 82, 152, 28, 143, 44, 113, 84, 100, 99, 117, 13, 14, 101, - 75, 5, 137, 143, 1, 81, 14, 170, 209, 184, 29, 232, 146, 101, 14, 122, 207, 39, 82, 189, - 196, 77, 147, 170, 123, 101, 183, 174, 98, 135, 0, 254, 249, 4, 96, 67, 86, 118, 50, 168, - 115, 22, 92, 189, 238, 52, 55, 156, 235, 215, 38, 3, 111, 200, 16, 154, 149, 100, 156, 44, - 113, 184, 47, 65, 149, 117, 158, 128, 148, 84, 64, 86, 205, 221, 150, 248, 50, 129, 10, 64, - 119, 125, 251, 43, 233, 191, 187, 6, 207, 73, 128, 149, 115, 225, 234, 117, 171, 54, 195, 164, - 29, 245, 16, 31, 253, 187, 90, 62, 170, 218, 162, 136, 175, 255, 189, 121, 223, 144, 108, 171, - 122, 56, 174, 90, 163, 46, 160, 92, 16, 176, 122, 182, 14, 186, 44, 93, 202, 70, 248, 94, - 98, 107, 255, 14, 188, 200, 250, 58, 37, 62, 100, 31, 180, 16, 143, 214, 16, 80, 107, 230, - 14, 80, 93, 117, 126, 58, 113, 176, 50, 140, 34, 128, 123, 21, 106, 219, 5, 175, 9, 33, - 86, 169, 67, 225, 16, 128, 255, 168, 0, 103, 145, 65, 31, 226, 158, 255, 106, 30, 142, 157, - 194, 240, 44, 208, 219, 25, 9, 156, 88, 222, 210, 27, 129, 142, 197, 117, 132, 225, 73, 114, - 62, 102, 153, 39, 80, 25, 28, 113, 161, 64, 70, 64, 158, 40, 64, 18, 235, 145, 239, 234, - 27, 186, 153, 0, 171, 215, 36, 153, 185, 43, 2, 92, 13, 32, 122, 146, 138, 206, 133, 176, - 83, 37, 8, 160, 147, 162, 208, 170, 27, 227, 8, 165, 245, 39, 48, 39, 107, 188, 18, 27, - 2, 148, 152, 231, 164, 85, 225, 59, 74, 133, 147, 155, 187, 97, 62, 180, 110, 162, 123, 223, - 221, 107, 142, 64, 5, 32, 82, 59, 201, 218, 143, 48, 123, 39, 245, 14, 213, 8, 222, 238, - 154, 186, 246, 85, 137, 21, 239, 209, 103, 246, 234, 30, 59, 36, 93, 95, 65, 254, 255, 50, - 4, 224, 49, 19, 128, 200, 200, 68, 10, 165, 6, 54, 110, 251, 67, 253, 216, 85, 55, 76, - 167, 58, 94, 98, 235, 187, 227, 112, 232, 206, 165, 91, 70, 32, 237, 136, 31, 65, 172, 2, - 199, 110, 57, 197, 145, 23, 50, 73, 176, 203, 226, 187, 243, 237, 64, 250, 44, 30, 180, 39, - 120, 200, 85, 192, 236, 228, 255, 29, 149, 140, 72, 250, 206, 133, 177, 50, 131, 233, 238, 65, - 58, 189, 142, 0, 216, 5, 192, 204, 73, 178, 116, 164, 48, 37, 12, 84, 214, 119, 192, 67, - 51, 254, 29, 208, 187, 155, 207, 143, 14, 246, 145, 188, 131, 93, 149, 113, 39, 67, 143, 186, - 253, 117, 25, 120, 71, 200, 182, 90, 238, 154, 227, 168, 56, 143, 228, 254, 16, 56, 167, 47, - 87, 20, 248, 149, 20, 128, 157, 158, 255, 174, 85, 235, 92, 92, 248, 211, 188, 110, 181, 239, - 219, 100, 138, 78, 25, 56, 65, 102, 188, 2, 187, 202, 71, 127, 119, 221, 255, 169, 118, 16, - 215, 59, 199, 232, 79, 249, 206, 136, 149, 7, 127, 34, 57, 39, 109, 127, 100, 25, 201, 57, - 252, 85, 203, 4, 84, 1, 232, 84, 142, 234, 222, 189, 193, 125, 127, 55, 114, 191, 26, 165, - 227, 35, 96, 29, 6, 56, 168, 55, 128, 235, 21, 39, 189, 210, 59, 174, 112, 238, 97, 44, - 49, 147, 160, 11, 108, 75, 141, 116, 18, 210, 34, 152, 241, 39, 181, 20, 82, 95, 175, 208, - 145, 173, 67, 172, 86, 128, 16, 21, 41, 47, 226, 35, 173, 151, 228, 156, 14, 113, 115, 167, - 78, 1, 58, 54, 148, 20, 114, 29, 40, 89, 249, 153, 4, 0, 0, 168, 43, 58, 115, 132, - 192, 73, 210, 36, 147, 174, 198, 246, 186, 140, 213, 153, 229, 156, 230, 129, 95, 145, 18, 45, - 192, 85, 70, 197, 144, 152, 105, 78, 119, 147, 158, 98, 197, 122, 21, 145, 186, 193, 231, 124, - 24, 226, 34, 249, 26, 139, 149, 228, 94, 125, 46, 215, 130, 32, 74, 189, 211, 159, 59, 166, - 91, 66, 234, 38, 61, 86, 53, 3, 221, 250, 127, 245, 80, 74, 125, 3, 82, 153, 187, 154, - 83, 112, 23, 4, 132, 2, 198, 103, 248, 225, 167, 0, 74, 11, 250, 82, 183, 62, 119, 206, - 238, 154, 39, 170, 0, 185, 174, 148, 8, 116, 239, 57, 89, 35, 79, 175, 99, 245, 186, 202, - 170, 247, 50, 207, 52, 226, 232, 71, 70, 24, 171, 33, 84, 210, 218, 149, 80, 77, 210, 50, - 4, 96, 161, 2, 144, 108, 182, 178, 125, 61, 3, 144, 79, 12, 114, 158, 55, 73, 231, 239, - 158, 140, 113, 117, 157, 13, 20, 208, 187, 155, 53, 153, 164, 72, 72, 66, 55, 172, 39, 169, - 222, 119, 159, 135, 212, 27, 61, 185, 241, 182, 7, 252, 34, 19, 131, 156, 149, 223, 255, 213, - 40, 68, 68, 194, 95, 17, 202, 191, 174, 109, 55, 202, 88, 170, 151, 165, 118, 235, 33, 92, - 87, 69, 247, 224, 167, 51, 214, 19, 73, 155, 86, 249, 83, 208, 238, 178, 228, 11, 102, 226, - 46, 179, 76, 230, 212, 39, 21, 226, 21, 80, 94, 80, 125, 17, 32, 42, 180, 142, 33, 85, - 103, 72, 86, 79, 174, 173, 35, 51, 7, 188, 55, 136, 187, 40, 189, 143, 142, 224, 218, 127, - 169, 17, 192, 95, 89, 1, 160, 238, 114, 73, 171, 158, 3, 31, 10, 252, 210, 190, 249, 77, - 181, 127, 87, 252, 166, 70, 85, 56, 26, 150, 156, 86, 221, 211, 215, 28, 242, 133, 146, 212, - 246, 183, 146, 204, 233, 92, 135, 27, 126, 78, 183, 81, 151, 92, 253, 130, 147, 249, 221, 4, - 65, 66, 16, 158, 99, 131, 187, 145, 200, 10, 148, 8, 119, 29, 187, 234, 125, 2, 40, 111, - 235, 1, 36, 239, 254, 71, 65, 43, 205, 188, 165, 119, 53, 1, 29, 24, 167, 70, 64, 41, - 232, 85, 75, 42, 183, 88, 213, 191, 140, 18, 68, 198, 26, 59, 178, 208, 153, 25, 209, 204, - 159, 170, 85, 187, 245, 3, 164, 43, 98, 71, 41, 106, 9, 216, 87, 41, 0, 252, 114, 4, - 160, 80, 1, 146, 12, 199, 89, 199, 186, 108, 166, 59, 54, 173, 126, 167, 45, 129, 71, 35, - 127, 87, 203, 4, 238, 11, 227, 234, 6, 8, 56, 175, 174, 107, 101, 147, 43, 0, 156, 180, - 127, 255, 205, 239, 36, 238, 116, 72, 189, 1, 220, 154, 127, 55, 113, 144, 144, 198, 142, 68, - 173, 62, 187, 138, 4, 184, 245, 75, 34, 133, 146, 193, 45, 100, 187, 78, 130, 62, 130, 172, - 252, 77, 155, 27, 85, 11, 86, 217, 127, 87, 39, 144, 182, 211, 81, 11, 224, 238, 154, 208, - 145, 191, 169, 114, 146, 116, 18, 36, 100, 65, 98, 75, 20, 207, 239, 153, 59, 14, 37, 28, - 174, 219, 129, 16, 137, 187, 57, 199, 238, 61, 28, 159, 64, 192, 126, 188, 2, 32, 177, 30, - 107, 87, 160, 39, 67, 8, 86, 42, 194, 1, 37, 84, 178, 214, 95, 1, 206, 14, 81, 113, - 192, 77, 50, 107, 119, 29, 220, 251, 185, 196, 135, 12, 117, 128, 116, 66, 82, 212, 93, 251, - 85, 17, 163, 12, 176, 87, 246, 190, 171, 2, 197, 85, 86, 124, 138, 123, 247, 31, 205, 103, - 89, 213, 123, 56, 101, 224, 10, 136, 155, 32, 145, 185, 205, 247, 138, 108, 155, 168, 4, 87, - 65, 66, 174, 32, 107, 119, 196, 129, 130, 63, 41, 8, 35, 128, 153, 84, 189, 39, 215, 42, - 117, 251, 35, 106, 130, 107, 139, 187, 131, 107, 73, 62, 47, 122, 190, 228, 154, 38, 215, 139, - 16, 135, 157, 110, 5, 226, 120, 105, 29, 59, 191, 82, 246, 255, 85, 9, 128, 147, 243, 119, - 10, 208, 156, 84, 239, 164, 114, 125, 120, 128, 147, 33, 58, 149, 3, 213, 161, 222, 116, 136, - 212, 4, 28, 98, 69, 126, 68, 30, 151, 185, 126, 78, 162, 39, 126, 248, 116, 74, 222, 97, - 88, 118, 119, 173, 86, 42, 74, 103, 250, 115, 20, 203, 4, 151, 250, 150, 200, 238, 122, 74, - 126, 236, 240, 85, 16, 65, 170, 4, 56, 37, 164, 34, 123, 137, 17, 80, 98, 251, 187, 163, - 4, 208, 204, 51, 29, 252, 227, 178, 100, 42, 245, 83, 217, 91, 38, 131, 164, 50, 113, 42, - 105, 39, 131, 154, 220, 125, 155, 14, 124, 18, 188, 14, 142, 80, 116, 93, 33, 10, 62, 63, - 137, 47, 251, 80, 133, 97, 167, 173, 116, 5, 246, 116, 32, 208, 16, 128, 98, 25, 160, 202, - 156, 62, 206, 107, 119, 107, 237, 180, 56, 173, 146, 211, 37, 86, 99, 64, 173, 138, 169, 155, - 32, 233, 129, 87, 0, 160, 31, 183, 75, 12, 112, 72, 5, 63, 113, 254, 115, 68, 98, 231, - 139, 225, 90, 233, 92, 198, 236, 134, 9, 85, 4, 99, 117, 111, 84, 30, 3, 196, 168, 136, - 42, 86, 142, 48, 118, 64, 242, 148, 41, 93, 65, 40, 121, 88, 238, 200, 255, 110, 254, 188, - 27, 188, 227, 192, 244, 218, 4, 144, 221, 62, 111, 106, 222, 67, 51, 222, 93, 147, 154, 207, - 206, 222, 119, 218, 48, 37, 86, 212, 153, 170, 43, 59, 68, 179, 146, 239, 201, 242, 198, 202, - 193, 146, 18, 191, 149, 98, 112, 189, 120, 198, 253, 237, 241, 63, 95, 237, 132, 30, 126, 0, - 213, 128, 150, 238, 119, 221, 176, 25, 53, 219, 200, 236, 115, 117, 220, 167, 155, 222, 209, 28, - 255, 57, 184, 135, 12, 32, 170, 182, 149, 252, 96, 36, 242, 247, 167, 186, 33, 3, 62, 135, - 248, 48, 159, 67, 124, 120, 16, 121, 95, 132, 40, 57, 195, 33, 5, 42, 67, 119, 79, 56, - 18, 119, 203, 15, 150, 114, 199, 33, 25, 250, 110, 171, 24, 245, 142, 87, 112, 45, 119, 134, - 189, 164, 255, 118, 35, 108, 175, 23, 138, 192, 234, 245, 59, 22, 181, 228, 124, 200, 254, 222, - 212, 66, 144, 118, 215, 180, 3, 65, 170, 139, 68, 105, 246, 157, 76, 210, 115, 230, 83, 106, - 206, 169, 155, 224, 120, 136, 45, 251, 36, 239, 203, 189, 230, 191, 100, 224, 171, 201, 255, 223, - 65, 1, 112, 153, 79, 106, 205, 74, 43, 254, 169, 209, 204, 45, 54, 112, 231, 6, 25, 30, - 149, 122, 187, 34, 51, 178, 100, 226, 84, 146, 78, 49, 113, 197, 153, 206, 92, 200, 41, 28, - 100, 89, 230, 141, 45, 114, 183, 253, 83, 5, 120, 222, 55, 151, 122, 183, 191, 234, 97, 123, - 44, 84, 44, 215, 218, 215, 45, 151, 144, 170, 127, 65, 101, 170, 122, 96, 81, 217, 114, 39, - 75, 116, 32, 83, 1, 251, 234, 92, 146, 140, 127, 23, 72, 73, 27, 94, 226, 244, 71, 137, - 89, 42, 189, 31, 80, 109, 73, 0, 48, 153, 215, 144, 186, 246, 17, 194, 177, 234, 138, 73, - 106, 39, 4, 63, 27, 71, 80, 29, 201, 94, 21, 51, 126, 105, 3, 160, 47, 75, 0, 154, - 47, 59, 237, 133, 151, 145, 55, 233, 132, 63, 66, 40, 156, 101, 109, 37, 125, 19, 66, 144, - 216, 226, 58, 11, 229, 238, 90, 174, 204, 110, 200, 177, 171, 34, 184, 213, 123, 62, 197, 150, - 5, 42, 9, 239, 4, 159, 57, 33, 78, 116, 226, 223, 234, 51, 239, 200, 65, 5, 160, 149, - 159, 191, 91, 62, 234, 174, 155, 91, 102, 162, 38, 85, 148, 248, 146, 204, 255, 128, 15, 61, - 151, 221, 147, 65, 65, 105, 109, 64, 178, 206, 159, 0, 148, 187, 38, 14, 100, 119, 252, 238, - 105, 27, 225, 206, 18, 4, 205, 184, 181, 32, 102, 238, 250, 184, 81, 189, 132, 164, 184, 235, - 250, 70, 189, 114, 164, 133, 40, 110, 78, 193, 249, 146, 241, 37, 9, 192, 135, 225, 64, 71, - 240, 224, 91, 61, 196, 206, 0, 184, 93, 203, 152, 3, 158, 196, 138, 118, 213, 121, 112, 7, - 192, 44, 3, 122, 164, 222, 161, 171, 76, 79, 10, 10, 201, 252, 6, 106, 142, 67, 90, 249, - 86, 69, 124, 59, 170, 66, 229, 245, 127, 24, 98, 66, 201, 64, 5, 174, 39, 204, 188, 171, - 117, 123, 90, 179, 65, 239, 209, 174, 94, 225, 6, 68, 130, 72, 168, 148, 16, 144, 217, 0, - 100, 221, 60, 145, 209, 105, 43, 223, 29, 158, 131, 192, 185, 80, 208, 60, 66, 48, 122, 107, - 201, 75, 142, 177, 114, 187, 75, 21, 141, 106, 182, 128, 148, 213, 68, 236, 58, 12, 210, 196, - 115, 103, 92, 241, 47, 228, 255, 43, 202, 255, 223, 69, 1, 72, 11, 203, 18, 112, 167, 102, - 59, 212, 88, 165, 235, 18, 32, 32, 149, 0, 115, 58, 60, 169, 34, 36, 171, 12, 187, 106, - 123, 57, 11, 224, 76, 178, 233, 174, 242, 253, 108, 128, 155, 56, 37, 38, 83, 3, 221, 108, - 1, 45, 36, 223, 174, 202, 191, 50, 166, 58, 11, 233, 248, 104, 84, 132, 83, 107, 67, 160, - 149, 154, 240, 236, 46, 184, 140, 234, 180, 3, 4, 171, 7, 118, 117, 125, 92, 70, 119, 64, - 16, 77, 182, 161, 128, 72, 59, 7, 146, 115, 90, 45, 9, 56, 98, 212, 101, 192, 21, 200, - 93, 161, 68, 159, 182, 171, 81, 18, 65, 73, 94, 210, 58, 186, 26, 216, 147, 22, 163, 166, - 4, 166, 34, 141, 85, 107, 234, 234, 185, 233, 238, 179, 47, 43, 253, 127, 7, 2, 80, 101, - 170, 46, 163, 173, 0, 210, 181, 223, 57, 195, 159, 39, 208, 75, 126, 96, 139, 219, 158, 40, - 5, 132, 12, 57, 31, 125, 58, 174, 184, 235, 16, 56, 10, 133, 133, 146, 143, 163, 249, 60, - 221, 216, 219, 143, 95, 178, 211, 92, 107, 41, 115, 85, 236, 178, 223, 132, 48, 84, 19, 18, - 47, 213, 235, 248, 149, 159, 197, 101, 212, 0, 25, 48, 145, 216, 146, 84, 69, 24, 186, 251, - 135, 182, 168, 17, 240, 249, 12, 224, 119, 89, 59, 145, 148, 147, 253, 37, 102, 62, 157, 10, - 144, 20, 210, 81, 231, 64, 42, 249, 59, 99, 36, 119, 238, 59, 210, 58, 33, 19, 169, 228, - 254, 145, 48, 116, 21, 247, 137, 57, 79, 234, 218, 120, 193, 239, 194, 16, 128, 77, 240, 95, - 1, 98, 101, 76, 147, 56, 6, 74, 121, 45, 129, 138, 227, 203, 100, 171, 87, 0, 38, 137, - 35, 158, 192, 57, 84, 242, 179, 180, 238, 75, 119, 215, 140, 200, 101, 171, 247, 187, 202, 152, - 14, 243, 126, 86, 36, 205, 181, 34, 186, 251, 104, 5, 250, 7, 32, 17, 68, 1, 80, 145, - 189, 19, 239, 136, 21, 25, 237, 8, 38, 109, 23, 236, 72, 67, 53, 33, 78, 77, 102, 91, - 221, 111, 212, 93, 48, 173, 254, 79, 229, 222, 174, 10, 60, 109, 11, 164, 45, 111, 169, 215, - 64, 106, 105, 156, 238, 67, 27, 96, 39, 120, 253, 29, 80, 118, 164, 35, 89, 54, 17, 200, - 210, 119, 235, 23, 220, 57, 238, 20, 44, 238, 144, 161, 33, 0, 85, 44, 252, 0, 28, 184, - 237, 56, 230, 37, 21, 240, 21, 16, 185, 101, 2, 105, 61, 60, 232, 169, 78, 172, 200, 77, - 151, 85, 59, 146, 228, 186, 24, 100, 8, 205, 106, 0, 79, 162, 82, 116, 55, 191, 83, 41, - 92, 23, 136, 10, 41, 57, 81, 63, 58, 34, 118, 47, 20, 39, 210, 73, 224, 222, 243, 74, - 197, 32, 19, 251, 42, 130, 119, 201, 155, 55, 57, 163, 38, 53, 100, 213, 205, 16, 168, 230, - 186, 83, 127, 130, 132, 24, 144, 105, 130, 20, 92, 18, 235, 220, 52, 3, 119, 179, 2, 210, - 105, 128, 111, 10, 10, 187, 108, 218, 145, 163, 78, 33, 72, 201, 80, 117, 47, 95, 218, 51, - 205, 161, 3, 121, 40, 105, 168, 190, 167, 135, 242, 37, 148, 95, 246, 253, 85, 215, 254, 191, - 133, 2, 240, 129, 4, 80, 119, 179, 138, 16, 36, 198, 42, 68, 65, 144, 252, 208, 160, 163, - 201, 118, 29, 48, 72, 108, 172, 176, 64, 166, 216, 221, 160, 174, 186, 158, 86, 214, 59, 59, - 96, 122, 237, 171, 138, 242, 211, 100, 157, 228, 250, 82, 16, 175, 178, 108, 50, 45, 144, 180, - 132, 30, 80, 65, 144, 234, 46, 128, 243, 241, 48, 62, 224, 131, 145, 76, 75, 60, 26, 41, - 152, 22, 1, 38, 195, 128, 118, 39, 227, 81, 43, 217, 84, 210, 77, 220, 228, 156, 52, 126, - 1, 210, 64, 85, 128, 213, 231, 219, 217, 42, 75, 89, 70, 187, 155, 185, 146, 204, 151, 144, - 165, 3, 16, 16, 231, 181, 208, 45, 5, 172, 136, 7, 185, 95, 19, 11, 226, 223, 62, 187, - 251, 190, 143, 175, 76, 2, 190, 83, 13, 128, 212, 251, 215, 87, 153, 228, 221, 72, 221, 171, - 57, 211, 167, 145, 255, 5, 149, 130, 149, 180, 157, 0, 162, 84, 215, 48, 92, 13, 89, 232, - 174, 149, 115, 159, 163, 19, 249, 156, 29, 44, 173, 190, 95, 169, 16, 4, 120, 15, 177, 73, - 138, 164, 67, 131, 56, 125, 157, 242, 174, 131, 110, 217, 194, 13, 173, 58, 31, 15, 181, 143, - 63, 175, 198, 97, 147, 115, 151, 201, 190, 4, 228, 122, 151, 205, 175, 222, 243, 5, 0, 33, - 81, 6, 222, 180, 208, 165, 21, 249, 82, 94, 155, 112, 55, 25, 118, 146, 249, 127, 150, 81, - 18, 173, 152, 39, 215, 46, 29, 196, 147, 76, 216, 91, 57, 245, 173, 0, 186, 250, 247, 80, - 182, 148, 148, 58, 19, 186, 239, 135, 251, 46, 140, 2, 240, 55, 146, 129, 85, 166, 221, 129, - 239, 243, 1, 117, 42, 91, 127, 167, 134, 63, 85, 145, 220, 243, 230, 58, 77, 150, 235, 136, - 16, 5, 107, 90, 120, 232, 198, 21, 59, 146, 229, 174, 165, 43, 216, 211, 131, 168, 201, 128, - 117, 71, 92, 136, 81, 78, 181, 126, 253, 36, 33, 171, 118, 60, 50, 200, 200, 249, 36, 104, - 161, 10, 168, 249, 252, 101, 228, 84, 167, 4, 36, 118, 191, 171, 207, 132, 40, 10, 59, 197, - 105, 14, 112, 201, 191, 174, 34, 59, 177, 196, 37, 234, 131, 59, 119, 234, 29, 47, 8, 110, - 84, 174, 79, 178, 254, 10, 104, 81, 102, 171, 218, 12, 39, 81, 131, 238, 224, 60, 8, 104, - 211, 57, 15, 93, 210, 212, 89, 65, 119, 131, 171, 14, 168, 26, 13, 1, 216, 4, 254, 10, - 20, 171, 233, 112, 14, 40, 18, 55, 64, 210, 150, 38, 241, 233, 131, 146, 239, 127, 151, 250, - 34, 61, 34, 197, 119, 178, 112, 215, 201, 32, 3, 70, 100, 237, 222, 109, 67, 200, 133, 10, - 233, 156, 200, 242, 201, 223, 187, 130, 189, 219, 144, 6, 114, 156, 149, 34, 64, 157, 21, 239, - 134, 232, 30, 5, 112, 184, 76, 43, 157, 47, 208, 169, 54, 171, 159, 93, 166, 182, 147, 245, - 38, 149, 254, 2, 25, 59, 253, 187, 147, 152, 211, 181, 225, 170, 150, 129, 146, 6, 90, 209, - 191, 106, 169, 235, 142, 113, 136, 141, 65, 118, 100, 84, 161, 66, 112, 129, 44, 60, 117, 105, - 76, 218, 241, 18, 178, 40, 168, 234, 28, 146, 238, 175, 158, 253, 127, 11, 2, 240, 161, 14, - 32, 153, 157, 222, 109, 67, 228, 209, 231, 246, 174, 234, 191, 123, 136, 187, 115, 173, 128, 242, - 52, 15, 123, 226, 75, 64, 64, 198, 189, 254, 2, 100, 135, 102, 159, 4, 228, 111, 49, 67, - 166, 138, 164, 144, 182, 64, 129, 207, 205, 121, 21, 220, 13, 176, 175, 238, 183, 85, 155, 101, - 69, 70, 59, 231, 72, 162, 10, 57, 245, 232, 50, 234, 88, 183, 63, 103, 54, 68, 36, 124, - 137, 85, 251, 167, 173, 112, 105, 129, 220, 29, 156, 199, 71, 0, 167, 173, 142, 73, 38, 73, - 0, 238, 110, 62, 207, 196, 252, 39, 29, 89, 236, 138, 64, 73, 229, 126, 247, 221, 188, 196, - 134, 248, 236, 222, 251, 59, 237, 158, 90, 144, 34, 167, 68, 84, 100, 120, 8, 192, 39, 146, - 0, 151, 153, 30, 226, 182, 190, 213, 131, 221, 129, 25, 1, 117, 10, 128, 199, 198, 190, 72, - 54, 174, 77, 73, 159, 100, 209, 14, 28, 232, 50, 192, 170, 229, 236, 124, 1, 118, 157, 75, - 96, 71, 86, 156, 108, 95, 213, 148, 72, 117, 209, 162, 203, 174, 5, 148, 14, 162, 36, 104, - 33, 217, 11, 220, 251, 151, 250, 90, 142, 110, 25, 229, 130, 96, 147, 140, 186, 77, 36, 91, - 34, 205, 75, 89, 181, 127, 178, 204, 224, 246, 185, 51, 247, 128, 40, 72, 157, 77, 240, 17, - 146, 166, 221, 243, 235, 36, 242, 196, 175, 63, 237, 18, 113, 68, 133, 100, 239, 180, 181, 241, - 88, 144, 189, 196, 98, 249, 219, 196, 119, 171, 1, 112, 128, 35, 0, 102, 221, 131, 255, 120, - 121, 188, 20, 252, 165, 204, 187, 192, 1, 184, 147, 129, 105, 134, 254, 124, 237, 25, 168, 37, - 119, 144, 181, 167, 173, 131, 174, 88, 209, 201, 246, 29, 9, 233, 204, 128, 186, 174, 146, 231, - 82, 192, 202, 180, 231, 52, 170, 144, 91, 218, 89, 101, 233, 135, 234, 2, 61, 210, 177, 112, - 43, 87, 16, 110, 240, 93, 75, 148, 1, 146, 189, 31, 27, 89, 124, 106, 109, 75, 207, 137, - 202, 245, 68, 97, 144, 120, 253, 64, 74, 86, 164, 189, 182, 66, 58, 84, 105, 167, 70, 128, - 0, 55, 41, 76, 37, 138, 69, 117, 159, 187, 243, 116, 29, 4, 132, 64, 254, 55, 105, 29, - 2, 240, 247, 1, 254, 13, 30, 230, 29, 240, 39, 213, 211, 212, 14, 152, 152, 8, 37, 149, - 248, 21, 49, 233, 150, 59, 136, 79, 193, 13, 246, 171, 5, 19, 118, 99, 120, 87, 160, 68, - 182, 87, 1, 136, 68, 117, 184, 228, 77, 155, 18, 245, 135, 168, 38, 238, 158, 163, 109, 127, - 100, 185, 197, 213, 76, 220, 144, 48, 74, 126, 40, 208, 109, 200, 93, 10, 168, 41, 72, 85, - 64, 73, 44, 118, 83, 51, 31, 7, 210, 59, 53, 8, 82, 86, 228, 151, 2, 42, 81, 62, - 92, 223, 126, 146, 13, 83, 213, 230, 51, 170, 239, 29, 65, 74, 13, 166, 186, 109, 15, 177, - 245, 125, 25, 34, 174, 226, 153, 54, 10, 192, 223, 17, 69, 45, 128, 203, 118, 5, 228, 242, - 132, 108, 124, 148, 169, 165, 218, 54, 183, 234, 233, 79, 30, 238, 68, 45, 232, 44, 135, 187, - 243, 186, 77, 134, 45, 249, 110, 138, 142, 160, 184, 215, 144, 7, 143, 107, 59, 36, 83, 0, - 147, 129, 78, 14, 200, 37, 63, 11, 125, 245, 30, 46, 213, 253, 252, 71, 241, 0, 35, 170, - 207, 5, 206, 95, 197, 3, 148, 116, 25, 116, 89, 125, 151, 109, 37, 96, 66, 65, 35, 53, - 236, 73, 228, 103, 146, 225, 11, 254, 63, 81, 39, 46, 32, 91, 239, 214, 63, 144, 123, 178, - 146, 182, 83, 103, 63, 66, 38, 118, 38, 249, 145, 2, 199, 196, 90, 57, 41, 18, 117, 10, - 133, 35, 68, 223, 42, 251, 255, 142, 10, 128, 203, 20, 157, 133, 106, 42, 173, 171, 144, 195, - 93, 59, 85, 69, 4, 42, 80, 118, 85, 222, 68, 214, 126, 190, 175, 243, 241, 208, 57, 197, - 220, 18, 43, 2, 213, 1, 173, 91, 95, 119, 61, 244, 244, 193, 165, 0, 204, 233, 160, 159, - 85, 119, 1, 1, 125, 247, 222, 158, 109, 132, 207, 115, 117, 78, 126, 238, 1, 187, 122, 125, - 247, 217, 173, 122, 255, 143, 224, 251, 64, 192, 166, 82, 104, 118, 141, 129, 232, 255, 203, 200, - 200, 73, 159, 127, 10, 104, 68, 22, 78, 61, 10, 8, 136, 221, 112, 63, 87, 147, 245, 210, - 101, 130, 148, 252, 144, 26, 1, 218, 194, 119, 5, 207, 5, 74, 72, 28, 249, 56, 204, 182, - 93, 135, 197, 183, 138, 239, 90, 3, 224, 36, 206, 213, 224, 153, 149, 121, 78, 34, 137, 147, - 138, 249, 149, 180, 76, 59, 19, 104, 134, 78, 101, 106, 103, 22, 68, 166, 40, 170, 185, 70, - 157, 228, 79, 192, 61, 177, 215, 77, 50, 125, 153, 223, 57, 41, 210, 45, 199, 60, 135, 253, - 116, 85, 250, 78, 70, 172, 108, 71, 223, 40, 39, 100, 251, 164, 0, 139, 142, 85, 165, 69, - 122, 2, 160, 191, 11, 186, 238, 60, 59, 155, 94, 242, 30, 42, 181, 227, 46, 190, 203, 201, - 224, 163, 148, 164, 72, 125, 75, 226, 147, 20, 209, 17, 202, 105, 103, 133, 91, 206, 232, 62, - 195, 163, 185, 190, 151, 185, 214, 116, 84, 177, 243, 233, 39, 254, 5, 88, 117, 249, 78, 217, - 255, 183, 35, 0, 143, 101, 128, 157, 181, 127, 71, 28, 18, 121, 251, 6, 199, 166, 54, 173, - 196, 33, 144, 168, 24, 157, 210, 240, 60, 214, 202, 12, 169, 27, 33, 75, 222, 183, 107, 95, - 163, 4, 99, 181, 108, 177, 170, 119, 56, 23, 63, 147, 66, 192, 21, 209, 34, 132, 68, 242, - 235, 240, 157, 58, 64, 234, 67, 186, 115, 236, 218, 5, 159, 74, 18, 49, 22, 170, 30, 158, - 21, 177, 76, 72, 64, 66, 54, 104, 214, 93, 129, 133, 64, 246, 95, 101, 170, 7, 204, 10, - 87, 42, 3, 105, 17, 60, 212, 27, 200, 16, 50, 69, 193, 153, 202, 215, 137, 21, 240, 110, - 177, 229, 206, 62, 210, 2, 67, 114, 125, 92, 198, 78, 50, 126, 247, 158, 190, 109, 124, 59, - 5, 0, 214, 2, 56, 166, 153, 22, 18, 38, 254, 1, 50, 192, 255, 220, 111, 82, 200, 72, - 123, 252, 73, 54, 184, 50, 6, 114, 211, 17, 19, 101, 130, 248, 21, 208, 186, 135, 213, 244, - 71, 87, 35, 208, 13, 220, 169, 0, 135, 44, 239, 84, 0, 254, 166, 93, 242, 227, 251, 252, - 120, 13, 254, 159, 122, 255, 9, 38, 131, 38, 0, 0, 32, 0, 73, 68, 65, 84, 137, 238, - 119, 2, 106, 86, 149, 13, 29, 224, 1, 232, 198, 7, 187, 140, 154, 40, 8, 228, 111, 87, - 160, 14, 172, 0, 230, 10, 37, 231, 157, 233, 133, 180, 200, 79, 226, 147, 243, 232, 154, 181, - 83, 73, 104, 191, 126, 106, 163, 123, 65, 21, 32, 241, 79, 216, 109, 151, 76, 200, 101, 181, - 205, 1, 175, 207, 16, 128, 127, 48, 232, 32, 154, 202, 200, 71, 70, 98, 118, 127, 115, 197, - 113, 213, 207, 110, 41, 194, 129, 43, 33, 26, 78, 242, 126, 2, 238, 37, 63, 107, 129, 100, - 147, 213, 180, 190, 170, 22, 162, 115, 200, 123, 158, 223, 9, 136, 140, 194, 247, 83, 189, 166, - 83, 39, 100, 50, 112, 183, 134, 78, 157, 37, 87, 163, 149, 59, 98, 69, 11, 91, 175, 66, - 149, 112, 45, 80, 85, 86, 251, 60, 95, 71, 180, 186, 135, 45, 157, 248, 247, 6, 92, 146, - 140, 248, 89, 85, 191, 106, 21, 75, 215, 253, 169, 172, 46, 147, 212, 164, 69, 108, 201, 56, - 228, 100, 48, 19, 249, 44, 100, 84, 0, 231, 235, 159, 212, 66, 164, 32, 77, 151, 90, 90, - 178, 244, 221, 228, 255, 111, 75, 0, 254, 163, 2, 72, 235, 245, 242, 106, 208, 138, 43, 84, - 59, 67, 226, 177, 146, 93, 187, 194, 65, 199, 98, 19, 121, 191, 122, 175, 18, 31, 223, 43, - 168, 40, 144, 14, 132, 110, 172, 174, 171, 19, 56, 31, 15, 87, 105, 207, 195, 158, 2, 189, - 128, 138, 225, 192, 191, 243, 5, 168, 200, 25, 85, 10, 186, 246, 78, 71, 126, 87, 191, 175, - 38, 199, 85, 107, 215, 68, 189, 112, 237, 85, 93, 203, 166, 123, 216, 94, 134, 56, 144, 135, - 246, 110, 86, 158, 252, 75, 201, 68, 210, 233, 144, 0, 111, 181, 111, 71, 78, 18, 41, 59, - 153, 188, 184, 211, 210, 184, 83, 244, 119, 195, 251, 161, 107, 39, 189, 55, 239, 167, 242, 217, - 241, 29, 193, 255, 79, 81, 0, 36, 214, 183, 157, 152, 252, 80, 51, 154, 174, 53, 112, 117, - 51, 58, 203, 88, 2, 218, 171, 243, 173, 10, 242, 86, 224, 85, 101, 185, 46, 187, 39, 238, - 116, 79, 208, 119, 157, 24, 130, 68, 98, 165, 22, 92, 90, 15, 91, 58, 77, 150, 77, 235, - 64, 170, 226, 80, 218, 97, 64, 182, 35, 254, 17, 221, 189, 67, 190, 23, 183, 242, 81, 215, - 93, 118, 214, 29, 67, 77, 118, 231, 192, 139, 102, 99, 110, 13, 215, 101, 230, 36, 147, 221, - 25, 240, 67, 108, 123, 239, 66, 85, 232, 128, 247, 128, 25, 188, 43, 112, 116, 100, 39, 81, - 6, 146, 33, 61, 180, 158, 130, 42, 13, 244, 254, 144, 88, 17, 96, 106, 189, 188, 220, 238, - 171, 143, 253, 253, 83, 9, 192, 142, 76, 158, 246, 137, 83, 215, 192, 42, 171, 239, 122, 241, - 15, 101, 67, 135, 72, 65, 94, 167, 36, 36, 53, 2, 43, 117, 163, 34, 23, 171, 177, 182, - 213, 88, 95, 218, 194, 87, 21, 234, 117, 89, 194, 81, 40, 9, 85, 77, 65, 55, 166, 183, - 106, 215, 164, 247, 16, 233, 10, 80, 160, 150, 220, 98, 67, 127, 86, 215, 130, 20, 45, 86, - 35, 134, 15, 101, 22, 190, 146, 55, 243, 161, 15, 240, 183, 32, 238, 94, 119, 193, 223, 237, - 172, 143, 119, 179, 4, 232, 182, 46, 35, 238, 150, 163, 62, 35, 107, 119, 153, 56, 113, 45, - 164, 127, 39, 251, 175, 62, 195, 93, 43, 106, 122, 223, 173, 238, 177, 95, 158, 69, 163, 0, - 124, 61, 5, 224, 227, 207, 171, 245, 99, 167, 28, 156, 226, 189, 217, 135, 121, 40, 156, 143, - 159, 137, 93, 177, 251, 146, 147, 172, 83, 226, 237, 127, 79, 112, 233, 140, 140, 186, 204, 220, - 213, 101, 84, 54, 182, 196, 41, 79, 226, 51, 21, 62, 42, 51, 151, 242, 25, 10, 21, 33, - 160, 42, 210, 142, 207, 191, 64, 182, 78, 239, 141, 174, 191, 89, 70, 153, 89, 77, 17, 20, - 32, 188, 52, 179, 223, 33, 3, 59, 235, 255, 137, 250, 144, 218, 237, 146, 98, 68, 2, 50, - 73, 117, 127, 226, 211, 79, 175, 153, 83, 13, 18, 229, 163, 170, 190, 119, 73, 155, 148, 73, - 243, 171, 207, 151, 180, 58, 18, 96, 23, 32, 60, 130, 175, 25, 2, 240, 183, 165, 253, 191, - 119, 3, 116, 69, 112, 31, 139, 239, 118, 214, 203, 147, 9, 116, 79, 25, 90, 77, 246, 153, - 202, 202, 78, 129, 112, 14, 127, 73, 21, 255, 170, 136, 206, 93, 51, 169, 46, 250, 163, 239, - 229, 214, 126, 77, 65, 181, 84, 112, 24, 85, 66, 242, 3, 128, 86, 42, 74, 103, 255, 235, - 170, 255, 147, 58, 0, 250, 62, 165, 220, 194, 215, 41, 28, 233, 80, 21, 231, 170, 120, 203, - 59, 23, 38, 217, 245, 27, 144, 37, 217, 102, 151, 197, 107, 3, 192, 233, 152, 89, 122, 188, - 164, 142, 224, 14, 223, 119, 55, 26, 184, 107, 111, 84, 168, 64, 40, 252, 204, 210, 182, 77, - 114, 223, 18, 178, 187, 156, 21, 240, 93, 179, 255, 111, 175, 0, 128, 81, 193, 207, 127, 159, - 74, 128, 91, 83, 165, 195, 106, 104, 159, 55, 61, 166, 203, 164, 79, 144, 9, 119, 36, 128, - 142, 18, 166, 106, 199, 10, 248, 221, 114, 133, 10, 176, 57, 27, 194, 228, 84, 147, 149, 186, - 64, 42, 247, 37, 182, 220, 67, 36, 248, 21, 89, 184, 55, 142, 173, 134, 12, 144, 7, 219, - 1, 182, 115, 15, 55, 71, 42, 187, 207, 145, 72, 219, 135, 50, 63, 0, 1, 217, 60, 41, - 40, 76, 236, 118, 169, 68, 236, 206, 141, 218, 228, 18, 160, 35, 199, 170, 10, 237, 142, 240, - 188, 101, 50, 113, 74, 102, 200, 251, 92, 221, 203, 87, 64, 242, 158, 175, 219, 177, 123, 38, - 75, 22, 247, 119, 6, 255, 111, 79, 0, 154, 27, 194, 153, 203, 36, 67, 131, 168, 223, 192, - 169, 61, 107, 97, 21, 128, 209, 29, 219, 181, 184, 209, 17, 192, 142, 188, 144, 108, 180, 203, - 204, 147, 66, 56, 105, 221, 243, 223, 169, 2, 174, 56, 77, 129, 154, 66, 150, 1, 136, 68, - 120, 168, 30, 162, 228, 30, 168, 116, 105, 224, 40, 30, 230, 71, 145, 169, 37, 133, 131, 142, - 68, 28, 234, 123, 188, 213, 0, 125, 245, 80, 79, 100, 95, 42, 11, 39, 227, 123, 5, 128, - 222, 109, 147, 76, 2, 220, 25, 17, 252, 166, 234, 126, 215, 78, 152, 78, 66, 76, 148, 8, - 146, 237, 39, 237, 125, 201, 181, 77, 174, 11, 85, 37, 190, 117, 124, 123, 2, 240, 65, 5, - 112, 15, 181, 42, 163, 117, 118, 185, 36, 75, 190, 155, 108, 223, 145, 20, 233, 247, 194, 185, - 52, 139, 150, 88, 27, 97, 87, 12, 89, 77, 252, 35, 231, 159, 216, 25, 119, 128, 71, 219, - 30, 47, 115, 206, 84, 214, 119, 196, 64, 128, 112, 116, 202, 2, 109, 225, 36, 231, 116, 7, - 215, 169, 90, 251, 166, 132, 110, 245, 128, 76, 150, 5, 42, 127, 129, 85, 55, 202, 45, 223, - 133, 160, 134, 16, 86, 25, 110, 167, 10, 28, 16, 160, 119, 29, 236, 118, 125, 2, 82, 119, - 60, 65, 5, 161, 83, 71, 40, 185, 113, 224, 239, 150, 4, 158, 215, 133, 246, 233, 163, 76, - 60, 124, 239, 169, 207, 193, 114, 251, 239, 158, 253, 255, 73, 10, 128, 0, 224, 84, 153, 80, - 37, 27, 87, 82, 239, 209, 60, 28, 159, 117, 6, 9, 104, 170, 145, 145, 73, 71, 128, 228, - 237, 134, 187, 177, 180, 174, 151, 157, 56, 221, 165, 195, 101, 222, 126, 214, 71, 145, 125, 31, - 1, 232, 29, 98, 100, 101, 181, 159, 35, 204, 156, 41, 152, 118, 197, 146, 221, 177, 220, 253, - 73, 50, 151, 138, 200, 94, 234, 7, 10, 117, 64, 91, 1, 163, 196, 139, 232, 42, 7, 63, - 183, 244, 80, 17, 244, 164, 107, 96, 183, 45, 144, 130, 115, 50, 40, 104, 87, 49, 88, 17, - 168, 11, 158, 75, 71, 18, 14, 112, 126, 87, 152, 241, 95, 170, 187, 26, 156, 122, 228, 186, - 86, 18, 66, 38, 240, 254, 135, 0, 124, 97, 21, 160, 43, 54, 162, 254, 232, 21, 40, 172, - 188, 231, 79, 101, 22, 194, 31, 31, 240, 39, 0, 32, 154, 173, 86, 64, 148, 12, 61, 82, - 152, 157, 43, 36, 10, 100, 72, 210, 29, 30, 67, 27, 153, 123, 119, 205, 86, 53, 9, 171, - 194, 192, 110, 91, 226, 59, 208, 145, 131, 206, 255, 95, 230, 97, 124, 24, 16, 173, 98, 229, - 62, 72, 178, 101, 215, 138, 70, 9, 193, 1, 192, 141, 180, 189, 9, 0, 145, 54, 255, 77, - 64, 191, 34, 18, 132, 140, 184, 103, 19, 93, 126, 184, 96, 102, 220, 253, 43, 8, 228, 130, - 239, 165, 90, 22, 58, 64, 86, 254, 230, 115, 144, 248, 50, 210, 111, 175, 253, 19, 50, 255, - 63, 81, 1, 232, 178, 67, 105, 93, 193, 237, 228, 118, 50, 232, 103, 215, 223, 254, 54, 15, - 93, 2, 198, 146, 239, 79, 239, 106, 8, 136, 124, 94, 157, 75, 50, 86, 152, 88, 112, 58, - 112, 150, 88, 29, 135, 35, 38, 7, 200, 156, 79, 121, 239, 251, 142, 148, 220, 202, 102, 77, - 236, 76, 18, 36, 215, 211, 21, 126, 238, 146, 128, 36, 51, 114, 254, 240, 50, 170, 152, 243, - 22, 160, 227, 127, 221, 208, 32, 7, 54, 132, 52, 236, 254, 205, 237, 63, 237, 239, 79, 50, - 222, 100, 42, 33, 89, 31, 223, 125, 207, 196, 240, 200, 29, 147, 40, 33, 148, 212, 37, 117, - 46, 67, 0, 190, 16, 248, 39, 246, 171, 2, 15, 103, 98, 183, 218, 253, 237, 41, 229, 210, - 106, 123, 1, 9, 217, 101, 204, 71, 33, 203, 158, 134, 56, 117, 75, 2, 167, 214, 174, 130, - 206, 113, 143, 144, 160, 52, 115, 23, 4, 231, 234, 51, 235, 140, 130, 220, 117, 238, 50, 242, - 238, 154, 84, 166, 61, 238, 90, 164, 118, 200, 59, 153, 255, 138, 56, 184, 207, 237, 6, 215, - 225, 54, 164, 75, 38, 11, 38, 45, 175, 14, 8, 46, 177, 90, 131, 100, 164, 109, 154, 133, - 191, 157, 97, 144, 130, 118, 226, 32, 72, 85, 30, 183, 253, 179, 242, 222, 25, 27, 221, 170, - 151, 129, 72, 23, 11, 185, 127, 118, 71, 92, 59, 197, 100, 8, 192, 87, 137, 199, 50, 64, - 234, 161, 239, 6, 233, 144, 73, 124, 2, 25, 31, 173, 232, 119, 153, 254, 19, 24, 206, 70, - 30, 93, 117, 11, 92, 234, 109, 122, 201, 68, 192, 174, 30, 161, 243, 58, 112, 134, 62, 148, - 188, 37, 228, 225, 48, 15, 148, 19, 128, 168, 203, 148, 87, 19, 11, 119, 30, 22, 137, 47, - 66, 162, 128, 221, 226, 5, 128, 213, 122, 107, 167, 50, 92, 205, 235, 157, 239, 187, 187, 214, - 116, 72, 145, 3, 130, 85, 246, 239, 178, 197, 67, 188, 15, 127, 71, 17, 32, 251, 76, 204, - 152, 92, 5, 126, 66, 110, 72, 189, 193, 5, 175, 47, 81, 18, 14, 240, 89, 39, 62, 10, - 157, 33, 81, 58, 56, 232, 143, 147, 255, 255, 56, 5, 224, 195, 144, 32, 50, 129, 143, 72, - 204, 105, 37, 251, 109, 64, 95, 70, 89, 16, 0, 71, 71, 56, 78, 245, 222, 246, 174, 213, - 80, 13, 128, 28, 225, 191, 105, 166, 78, 150, 81, 20, 146, 177, 149, 10, 67, 207, 169, 90, - 239, 119, 100, 128, 144, 194, 110, 137, 224, 106, 8, 80, 213, 1, 145, 188, 39, 74, 68, 170, - 207, 127, 5, 254, 85, 71, 140, 147, 219, 147, 145, 193, 4, 24, 156, 193, 80, 186, 230, 157, - 128, 120, 82, 100, 152, 212, 25, 208, 161, 67, 46, 171, 127, 83, 168, 216, 17, 12, 7, 240, - 68, 174, 191, 160, 162, 66, 39, 39, 202, 168, 46, 21, 177, 75, 58, 20, 134, 0, 124, 97, - 18, 224, 164, 104, 82, 177, 126, 0, 224, 95, 89, 254, 186, 140, 140, 100, 116, 135, 252, 136, - 226, 85, 193, 218, 42, 187, 63, 155, 172, 237, 4, 128, 154, 116, 21, 124, 236, 132, 112, 78, - 122, 36, 115, 39, 195, 108, 220, 117, 148, 81, 122, 168, 207, 127, 151, 45, 16, 171, 225, 213, - 62, 157, 53, 240, 165, 253, 37, 31, 153, 107, 70, 21, 136, 42, 139, 114, 0, 79, 236, 130, - 15, 245, 107, 194, 164, 120, 172, 203, 64, 5, 179, 250, 228, 223, 46, 203, 117, 237, 117, 105, - 209, 154, 128, 28, 77, 106, 1, 168, 66, 146, 174, 253, 83, 130, 214, 101, 233, 59, 217, 126, - 213, 125, 64, 85, 135, 11, 158, 203, 253, 127, 208, 114, 92, 67, 0, 190, 79, 84, 213, 209, - 103, 193, 216, 73, 113, 217, 1, 31, 236, 169, 28, 77, 124, 238, 147, 44, 92, 144, 96, 72, - 191, 59, 237, 185, 105, 129, 46, 227, 63, 197, 106, 21, 14, 67, 70, 170, 86, 56, 82, 79, - 208, 141, 238, 117, 36, 166, 107, 149, 172, 128, 178, 115, 155, 236, 246, 155, 218, 5, 87, 117, - 10, 213, 195, 51, 45, 252, 235, 150, 98, 46, 121, 119, 65, 82, 56, 121, 55, 4, 162, 122, - 104, 187, 86, 200, 157, 181, 117, 105, 191, 16, 175, 251, 247, 104, 192, 248, 130, 251, 165, 178, - 251, 10, 200, 200, 251, 216, 169, 246, 79, 178, 112, 87, 80, 71, 51, 117, 74, 72, 82, 53, - 41, 157, 72, 249, 71, 102, 255, 127, 44, 1, 88, 180, 5, 174, 192, 233, 227, 3, 238, 12, - 178, 109, 87, 27, 224, 128, 154, 144, 9, 53, 251, 33, 25, 174, 35, 31, 171, 107, 114, 64, - 245, 98, 117, 94, 157, 169, 75, 53, 97, 79, 141, 244, 189, 59, 114, 215, 145, 40, 55, 60, - 231, 104, 222, 215, 138, 240, 85, 15, 77, 234, 203, 79, 173, 130, 169, 215, 192, 115, 31, 43, - 146, 64, 136, 77, 69, 92, 46, 240, 0, 119, 107, 252, 7, 120, 248, 174, 178, 53, 210, 239, - 175, 80, 49, 216, 201, 132, 19, 80, 234, 42, 220, 201, 121, 17, 18, 65, 165, 234, 196, 102, - 248, 50, 224, 79, 62, 123, 7, 228, 180, 197, 241, 40, 94, 115, 40, 91, 10, 73, 207, 143, - 146, 230, 33, 0, 223, 128, 4, 56, 75, 87, 151, 45, 145, 53, 232, 110, 228, 172, 180, 110, - 57, 60, 63, 200, 134, 167, 184, 244, 238, 172, 96, 157, 79, 125, 154, 241, 19, 153, 185, 170, - 248, 174, 188, 14, 86, 215, 195, 1, 122, 7, 126, 157, 175, 0, 185, 166, 207, 115, 39, 25, - 185, 160, 90, 116, 131, 107, 187, 234, 18, 120, 2, 184, 27, 214, 227, 142, 233, 108, 143, 37, - 95, 113, 95, 237, 175, 187, 55, 92, 38, 191, 227, 104, 72, 250, 197, 83, 85, 32, 181, 11, - 166, 51, 234, 175, 64, 113, 232, 8, 153, 83, 16, 168, 252, 237, 234, 8, 170, 229, 158, 148, - 196, 36, 117, 10, 169, 21, 240, 5, 238, 165, 202, 87, 32, 25, 131, 124, 255, 105, 133, 127, - 63, 130, 0, 52, 15, 53, 215, 246, 39, 49, 27, 92, 1, 114, 225, 230, 182, 255, 5, 252, - 100, 144, 143, 3, 47, 146, 5, 116, 32, 75, 237, 111, 239, 6, 144, 18, 69, 164, 146, 197, - 29, 128, 171, 33, 89, 2, 138, 201, 170, 182, 227, 106, 62, 187, 74, 153, 160, 231, 73, 251, - 253, 151, 115, 198, 11, 192, 189, 12, 145, 37, 203, 8, 73, 161, 83, 183, 38, 79, 193, 139, - 72, 173, 68, 174, 165, 217, 155, 12, 248, 29, 161, 188, 236, 128, 141, 94, 139, 100, 25, 226, - 141, 82, 208, 41, 42, 46, 179, 191, 94, 188, 246, 141, 153, 16, 85, 12, 104, 39, 195, 5, - 213, 139, 31, 85, 248, 247, 147, 8, 128, 76, 198, 158, 188, 198, 237, 207, 101, 154, 149, 44, - 254, 177, 55, 159, 76, 204, 115, 131, 112, 14, 67, 86, 86, 0, 186, 2, 143, 106, 10, 159, - 91, 111, 63, 225, 151, 136, 24, 20, 145, 101, 128, 75, 125, 135, 71, 106, 134, 67, 178, 216, - 202, 229, 175, 34, 10, 116, 16, 146, 12, 217, 80, 145, 1, 31, 230, 124, 119, 190, 43, 157, - 159, 191, 196, 235, 23, 58, 181, 225, 179, 72, 130, 154, 239, 75, 50, 7, 158, 180, 16, 30, - 32, 27, 222, 205, 190, 165, 222, 44, 201, 17, 28, 226, 181, 239, 178, 229, 116, 62, 194, 170, - 104, 51, 205, 240, 221, 117, 164, 4, 135, 204, 29, 32, 5, 136, 100, 153, 98, 8, 192, 87, - 143, 71, 91, 160, 0, 136, 145, 254, 119, 137, 185, 187, 169, 145, 146, 171, 105, 126, 196, 136, - 136, 76, 168, 163, 147, 3, 221, 64, 157, 39, 9, 168, 128, 225, 208, 222, 44, 1, 7, 110, - 137, 173, 176, 228, 151, 120, 146, 233, 126, 105, 203, 224, 234, 65, 230, 230, 18, 36, 198, 57, - 42, 238, 97, 106, 204, 67, 193, 255, 8, 192, 87, 242, 245, 32, 201, 235, 19, 66, 208, 45, - 43, 92, 6, 44, 146, 172, 252, 51, 218, 224, 200, 107, 41, 89, 249, 56, 16, 139, 102, 176, - 41, 9, 113, 238, 120, 68, 181, 16, 56, 175, 67, 188, 101, 144, 168, 15, 207, 251, 226, 82, - 214, 201, 112, 175, 48, 100, 8, 192, 159, 65, 2, 92, 38, 47, 245, 235, 225, 146, 31, 11, - 156, 212, 17, 84, 15, 235, 157, 137, 117, 207, 204, 251, 48, 192, 220, 101, 227, 157, 103, 194, - 142, 98, 114, 7, 239, 221, 126, 156, 240, 218, 40, 32, 80, 212, 83, 96, 181, 15, 178, 116, - 83, 153, 44, 37, 199, 89, 189, 167, 203, 168, 79, 151, 120, 27, 101, 5, 220, 196, 243, 226, - 94, 128, 255, 165, 186, 125, 176, 155, 9, 64, 50, 79, 10, 110, 206, 15, 128, 0, 223, 1, - 136, 65, 42, 251, 211, 226, 194, 163, 201, 100, 119, 150, 97, 168, 103, 63, 33, 51, 183, 33, - 39, 100, 22, 131, 0, 145, 233, 84, 137, 157, 214, 70, 71, 48, 126, 249, 251, 159, 14, 254, - 63, 130, 0, 24, 192, 239, 188, 238, 59, 176, 232, 60, 0, 232, 68, 190, 46, 139, 150, 214, - 109, 113, 100, 226, 33, 121, 255, 142, 228, 208, 150, 187, 206, 65, 240, 46, 8, 72, 167, 10, - 184, 90, 138, 167, 236, 77, 92, 5, 41, 65, 72, 219, 62, 111, 245, 30, 19, 169, 133, 49, - 189, 238, 29, 129, 32, 227, 117, 87, 68, 247, 110, 126, 95, 153, 250, 28, 224, 33, 191, 3, - 88, 130, 239, 193, 253, 236, 28, 255, 28, 96, 118, 25, 47, 117, 246, 75, 150, 23, 110, 8, - 248, 164, 194, 157, 200, 235, 213, 121, 58, 215, 193, 29, 229, 67, 77, 86, 158, 92, 63, 66, - 16, 175, 197, 241, 200, 62, 127, 121, 31, 63, 1, 252, 127, 12, 1, 40, 166, 5, 190, 89, - 183, 239, 50, 101, 215, 118, 215, 117, 38, 60, 189, 250, 187, 154, 128, 39, 81, 32, 217, 58, - 105, 25, 124, 126, 121, 72, 139, 100, 244, 113, 104, 93, 204, 214, 213, 52, 184, 53, 116, 87, - 132, 119, 2, 117, 167, 82, 67, 142, 130, 124, 116, 239, 133, 248, 65, 116, 231, 231, 164, 202, - 110, 122, 161, 196, 12, 134, 146, 142, 134, 203, 144, 227, 138, 44, 19, 32, 87, 65, 108, 186, - 201, 112, 100, 50, 224, 177, 33, 73, 87, 214, 197, 111, 220, 4, 19, 245, 32, 157, 234, 71, - 50, 225, 149, 18, 179, 99, 7, 92, 157, 235, 177, 200, 230, 221, 185, 59, 146, 148, 116, 116, - 164, 68, 51, 81, 136, 134, 0, 252, 97, 217, 63, 89, 59, 63, 77, 246, 255, 4, 220, 10, - 16, 42, 41, 215, 25, 227, 60, 179, 255, 167, 106, 64, 100, 235, 212, 45, 175, 146, 180, 87, - 198, 54, 180, 151, 189, 107, 115, 171, 236, 138, 221, 103, 71, 150, 18, 170, 247, 208, 101, 182, - 213, 181, 59, 76, 166, 191, 106, 245, 84, 163, 250, 84, 45, 74, 151, 178, 145, 197, 78, 213, - 186, 155, 247, 72, 6, 25, 57, 223, 130, 234, 193, 124, 53, 89, 102, 229, 171, 160, 34, 115, - 235, 102, 193, 187, 12, 110, 69, 90, 168, 99, 97, 226, 69, 239, 64, 227, 205, 24, 97, 151, - 221, 82, 101, 64, 242, 237, 129, 59, 214, 194, 82, 222, 142, 88, 237, 151, 94, 27, 247, 25, - 147, 66, 67, 25, 165, 234, 199, 100, 255, 63, 138, 0, 60, 106, 1, 186, 54, 169, 85, 101, - 124, 247, 51, 201, 170, 142, 34, 195, 168, 192, 35, 169, 94, 39, 46, 123, 14, 44, 142, 66, - 2, 22, 80, 2, 110, 147, 229, 203, 16, 31, 42, 159, 187, 161, 68, 78, 181, 112, 96, 154, - 14, 120, 186, 84, 59, 242, 201, 16, 11, 122, 207, 184, 105, 124, 207, 123, 232, 185, 222, 222, - 181, 56, 146, 76, 80, 98, 110, 128, 14, 4, 15, 40, 109, 147, 140, 236, 130, 82, 48, 217, - 166, 155, 72, 232, 50, 197, 157, 172, 127, 183, 0, 145, 88, 218, 170, 249, 44, 169, 95, 1, - 105, 241, 75, 167, 29, 118, 63, 127, 44, 104, 76, 150, 113, 104, 107, 226, 234, 51, 76, 234, - 1, 134, 0, 252, 129, 36, 192, 201, 252, 18, 247, 200, 151, 124, 97, 96, 149, 65, 85, 217, - 235, 10, 152, 42, 185, 147, 142, 8, 94, 181, 155, 85, 100, 167, 2, 110, 87, 153, 79, 64, - 64, 6, 216, 187, 237, 174, 135, 84, 222, 129, 169, 91, 22, 233, 92, 255, 200, 50, 80, 58, - 161, 47, 81, 97, 212, 124, 222, 82, 221, 133, 81, 61, 236, 186, 101, 135, 219, 40, 101, 213, - 49, 100, 50, 222, 78, 90, 62, 76, 54, 217, 145, 132, 138, 16, 164, 251, 164, 89, 98, 155, - 41, 130, 108, 253, 144, 239, 36, 56, 64, 38, 238, 174, 203, 103, 24, 3, 73, 89, 39, 6, - 113, 20, 92, 109, 75, 71, 254, 174, 58, 30, 28, 201, 113, 46, 136, 31, 73, 241, 242, 58, - 254, 164, 236, 255, 199, 17, 128, 230, 129, 229, 50, 109, 82, 63, 176, 34, 14, 78, 226, 126, - 59, 114, 152, 14, 218, 169, 30, 242, 103, 33, 21, 59, 2, 116, 20, 228, 192, 129, 222, 10, - 120, 158, 228, 228, 175, 47, 251, 185, 0, 171, 75, 222, 147, 96, 101, 164, 211, 45, 71, 56, - 82, 182, 211, 75, 223, 145, 34, 50, 97, 176, 115, 244, 59, 22, 239, 45, 89, 163, 167, 153, - 163, 26, 32, 76, 94, 71, 50, 207, 10, 164, 93, 246, 174, 13, 64, 115, 197, 147, 36, 115, - 221, 241, 192, 39, 182, 187, 36, 35, 167, 128, 47, 177, 54, 70, 106, 238, 68, 101, 123, 186, - 12, 65, 137, 199, 13, 143, 149, 168, 41, 130, 247, 197, 16, 128, 31, 2, 252, 146, 31, 98, - 211, 201, 188, 78, 154, 174, 254, 255, 82, 189, 246, 222, 13, 246, 57, 22, 153, 174, 123, 111, - 106, 148, 142, 234, 111, 135, 184, 91, 32, 185, 214, 18, 115, 78, 124, 214, 30, 144, 2, 185, - 99, 177, 15, 169, 174, 211, 88, 61, 248, 143, 98, 63, 180, 29, 179, 34, 24, 164, 87, 223, - 117, 87, 172, 198, 0, 223, 65, 22, 255, 230, 33, 71, 135, 101, 37, 199, 117, 110, 141, 2, - 164, 33, 49, 173, 113, 179, 230, 223, 248, 3, 236, 12, 13, 74, 139, 228, 110, 125, 78, 23, - 194, 142, 73, 16, 217, 151, 107, 253, 75, 201, 195, 5, 159, 225, 238, 218, 8, 126, 118, 63, - 50, 126, 28, 1, 248, 75, 226, 89, 120, 3, 84, 134, 56, 228, 38, 57, 26, 137, 243, 148, - 175, 13, 232, 136, 194, 10, 40, 200, 148, 60, 178, 111, 82, 240, 229, 38, 9, 86, 239, 157, - 184, 8, 202, 0, 231, 27, 89, 189, 42, 108, 172, 8, 203, 25, 126, 6, 207, 135, 200, 89, - 200, 141, 247, 39, 92, 135, 213, 3, 204, 145, 46, 71, 90, 59, 18, 165, 70, 1, 160, 107, - 253, 93, 1, 101, 229, 55, 79, 231, 3, 36, 68, 193, 57, 236, 81, 197, 128, 218, 5, 191, - 5, 107, 98, 169, 220, 17, 136, 213, 189, 213, 181, 102, 94, 80, 69, 233, 72, 68, 106, 223, - 76, 11, 0, 171, 243, 187, 224, 249, 224, 34, 192, 159, 38, 253, 255, 116, 5, 160, 26, 22, - 84, 101, 39, 59, 235, 240, 164, 40, 79, 224, 181, 29, 105, 120, 62, 120, 79, 177, 117, 227, - 35, 120, 192, 118, 75, 1, 93, 102, 184, 42, 84, 115, 206, 128, 149, 213, 174, 91, 30, 33, - 224, 218, 173, 241, 63, 31, 158, 116, 84, 116, 37, 203, 11, 220, 35, 201, 200, 92, 105, 191, - 77, 137, 20, 166, 38, 160, 235, 108, 153, 5, 192, 134, 130, 168, 148, 77, 16, 164, 215, 142, - 152, 16, 237, 44, 9, 80, 21, 64, 202, 167, 242, 57, 240, 236, 50, 239, 221, 243, 34, 199, - 36, 133, 121, 100, 100, 49, 37, 122, 23, 36, 74, 169, 105, 208, 40, 0, 63, 48, 146, 193, - 53, 90, 60, 244, 101, 100, 81, 226, 164, 118, 24, 32, 127, 102, 152, 213, 122, 251, 170, 2, - 158, 140, 25, 238, 178, 233, 138, 4, 85, 69, 118, 183, 252, 56, 95, 50, 194, 119, 37, 227, - 147, 26, 4, 7, 84, 93, 65, 159, 59, 127, 50, 68, 201, 153, 63, 73, 172, 47, 254, 48, - 15, 120, 231, 79, 65, 151, 102, 18, 231, 67, 129, 251, 157, 102, 232, 238, 111, 106, 50, 91, - 58, 85, 48, 237, 48, 160, 50, 114, 215, 37, 144, 128, 100, 82, 91, 80, 253, 238, 130, 25, - 111, 210, 105, 224, 172, 167, 93, 81, 100, 103, 5, 253, 198, 122, 89, 141, 250, 182, 51, 111, - 224, 191, 199, 253, 169, 217, 255, 16, 128, 250, 65, 152, 250, 243, 119, 217, 253, 10, 84, 220, - 208, 158, 43, 0, 25, 71, 92, 136, 148, 127, 139, 59, 226, 117, 242, 62, 185, 174, 116, 58, - 30, 29, 178, 36, 49, 163, 29, 201, 183, 236, 81, 5, 32, 189, 175, 158, 203, 54, 174, 170, - 254, 46, 212, 4, 231, 107, 80, 169, 30, 169, 58, 224, 182, 75, 139, 253, 142, 96, 63, 213, - 16, 161, 164, 138, 189, 2, 23, 50, 163, 128, 250, 244, 187, 140, 52, 89, 6, 112, 36, 97, - 85, 3, 67, 71, 3, 59, 59, 227, 180, 131, 224, 144, 119, 123, 36, 214, 206, 23, 248, 236, - 42, 47, 135, 107, 243, 126, 253, 237, 61, 253, 100, 240, 255, 241, 4, 224, 209, 22, 72, 122, - 237, 171, 155, 235, 89, 81, 127, 22, 160, 66, 246, 231, 8, 6, 29, 80, 212, 125, 57, 42, - 35, 163, 46, 3, 61, 139, 140, 251, 132, 25, 37, 253, 27, 153, 93, 64, 175, 77, 186, 124, - 224, 84, 158, 187, 201, 232, 157, 85, 244, 33, 239, 96, 119, 52, 175, 239, 94, 231, 94, 211, - 126, 13, 196, 76, 152, 82, 2, 112, 168, 47, 232, 170, 138, 31, 9, 168, 39, 63, 39, 222, - 251, 213, 90, 250, 27, 25, 189, 219, 143, 115, 29, 124, 130, 170, 35, 69, 213, 235, 36, 86, - 212, 215, 145, 171, 85, 166, 79, 174, 125, 58, 36, 169, 170, 161, 209, 66, 245, 19, 188, 126, - 119, 245, 252, 255, 233, 217, 239, 40, 0, 53, 208, 61, 101, 175, 83, 189, 153, 75, 101, 32, - 228, 164, 83, 2, 80, 213, 3, 51, 25, 155, 91, 101, 163, 233, 196, 61, 109, 102, 244, 52, - 99, 39, 224, 84, 249, 26, 84, 128, 88, 213, 64, 236, 76, 204, 115, 159, 167, 130, 227, 117, - 158, 11, 82, 61, 49, 242, 110, 8, 166, 91, 94, 144, 1, 222, 238, 187, 145, 144, 179, 43, - 84, 18, 174, 6, 220, 72, 102, 71, 72, 129, 203, 252, 47, 147, 197, 146, 22, 55, 10, 204, - 42, 142, 71, 20, 137, 234, 90, 165, 179, 6, 168, 2, 65, 139, 30, 111, 67, 6, 157, 219, - 224, 155, 107, 122, 129, 207, 254, 214, 126, 45, 205, 16, 128, 63, 85, 5, 144, 254, 219, 21, - 176, 2, 255, 19, 100, 113, 135, 201, 130, 119, 64, 126, 245, 240, 37, 197, 110, 164, 85, 177, - 147, 254, 19, 255, 1, 58, 59, 97, 37, 193, 158, 224, 181, 157, 69, 241, 243, 193, 121, 104, - 221, 58, 183, 34, 101, 171, 161, 66, 180, 66, 127, 53, 31, 192, 125, 214, 85, 141, 130, 243, - 80, 184, 161, 186, 226, 134, 20, 185, 125, 19, 57, 149, 212, 50, 184, 223, 87, 196, 162, 34, - 1, 14, 8, 147, 191, 11, 128, 73, 7, 110, 210, 94, 139, 31, 33, 32, 14, 140, 87, 25, - 125, 2, 228, 221, 231, 156, 76, 98, 188, 0, 113, 76, 172, 128, 223, 42, 57, 238, 250, 150, - 75, 24, 147, 253, 15, 1, 160, 89, 29, 113, 192, 235, 178, 57, 58, 169, 174, 83, 13, 170, - 73, 131, 52, 51, 60, 27, 64, 175, 10, 250, 156, 41, 210, 173, 190, 29, 177, 235, 126, 112, - 128, 219, 245, 207, 159, 250, 221, 255, 160, 243, 88, 72, 186, 33, 40, 241, 113, 219, 119, 15, - 83, 231, 212, 119, 27, 101, 195, 1, 185, 243, 8, 120, 243, 221, 144, 152, 13, 237, 5, 72, - 64, 245, 222, 211, 34, 194, 110, 249, 110, 7, 212, 137, 82, 224, 64, 126, 119, 192, 205, 115, - 251, 3, 42, 14, 164, 226, 223, 169, 1, 137, 185, 17, 89, 178, 112, 196, 32, 185, 150, 93, - 198, 159, 118, 132, 92, 154, 24, 2, 176, 82, 2, 62, 120, 3, 116, 50, 233, 97, 30, 74, - 149, 153, 205, 74, 126, 119, 192, 225, 178, 173, 231, 126, 207, 6, 12, 36, 238, 136, 151, 12, - 27, 234, 50, 250, 138, 8, 233, 133, 146, 112, 169, 247, 66, 144, 81, 105, 20, 102, 202, 85, - 118, 235, 50, 93, 215, 98, 170, 134, 108, 72, 188, 0, 114, 117, 159, 126, 198, 18, 71, 231, - 69, 64, 72, 15, 81, 6, 46, 3, 22, 207, 243, 168, 142, 231, 218, 15, 169, 193, 77, 7, - 70, 149, 1, 19, 145, 222, 83, 163, 160, 116, 18, 161, 76, 230, 155, 174, 255, 19, 117, 104, - 167, 128, 144, 28, 51, 25, 71, 220, 45, 37, 148, 215, 117, 178, 255, 33, 0, 244, 33, 255, - 92, 39, 239, 64, 210, 205, 133, 79, 139, 13, 59, 16, 112, 95, 202, 19, 40, 15, 171, 106, - 244, 67, 191, 247, 237, 159, 6, 252, 223, 12, 35, 18, 80, 28, 40, 8, 118, 117, 1, 233, - 190, 146, 215, 118, 131, 148, 158, 215, 89, 90, 119, 4, 72, 126, 16, 82, 119, 63, 92, 0, - 44, 119, 191, 11, 174, 154, 191, 34, 31, 50, 132, 203, 1, 254, 138, 36, 116, 4, 44, 117, - 130, 35, 99, 134, 159, 219, 95, 225, 251, 33, 10, 132, 203, 120, 83, 114, 144, 182, 26, 210, - 1, 59, 73, 150, 159, 156, 179, 138, 36, 229, 214, 158, 50, 64, 8, 226, 68, 248, 160, 252, - 89, 12, 224, 190, 207, 199, 67, 249, 208, 122, 141, 121, 181, 221, 199, 235, 122, 46, 94, 215, - 237, 251, 110, 142, 121, 52, 199, 234, 126, 174, 206, 253, 48, 251, 116, 251, 126, 190, 79, 129, - 215, 186, 253, 119, 255, 106, 99, 31, 2, 231, 89, 109, 127, 20, 239, 73, 96, 31, 157, 194, - 179, 34, 136, 135, 249, 94, 86, 53, 35, 84, 101, 249, 44, 82, 220, 169, 73, 50, 36, 128, - 46, 161, 144, 78, 137, 116, 217, 160, 170, 184, 79, 21, 3, 218, 29, 80, 89, 16, 19, 21, - 96, 103, 164, 175, 203, 246, 41, 248, 19, 155, 226, 52, 243, 39, 99, 136, 211, 253, 37, 5, - 133, 191, 252, 60, 217, 255, 40, 0, 244, 129, 71, 136, 83, 87, 4, 182, 122, 112, 173, 50, - 228, 149, 210, 64, 229, 225, 3, 252, 172, 70, 205, 112, 3, 99, 72, 230, 43, 213, 203, 26, - 68, 62, 118, 18, 57, 169, 119, 168, 246, 241, 60, 159, 203, 168, 23, 169, 253, 51, 117, 250, - 171, 178, 229, 251, 229, 253, 89, 89, 28, 95, 98, 178, 125, 162, 128, 220, 202, 150, 64, 86, - 199, 190, 196, 107, 32, 42, 128, 191, 130, 109, 37, 190, 46, 238, 200, 0, 29, 240, 179, 227, - 182, 231, 84, 129, 29, 226, 240, 54, 19, 87, 72, 66, 118, 70, 59, 43, 120, 255, 171, 251, - 150, 40, 39, 127, 201, 254, 163, 2, 12, 1, 128, 178, 200, 175, 54, 193, 157, 76, 85, 141, - 156, 77, 39, 251, 185, 227, 144, 2, 196, 138, 40, 184, 182, 197, 212, 238, 216, 145, 130, 251, - 197, 54, 43, 48, 189, 10, 160, 167, 166, 75, 142, 216, 184, 234, 121, 98, 205, 124, 109, 100, - 221, 201, 92, 6, 82, 205, 239, 204, 130, 8, 217, 37, 29, 16, 146, 151, 252, 111, 147, 173, - 31, 226, 206, 123, 135, 50, 51, 31, 71, 40, 136, 245, 47, 81, 8, 222, 20, 10, 170, 56, - 167, 100, 182, 1, 173, 164, 39, 4, 39, 45, 234, 115, 42, 69, 218, 217, 208, 237, 239, 227, - 231, 125, 5, 196, 43, 73, 232, 126, 46, 214, 205, 37, 40, 238, 240, 255, 35, 0, 31, 51, - 195, 143, 18, 242, 169, 90, 10, 119, 18, 254, 185, 248, 29, 145, 252, 59, 41, 255, 237, 82, - 129, 148, 73, 245, 231, 226, 60, 220, 62, 170, 125, 186, 255, 175, 36, 121, 45, 174, 229, 199, - 223, 223, 197, 185, 104, 1, 240, 103, 243, 183, 78, 234, 87, 241, 254, 186, 159, 213, 108, 211, - 141, 8, 38, 106, 204, 14, 233, 32, 36, 129, 204, 70, 112, 15, 92, 55, 17, 177, 2, 125, - 25, 128, 79, 60, 225, 29, 104, 147, 191, 37, 68, 102, 103, 162, 223, 206, 116, 193, 107, 19, - 224, 211, 253, 56, 187, 221, 75, 25, 185, 32, 82, 63, 49, 57, 42, 247, 49, 178, 255, 40, - 0, 111, 84, 128, 106, 10, 159, 228, 135, 219, 184, 126, 127, 129, 236, 190, 122, 8, 118, 214, - 187, 169, 58, 144, 204, 6, 248, 168, 32, 144, 30, 250, 100, 89, 129, 140, 224, 37, 197, 119, - 93, 129, 163, 179, 44, 38, 93, 15, 130, 10, 73, 183, 52, 65, 64, 210, 93, 199, 55, 217, - 126, 154, 25, 37, 235, 238, 201, 239, 136, 1, 80, 7, 88, 73, 198, 172, 240, 239, 183, 81, - 52, 220, 112, 163, 27, 156, 167, 179, 236, 37, 25, 55, 81, 33, 146, 229, 6, 146, 217, 239, - 180, 216, 221, 27, 239, 167, 82, 2, 9, 65, 27, 240, 31, 2, 240, 233, 36, 96, 117, 19, - 174, 178, 205, 91, 126, 188, 172, 154, 76, 234, 185, 223, 46, 3, 58, 32, 200, 86, 32, 64, - 70, 247, 86, 4, 232, 9, 224, 39, 0, 198, 29, 159, 255, 106, 202, 98, 90, 55, 81, 145, - 154, 203, 100, 212, 142, 236, 201, 0, 125, 39, 95, 119, 247, 213, 234, 181, 171, 243, 32, 99, - 130, 87, 36, 42, 153, 171, 32, 245, 198, 64, 46, 187, 151, 178, 130, 61, 66, 92, 118, 220, - 1, 119, 77, 122, 156, 127, 61, 61, 175, 14, 60, 223, 12, 44, 186, 13, 193, 184, 94, 168, - 12, 84, 210, 119, 10, 65, 165, 94, 236, 20, 32, 118, 202, 197, 196, 16, 128, 191, 53, 92, - 187, 91, 55, 152, 71, 250, 189, 205, 110, 181, 143, 100, 186, 95, 162, 58, 84, 217, 114, 7, - 194, 23, 4, 219, 143, 231, 92, 201, 197, 213, 108, 1, 66, 14, 42, 151, 196, 4, 220, 220, - 103, 154, 184, 227, 185, 182, 55, 137, 21, 57, 174, 142, 127, 129, 140, 218, 141, 99, 238, 106, - 7, 210, 177, 195, 85, 171, 150, 130, 253, 144, 204, 49, 113, 123, 75, 73, 194, 27, 96, 117, - 0, 237, 192, 209, 129, 44, 249, 119, 117, 190, 164, 85, 238, 10, 213, 130, 85, 34, 115, 21, - 68, 162, 107, 131, 124, 251, 190, 146, 90, 131, 207, 40, 176, 29, 2, 48, 177, 84, 1, 42, - 160, 37, 189, 239, 78, 1, 232, 42, 210, 105, 225, 92, 119, 44, 146, 237, 203, 100, 152, 85, - 246, 236, 198, 223, 86, 234, 193, 165, 186, 35, 129, 116, 14, 168, 80, 35, 58, 217, 253, 47, - 114, 114, 137, 153, 243, 84, 215, 194, 145, 16, 162, 186, 184, 107, 121, 27, 181, 165, 34, 102, - 196, 123, 33, 125, 56, 222, 224, 158, 93, 93, 179, 11, 18, 213, 196, 49, 240, 13, 208, 167, - 219, 80, 107, 218, 68, 5, 112, 254, 2, 20, 44, 233, 254, 73, 86, 237, 246, 37, 101, 93, - 16, 20, 156, 9, 129, 36, 4, 237, 183, 223, 143, 244, 63, 4, 224, 179, 73, 128, 3, 223, - 191, 192, 165, 179, 224, 37, 70, 47, 238, 161, 122, 52, 15, 101, 170, 70, 184, 169, 130, 2, - 89, 248, 13, 126, 39, 249, 17, 197, 164, 245, 46, 25, 115, 236, 174, 229, 37, 94, 129, 127, - 168, 159, 27, 224, 212, 30, 74, 52, 20, 0, 43, 169, 42, 239, 166, 60, 210, 105, 141, 135, - 1, 76, 7, 202, 169, 50, 208, 189, 142, 140, 79, 118, 215, 103, 215, 143, 191, 83, 98, 136, - 156, 94, 129, 105, 34, 111, 83, 83, 161, 202, 179, 159, 158, 119, 149, 249, 239, 146, 166, 68, - 161, 112, 215, 132, 170, 36, 179, 238, 63, 4, 224, 239, 33, 1, 210, 127, 187, 3, 92, 255, - 247, 161, 204, 15, 64, 32, 211, 126, 62, 16, 207, 102, 191, 93, 59, 155, 212, 143, 202, 173, - 8, 193, 19, 60, 137, 84, 190, 2, 80, 162, 38, 56, 176, 117, 197, 125, 119, 163, 64, 144, - 44, 179, 243, 51, 168, 6, 226, 184, 106, 246, 234, 218, 72, 108, 220, 180, 3, 124, 114, 79, - 201, 144, 181, 157, 57, 7, 116, 189, 159, 236, 195, 101, 182, 221, 208, 35, 10, 20, 71, 0, - 168, 73, 134, 95, 45, 137, 144, 66, 65, 242, 183, 228, 223, 78, 97, 160, 214, 192, 183, 121, - 95, 238, 184, 82, 46, 233, 19, 98, 216, 117, 9, 76, 164, 184, 54, 151, 32, 143, 255, 56, - 5, 118, 237, 125, 210, 186, 69, 239, 217, 70, 248, 124, 253, 170, 213, 239, 92, 188, 118, 181, - 79, 215, 6, 40, 173, 91, 23, 119, 221, 250, 82, 183, 192, 213, 185, 146, 215, 43, 216, 191, - 115, 15, 20, 120, 237, 234, 53, 137, 3, 96, 245, 243, 29, 236, 199, 125, 79, 15, 168, 236, - 124, 250, 173, 15, 84, 34, 25, 146, 213, 1, 62, 105, 241, 115, 217, 38, 181, 10, 78, 148, - 129, 174, 230, 97, 103, 40, 80, 87, 213, 222, 21, 32, 58, 87, 193, 164, 181, 240, 109, 187, - 32, 113, 242, 163, 175, 239, 148, 16, 236, 52, 56, 102, 63, 163, 0, 252, 99, 28, 160, 120, - 16, 87, 85, 242, 85, 182, 235, 214, 188, 171, 97, 68, 116, 36, 48, 25, 146, 35, 120, 252, - 46, 195, 116, 125, 226, 100, 12, 111, 149, 205, 30, 230, 193, 78, 151, 89, 170, 191, 87, 181, - 22, 171, 177, 191, 169, 171, 161, 128, 82, 80, 129, 235, 177, 0, 139, 195, 100, 182, 23, 84, - 82, 18, 5, 199, 73, 238, 238, 122, 168, 80, 144, 146, 94, 125, 250, 115, 7, 36, 146, 247, - 24, 144, 152, 20, 238, 150, 7, 136, 165, 176, 123, 125, 42, 191, 187, 101, 144, 110, 232, 215, - 101, 20, 0, 162, 88, 168, 57, 102, 74, 78, 40, 193, 160, 131, 139, 38, 70, 1, 248, 116, - 21, 160, 202, 194, 15, 229, 6, 63, 106, 246, 229, 94, 243, 217, 38, 64, 52, 227, 78, 222, - 147, 155, 67, 32, 160, 0, 208, 237, 156, 122, 80, 153, 254, 16, 37, 128, 42, 8, 213, 54, - 238, 187, 71, 103, 3, 84, 4, 77, 0, 248, 43, 18, 148, 186, 63, 18, 34, 116, 111, 252, - 77, 16, 232, 147, 218, 4, 82, 11, 112, 136, 15, 195, 33, 67, 136, 210, 145, 192, 142, 72, - 188, 33, 16, 187, 102, 68, 59, 170, 193, 103, 252, 109, 69, 228, 218, 122, 129, 89, 247, 31, - 2, 240, 111, 144, 128, 211, 0, 219, 243, 255, 157, 236, 191, 26, 8, 36, 249, 165, 133, 93, - 135, 191, 179, 1, 59, 71, 68, 254, 218, 230, 134, 68, 33, 145, 244, 29, 128, 39, 238, 130, - 4, 212, 169, 139, 223, 14, 200, 167, 4, 128, 146, 2, 167, 36, 81, 243, 37, 7, 246, 180, - 232, 145, 146, 3, 2, 190, 106, 0, 151, 100, 195, 142, 36, 56, 82, 177, 99, 14, 148, 16, - 2, 183, 38, 223, 109, 147, 204, 42, 32, 153, 253, 189, 241, 115, 183, 239, 167, 106, 117, 27, - 80, 119, 231, 110, 151, 0, 6, 252, 135, 0, 252, 155, 42, 128, 26, 144, 119, 86, 186, 20, - 172, 143, 96, 159, 105, 230, 78, 215, 240, 29, 33, 145, 57, 199, 234, 111, 183, 234, 58, 6, - 137, 79, 11, 124, 171, 16, 60, 255, 190, 50, 98, 34, 100, 64, 13, 81, 121, 110, 235, 182, - 113, 14, 145, 199, 39, 126, 247, 233, 24, 98, 183, 172, 245, 220, 142, 78, 0, 36, 126, 10, - 2, 36, 32, 33, 4, 100, 100, 240, 101, 148, 6, 167, 10, 164, 126, 3, 169, 85, 240, 10, - 44, 9, 248, 239, 214, 11, 36, 214, 193, 151, 185, 14, 59, 83, 9, 127, 217, 239, 128, 255, - 187, 152, 26, 128, 55, 79, 208, 255, 235, 12, 248, 248, 176, 172, 134, 236, 208, 150, 183, 21, - 8, 60, 179, 187, 83, 108, 29, 187, 123, 216, 39, 83, 0, 143, 197, 151, 254, 249, 94, 78, - 243, 190, 58, 176, 184, 96, 134, 75, 65, 109, 245, 208, 63, 213, 123, 22, 172, 174, 199, 165, - 190, 239, 190, 51, 217, 73, 124, 246, 171, 215, 87, 239, 233, 48, 215, 141, 92, 67, 146, 253, - 83, 137, 191, 3, 105, 215, 146, 230, 128, 190, 91, 147, 119, 219, 209, 237, 105, 159, 57, 145, - 240, 211, 74, 126, 7, 184, 68, 69, 232, 8, 205, 29, 252, 157, 156, 67, 167, 2, 84, 36, - 137, 190, 207, 213, 115, 175, 36, 102, 3, 254, 67, 0, 190, 148, 32, 208, 144, 0, 250, 96, - 118, 189, 237, 82, 111, 99, 219, 129, 71, 71, 28, 42, 80, 160, 70, 64, 43, 32, 237, 138, - 30, 43, 55, 188, 174, 157, 143, 204, 81, 248, 8, 246, 215, 67, 169, 232, 218, 13, 59, 59, - 220, 75, 185, 7, 127, 50, 102, 215, 221, 79, 78, 6, 39, 114, 255, 221, 16, 82, 87, 57, - 77, 214, 235, 221, 252, 135, 75, 123, 75, 6, 36, 99, 175, 220, 33, 165, 222, 70, 251, 46, - 128, 212, 101, 240, 2, 68, 161, 187, 38, 29, 153, 169, 238, 167, 164, 16, 143, 252, 157, 0, - 122, 119, 108, 71, 114, 146, 14, 135, 170, 203, 130, 78, 12, 156, 248, 68, 25, 112, 98, 247, - 105, 253, 107, 81, 160, 107, 211, 235, 36, 251, 238, 53, 157, 124, 47, 237, 73, 250, 105, 45, - 129, 148, 181, 253, 173, 228, 240, 100, 82, 32, 145, 250, 201, 212, 63, 41, 91, 98, 72, 95, - 223, 121, 60, 184, 37, 129, 238, 59, 217, 249, 19, 36, 190, 255, 187, 127, 87, 67, 18, 59, - 160, 120, 91, 31, 208, 181, 16, 210, 37, 129, 157, 34, 66, 215, 41, 144, 24, 242, 36, 133, - 129, 212, 56, 200, 153, 248, 220, 98, 117, 4, 207, 215, 116, 203, 8, 111, 139, 3, 187, 125, - 173, 212, 19, 187, 237, 100, 255, 163, 0, 124, 45, 38, 245, 127, 110, 129, 135, 124, 91, 92, - 199, 248, 79, 241, 66, 43, 25, 229, 64, 250, 189, 234, 61, 145, 167, 5, 222, 67, 151, 173, - 95, 141, 122, 225, 128, 232, 46, 200, 81, 165, 26, 84, 217, 176, 171, 136, 239, 250, 232, 59, - 103, 191, 234, 51, 38, 173, 156, 213, 44, 1, 50, 137, 208, 181, 116, 62, 143, 125, 25, 149, - 233, 110, 136, 202, 27, 51, 32, 215, 42, 72, 138, 251, 142, 38, 59, 189, 3, 242, 113, 27, - 133, 128, 200, 224, 100, 25, 141, 186, 13, 82, 245, 32, 29, 212, 147, 14, 251, 145, 178, 122, - 0, 170, 202, 36, 132, 44, 113, 182, 212, 128, 255, 40, 0, 223, 69, 9, 160, 197, 122, 46, - 195, 119, 217, 62, 121, 125, 165, 54, 28, 5, 241, 72, 206, 89, 80, 53, 168, 94, 35, 241, - 142, 1, 153, 253, 75, 117, 139, 223, 219, 172, 191, 251, 153, 40, 4, 146, 95, 166, 113, 251, - 237, 20, 129, 142, 156, 125, 182, 10, 64, 51, 250, 180, 19, 192, 101, 234, 4, 52, 213, 16, - 144, 157, 170, 255, 42, 35, 119, 170, 128, 83, 21, 118, 157, 255, 168, 235, 158, 83, 11, 136, - 26, 225, 234, 1, 136, 194, 176, 227, 52, 88, 118, 11, 12, 248, 143, 2, 240, 93, 148, 0, - 151, 169, 59, 63, 254, 110, 44, 175, 130, 108, 234, 0, 106, 66, 103, 242, 67, 178, 65, 39, - 247, 30, 225, 49, 111, 8, 150, 85, 198, 251, 220, 191, 155, 77, 224, 206, 209, 253, 252, 124, - 175, 164, 56, 239, 54, 159, 187, 194, 236, 153, 128, 109, 162, 130, 184, 237, 21, 220, 31, 187, - 19, 1, 93, 189, 70, 146, 65, 171, 80, 139, 86, 14, 123, 148, 32, 164, 83, 6, 111, 168, - 140, 116, 14, 130, 14, 216, 171, 253, 92, 197, 254, 72, 209, 159, 187, 166, 2, 224, 159, 14, - 79, 250, 237, 248, 3, 254, 67, 0, 190, 35, 9, 72, 11, 234, 200, 223, 180, 200, 122, 111, - 245, 6, 47, 207, 97, 69, 14, 8, 87, 149, 184, 137, 98, 116, 155, 204, 181, 243, 248, 87, - 1, 174, 148, 96, 28, 98, 18, 121, 181, 110, 223, 1, 249, 179, 224, 145, 20, 110, 117, 192, - 73, 128, 246, 48, 15, 73, 87, 92, 217, 157, 83, 213, 145, 113, 195, 107, 126, 5, 239, 35, - 253, 253, 101, 72, 2, 85, 4, 156, 175, 61, 157, 224, 231, 178, 107, 119, 92, 129, 140, 191, - 123, 205, 37, 86, 52, 183, 83, 211, 224, 72, 131, 148, 183, 236, 9, 190, 103, 167, 58, 12, - 248, 255, 93, 88, 53, 151, 224, 239, 137, 194, 35, 128, 20, 221, 173, 230, 5, 124, 252, 249, - 173, 147, 223, 9, 182, 73, 150, 30, 36, 86, 140, 40, 237, 187, 251, 17, 255, 255, 228, 56, - 100, 31, 210, 218, 150, 247, 227, 255, 159, 224, 123, 69, 138, 250, 72, 39, 129, 43, 0, 36, - 173, 156, 105, 45, 9, 177, 106, 150, 242, 222, 254, 4, 124, 169, 122, 226, 254, 70, 218, 2, - 29, 160, 59, 160, 219, 145, 245, 73, 214, 223, 21, 250, 185, 42, 252, 231, 255, 239, 24, 255, - 80, 85, 67, 226, 164, 36, 42, 44, 28, 2, 48, 10, 192, 119, 84, 1, 200, 216, 221, 46, - 235, 235, 70, 203, 186, 204, 204, 41, 14, 111, 1, 195, 45, 39, 116, 0, 89, 101, 224, 183, - 126, 55, 225, 233, 192, 135, 172, 135, 187, 226, 192, 213, 207, 167, 114, 217, 186, 82, 48, 158, - 19, 20, 171, 105, 130, 228, 62, 112, 159, 139, 107, 103, 116, 128, 239, 198, 252, 86, 32, 80, - 17, 129, 11, 144, 136, 68, 53, 33, 0, 175, 151, 251, 149, 242, 246, 185, 4, 216, 187, 107, - 208, 77, 19, 188, 65, 86, 94, 253, 125, 117, 191, 238, 144, 130, 46, 243, 191, 141, 82, 117, - 7, 215, 80, 3, 254, 163, 0, 252, 105, 106, 97, 109, 233, 147, 0, 0, 21, 242, 73, 68, - 65, 84, 128, 83, 0, 186, 236, 156, 122, 237, 147, 226, 195, 206, 121, 207, 29, 247, 214, 231, - 205, 15, 80, 184, 93, 229, 206, 71, 10, 26, 187, 44, 58, 245, 243, 79, 219, 251, 118, 126, - 71, 234, 62, 210, 239, 175, 243, 59, 88, 129, 146, 171, 25, 112, 96, 78, 58, 28, 40, 41, - 232, 58, 32, 28, 144, 31, 226, 21, 232, 29, 25, 74, 90, 255, 164, 253, 130, 189, 67, 188, - 77, 144, 78, 15, 76, 179, 254, 202, 206, 215, 213, 22, 116, 128, 223, 249, 249, 255, 118, 174, - 51, 221, 111, 20, 128, 63, 138, 7, 152, 76, 189, 123, 216, 158, 242, 45, 98, 106, 30, 238, - 183, 201, 200, 42, 48, 112, 153, 251, 13, 223, 67, 146, 201, 86, 219, 173, 220, 249, 170, 127, - 93, 6, 219, 169, 3, 78, 25, 169, 212, 4, 137, 85, 231, 119, 64, 124, 139, 213, 130, 36, - 206, 136, 73, 155, 214, 243, 124, 47, 49, 159, 254, 11, 40, 5, 171, 235, 253, 214, 171, 63, - 33, 17, 41, 216, 175, 178, 100, 201, 47, 17, 16, 130, 177, 83, 237, 223, 93, 207, 234, 189, - 94, 64, 9, 33, 202, 67, 84, 172, 167, 188, 205, 242, 183, 191, 77, 214, 63, 10, 192, 79, - 80, 2, 92, 214, 253, 204, 218, 147, 233, 123, 59, 83, 252, 4, 213, 129, 143, 153, 246, 234, - 239, 93, 59, 161, 196, 189, 250, 233, 128, 32, 129, 76, 93, 224, 253, 84, 239, 33, 205, 222, - 43, 82, 213, 253, 221, 145, 185, 157, 239, 239, 1, 9, 142, 35, 132, 187, 83, 1, 5, 178, - 121, 146, 197, 31, 226, 203, 20, 233, 0, 161, 157, 30, 117, 58, 22, 120, 117, 62, 187, 246, - 192, 228, 184, 151, 188, 141, 46, 253, 221, 206, 216, 94, 167, 118, 16, 99, 161, 201, 252, 71, - 1, 248, 67, 217, 214, 175, 117, 1, 164, 189, 205, 173, 199, 210, 57, 239, 206, 156, 104, 245, - 229, 125, 246, 211, 175, 102, 28, 16, 96, 168, 214, 237, 169, 223, 125, 149, 169, 147, 172, 252, - 92, 100, 230, 207, 243, 233, 42, 250, 111, 249, 186, 10, 146, 121, 175, 218, 207, 14, 245, 21, - 247, 180, 229, 177, 35, 15, 73, 11, 93, 245, 254, 174, 230, 126, 164, 179, 45, 238, 70, 125, - 33, 100, 130, 72, 222, 82, 223, 42, 87, 145, 131, 212, 48, 104, 199, 93, 240, 175, 235, 152, - 20, 31, 162, 76, 121, 241, 251, 203, 236, 247, 130, 170, 131, 194, 253, 91, 96, 39, 170, 199, - 100, 254, 163, 0, 252, 4, 37, 160, 170, 244, 167, 181, 2, 73, 55, 65, 87, 157, 239, 212, - 2, 50, 245, 47, 157, 214, 71, 206, 167, 203, 242, 105, 230, 79, 50, 252, 179, 249, 46, 28, - 77, 22, 93, 157, 195, 221, 28, 183, 179, 243, 173, 84, 130, 27, 110, 47, 72, 84, 146, 130, - 66, 124, 59, 235, 243, 188, 0, 40, 89, 113, 255, 127, 169, 110, 115, 253, 44, 231, 58, 178, - 228, 148, 102, 228, 73, 246, 239, 136, 129, 27, 84, 228, 198, 13, 175, 252, 17, 46, 245, 45, - 136, 157, 50, 97, 59, 9, 6, 252, 135, 0, 252, 36, 18, 176, 227, 197, 127, 22, 0, 69, - 127, 222, 29, 219, 187, 218, 230, 124, 177, 47, 41, 43, 8, 116, 251, 113, 0, 46, 67, 24, - 136, 84, 47, 72, 56, 100, 206, 163, 82, 56, 186, 227, 185, 217, 2, 169, 34, 145, 42, 13, - 20, 172, 29, 161, 160, 109, 125, 111, 8, 192, 110, 134, 158, 2, 177, 0, 16, 75, 76, 214, - 175, 90, 251, 62, 250, 244, 119, 100, 131, 86, 244, 19, 114, 65, 151, 4, 142, 6, 216, 147, - 14, 133, 255, 110, 51, 4, 224, 159, 143, 89, 2, 248, 151, 121, 128, 121, 232, 18, 247, 57, - 242, 80, 126, 126, 113, 59, 111, 120, 87, 164, 118, 42, 243, 175, 239, 198, 19, 119, 210, 188, - 43, 140, 36, 89, 178, 3, 52, 210, 242, 214, 101, 211, 46, 235, 173, 214, 174, 9, 80, 146, - 117, 250, 251, 229, 125, 214, 93, 79, 218, 18, 184, 90, 251, 38, 142, 131, 2, 160, 233, 58, - 12, 46, 243, 57, 210, 177, 195, 111, 58, 0, 142, 77, 245, 64, 32, 67, 166, 158, 2, 4, - 224, 147, 97, 66, 221, 49, 118, 10, 36, 219, 236, 127, 128, 127, 20, 128, 159, 172, 2, 72, - 189, 89, 208, 199, 108, 155, 20, 242, 37, 50, 61, 81, 20, 186, 99, 124, 198, 191, 46, 51, - 79, 149, 3, 183, 189, 180, 111, 12, 228, 182, 187, 195, 215, 58, 163, 31, 226, 213, 240, 241, - 1, 123, 130, 172, 156, 116, 129, 236, 14, 138, 34, 228, 66, 38, 43, 119, 51, 1, 136, 69, - 112, 2, 192, 59, 197, 127, 148, 180, 116, 213, 245, 207, 253, 92, 13, 81, 161, 93, 0, 36, - 251, 94, 129, 62, 169, 11, 248, 59, 166, 254, 77, 230, 63, 10, 192, 15, 102, 95, 255, 185, - 241, 31, 83, 4, 159, 15, 67, 146, 205, 118, 69, 116, 29, 16, 172, 10, 251, 86, 89, 32, - 201, 68, 79, 177, 121, 3, 68, 149, 160, 153, 120, 245, 187, 235, 197, 62, 245, 98, 251, 110, - 22, 195, 42, 107, 20, 0, 231, 68, 153, 184, 204, 121, 116, 243, 7, 170, 86, 70, 114, 125, - 58, 224, 236, 218, 4, 101, 50, 196, 228, 239, 105, 59, 90, 98, 143, 155, 76, 253, 91, 101, - 240, 180, 211, 192, 17, 139, 157, 118, 193, 157, 37, 1, 242, 62, 187, 165, 8, 60, 91, 96, - 192, 127, 20, 128, 9, 253, 82, 19, 240, 49, 147, 59, 139, 140, 221, 169, 3, 84, 53, 232, - 254, 158, 214, 5, 84, 70, 65, 207, 204, 52, 181, 249, 77, 234, 4, 118, 51, 250, 157, 105, - 128, 213, 247, 231, 104, 8, 79, 178, 15, 87, 52, 72, 95, 123, 135, 207, 129, 116, 22, 67, - 162, 4, 80, 2, 64, 51, 250, 238, 255, 119, 253, 6, 72, 177, 95, 5, 248, 85, 230, 159, - 100, 237, 82, 238, 1, 112, 111, 236, 123, 215, 180, 231, 249, 26, 58, 166, 248, 183, 247, 53, - 224, 63, 4, 96, 162, 38, 1, 93, 241, 223, 211, 25, 143, 2, 180, 251, 29, 5, 214, 164, - 208, 175, 34, 23, 50, 219, 61, 137, 131, 180, 46, 216, 59, 12, 249, 144, 122, 79, 127, 5, - 228, 161, 58, 7, 247, 26, 10, 254, 169, 31, 128, 171, 133, 80, 161, 236, 36, 64, 79, 93, - 254, 8, 152, 119, 192, 222, 153, 33, 117, 237, 170, 111, 200, 130, 3, 220, 3, 100, 219, 132, - 64, 36, 199, 164, 199, 219, 1, 236, 207, 248, 91, 186, 12, 240, 219, 182, 3, 252, 67, 0, - 38, 114, 18, 64, 108, 126, 101, 64, 218, 189, 150, 116, 9, 84, 228, 225, 214, 123, 27, 224, - 36, 163, 167, 85, 255, 111, 192, 156, 0, 241, 33, 230, 198, 72, 182, 161, 234, 2, 113, 28, - 92, 1, 110, 245, 250, 59, 36, 11, 116, 153, 34, 85, 6, 72, 13, 128, 12, 152, 186, 223, - 87, 190, 11, 111, 122, 252, 83, 169, 159, 200, 235, 105, 119, 1, 53, 14, 186, 197, 91, 5, - 109, 22, 191, 67, 16, 134, 0, 12, 1, 152, 200, 72, 64, 170, 8, 172, 192, 44, 5, 121, - 146, 225, 159, 1, 72, 87, 61, 247, 103, 1, 202, 4, 108, 223, 44, 5, 72, 217, 84, 65, - 183, 207, 110, 164, 113, 53, 77, 208, 101, 253, 59, 83, 2, 29, 240, 31, 38, 139, 79, 70, - 82, 39, 158, 2, 196, 180, 199, 109, 251, 182, 253, 47, 249, 253, 109, 136, 131, 171, 154, 119, - 107, 228, 21, 17, 185, 130, 253, 80, 34, 240, 215, 107, 14, 213, 197, 128, 78, 189, 32, 89, - 126, 251, 250, 1, 254, 33, 0, 19, 156, 0, 84, 217, 124, 82, 233, 95, 109, 183, 90, 62, - 160, 153, 190, 212, 27, 233, 28, 16, 216, 79, 168, 26, 56, 112, 166, 242, 127, 167, 0, 36, - 164, 64, 242, 210, 253, 209, 100, 238, 110, 169, 96, 37, 167, 31, 193, 119, 182, 170, 230, 79, - 10, 30, 169, 145, 16, 81, 0, 58, 16, 175, 218, 49, 87, 179, 29, 222, 16, 0, 151, 157, - 211, 44, 91, 98, 181, 1, 201, 250, 191, 212, 15, 226, 113, 192, 76, 192, 215, 145, 131, 110, - 252, 48, 113, 40, 236, 186, 10, 38, 235, 31, 2, 48, 241, 130, 4, 80, 50, 80, 1, 236, - 89, 100, 162, 116, 105, 129, 0, 116, 74, 30, 28, 0, 87, 32, 127, 54, 153, 117, 146, 173, - 239, 168, 2, 149, 98, 65, 84, 131, 59, 216, 127, 181, 221, 253, 137, 223, 221, 142, 36, 84, - 89, 58, 1, 250, 180, 16, 176, 35, 0, 36, 115, 79, 126, 151, 182, 243, 165, 219, 238, 76, - 3, 60, 196, 164, 254, 164, 40, 48, 45, 250, 171, 212, 130, 36, 187, 239, 72, 129, 134, 0, - 12, 1, 152, 120, 79, 6, 18, 199, 64, 87, 220, 183, 250, 219, 27, 2, 64, 151, 7, 110, - 112, 92, 71, 48, 200, 72, 224, 55, 107, 253, 213, 182, 213, 123, 73, 20, 128, 21, 160, 31, - 193, 119, 146, 12, 15, 234, 204, 163, 222, 40, 3, 149, 57, 144, 91, 70, 32, 196, 64, 226, - 230, 63, 116, 134, 0, 109, 249, 75, 193, 158, 182, 40, 86, 5, 139, 151, 252, 210, 193, 206, - 112, 160, 55, 53, 6, 78, 230, 119, 199, 45, 137, 192, 0, 255, 16, 128, 137, 207, 33, 1, - 174, 200, 175, 107, 17, 116, 106, 129, 83, 18, 212, 236, 211, 17, 145, 91, 89, 65, 98, 119, - 156, 142, 44, 184, 108, 191, 2, 203, 85, 166, 125, 26, 178, 112, 27, 66, 32, 112, 236, 142, - 56, 16, 199, 199, 238, 152, 148, 0, 36, 217, 125, 7, 240, 52, 27, 39, 107, 254, 149, 234, - 208, 45, 33, 36, 138, 131, 155, 53, 208, 1, 52, 105, 7, 20, 200, 244, 93, 11, 97, 7, - 248, 149, 113, 207, 234, 247, 43, 16, 239, 128, 91, 202, 58, 12, 102, 205, 127, 8, 192, 196, - 191, 164, 4, 144, 22, 192, 10, 156, 147, 165, 128, 238, 255, 147, 33, 62, 52, 235, 39, 36, - 98, 69, 22, 186, 106, 251, 238, 88, 82, 54, 246, 215, 101, 255, 14, 240, 201, 49, 232, 247, - 149, 206, 3, 56, 26, 16, 117, 195, 133, 118, 70, 2, 31, 16, 212, 137, 66, 64, 29, 255, - 118, 150, 0, 232, 228, 193, 234, 239, 106, 50, 112, 137, 119, 0, 172, 214, 222, 87, 100, 227, - 130, 202, 0, 5, 114, 119, 238, 219, 100, 96, 192, 127, 8, 192, 196, 223, 75, 2, 92, 38, - 77, 170, 254, 165, 125, 155, 223, 29, 210, 64, 136, 194, 199, 115, 191, 181, 215, 78, 168, 141, - 191, 59, 5, 65, 240, 117, 244, 255, 59, 197, 192, 77, 7, 116, 242, 255, 97, 128, 252, 48, - 224, 45, 115, 188, 52, 195, 119, 175, 19, 0, 119, 66, 16, 136, 2, 176, 67, 12, 82, 43, - 97, 137, 119, 7, 208, 34, 65, 7, 228, 31, 127, 38, 45, 123, 46, 155, 223, 237, 26, 24, - 240, 31, 2, 48, 241, 15, 144, 0, 41, 47, 230, 163, 10, 65, 151, 21, 119, 196, 193, 85, - 227, 59, 128, 61, 33, 120, 147, 78, 0, 10, 232, 9, 65, 216, 5, 124, 66, 36, 146, 245, - 125, 178, 52, 176, 218, 254, 150, 183, 143, 118, 53, 3, 2, 42, 68, 58, 17, 144, 180, 8, - 186, 125, 38, 10, 0, 1, 115, 10, 210, 29, 112, 75, 245, 250, 63, 117, 7, 164, 128, 45, - 213, 107, 246, 116, 31, 233, 84, 192, 95, 254, 29, 224, 255, 126, 49, 179, 0, 190, 35, 107, - 59, 142, 251, 63, 36, 96, 231, 11, 87, 21, 109, 173, 30, 254, 119, 3, 80, 244, 225, 46, - 241, 1, 52, 151, 216, 164, 195, 234, 247, 187, 199, 127, 238, 167, 3, 99, 50, 95, 192, 189, - 15, 193, 172, 87, 197, 231, 113, 53, 4, 161, 3, 153, 231, 181, 170, 90, 238, 104, 214, 45, - 213, 253, 242, 85, 101, 191, 212, 87, 252, 75, 253, 116, 58, 114, 191, 189, 29, 240, 67, 51, - 251, 213, 241, 171, 235, 127, 37, 89, 244, 134, 138, 64, 207, 189, 171, 131, 72, 148, 134, 201, - 250, 71, 1, 152, 248, 2, 106, 0, 41, 244, 163, 242, 61, 177, 225, 117, 251, 235, 42, 234, - 211, 154, 128, 170, 72, 174, 42, 222, 35, 125, 253, 233, 100, 192, 42, 75, 239, 254, 190, 218, - 87, 87, 176, 151, 118, 2, 164, 164, 194, 189, 174, 147, 239, 211, 161, 64, 71, 176, 45, 25, - 249, 188, 99, 18, 212, 77, 224, 219, 181, 21, 38, 67, 128, 220, 177, 110, 249, 225, 66, 142, - 140, 185, 58, 129, 164, 29, 144, 40, 2, 183, 83, 27, 6, 252, 135, 0, 76, 252, 123, 4, - 128, 56, 243, 81, 89, 254, 4, 219, 164, 75, 13, 213, 62, 58, 130, 176, 51, 218, 55, 49, - 15, 186, 55, 73, 4, 5, 108, 55, 38, 88, 202, 173, 126, 119, 191, 183, 157, 226, 83, 253, - 76, 230, 1, 184, 76, 60, 177, 12, 238, 148, 8, 25, 37, 224, 109, 81, 96, 218, 22, 152, - 102, 237, 4, 132, 41, 32, 187, 172, 255, 51, 139, 0, 81, 247, 192, 128, 255, 16, 128, 137, - 175, 67, 4, 92, 63, 62, 169, 254, 167, 4, 34, 125, 13, 85, 1, 28, 120, 191, 49, 0, - 210, 134, 130, 64, 0, 157, 250, 1, 116, 138, 0, 169, 240, 39, 53, 0, 221, 246, 206, 7, - 224, 205, 56, 232, 67, 190, 16, 144, 100, 235, 93, 246, 156, 14, 254, 33, 160, 238, 150, 26, - 104, 246, 46, 0, 190, 149, 15, 0, 181, 36, 190, 32, 17, 16, 80, 24, 46, 245, 237, 131, - 173, 146, 48, 192, 63, 4, 96, 226, 251, 144, 128, 206, 16, 232, 217, 66, 183, 227, 242, 231, - 148, 2, 170, 38, 72, 249, 100, 191, 110, 212, 176, 35, 31, 36, 139, 167, 203, 11, 73, 198, - 158, 14, 6, 114, 25, 125, 186, 47, 90, 232, 231, 6, 3, 117, 25, 60, 81, 9, 20, 236, - 159, 100, 249, 187, 228, 192, 1, 111, 66, 28, 62, 99, 77, 223, 1, 185, 35, 26, 228, 245, - 73, 91, 223, 24, 251, 12, 1, 152, 248, 166, 68, 224, 163, 10, 64, 192, 220, 129, 116, 231, - 223, 191, 163, 18, 168, 33, 28, 183, 242, 37, 133, 142, 20, 184, 99, 190, 221, 142, 168, 5, - 238, 181, 183, 81, 15, 210, 17, 192, 2, 68, 64, 226, 149, 252, 59, 69, 160, 50, 89, 60, - 1, 112, 21, 0, 92, 1, 178, 3, 250, 221, 174, 128, 221, 41, 130, 206, 239, 95, 90, 23, - 16, 238, 246, 252, 39, 4, 193, 117, 18, 140, 228, 63, 4, 96, 226, 155, 17, 0, 5, 224, - 153, 90, 8, 59, 16, 38, 22, 193, 50, 231, 64, 85, 4, 133, 217, 61, 245, 3, 32, 133, - 120, 59, 45, 130, 238, 188, 136, 196, 239, 20, 4, 247, 255, 196, 190, 215, 117, 136, 116, 217, - 127, 213, 81, 82, 17, 136, 91, 189, 121, 208, 93, 40, 23, 233, 146, 130, 179, 227, 165, 234, - 2, 113, 9, 116, 14, 128, 14, 160, 105, 214, 158, 16, 128, 157, 153, 2, 154, 236, 127, 8, - 192, 196, 247, 87, 3, 118, 60, 255, 19, 149, 128, 128, 179, 203, 252, 211, 209, 192, 228, 92, - 73, 22, 47, 237, 249, 250, 83, 35, 31, 66, 22, 210, 215, 118, 234, 0, 145, 254, 93, 166, - 222, 145, 128, 46, 179, 239, 150, 2, 42, 80, 127, 158, 243, 37, 62, 42, 184, 203, 218, 169, - 179, 32, 153, 23, 208, 77, 233, 147, 201, 178, 19, 96, 87, 147, 145, 119, 138, 130, 196, 60, - 1, 146, 109, 166, 183, 127, 8, 192, 196, 31, 162, 6, 116, 96, 79, 50, 125, 186, 12, 64, - 84, 130, 148, 112, 116, 199, 189, 205, 182, 238, 247, 9, 25, 112, 217, 63, 5, 245, 227, 197, - 119, 177, 219, 103, 58, 225, 239, 179, 230, 4, 144, 78, 2, 7, 196, 46, 3, 87, 147, 61, - 119, 100, 192, 205, 15, 184, 27, 149, 226, 237, 100, 64, 2, 246, 46, 251, 239, 218, 12, 147, - 236, 127, 245, 111, 59, 114, 120, 192, 127, 8, 192, 196, 159, 71, 4, 210, 74, 255, 221, 117, - 125, 7, 174, 39, 0, 85, 215, 81, 80, 145, 140, 91, 153, 69, 240, 93, 40, 16, 142, 60, - 220, 5, 232, 119, 228, 163, 58, 151, 202, 194, 183, 203, 238, 211, 142, 0, 25, 192, 116, 94, - 1, 90, 188, 23, 119, 62, 187, 6, 62, 43, 130, 178, 163, 2, 144, 76, 157, 144, 3, 162, - 52, 36, 99, 126, 165, 247, 133, 131, 21, 57, 72, 109, 136, 127, 169, 61, 24, 224, 31, 2, - 48, 241, 51, 136, 128, 171, 224, 119, 18, 250, 9, 51, 119, 1, 66, 145, 238, 71, 80, 101, - 16, 36, 26, 29, 160, 147, 125, 167, 170, 128, 10, 64, 117, 203, 10, 111, 64, 255, 6, 217, - 126, 165, 18, 160, 219, 75, 172, 27, 192, 21, 235, 57, 47, 0, 153, 140, 189, 3, 109, 146, - 237, 83, 229, 32, 33, 11, 142, 68, 92, 141, 58, 146, 184, 244, 61, 213, 131, 67, 235, 150, - 190, 229, 123, 27, 240, 31, 2, 48, 241, 51, 72, 192, 115, 162, 160, 196, 199, 5, 119, 192, - 75, 123, 251, 201, 218, 190, 3, 108, 2, 178, 73, 209, 223, 13, 247, 79, 254, 127, 103, 91, - 250, 123, 90, 40, 232, 10, 243, 14, 0, 250, 93, 1, 32, 33, 2, 238, 239, 157, 125, 48, - 85, 33, 82, 85, 192, 129, 118, 106, 14, 148, 14, 25, 186, 55, 246, 245, 214, 60, 104, 38, - 248, 77, 12, 1, 152, 88, 18, 129, 36, 75, 95, 25, 242, 56, 57, 63, 173, 17, 160, 61, - 252, 233, 239, 82, 63, 0, 162, 32, 184, 130, 65, 178, 108, 80, 29, 59, 201, 212, 187, 227, - 170, 0, 113, 231, 12, 232, 192, 156, 204, 61, 32, 14, 130, 84, 49, 232, 102, 7, 184, 159, - 171, 99, 38, 64, 220, 1, 47, 201, 220, 15, 101, 253, 249, 9, 49, 88, 237, 19, 251, 10, - 12, 248, 15, 1, 152, 248, 153, 4, 32, 1, 233, 55, 38, 65, 29, 129, 112, 51, 3, 220, - 190, 146, 191, 119, 89, 127, 167, 6, 220, 70, 81, 112, 199, 235, 192, 185, 251, 219, 97, 178, - 104, 154, 253, 211, 215, 58, 87, 64, 10, 20, 46, 179, 39, 126, 0, 221, 80, 33, 87, 44, - 72, 73, 65, 162, 12, 36, 217, 123, 82, 7, 224, 28, 6, 147, 22, 62, 167, 12, 252, 242, - 251, 1, 254, 33, 0, 19, 67, 4, 28, 248, 19, 243, 159, 132, 0, 208, 129, 65, 21, 193, - 32, 4, 96, 183, 5, 176, 202, 140, 201, 32, 32, 250, 29, 59, 224, 190, 87, 251, 33, 230, - 63, 206, 211, 159, 140, 9, 174, 64, 50, 169, 240, 167, 164, 160, 203, 246, 105, 17, 33, 153, - 80, 216, 17, 128, 206, 210, 119, 135, 12, 144, 236, 93, 0, 168, 83, 149, 0, 213, 15, 12, - 240, 79, 12, 1, 152, 32, 106, 0, 241, 4, 160, 32, 76, 218, 0, 187, 253, 190, 205, 250, - 79, 3, 188, 212, 243, 223, 169, 8, 106, 246, 215, 237, 155, 218, 0, 19, 35, 160, 78, 198, - 119, 231, 82, 101, 219, 221, 241, 28, 248, 171, 57, 31, 250, 187, 238, 156, 92, 177, 159, 59, - 191, 171, 56, 199, 75, 190, 32, 208, 129, 50, 33, 7, 100, 31, 187, 86, 194, 179, 214, 63, - 49, 4, 96, 34, 34, 3, 73, 97, 30, 53, 21, 170, 64, 251, 108, 128, 149, 78, 9, 116, - 25, 249, 142, 116, 191, 59, 228, 231, 84, 223, 94, 87, 29, 239, 214, 123, 143, 128, 251, 197, - 235, 83, 153, 191, 2, 70, 226, 235, 159, 206, 12, 184, 161, 130, 64, 85, 129, 68, 77, 120, - 91, 76, 88, 169, 12, 151, 216, 82, 65, 229, 15, 224, 106, 10, 126, 121, 221, 0, 255, 196, - 16, 128, 137, 84, 17, 32, 128, 127, 2, 0, 61, 154, 172, 252, 109, 118, 79, 50, 253, 234, - 53, 137, 145, 144, 26, 82, 113, 139, 79, 21, 92, 213, 61, 72, 190, 13, 49, 249, 46, 167, - 53, 0, 119, 176, 127, 231, 9, 176, 51, 78, 216, 145, 5, 169, 95, 26, 72, 6, 1, 189, - 25, 46, 68, 73, 69, 226, 49, 80, 141, 227, 117, 42, 70, 53, 75, 224, 55, 53, 99, 192, - 127, 98, 8, 192, 196, 91, 53, 32, 41, 196, 75, 215, 231, 19, 208, 94, 129, 239, 169, 94, - 206, 39, 100, 129, 116, 9, 144, 125, 86, 170, 128, 203, 244, 87, 251, 221, 25, 255, 235, 206, - 203, 145, 14, 25, 194, 144, 186, 253, 145, 191, 37, 166, 63, 20, 216, 29, 240, 210, 172, 63, - 1, 118, 53, 25, 121, 245, 183, 14, 232, 187, 126, 254, 238, 88, 3, 250, 19, 67, 0, 38, - 254, 22, 34, 80, 129, 58, 53, 235, 73, 72, 2, 145, 221, 105, 91, 160, 3, 238, 55, 181, - 0, 21, 16, 147, 66, 191, 164, 8, 48, 33, 1, 73, 230, 239, 182, 117, 158, 2, 29, 56, - 87, 237, 130, 111, 28, 1, 169, 207, 127, 162, 8, 84, 70, 65, 87, 72, 44, 72, 129, 159, - 3, 121, 186, 52, 48, 114, 255, 196, 16, 128, 137, 127, 140, 4, 56, 160, 37, 68, 128, 2, - 47, 57, 150, 219, 15, 37, 3, 110, 59, 34, 237, 83, 80, 63, 130, 109, 119, 190, 171, 59, - 223, 107, 215, 26, 152, 212, 6, 236, 102, 250, 213, 20, 65, 90, 48, 168, 79, 248, 127, 66, - 34, 168, 140, 95, 41, 4, 174, 29, 240, 90, 100, 252, 184, 198, 96, 192, 127, 98, 8, 192, - 196, 223, 77, 6, 78, 152, 237, 167, 67, 127, 186, 172, 217, 117, 23, 144, 109, 29, 144, 211, - 158, 127, 170, 38, 72, 108, 82, 31, 85, 19, 232, 68, 191, 206, 4, 136, 118, 11, 144, 191, - 43, 80, 9, 222, 20, 0, 18, 217, 94, 193, 223, 187, 245, 125, 154, 137, 211, 159, 93, 39, - 65, 218, 58, 56, 192, 63, 49, 4, 96, 226, 75, 171, 1, 137, 29, 240, 109, 136, 3, 1, - 216, 116, 30, 128, 3, 248, 29, 223, 127, 119, 220, 59, 204, 254, 137, 115, 160, 147, 234, 29, - 72, 75, 189, 51, 96, 7, 192, 164, 184, 47, 85, 20, 222, 152, 253, 36, 170, 128, 203, 200, - 147, 237, 104, 109, 192, 103, 12, 4, 250, 77, 13, 24, 224, 159, 24, 2, 48, 241, 149, 200, - 0, 89, 22, 184, 149, 251, 10, 56, 80, 167, 147, 8, 187, 215, 165, 142, 127, 14, 220, 29, - 73, 112, 128, 237, 178, 118, 231, 235, 47, 160, 58, 16, 103, 64, 193, 215, 39, 78, 129, 233, - 241, 8, 160, 119, 153, 118, 50, 52, 72, 205, 235, 28, 25, 72, 128, 255, 227, 207, 196, 115, - 96, 44, 124, 39, 134, 0, 76, 124, 89, 18, 80, 1, 241, 78, 139, 223, 219, 181, 254, 174, - 128, 175, 179, 252, 77, 21, 4, 218, 190, 247, 119, 21, 0, 86, 217, 57, 1, 224, 195, 252, - 110, 5, 88, 7, 0, 253, 231, 190, 46, 49, 75, 97, 82, 240, 215, 45, 37, 236, 46, 19, - 164, 64, 78, 140, 134, 220, 210, 65, 165, 90, 88, 133, 96, 128, 127, 98, 8, 192, 196, 119, - 80, 4, 168, 161, 79, 90, 201, 239, 234, 3, 72, 86, 190, 59, 55, 128, 40, 4, 171, 115, - 219, 113, 255, 163, 202, 195, 29, 126, 175, 83, 213, 160, 58, 206, 13, 143, 243, 38, 179, 39, - 238, 127, 29, 72, 175, 182, 217, 245, 13, 248, 187, 189, 1, 202, 109, 6, 244, 39, 134, 0, - 76, 124, 55, 34, 240, 198, 197, 143, 78, 7, 76, 136, 131, 203, 206, 137, 122, 64, 190, 67, - 157, 13, 112, 245, 90, 186, 140, 80, 1, 48, 41, 238, 235, 102, 10, 84, 243, 1, 186, 172, - 255, 104, 0, 187, 3, 105, 55, 40, 136, 0, 126, 82, 4, 232, 136, 197, 142, 57, 16, 149, - 246, 49, 200, 15, 240, 79, 12, 1, 152, 248, 211, 148, 128, 21, 200, 38, 253, 248, 187, 182, - 191, 2, 100, 193, 29, 255, 54, 199, 167, 211, 251, 232, 0, 31, 21, 32, 232, 138, 4, 83, - 85, 129, 116, 37, 144, 25, 2, 187, 25, 63, 89, 62, 168, 126, 231, 186, 10, 118, 188, 2, - 222, 40, 5, 159, 209, 2, 184, 252, 221, 128, 255, 196, 16, 128, 137, 63, 137, 12, 116, 78, - 124, 73, 29, 64, 7, 212, 167, 234, 98, 62, 186, 166, 79, 60, 1, 72, 134, 158, 100, 243, - 46, 147, 39, 223, 103, 87, 209, 143, 63, 50, 160, 50, 80, 114, 113, 135, 219, 236, 216, 253, - 18, 85, 128, 250, 254, 239, 154, 8, 17, 130, 129, 58, 9, 6, 248, 39, 134, 0, 76, 252, - 36, 34, 208, 117, 10, 184, 113, 189, 164, 128, 47, 117, 0, 20, 252, 29, 205, 248, 59, 226, - 208, 181, 7, 18, 66, 64, 125, 6, 210, 238, 0, 154, 177, 83, 133, 225, 134, 106, 1, 221, - 110, 5, 158, 187, 6, 65, 233, 176, 32, 7, 240, 132, 32, 252, 246, 222, 6, 248, 39, 134, - 0, 76, 252, 241, 36, 224, 56, 142, 27, 118, 14, 56, 127, 255, 116, 249, 160, 235, 10, 32, - 107, 240, 41, 73, 56, 94, 124, 23, 119, 94, 235, 198, 252, 86, 89, 190, 3, 125, 103, 49, - 44, 147, 93, 11, 128, 122, 231, 93, 64, 179, 252, 39, 64, 87, 219, 127, 252, 251, 37, 239, - 61, 64, 101, 126, 234, 48, 120, 13, 240, 79, 12, 1, 152, 24, 69, 160, 207, 172, 211, 140, - 222, 169, 1, 71, 145, 41, 174, 134, 9, 81, 63, 255, 93, 146, 208, 145, 146, 59, 80, 10, - 170, 44, 157, 42, 1, 2, 224, 126, 64, 53, 160, 107, 47, 116, 68, 164, 34, 49, 43, 69, - 33, 53, 9, 34, 228, 225, 179, 156, 255, 112, 77, 192, 0, 255, 196, 16, 128, 137, 33, 2, - 191, 170, 2, 14, 252, 159, 74, 129, 3, 98, 186, 20, 224, 50, 119, 186, 166, 95, 129, 121, - 178, 223, 164, 189, 143, 116, 19, 172, 64, 212, 109, 191, 11, 232, 10, 201, 2, 249, 61, 113, - 250, 171, 128, 182, 234, 217, 151, 50, 239, 255, 55, 96, 255, 203, 62, 6, 248, 39, 134, 0, - 76, 76, 244, 202, 0, 105, 251, 115, 45, 130, 212, 220, 39, 169, 33, 112, 164, 161, 50, 23, - 74, 125, 0, 72, 229, 127, 5, 176, 201, 119, 59, 169, 5, 88, 41, 20, 93, 123, 221, 27, - 187, 96, 66, 0, 14, 241, 154, 129, 75, 190, 192, 239, 88, 108, 183, 179, 28, 176, 36, 29, - 3, 252, 19, 67, 0, 38, 38, 56, 9, 112, 25, 252, 173, 181, 225, 208, 173, 188, 183, 159, - 168, 3, 183, 88, 141, 130, 94, 130, 191, 10, 144, 63, 154, 140, 220, 25, 249, 184, 109, 104, - 38, 159, 202, 251, 14, 164, 221, 112, 32, 58, 65, 208, 29, 207, 129, 56, 37, 29, 184, 43, - 96, 0, 127, 98, 8, 192, 196, 196, 231, 146, 129, 91, 255, 187, 102, 223, 129, 34, 41, 18, - 188, 213, 47, 45, 36, 182, 192, 105, 70, 223, 21, 213, 209, 54, 192, 195, 0, 125, 210, 17, - 144, 2, 63, 201, 240, 171, 78, 0, 178, 52, 144, 100, 246, 85, 246, 157, 100, 237, 228, 111, - 21, 89, 24, 208, 159, 24, 2, 48, 49, 241, 15, 19, 2, 234, 6, 232, 70, 0, 203, 128, - 246, 238, 176, 31, 71, 12, 104, 54, 222, 213, 20, 36, 251, 234, 234, 9, 118, 234, 0, 42, - 87, 64, 34, 253, 11, 2, 173, 203, 226, 159, 42, 194, 170, 186, 63, 241, 11, 232, 138, 12, - 167, 119, 127, 98, 8, 192, 196, 196, 23, 84, 5, 164, 190, 94, 96, 181, 141, 83, 15, 220, - 247, 229, 51, 182, 235, 150, 6, 118, 76, 124, 118, 77, 132, 136, 18, 64, 172, 128, 93, 166, - 78, 0, 249, 51, 179, 253, 21, 96, 119, 68, 165, 250, 123, 73, 12, 6, 248, 39, 134, 0, - 76, 76, 124, 61, 66, 160, 16, 224, 9, 120, 167, 166, 65, 233, 241, 62, 243, 123, 74, 70, - 252, 238, 238, 59, 177, 252, 37, 78, 130, 180, 189, 207, 169, 3, 105, 241, 224, 214, 188, 129, - 1, 253, 137, 33, 0, 19, 19, 223, 139, 12, 16, 64, 167, 235, 250, 233, 186, 125, 186, 52, - 144, 102, 255, 212, 3, 224, 173, 10, 144, 146, 0, 151, 145, 119, 102, 61, 93, 118, 79, 124, - 252, 69, 192, 124, 64, 127, 98, 8, 192, 196, 196, 159, 77, 4, 100, 148, 128, 55, 237, 127, - 9, 81, 168, 182, 191, 13, 113, 184, 149, 41, 9, 14, 176, 147, 89, 1, 21, 208, 211, 42, - 126, 66, 46, 156, 74, 113, 67, 210, 144, 18, 128, 213, 254, 254, 91, 204, 247, 151, 63, 197, - 124, 147, 38, 134, 0, 76, 76, 252, 89, 68, 128, 212, 3, 16, 242, 240, 252, 255, 143, 93, - 10, 59, 224, 77, 191, 159, 174, 94, 224, 254, 228, 239, 120, 69, 28, 210, 12, 191, 34, 36, - 201, 248, 94, 71, 78, 168, 67, 224, 111, 175, 31, 192, 159, 24, 2, 48, 49, 241, 7, 147, - 1, 51, 139, 224, 134, 74, 0, 153, 36, 72, 37, 254, 27, 156, 195, 138, 176, 116, 160, 252, - 217, 224, 47, 237, 77, 7, 116, 4, 128, 100, 236, 36, 155, 119, 219, 148, 203, 6, 3, 250, - 19, 67, 0, 38, 38, 70, 29, 80, 67, 10, 18, 143, 0, 242, 29, 235, 214, 250, 147, 215, - 85, 64, 154, 42, 2, 174, 125, 240, 128, 164, 160, 203, 244, 119, 65, 190, 59, 102, 108, 19, - 60, 128, 63, 49, 49, 4, 96, 98, 194, 145, 130, 221, 22, 62, 90, 148, 183, 187, 52, 64, - 39, 249, 165, 89, 126, 82, 15, 64, 70, 4, 19, 240, 255, 120, 204, 171, 120, 127, 169, 196, - 255, 219, 223, 7, 244, 39, 38, 134, 0, 76, 76, 188, 85, 8, 200, 124, 129, 4, 200, 15, - 144, 181, 87, 75, 11, 111, 178, 122, 250, 253, 79, 65, 223, 101, 243, 137, 97, 80, 236, 15, - 48, 64, 63, 49, 49, 4, 96, 98, 226, 159, 34, 4, 9, 41, 88, 13, 210, 57, 148, 141, - 0, 150, 246, 141, 130, 164, 189, 90, 129, 106, 105, 225, 14, 142, 71, 128, 62, 29, 245, 59, - 213, 250, 19, 19, 67, 0, 38, 38, 190, 164, 74, 224, 200, 64, 7, 232, 55, 220, 230, 185, - 191, 191, 179, 0, 176, 83, 17, 92, 182, 94, 85, 252, 147, 153, 2, 122, 130, 254, 220, 117, - 19, 19, 67, 0, 38, 38, 190, 36, 33, 248, 11, 164, 26, 47, 130, 196, 55, 160, 202, 254, - 9, 33, 160, 106, 0, 205, 206, 201, 26, 189, 83, 29, 58, 53, 98, 90, 242, 38, 38, 134, - 0, 76, 76, 252, 24, 213, 224, 0, 217, 124, 7, 188, 111, 150, 4, 82, 37, 64, 122, 231, - 245, 127, 76, 86, 63, 49, 49, 4, 96, 98, 98, 226, 3, 25, 248, 184, 158, 221, 180, 39, - 174, 190, 187, 255, 148, 7, 0, 81, 8, 150, 160, 62, 235, 244, 19, 19, 67, 0, 38, 38, - 38, 62, 129, 48, 60, 201, 2, 32, 13, 239, 30, 22, 143, 253, 175, 142, 63, 159, 204, 196, - 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, - 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, - 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, - 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, - 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, - 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, - 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, - 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, - 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, - 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 196, 103, 196, 255, 7, 131, 64, 188, 97, - 115, 155, 213, 215, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130 - }; - }; - default_light_texture_t default_light_texture; -} - -#endif diff --git a/src/ogfx/static_resources/default_shaders.hpp b/src/ogfx/static_resources/default_shaders.hpp deleted file mode 100755 index d1e17e6..0000000 --- a/src/ogfx/static_resources/default_shaders.hpp +++ /dev/null @@ -1,112 +0,0 @@ -#ifndef __DEFAULT_SHADERS_HPP__ -#define __DEFAULT_SHADERS_HPP__ - -#include - -namespace oxres -{ - const ostd::String defaultShader_vert = - "#version 420 core\n" - - "layout(location = 0) in vec3 a_position;\n" - "layout(location = 1) in vec4 a_color;\n" - "layout(location = 2) in vec2 a_texCoords;\n" - "layout(location = 3) in float a_texIndex;\n" - - "out vec4 v_vertexColor;\n" - "out vec2 v_texCoords;\n" - "out float v_texIndex;\n" - - "uniform mat4 u_viewProjMatrix;\n" - - "void main()\n" - "{\n" - "gl_Position = u_viewProjMatrix * vec4(a_position, 1.0);\n" - "v_vertexColor = a_color;\n" - "v_texCoords = a_texCoords;\n" - "v_texIndex = a_texIndex;\n" - "}\n" - ; - const ostd::String defaultShader_frag = - "#version 420 core\n" - - "out vec4 out_FragColor;\n" - "uniform sampler2D u_textures[16];\n" - - "in vec4 v_vertexColor;\n" - "in vec2 v_texCoords;\n" - "in float v_texIndex;\n" - - "void main()\n" - "{\n" - "int iTexID = int(v_texIndex);\n" - "vec4 color = texture(u_textures[iTexID], v_texCoords) * v_vertexColor;\n" - "out_FragColor = color;" - "}\n" - ; - - - - const ostd::String defaultBlendShader_vert = - "#version 420 core\n" - - "layout(location = 0) in vec3 a_position;\n" - "layout(location = 1) in vec4 a_color;\n" - "layout(location = 2) in vec2 a_texCoords;\n" - "layout(location = 3) in float a_texIndex;\n" - - "out vec2 v_texCoords;\n" - - "uniform mat4 u_viewProjMatrix;\n" - - "void main()\n" - "{\n" - "gl_Position = u_viewProjMatrix * vec4(a_position, 1.0);\n" - "v_texCoords = a_texCoords;\n" - "}\n" - ; - const ostd::String defaultBlendShader_frag = - "#version 420 core\n" - - "out vec4 out_FragColor;\n" - "uniform sampler2D u_textures[16];\n" - "uniform int u_blendModes[14];\n" - "uniform int u_layerCount;\n" - "in vec2 v_texCoords;\n" - - "const int BMOverride = 0;\n" - "const int BMTransparent = 1;\n" - "const int BMMultiply = 2;\n" - "const int BMAdd = 3;\n" - "const int BMSubtract = 4;\n" - "const int BMNormal = 5;\n" - - "void main()\n" - "{\n" - "vec4 color = vec4(1.0, 1.0, 1.0, 1.0);\n" - "for (int i = 0; i < u_layerCount; i++)\n" - "{\n" - "int ti = i + 1;\n" - "int bm = u_blendModes[i];\n" - "if (bm == BMOverride)\n" - "color = texture(u_textures[ti], v_texCoords);\n" - "else if (bm == BMTransparent)\n" - "continue;\n" - "else if (bm == BMMultiply)\n" - "color *= texture(u_textures[ti], v_texCoords);\n" - "else if (bm == BMAdd)\n" - "color += texture(u_textures[ti], v_texCoords);\n" - "else if (bm == BMSubtract)\n" - "color -= texture(u_textures[ti], v_texCoords);\n" - "else if (bm == BMNormal)\n" - "{\n" - "vec4 col = texture(u_textures[ti], v_texCoords);\n" - "color = vec4(col.rgb * col.a + color.rgb * (1.0 - col.a), 1.0);\n" - "}\n" - "}\n" - "out_FragColor = color;\n" - "}\n" - ; -} - -#endif \ No newline at end of file diff --git a/src/ostd/BaseObject.cpp b/src/ostd/BaseObject.cpp index 1ce5b15..7dc78d4 100755 --- a/src/ostd/BaseObject.cpp +++ b/src/ostd/BaseObject.cpp @@ -2,6 +2,7 @@ #include "Utils.hpp" #include "Defines.hpp" #include "Signals.hpp" +#include "IOHandlers.hpp" namespace ostd { @@ -32,7 +33,7 @@ namespace ostd return out; } - void BaseObject::print(bool newLine, IOutputHandler* __destination) const + void BaseObject::print(bool newLine, OutputHandlerBase* __destination) const { if (__destination == nullptr) std::cout << toString() << (newLine ? "\n" : ""); @@ -43,7 +44,7 @@ namespace ostd } } - std::string BaseObject::getObjectHeaderString(void) const + String BaseObject::getObjectHeaderString(void) const { return StringEditor(getTypeName()).add("->uid=").addi(getID()).add("/oid=").addi(getCompareOID()).add("/valid=").add(STR_BOOL(isValid())).str(); } @@ -58,4 +59,4 @@ namespace ostd if (m_signalsEnabled) handleSignal(signal); } -} //namesoace ox +} diff --git a/src/ostd/BaseObject.hpp b/src/ostd/BaseObject.hpp index 48afe6e..c0f5adb 100755 --- a/src/ostd/BaseObject.hpp +++ b/src/ostd/BaseObject.hpp @@ -5,9 +5,11 @@ #include #include +#include + namespace ostd { - class IOutputHandler; + class OutputHandlerBase; struct tSignal; class BaseObject { @@ -31,15 +33,15 @@ namespace ostd inline static BaseObject& InvalidRef(void) { return BaseObject::s_invalid_obj; } // inline static BaseObject InvalidInst(void) { return BaseObject::s_invalid_obj; } - inline void setTypeName(std::string tn) { m_typeName = tn; } - inline std::string getTypeName(void) const { return m_typeName; } - std::string getObjectHeaderString(void) const; + inline void setTypeName(const StringEditor& tn) { m_typeName = tn.str(); } + inline String getTypeName(void) const { return m_typeName; } + String getObjectHeaderString(void) const; inline bool signalsEnabled(void) { return m_signalsEnabled; } inline void enableSignals(bool e = true) { m_signalsEnabled = e; } - virtual inline std::string toString(void) const { return getObjectHeaderString(); }; - virtual void print(bool newLine = true, IOutputHandler* __destination = nullptr) const; + virtual inline String toString(void) const { return getObjectHeaderString(); }; + virtual void print(bool newLine = true, OutputHandlerBase* __destination = nullptr) const; virtual inline void handleSignal(tSignal& signal) { } void connectSignal(uint32_t signal_id); @@ -57,13 +59,13 @@ namespace ostd uint64_t m_uid; uint64_t m_oid; bool m_valid; - std::string m_typeName; + String m_typeName; bool m_signalsEnabled { true }; inline static uint64_t s_next_oid { 1024 }; static BaseObject s_invalid_obj; }; -} //namesoace ox +} diff --git a/src/ostd/Color.cpp b/src/ostd/Color.cpp index 49650aa..302779d 100755 --- a/src/ostd/Color.cpp +++ b/src/ostd/Color.cpp @@ -3,6 +3,7 @@ #include "Utils.hpp" #include "Logger.hpp" +#include "IOHandlers.hpp" namespace ostd { @@ -27,14 +28,7 @@ namespace ostd BaseObject::setValid(true); } - // Color::Color(const sf::Color& sfml_color) - // { - // set(sfml_color); - // setTypeName("ox::Color"); - // BaseObject::setValid(true); - // } - - Color::Color(const String& color_string) + Color::Color(const StringEditor& color_string) { set(color_string); setTypeName("ox::Color"); @@ -103,16 +97,7 @@ namespace ostd return *this; } - // Color& Color::set(const sf::Color& sfml_color) - // { - // r = sfml_color.r; - // g = sfml_color.g; - // b = sfml_color.b; - // a = sfml_color.a; - // return *this; - // } - - Color& Color::set(const String& color_string) + Color& Color::set(const StringEditor& color_string) { StringEditor se(color_string); se.trim(); @@ -169,12 +154,7 @@ namespace ostd return *this; } - // sf::Color Color::sf(void) const - // { - // return { r, g, b, a }; - // } - - String Color::hexString(bool include_alpha, String prefix) const + StringEditor Color::hexString(bool include_alpha, StringEditor prefix) const { String hex = ""; hex += Utils::getHexStr(r, false, 1); @@ -182,11 +162,11 @@ namespace ostd hex += Utils::getHexStr(b, false, 1); if (include_alpha) hex += Utils::getHexStr(a, false, 1); - hex = prefix + StringEditor(hex).toUpper().str(); + hex = prefix.str() + StringEditor(hex).toUpper().str(); return hex; } - String Color::rgbString(bool include_parenthesis, bool include_alpha) const + StringEditor Color::rgbString(bool include_parenthesis, bool include_alpha) const { StringEditor rgb = ""; if (include_parenthesis) @@ -221,10 +201,10 @@ namespace ostd String Color::toString(void) const { - return hexString(true, "#") + " -> rgba" + rgbString(true, true); + return hexString(true, "#").str() + " -> rgba" + rgbString(true, true).str(); } - void Color::print(bool newLine, IOutputHandler* __destination) const + void Color::print(bool newLine, OutputHandlerBase* __destination) const { if (__destination == nullptr) std::cout << *this << (newLine ? "\n" : ""); diff --git a/src/ostd/Color.hpp b/src/ostd/Color.hpp index ac2dd40..5d75409 100755 --- a/src/ostd/Color.hpp +++ b/src/ostd/Color.hpp @@ -4,6 +4,7 @@ #include #include #include +#include namespace ostd { @@ -24,8 +25,7 @@ namespace ostd Color(void); Color(uint8_t rgb_single_value, uint8_t alpha = 255); Color(uint8_t _r, uint8_t _g, uint8_t _b, uint8_t alpha = 255); - //Color(const sf::Color& sfml_color); - Color(const String& color_string); + Color(const StringEditor& color_string); Color(const FloatCol& normalized_color); Color(const Color& copy); @@ -36,18 +36,16 @@ namespace ostd Color& set(void); Color& set(uint8_t rgb_single_value, uint8_t alpha = 255); Color& set(uint8_t _r, uint8_t _g, uint8_t _b, uint8_t alpha = 255); - //Color& set(const sf::Color& sfml_color); - Color& set(const String& color_string); + Color& set(const StringEditor& color_string); Color& set(const FloatCol& normalized_color); - //sf::Color sf(void) const; - String hexString(bool include_alpha = false, String prefix = "0x") const; - String rgbString(bool include_parenthesis = true, bool include_alpha = false) const; + StringEditor hexString(bool include_alpha = false, StringEditor prefix = "0x") const; + StringEditor rgbString(bool include_parenthesis = true, bool include_alpha = false) const; uint32_t asInteger(void) const; FloatCol getNormalizedColor(void) const; String toString(void) const override; - void print(bool newLine = true, IOutputHandler* __destination = nullptr) const override; + void print(bool newLine = true, OutputHandlerBase* __destination = nullptr) const override; inline void invalidate(void) override { } inline void setValid(bool valid) override { } @@ -57,7 +55,7 @@ namespace ostd uint8_t b; uint8_t a; }; -} //namesoace ox +} diff --git a/src/ostd/Console.cpp b/src/ostd/Console.cpp index 4ae197c..00b48e6 100644 --- a/src/ostd/Console.cpp +++ b/src/ostd/Console.cpp @@ -1,4 +1,7 @@ -#include +#include "Utils.hpp" +#include "Console.hpp" + +#include namespace ostd { @@ -30,15 +33,21 @@ void Utils::clearConsole(void) SetConsoleCursorPosition( hStdOut, homeCoords ); } -void Utils::getConsoleSize(int32_t& outRows, int32_t& outColumns) +void Utils::getConsoleSize(int32_t& outColumns, int32_t& outRows) { CONSOLE_SCREEN_BUFFER_INFO csbi; - int columns, rows; GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi); outColumns = csbi.srWindow.Right - csbi.srWindow.Left + 1; outRows = csbi.srWindow.Bottom - csbi.srWindow.Top + 1; } +void Utils::setConsoleCursorPosition(int32_t x, int32_t y) +{ + COORD coord; + coord.X = x; coord.Y = y; + SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),coord); +} + #elif defined (__LINUX__) || defined(__gnu_linux__) || defined(__linux__) #include @@ -57,7 +66,7 @@ void Utils::clearConsole(void) putp(tigetstr( "clear" )); } -void Utils::getConsoleSize(int32_t& outRows, int32_t& outColumns) +void Utils::getConsoleSize(int32_t& outColumns, int32_t& outRows) { struct winsize w; ioctl(STDOUT_FILENO, TIOCGWINSZ, &w); @@ -65,12 +74,17 @@ void Utils::getConsoleSize(int32_t& outRows, int32_t& outColumns) outColumns = w.ws_col; } +void Utils::setConsoleCursorPosition(int32_t x, int32_t y) +{ + printf("\033[%d;%dH",x+1,y+1); +} + #endif int32_t Utils::getConsoleWidth(void) { int32_t rows = 0, cols = 0; - getConsoleSize(rows, cols); + getConsoleSize(cols, rows); return cols; } @@ -81,4 +95,236 @@ int32_t Utils::getConsoleHeight(void) return rows; } + + + +InteractiveConsole::InteractiveConsole(void) +{ + m_mode = eMode::Direct; + m_validBuffer = false; +} + +InteractiveConsole::InteractiveConsole(bool clearOnStart, eMode mode) +{ + if (clearOnStart) + clear(); + m_mode = mode; + m_validBuffer = false; +} + +OutputHandlerBase& InteractiveConsole::bg(const ConsoleColors::tConsoleColor& color) +{ + std::cout << color.asBackground(); + return *this; +} + +OutputHandlerBase& InteractiveConsole::bg(const StringEditor& color) +{ + std::cout << ConsoleColors::getFromName(color, true); + return *this; +} + +OutputHandlerBase& InteractiveConsole::fg(const ConsoleColors::tConsoleColor& color) +{ + std::cout << color.asForeground(); + return *this; +} + +OutputHandlerBase& InteractiveConsole::fg(const StringEditor& color) +{ + std::cout << ConsoleColors::getFromName(color, false); + return *this; +} + +OutputHandlerBase& InteractiveConsole::pChar(char c) +{ + std::cout << (char)c; + return *this; +} + +OutputHandlerBase& InteractiveConsole::pStyled(const StringEditor& styled) +{ + return pStyled(TextStyleParser::parse(styled.str())); +} + +OutputHandlerBase& InteractiveConsole::pStyled(const TextStyleParser::tStyledString& styled) +{ + std::cout << styled; + return *this; +} + +OutputHandlerBase& InteractiveConsole::pStyled(const TextStyleBuilder::IRichStringBase& styled) +{ + std::cout << styled; + return *this; +} + +OutputHandlerBase& InteractiveConsole::pObject(const BaseObject& bo) +{ + std::cout << bo; + return *this; +} + +OutputHandlerBase& InteractiveConsole::p(const StringEditor& se) +{ + std::cout << se; + return *this; +} + +OutputHandlerBase& InteractiveConsole::p(uint8_t i) +{ + std::cout << (uint8_t)i; + return *this; +} + +OutputHandlerBase& InteractiveConsole::p(int8_t i) +{ + std::cout << (int8_t)i; + return *this; +} + +OutputHandlerBase& InteractiveConsole::p(uint16_t i) +{ + std::cout << (uint16_t)i; + return *this; +} + +OutputHandlerBase& InteractiveConsole::p(int16_t i) +{ + std::cout << (int16_t)i; + return *this; +} + +OutputHandlerBase& InteractiveConsole::p(uint32_t i) +{ + std::cout << (uint32_t)i; + return *this; +} + +OutputHandlerBase& InteractiveConsole::p(int32_t i) +{ + std::cout << (int32_t)i; + return *this; +} + +OutputHandlerBase& InteractiveConsole::p(uint64_t i) +{ + std::cout << (uint64_t)i; + return *this; +} + +OutputHandlerBase& InteractiveConsole::p(int64_t i) +{ + std::cout << (int64_t)i; + return *this; +} + +OutputHandlerBase& InteractiveConsole::p(float f, uint8_t precision) +{ + if (precision == 0) + { + std::cout << f; + } + else + { + std::ios cout_state(nullptr); + std::cout << std::fixed << std::setprecision(precision) << f; + std::cout.copyfmt(cout_state); + } + return *this; +} + +OutputHandlerBase& InteractiveConsole::p(double f, uint8_t precision) +{ + if (precision == 0) + { + std::cout << f; + } + else + { + std::ios cout_state(nullptr); + std::cout << std::fixed << std::setprecision(precision) << f; + std::cout.copyfmt(cout_state); + } + return *this; +} + +OutputHandlerBase& InteractiveConsole::nl(void) +{ + std::cout << "\n"; + return *this; +} + +OutputHandlerBase& InteractiveConsole::flush(void) +{ + std::cout << std::endl; + return *this; +} + +OutputHandlerBase& InteractiveConsole::reset(void) +{ + std::cout << termcolor::reset; + return *this; +} + +OutputHandlerBase& InteractiveConsole::clear(void) +{ + Utils::clearConsole(); + return *this; +} + +void InteractiveConsole::getConsoleSize(int32_t& outColumns, int32_t& outRows) +{ + Utils::getConsoleSize(outColumns, outRows); +} + +IPoint InteractiveConsole::getConsoleSize(void) +{ + int32_t x = 0, y = 0; + Utils::getConsoleSize(x, y); + return { x, y }; +} + +void InteractiveConsole::update(void) +{ + if (m_mode != eMode::Buffered) return; + __swap_buffers(); +} + +void InteractiveConsole::__set_cursor(void) +{ + Utils::setConsoleCursorPosition(m_cursorPosition.x, m_cursorPosition.y); +} + +void InteractiveConsole::__construct_buffer(void) +{ + auto console_size = getConsoleSize(); + if (console_size == m_oldConsoleSize) + { + m_validBuffer = true; + return; + } + m_oldConsoleSize = console_size; + int32_t linear_size = m_oldConsoleSize.x * m_oldConsoleSize.y; + m_buffer.resize(linear_size); + m_secondBuffer.resize(linear_size); + m_validBuffer = false; + __validate_and_clear_buffers(); +} + +void InteractiveConsole::__swap_buffers(void) +{ + if (m_buffer.size() != m_secondBuffer.size()) + __construct_buffer(); + if (!m_validBuffer) return; //TODO: Error, shouldn't happen +} + +void InteractiveConsole::__validate_and_clear_buffers(void) +{ + if (m_validBuffer) return; + for (int32_t i = 0; i < m_buffer.size(); i++) + m_buffer[i] = m_secondBuffer[i] = m_emptyChar; + m_validBuffer = true; +} + } \ No newline at end of file diff --git a/src/ostd/Console.hpp b/src/ostd/Console.hpp new file mode 100644 index 0000000..09116f3 --- /dev/null +++ b/src/ostd/Console.hpp @@ -0,0 +1,92 @@ +#pragma once + +#include +#include +#include + +namespace ostd +{ + class InteractiveConsole : public OutputHandlerBase + { + public: enum class eMode { Direct = 0, Buffered = 1 }; + public: struct tRichChar { + TextStyleParser::tColor foreground; + TextStyleParser::tColor background; + char ascii; + }; + public: + InteractiveConsole(void); + InteractiveConsole(bool clearOnStart, eMode mode = eMode::Direct); + + OutputHandlerBase& bg(const ConsoleColors::tConsoleColor& color) override; + OutputHandlerBase& bg(const StringEditor& color) override; + OutputHandlerBase& fg(const ConsoleColors::tConsoleColor& color) override; + OutputHandlerBase& fg(const StringEditor& color) override; + + OutputHandlerBase& pChar(char c) override; + OutputHandlerBase& pStyled(const StringEditor& styled) override; + OutputHandlerBase& pStyled(const TextStyleParser::tStyledString& styled) override; + OutputHandlerBase& pStyled(const TextStyleBuilder::IRichStringBase& styled) override; + OutputHandlerBase& pObject(const BaseObject& bo) override; + + OutputHandlerBase& p(const StringEditor& se) override; + OutputHandlerBase& p(uint8_t i) override; + OutputHandlerBase& p(int8_t i) override; + OutputHandlerBase& p(uint16_t i) override; + OutputHandlerBase& p(int16_t i) override; + OutputHandlerBase& p(uint32_t i) override; + OutputHandlerBase& p(int32_t i) override; + OutputHandlerBase& p(uint64_t i) override; + OutputHandlerBase& p(int64_t i) override; + OutputHandlerBase& p(float f, uint8_t precision = 0) override; + OutputHandlerBase& p(double f, uint8_t precision = 0) override; + + OutputHandlerBase& nl(void) override; + OutputHandlerBase& flush(void) override; + OutputHandlerBase& reset(void) override; + OutputHandlerBase& clear(void) override; + + inline OutputHandlerBase& xy(IPoint position) override { m_cursorPosition = position; __set_cursor(); return *this; } + inline OutputHandlerBase& xy(int32_t x, int32_t y) override { m_cursorPosition = { x, y }; __set_cursor(); return *this; } + inline OutputHandlerBase& x(int32_t x) override { m_cursorPosition.x = x; __set_cursor(); return *this; } + inline OutputHandlerBase& y(int32_t y) override { m_cursorPosition.y = y; __set_cursor(); return *this; } + + void getConsoleSize(int32_t& outColumns, int32_t& outRows) override; + IPoint getConsoleSize(void) override; + + inline IPoint getCursorPosition(void) override { return m_cursorPosition; } + inline void getCursorPosition(int32_t& outX, int32_t& outY) override { outX = m_cursorPosition.x; outY = m_cursorPosition.y; } + inline int32_t getCursorX(void) override { return m_cursorPosition.x; } + inline int32_t getCursorY(void) override { return m_cursorPosition.y; } + + //InteractiveConsole + inline void enableDirectMode(void) { m_mode = eMode::Direct; } + inline void enableBufferedMode(void) { m_mode = eMode::Buffered; } + inline void setMode(eMode mode) { m_mode = mode; } + inline eMode getMode(void) { return m_mode; } + + void update(void); + + + private: + void __set_cursor(void); + void __construct_buffer(void); + void __swap_buffers(void); + void __validate_and_clear_buffers(void); + + private: + IPoint m_cursorPosition { 0, 0 }; + IPoint m_oldConsoleSize { 0, 0 }; + eMode m_mode { eMode::Direct }; + std::vector m_buffer; + std::vector m_secondBuffer; + bool m_validBuffer { false }; + + tRichChar m_emptyChar { + { { 0, 0, 0, 255 }, "Black", false }, + { { 0, 0, 0, 255 }, "Black", true }, + ' ' + }; + + }; +} \ No newline at end of file diff --git a/src/ostd/DataFile.cpp b/src/ostd/DataFile.cpp deleted file mode 100755 index 207ff91..0000000 --- a/src/ostd/DataFile.cpp +++ /dev/null @@ -1,439 +0,0 @@ -#include "DataFile.hpp" -#include "Utils.hpp" -#include - -//TODO: Add all errors - -namespace ostd -{ - DataBlock::DataBlock(void) - { - type = eDataBlockType::Invalid; - name = ""; - value = "null"; - invalidate(); - setTypeName("ox::DataBlock"); - } - - int32_t DataBlock::asInt(void) const - { - if (type != eDataBlockType::Int) - return 0; - return StringEditor(value).toInt(); - } - - float DataBlock::asFloat(void) const - { - if (type != eDataBlockType::Float) - return 0; - return StringEditor(value).toFloat(); - } - - String DataBlock::asString(void) const - { - return StringEditor(value).trim().str(); - } - - std::vector DataBlock::asIntArray(void) const - { - std::vector arr; - StringEditor _value = value; - if (type != eDataBlockType::IntArray || _value.contains("\"")) - { - // ErrorHandler::instance().pushError(Errors::InvalidDataBlockType, "omnia::common::DataBlock::asIntArray(...) -> 1"); - // return arr; - } - if (!_value.trim().startsWith("(") || !_value.trim().endsWith(")")) - { - // ErrorHandler::instance().pushError(Errors::InvalidDataBlockType, "omnia::common::DataBlock::asIntArray(...) -> 2"); - // return arr; - } - _value = _value.substr(1, _value.len() - 1); - auto st = _value.tokenize(","); - while (st.hasNext()) - arr.push_back(StringEditor(st.next()).toInt()); - return arr; - } - - std::vector DataBlock::asStringArray(void) const - { - std::vector arr; - StringEditor _value = value; - if (type != eDataBlockType::StringArray || !_value.contains("\"")) - { - // ErrorHandler::instance().pushError(Errors::InvalidDataBlockType, "omnia::common::DataBlock::asStringArray(...) -> 1"); - // return arr; - } - if (!_value.trim().startsWith("(") || !_value.trim().endsWith(")")) - { - // ErrorHandler::instance().pushError(Errors::InvalidDataBlockType, "omnia::common::DataBlock::asStringArray(...) -> 2"); - // return arr; - } - _value = _value.substr(1, _value.len() - 1); - auto st = _value.tokenize(","); - StringEditor token = ""; - while (st.hasNext()) - { - token = st.next(); - if (!token.startsWith("\"") || !token.endsWith("\"")) - { - // ErrorHandler::instance().pushError(Errors::InvalidDataBlockType, "omnia::common::DataBlock::asStringArray(...) -> 3"); - // continue; - } - token = token.substr(1, token.len() - 1); - arr.push_back(token.str()); - } - return arr; - } - - String DataBlock::asLiteral(void) const - { - if (type != eDataBlockType::Literal) - { - // ErrorHandler::instance().pushError(Errors::InvalidDataBlockType, "omnia::common::DataBlock::asLiteral(...)"); - // return ""; - } - return StringEditor(value).trim().str(); - } - - Color DataBlock::asColor(void) const - { - if (type != eDataBlockType::IntArray) - { - // ErrorHandler::instance().pushError(Errors::InvalidDataBlockType, "omnia::common::DataBlock::asColor(...)"); - // return Color::Transparent; - } - std::vector v = asIntArray(); - if (v.size() != 4) - { - // ErrorHandler::instance().pushError(Errors::InvalidDataBlockValue, "omnia::common::DataBlock::asColor(...): Color-array must contain exactly 4 items."); - // return Color::Transparent; - } - return Color(v[0], v[1], v[2], v[3]); - } - - - - void DataFile::load(String filePath) - { - if (StringEditor(filePath).trim().str() == "") - { - // ErrorHandler::instance().pushError(Errors::InvalidDataFilePath, StringBuilder("in omnia::common::DataFile::load(...); path is empty").get()); - // invalidate(); - return; - } - setValid(true); - setTypeName("ox::DataFile"); - m_dataFilePath = filePath; - std::vector lines; - if (!Utils::readFile(filePath, lines)) - { - // ErrorHandler::instance().pushError(Errors::InvalidDataFilePath, StringBuilder("in omnia::common::DataFile::load(...); path = ").add(filePath).get()); - // invalidate(); - return; - } - m_rawContent = ""; - for (auto& line : lines) - m_rawContent += line + "\n"; - loadDefines(m_rawContent); - String newData = replaceDefines(m_rawContent); - auto st = StringEditor(newData).tokenize("]"); - StringEditor token = ""; - while (st.hasNext()) //Priority round - { - token = st.next(); - if (!token.startsWith("[")) - { - // ErrorHandler::instance().pushError(Errors::InvalidDataFileBlock, "omnia::common::DataFile::load(...); Priority-round; All DataFile blocks must start with a '[' character"); - continue; - } - token = token.substr(1); - token.trim(); - if (token.startsWith("*")) - { - token = token.substr(1); - token.trim(); - if (!token.contains(":")) - continue; - StringEditor inst = token.substr(0, token.indexOf(":")); - inst.trim(); - StringEditor data = token.substr(token.indexOf(":") + 1); - data.trim(); - DFD_LIST paramList; - auto st2 = data.tokenize(";"); - String param = ""; - while (st2.hasNext()) - { - param = st2.next(); - DataBlock p = parseParameter(param); - if (p.isValid()) - paramList.push_back(p); - // else - // ErrorHandler::instance().pushError(Errors::UnableToParseDataBlock, StringBuilder("omnia::common::DataFile::load(...); Priority-round; param=").add(param).add("; inst=").add(inst).get()); - } - onDataBlockRead(inst.toLower().str(), paramList, paramList.size()); - } - } - st.cycle(); - while (st.hasNext()) //Main Round - { - token = st.next(); - if (!token.startsWith("[")) - { - // ErrorHandler::instance().pushError(Errors::InvalidDataFileBlock, "omnia::common::DataFile::load(...); Main-round; All DataFile blocks must start with a '[' character"); - continue; - } - token = token.substr(1); - token.trim(); - if (token.startsWith("$") || token.startsWith("*") || token.startsWith("#") || token.startsWith("@") || token.startsWith("!")) - continue; - else if (token.startsWith(">")) - { - token = token.substr(1); - token.trim(); - std::cout << token << "\n"; - continue; - } - else - { - if (!token.contains(":")) - continue; - StringEditor inst = token.substr(0, token.indexOf(":")); - inst.trim(); - StringEditor data = token.substr(token.indexOf(":") + 1); - data.trim(); - DFD_LIST paramList; - auto st2 = data.tokenize(";"); - String param = ""; - while (st2.hasNext()) - { - param = st2.next(); - DataBlock p = parseParameter(param); - if (p.isValid()) - paramList.push_back(p); - // else - // ErrorHandler::instance().pushError(Errors::UnableToParseDataBlock, StringBuilder("omnia::common::DataFile::load(...); Main-round; param=").add(param).add("; inst=").add(inst).get()); - } - onDataBlockRead(inst.toLower().str(), paramList, paramList.size()); - } - } - } - - void DataFile::addLocal(String name, int32_t value) - { - DataBlock fv; - fv.type = eDataBlockType::Int; - fv.name = name; - fv.value = StringEditor().addi(value).str(); - m_localDefs.push_back(fv); - } - - void DataFile::addLocal(String name, String value, bool literal) - { - DataBlock fv; - fv.type = (literal ? eDataBlockType::Literal : eDataBlockType::String); - fv.name = name; - fv.value = value; - m_localDefs.push_back(fv); - } - - const DataBlock DataFile::getLocal(String name) - { - for (auto& fv : m_localDefs) - { - if (StringEditor(fv.name).trim().str() == StringEditor(name).trim().str()) - return std::as_const(fv); - } - DataBlock fv; - // ErrorHandler::instance().pushError(Errors::LocalDataBlockNotFound, StringBuilder("in omnia::common::DataFile::getLocal(...); name=").add(name).get()); - return std::as_const(fv); - } - - void DataFile::addGlobal(String name, int32_t value) - { - DataBlock fv; - fv.type = eDataBlockType::Int; - fv.name = name; - fv.value = StringEditor().addi(value).str(); - s_globalDefs.push_back(fv); - } - - void DataFile::addGlobal(String name, String value, bool literal) - { - DataBlock fv; - fv.type = (literal ? eDataBlockType::Literal : eDataBlockType::String); - fv.name = name; - fv.value = value; - s_globalDefs.push_back(fv); - } - - const DataBlock DataFile::getGlobal(String name) - { - for (auto& fv : s_globalDefs) - { - if (StringEditor(fv.name).trim().str() == StringEditor(name).trim().str()) - return std::as_const(fv); - } - DataBlock fv; - // ErrorHandler::instance().pushError(Errors::GlobalDataBlockNotFound, StringBuilder("in omnia::common::DataFile::getLocal(...); name=").add(name).get()); - return fv;//std::as_const(fv); - } - - void DataFile::loadDefines(String data) - { - auto st = StringEditor(data).tokenize("]"); - StringEditor token = ""; - while (st.hasNext()) - { - token = st.next(); - if (!token.startsWith("[")) - { - // ErrorHandler::instance().pushError(Errors::InvalidDataFileBlock, "omnia::common::DataFile::loadDefines(...); All DataFile Defines must start with a '[' character"); - continue; - } - token = token.substr(1); - token.trim(); - if (token.startsWith("#")) //Local var - { - if (!token.contains("=")) - { - // ErrorHandler::instance().pushError(Errors::InvalidDataBlockDefineValue, "omnia::common::DataFile::loadDefines(...); Local DataFile Defines must contain an assignment operator and a valid Value"); - continue; - } - String name = ""; - StringEditor value = ""; - name = token.substr(1, token.indexOf("=")); - name = StringEditor(name).trim().str(); - value = token.substr(token.indexOf("=") + 1); - value.trim(); - if (StringEditor(value).startsWith("%")) - { - value = StringEditor(value).substr(1); - value.trim(); - addLocal(name, value.str(), true); - } - else if (!value.startsWith("\"") && !value.endsWith("\"")) - addLocal(name, value.toInt()); - else if (value.startsWith("\"") && value.endsWith("\"")) - { - value = value.substr(1, value.len() - 1); - addLocal(name, value.str()); - } - else - { - // ErrorHandler::instance().pushError(Errors::InvalidDataBlockDefineValue, "omnia::common::DataFile::loadDefines(...); Unknown value type in Local Define assignment"); - continue; - } - } - else if (token.startsWith("@")) //Global var - { - if (!token.contains("=")) - { - // ErrorHandler::instance().pushError(Errors::InvalidDataBlockDefineValue, "omnia::common::DataFile::loadDefines(...); Global DataFile Defines must contain an assignment operator and a valid Value"); - continue; - } - String name = ""; - StringEditor value = ""; - name = token.substr(1, token.indexOf("=")); - name = StringEditor(name).trim().str(); - value = token.substr(token.indexOf("=") + 1); - value.trim(); - if (value.startsWith("%")) - { - value = value.substr(1); - value.trim(); - DataFile::addGlobal(name, value.str(), true); - } - else if (!value.startsWith("\"") && !value.endsWith("\"")) - DataFile::addGlobal(name, value.toInt()); - else if (value.startsWith("\"") && value.endsWith("\"")) - { - value = value.substr(1, value.len() - 1); - DataFile::addGlobal(name, value.str()); - } - else - { - // ErrorHandler::instance().pushError(Errors::InvalidDataBlockDefineValue, "omnia::common::DataFile::loadDefines(...); Unknown value type in Global Define assignment"); - continue; - } - } - } - } - - String DataFile::replaceDefines(String data) - { - StringEditor newData = data; - for (auto& def : m_localDefs) - { - if (def.type == eDataBlockType::String) - newData = newData.replaceAll(def.name, StringEditor("\"").add(def.value).add("\"").str()); - else if (def.type == eDataBlockType::Int) - newData = newData.replaceAll(def.name, def.value); - else if (def.type == eDataBlockType::Literal) - newData = newData.replaceAll(def.name, def.value); - } - for (auto& def : s_globalDefs) - { - if (def.type == eDataBlockType::String) - newData = newData.replaceAll(def.name, StringEditor("\"").add(def.value).add("\"").str()); - else if (def.type == eDataBlockType::Int) - newData = newData.replaceAll(def.name, def.value); - else if (def.type == eDataBlockType::Literal) - newData = newData.replaceAll(def.name, def.value); - } - return newData.str(); - } - - DataBlock DataFile::parseParameter(String _param) - { - DataBlock db; - StringEditor param = _param; - if (!param.contains("=")) - { - // ErrorHandler::instance().pushError(Errors::DataBlockParamAssignMissing, "omnia::common::DataFile::parseParameter(...);"); - return db; - } - param = param.trim(); - String name = ""; - StringEditor value = ""; - name = param.substr(0, param.indexOf("=")); - name = StringEditor(name).trim().str(); - value = param.substr(param.indexOf("=") + 1); - value.trim(); - db.name = StringEditor(name).toLower().str(); - db.value = value.str(); - if (value.startsWith("\"")) - { - if (!value.endsWith("\"")) - { - db.invalidate(); - // ErrorHandler::instance().pushError(Errors::DataBlockUnmatchedDoubleQuote, "omnia::common::DataFile::parseParameter(...);"); - return db; - } - value = value.substr(1, value.len() - 1); - db.type = eDataBlockType::String; - db.value = value.str(); - } - else if (value.startsWith("(")) - { - if (!value.endsWith(")")) - { - db.invalidate(); - // ErrorHandler::instance().pushError(Errors::DataBlockUnmatchedParenth, "omnia::common::DataFile::parseParameter(...);"); - return db; - } - db.type = (value.contains("\"") ? eDataBlockType::StringArray : eDataBlockType::IntArray); - } - else if (value.toLower().startsWith("f")) - { - value = value.substr(1); - value.trim(); - db.value = value.str(); - db.type = eDataBlockType::Float; - } - else - db.type = eDataBlockType::Int; - db.validate(); - return db; - } -} diff --git a/src/ostd/DataFile.hpp b/src/ostd/DataFile.hpp deleted file mode 100755 index 4a20f46..0000000 --- a/src/ostd/DataFile.hpp +++ /dev/null @@ -1,80 +0,0 @@ -#ifndef __DATAFILE_HPP__ -#define __DATAFILE_HPP__ - -#include -#include - -#include - -#define DATABLOCK_TRUE 1 -#define DATABLOCK_FALSE 0 -#define DFD_LIST std::vector - -namespace ostd -{ - enum class eDataBlockType - { - Invalid = 0, - Int, - Float, - String, - IntArray, - StringArray, - Literal - }; - - struct DataBlock : public BaseObject - { - public: - DataBlock(void); - int32_t asInt(void) const; - float asFloat(void) const; - inline bool asBool(void) const { return asInt() == DATABLOCK_TRUE; } - String asString(void) const; - std::vector asIntArray(void) const; - std::vector asStringArray(void) const; - String asLiteral(void) const; - Color asColor(void) const; - - private: - inline DataBlock(bool __invalid) { if (__invalid) invalidate(); } - - public: - eDataBlockType type; - String name; - String value; - }; - - class DataFile : public BaseObject - { - public: - inline DataFile(void) { invalidate(); } - inline DataFile(String filePath) { load(filePath); } - inline virtual ~DataFile(void) = default; - virtual void onDataBlockRead(String instr, DFD_LIST data, int32_t paramCount) = 0; - void load(String filePath); - void addLocal(String name, int32_t value); - void addLocal(String name, String value, bool literal = false); - const DataBlock getLocal(String name); - - static void addGlobal(String name, int32_t value); - static void addGlobal(String name, String value, bool literal = false); - static const DataBlock getGlobal(String name); - - protected: - void loadDefines(String data); - String replaceDefines(String data); - DataBlock parseParameter(String param); - - protected: - String m_dataFilePath; - String m_rawContent; - bool m_hasAutoLoadInfo; - - private: - DFD_LIST m_localDefs; - inline static DFD_LIST s_globalDefs; - }; -} - -#endif diff --git a/src/ostd/Errors.cpp b/src/ostd/Errors.cpp index a44e6ca..ad5ed26 100755 --- a/src/ostd/Errors.cpp +++ b/src/ostd/Errors.cpp @@ -1,5 +1,6 @@ #include "Errors.hpp" #include "Logger.hpp" +#include "String.hpp" namespace ostd { @@ -14,7 +15,7 @@ namespace ostd return *this; } - void RuntimeError::fire(const String& extraMessage, IOutputHandler* outputHandler, BaseObject& userData, int32_t _line_num, const String& _file_name) + void RuntimeError::fire(const String& extraMessage, OutputHandlerBase* outputHandler, BaseObject& userData, int32_t _line_num, const String& _file_name) { if (isInvalid() || m_errGroup == 0x0 || m_errLevel == tErrorLevel::NoError || m_errCode == 0x0) return; String errorMessage = m_message + "\n"; @@ -34,7 +35,7 @@ namespace ostd msgEdit.add("\n"); } msgEdit.add(errorMessage); - IOutputHandler* tmpOutHndl = nullptr; + OutputHandlerBase* tmpOutHndl = nullptr; if (outputHandler != nullptr) { tmpOutHndl = &Logger::getOutputHandler(); diff --git a/src/ostd/Errors.hpp b/src/ostd/Errors.hpp index e49c83e..44e9c9d 100755 --- a/src/ostd/Errors.hpp +++ b/src/ostd/Errors.hpp @@ -3,7 +3,7 @@ #include #include -#include +#include namespace ostd { @@ -22,7 +22,7 @@ namespace ostd inline RuntimeError(uint8_t group, uint64_t code, uint8_t level, const String& msg) { create(group, code, level, msg); } RuntimeError& create(uint8_t group, uint64_t code, uint8_t level, const String& msg); - void fire(const String& extraMessage = "", IOutputHandler* outputHandler = nullptr, BaseObject& userData = BaseObject::InvalidRef(), int32_t _line_num = 0, const String& _file_name = ""); + void fire(const String& extraMessage = "", OutputHandlerBase* outputHandler = nullptr, BaseObject& userData = BaseObject::InvalidRef(), int32_t _line_num = 0, const String& _file_name = ""); private: uint8_t m_errGroup { 0x00 }; diff --git a/src/ostd/File.cpp b/src/ostd/File.cpp index 06817ab..0c5a8cd 100755 --- a/src/ostd/File.cpp +++ b/src/ostd/File.cpp @@ -1,5 +1,7 @@ #include "File.hpp" #include "Utils.hpp" +#include "String.hpp" + #include #include #include diff --git a/src/ostd/Geometry.cpp b/src/ostd/Geometry.cpp index f65e3c2..93c572e 100755 --- a/src/ostd/Geometry.cpp +++ b/src/ostd/Geometry.cpp @@ -1,7 +1,7 @@ #include "Geometry.hpp" #include -#include "Utils.hpp" +#include "String.hpp" namespace ostd { @@ -13,4 +13,4 @@ namespace ostd { return StringEditor("{ ").addf(x).add(", ").addf(y).add(", ").addf(z).add(" }").str(); } -} //namesoace ox +} diff --git a/src/ostd/Geometry.hpp b/src/ostd/Geometry.hpp index 6296c36..8805ea6 100755 --- a/src/ostd/Geometry.hpp +++ b/src/ostd/Geometry.hpp @@ -8,7 +8,7 @@ namespace ostd { - class IOutputHandler; + class OutputHandlerBase; template class Point { @@ -19,6 +19,10 @@ namespace ostd public: inline Point(void) : x(0), y(0) {} inline Point(T xx, T yy) : x(xx), y(yy) {} + + inline bool operator==(const Point& op2 ) const { return (x == op2.x && y == op2.y); } + inline bool operator!=(const Point& op2 ) const { return (x != op2.x || y != op2.y); } + template inline Point(Point copy) { x = (T2)(copy.x); @@ -103,7 +107,7 @@ namespace ostd //===================== Operators ====================== inline bool operator==(const Vec2& op2 ) const { return (x == op2.x && y == op2.y); } - inline bool operator!=(const Vec2& op2 ) const { return (x != op2.x && y != op2.y); } + inline bool operator!=(const Vec2& op2 ) const { return (x != op2.x || y != op2.y); } inline Vec2 operator+ (const Vec2& op2 ) const { return add(op2); } inline Vec2 operator- (const Vec2& op2 ) const { return sub(op2); } inline Vec2 operator+ (const float& op2) const { return add(op2, op2); } @@ -147,7 +151,7 @@ namespace ostd inline Vec2 zx(void) const { return Vec2(z, x); } String toString(void) const; inline bool operator==(const Vec3& op2 ) const { return (x == op2.x && y == op2.y && op2.z == z); } - inline bool operator!=(const Vec3& op2 ) const { return (x != op2.x && y != op2.y && op2.z != z); } + inline bool operator!=(const Vec3& op2 ) const { return (x != op2.x || y != op2.y || op2.z != z); } inline Vec3& operator+=(const Vec3& op2 ) { x += op2.x; y += op2.y; z += op2.z; return *this; } friend std::ostream& operator<<(std::ostream& out, const Vec2& val); @@ -349,6 +353,6 @@ namespace ostd float w; float h; }; -} // namespace ox +} #endif diff --git a/src/ostd/IOHandlers.hpp b/src/ostd/IOHandlers.hpp new file mode 100644 index 0000000..c2665f7 --- /dev/null +++ b/src/ostd/IOHandlers.hpp @@ -0,0 +1,332 @@ +#pragma once + +#include +#include +#include +#include + +namespace ostd +{ + class BaseObject; + class ConsoleColors + { + public: struct tConsoleColor { + String name; + Color fullColor; + bool background; + + inline const tConsoleColor asBackground(void) const { return { name, fullColor, true }; } + inline const tConsoleColor asForeground(void) const { return { name, fullColor, false }; } + + private: inline tConsoleColor(void) = default; + private: inline tConsoleColor(const String& _name, const Color& _color, bool _background) : name(_name), fullColor(_color), background(_background) { } + + friend std::ostream& operator<<(std::ostream&, tConsoleColor const&); + + friend class ConsoleColors; + }; + public: + inline static const tConsoleColor Red { "red", { 255, 0, 0, 255 }, false}; + inline static const tConsoleColor BrightRed { "brightred", { 255, 70, 70, 255 }, false}; + inline static const tConsoleColor Green { "green", { 0, 255, 0, 255 }, false}; + inline static const tConsoleColor BrightGreen { "brightgreen", { 70, 255, 70, 255 }, false}; + inline static const tConsoleColor Blue { "blue", { 0, 255, 0, 255 }, false}; + inline static const tConsoleColor BrightBlue { "brightblue", { 70, 70, 255, 255 }, false}; + inline static const tConsoleColor Magenta { "magenta", { 255, 0, 255, 255 }, false}; + inline static const tConsoleColor BrightMagenta { "brightmagenta", { 255, 120, 255, 255 }, false}; + inline static const tConsoleColor Cyan { "cyan", { 0, 255, 255, 255 }, false}; + inline static const tConsoleColor BrightCyan { "brightcyan", { 170, 120, 255, 255 }, false}; + inline static const tConsoleColor Yellow { "yellow", { 255, 255, 0, 255 }, false}; + inline static const tConsoleColor BrightYellow { "brightyellow", { 255, 255, 170, 255 }, false}; + inline static const tConsoleColor Black { "black", { 0, 0, 0, 255 }, false}; + inline static const tConsoleColor Gray { "darkgray", { 50, 50, 50, 255 }, false}; + inline static const tConsoleColor BrightGray { "brightgray", { 150, 150, 150, 255 }, false}; + inline static const tConsoleColor White { "white", { 255, 255, 255, 255 }, false}; + + inline static const tConsoleColor OnRed { "red", { 255, 0, 0, 255 }, true}; + inline static const tConsoleColor OnBrightRed { "brightred", { 255, 70, 70, 255 }, true}; + inline static const tConsoleColor OnGreen { "green", { 0, 255, 0, 255 }, true}; + inline static const tConsoleColor OnBrightGreen { "brightgreen", { 70, 255, 70, 255 }, true}; + inline static const tConsoleColor OnBlue { "blue", { 0, 255, 0, 255 }, true}; + inline static const tConsoleColor OnBrightBlue { "brightblue", { 70, 70, 255, 255 }, true}; + inline static const tConsoleColor OnMagenta { "magenta", { 255, 0, 255, 255 }, true}; + inline static const tConsoleColor OnBrightMagenta { "brightmagenta", { 255, 120, 255, 255 }, true}; + inline static const tConsoleColor OnCyan { "cyan", { 0, 255, 255, 255 }, true}; + inline static const tConsoleColor OnBrightCyan { "brightcyan", { 170, 120, 255, 255 }, true}; + inline static const tConsoleColor OnYellow { "yellow", { 255, 255, 0, 255 }, true}; + inline static const tConsoleColor OnBrightYellow { "brightyellow", { 255, 255, 170, 255 }, true}; + inline static const tConsoleColor OnBlack { "black", { 0, 0, 0, 255 }, true}; + inline static const tConsoleColor OnGray { "darkgray", { 50, 50, 50, 255 }, true}; + inline static const tConsoleColor OnBrightGray { "brightgray", { 150, 150, 150, 255 }, true}; + inline static const tConsoleColor OnWhite { "white", { 255, 255, 255, 255 }, true}; + + inline static const tConsoleColor getFromName(const StringEditor& name, bool background = false) { + StringEditor edit = name; + edit.toLower().trim(); + if (edit.str() == Red.name) return (background ? OnRed : Red); + if (edit.str() == BrightRed.name) return (background ? OnBrightRed : BrightRed); + if (edit.str() == Green.name) return (background ? OnGreen : Green); + if (edit.str() == BrightGreen.name) return (background ? OnBrightGreen : BrightGreen); + if (edit.str() == Blue.name) return (background ? OnBlue : Blue); + if (edit.str() == BrightBlue.name) return (background ? OnBrightBlue : BrightBlue); + if (edit.str() == Magenta.name) return (background ? OnMagenta : Magenta); + if (edit.str() == BrightMagenta.name) return (background ? OnBrightMagenta : BrightMagenta); + if (edit.str() == Cyan.name) return (background ? OnCyan : Cyan); + if (edit.str() == BrightCyan.name) return (background ? OnBrightCyan : BrightCyan); + if (edit.str() == Yellow.name) return (background ? OnYellow : Yellow); + if (edit.str() == BrightYellow.name) return (background ? OnBrightYellow : BrightYellow); + if (edit.str() == Black.name) return (background ? OnBlack : Black); + if (edit.str() == Gray.name) return (background ? OnGray : Gray); + if (edit.str() == BrightGray.name) return (background ? OnBrightGray : BrightGray); + if (edit.str() == White.name) return (background ? OnWhite : White); + return (background ? OnBlack : Black); + } + inline static bool isConsoleColor(const StringEditor& name) { + StringEditor edit = name; + edit.toLower().trim(); + if (edit.str() == Red.name) return true; + if (edit.str() == BrightRed.name) return true; + if (edit.str() == Green.name) return true; + if (edit.str() == BrightGreen.name) return true; + if (edit.str() == Blue.name) return true; + if (edit.str() == BrightBlue.name) return true; + if (edit.str() == Magenta.name) return true; + if (edit.str() == BrightMagenta.name) return true; + if (edit.str() == Cyan.name) return true; + if (edit.str() == BrightCyan.name) return true; + if (edit.str() == Yellow.name) return true; + if (edit.str() == BrightYellow.name) return true; + if (edit.str() == Black.name) return true; + if (edit.str() == Gray.name) return true; + if (edit.str() == BrightGray.name) return true; + if (edit.str() == White.name) return true; + return false; + } + }; + + class OutputHandlerBase + { + public: + virtual ~OutputHandlerBase(void) = default; + + inline virtual OutputHandlerBase& bg(const Color& color) { return *this; } + inline virtual OutputHandlerBase& bg(const ConsoleColors::tConsoleColor& color) { return *this; } + inline virtual OutputHandlerBase& bg(const StringEditor& color) { return *this; } + inline virtual OutputHandlerBase& fg(const Color& color) { return *this; } + inline virtual OutputHandlerBase& fg(const ConsoleColors::tConsoleColor& color) { return *this; } + inline virtual OutputHandlerBase& fg(const StringEditor& color) { return *this; } + + inline virtual OutputHandlerBase& pChar(char c) { return *this; } + inline virtual OutputHandlerBase& pStyled(const StringEditor& styled) { return *this; } + inline virtual OutputHandlerBase& pStyled(const TextStyleParser::tStyledString& styled) { return *this; } + inline virtual OutputHandlerBase& pStyled(const TextStyleBuilder::IRichStringBase& styled) { return *this; } + inline virtual OutputHandlerBase& pObject(const BaseObject& bo) { return *this; } + + inline virtual OutputHandlerBase& p(const StringEditor& se) { return *this; } + inline virtual OutputHandlerBase& p(uint8_t i) { return *this; } + inline virtual OutputHandlerBase& p(int8_t i) { return *this; } + inline virtual OutputHandlerBase& p(uint16_t i) { return *this; } + inline virtual OutputHandlerBase& p(int16_t i) { return *this; } + inline virtual OutputHandlerBase& p(uint32_t i) { return *this; } + inline virtual OutputHandlerBase& p(int32_t i) { return *this; } + inline virtual OutputHandlerBase& p(uint64_t i) { return *this; } + inline virtual OutputHandlerBase& p(int64_t i) { return *this; } + inline virtual OutputHandlerBase& p(float f, uint8_t precision = 0) { return *this; } + inline virtual OutputHandlerBase& p(double f, uint8_t precision = 0) { return *this; } + + inline virtual OutputHandlerBase& nl(void) { return *this; } + inline virtual OutputHandlerBase& flush(void) { return *this; } + inline virtual OutputHandlerBase& reset(void) { return *this; } + inline virtual OutputHandlerBase& clear(void) { return *this; } + + inline virtual OutputHandlerBase& xy(IPoint position) { return *this; } + inline virtual OutputHandlerBase& xy(int32_t x, int32_t y) { return *this; } + inline virtual OutputHandlerBase& x(int32_t x) { return *this; } + inline virtual OutputHandlerBase& y(int32_t y) { return *this; } + + inline virtual IPoint getCursorPosition(void) { return { 0, 0 }; } + inline virtual void getCursorPosition(int32_t& outX, int32_t& outY) { } + inline virtual int32_t getCursorX(void) { return 0; } + inline virtual int32_t getCursorY(void) { return 0; } + + inline virtual void getConsoleSize(int32_t& outColumns, int32_t& outRows) { } + inline virtual IPoint getConsoleSize(void) { return { 0, 0 }; } + }; + + class ConsoleOutputHandler : public OutputHandlerBase + { + public: + OutputHandlerBase& bg(const ConsoleColors::tConsoleColor& color) override; + OutputHandlerBase& bg(const StringEditor& color) override; + OutputHandlerBase& fg(const ConsoleColors::tConsoleColor& color) override; + OutputHandlerBase& fg(const StringEditor& color) override; + + OutputHandlerBase& pChar(char c) override; + OutputHandlerBase& pStyled(const StringEditor& styled) override; + OutputHandlerBase& pStyled(const TextStyleParser::tStyledString& styled) override; + OutputHandlerBase& pStyled(const TextStyleBuilder::IRichStringBase& styled) override; + OutputHandlerBase& pObject(const BaseObject& bo) override; + + OutputHandlerBase& p(const StringEditor& se) override; + OutputHandlerBase& p(uint8_t i) override; + OutputHandlerBase& p(int8_t i) override; + OutputHandlerBase& p(uint16_t i) override; + OutputHandlerBase& p(int16_t i) override; + OutputHandlerBase& p(uint32_t i) override; + OutputHandlerBase& p(int32_t i) override; + OutputHandlerBase& p(uint64_t i) override; + OutputHandlerBase& p(int64_t i) override; + OutputHandlerBase& p(float f, uint8_t precision = 0) override; + OutputHandlerBase& p(double f, uint8_t precision = 0) override; + + OutputHandlerBase& nl(void) override; + OutputHandlerBase& flush(void) override; + OutputHandlerBase& reset(void) override; + OutputHandlerBase& clear(void) override; + }; + + + namespace legacy + { + struct ConsoleCol + { + inline static constexpr const char* Red = "red"; + inline static constexpr const char* BrightRed = "b-red"; + inline static constexpr const char* OnRed = "o-red"; + inline static constexpr const char* OnBrightRed = "ob-red"; + + inline static constexpr const char* Green = "green"; + inline static constexpr const char* BrightGreen = "b-green"; + inline static constexpr const char* OnGreen = "o-green"; + inline static constexpr const char* OnBrightGreen = "ob-green"; + + inline static constexpr const char* Blue = "blue"; + inline static constexpr const char* BrightBlue = "b-blue"; + inline static constexpr const char* OnBlue = "o-blue"; + inline static constexpr const char* OnBrightBlue = "ob-blue"; + + inline static constexpr const char* Magenta = "magenta"; + inline static constexpr const char* BrightMagenta = "b-magenta"; + inline static constexpr const char* OnMagenta = "o-magenta"; + inline static constexpr const char* OnBrightMagenta = "ob-magenta"; + + inline static constexpr const char* Cyan = "cyan"; + inline static constexpr const char* BrightCyan = "b-cyan"; + inline static constexpr const char* OnCyan = "o-cyan"; + inline static constexpr const char* OnBrightCyan = "ob-cyan"; + + inline static constexpr const char* Yellow = "yellow"; + inline static constexpr const char* BrightYellow = "b-yellow"; + inline static constexpr const char* OnYellow = "o-yellow"; + inline static constexpr const char* OnBrightYellow = "ob-yellow"; + + inline static constexpr const char* Black = "gray"; + inline static constexpr const char* BrightGray = "b-gray"; + inline static constexpr const char* OnBlack = "o-gray"; + inline static constexpr const char* OnBrightGray = "ob-gray"; + + inline static constexpr const char* Gray = "lgray"; + inline static constexpr const char* White = "white"; + inline static constexpr const char* onGray = "o-lgray"; + inline static constexpr const char* OnWhite = "o-white"; + }; + + class IOutputHandler + { + public: + virtual ~IOutputHandler(void) = default; + virtual IOutputHandler& col(String color) = 0; + virtual IOutputHandler& col(const Color& color) = 0; + //virtual IOutputHandler& p(String str) = 0; + virtual IOutputHandler& p(char c) = 0; + virtual IOutputHandler& p(const StringEditor& se) = 0; + //virtual IOutputHandler& p(const BaseObject& bo) = 0; + virtual IOutputHandler& pi(uint8_t i) = 0; + virtual IOutputHandler& pi(int8_t i) = 0; + virtual IOutputHandler& pi(uint16_t i) = 0; + virtual IOutputHandler& pi(int16_t i) = 0; + virtual IOutputHandler& pi(uint32_t i) = 0; + virtual IOutputHandler& pi(int32_t i) = 0; + virtual IOutputHandler& pi(uint64_t i) = 0; + virtual IOutputHandler& pi(int64_t i) = 0; + virtual IOutputHandler& pf(float f, uint8_t precision = 0) = 0; + virtual IOutputHandler& pf(double f, uint8_t precision = 0) = 0; + virtual IOutputHandler& pStyled(const StringEditor& styled) = 0; + virtual IOutputHandler& pStyled(const TextStyleParser::tStyledString& styled) = 0; + virtual IOutputHandler& pStyled(const TextStyleBuilder::IRichStringBase& styled) = 0; + virtual IOutputHandler& nl(void) = 0; + virtual IOutputHandler& flush(void) = 0; + virtual IOutputHandler& reset(void) = 0; + + virtual IOutputHandler& bgcol(const Color& color) = 0; + virtual IOutputHandler& bgcol(String color) = 0; + virtual IOutputHandler& resetColors(void) = 0; + virtual IOutputHandler& clear(void) = 0; + }; + + class ConsoleOutputHandler : public IOutputHandler + { + public: + IOutputHandler& col(String color) override; + IOutputHandler& col(const Color& color) override; + inline IOutputHandler& bgcol(const Color& color) override { return *this; } + inline IOutputHandler& bgcol(String color) override { return *this; } + inline IOutputHandler& resetColors(void) override { return *this; } + //IOutputHandler& p(String str); + IOutputHandler& p(char c) override; + IOutputHandler& p(const StringEditor& se) override; + //IOutputHandler& p(const BaseObject& bo); + IOutputHandler& pi(uint8_t i) override; + IOutputHandler& pi(int8_t i) override; + IOutputHandler& pi(uint16_t i) override; + IOutputHandler& pi(int16_t i) override; + IOutputHandler& pi(uint32_t i) override; + IOutputHandler& pi(int32_t i) override; + IOutputHandler& pi(uint64_t i) override; + IOutputHandler& pi(int64_t i) override; + IOutputHandler& pf(float f, uint8_t precision = 0) override; + IOutputHandler& pf(double f, uint8_t precision = 0) override; + IOutputHandler& pStyled(const StringEditor& styled) override; + IOutputHandler& pStyled(const TextStyleParser::tStyledString& styled) override; + IOutputHandler& pStyled(const TextStyleBuilder::IRichStringBase& styled) override; + IOutputHandler& nl(void) override; + IOutputHandler& flush(void) override; + IOutputHandler& reset(void) override; + IOutputHandler& clear(void) override; + }; + + class BufferedOutputHandler : public IOutputHandler + { + public: + inline IOutputHandler& col(String color) override { return *this; } + inline IOutputHandler& col(const Color& color) override { return *this; } + inline IOutputHandler& bgcol(const Color& color) override { return *this; } + inline IOutputHandler& bgcol(String color) override { return *this; } + inline IOutputHandler& resetColors(void) override { return *this; } + IOutputHandler& p(char c) override; + IOutputHandler& p(const StringEditor& se) override; + IOutputHandler& pi(uint8_t i) override; + IOutputHandler& pi(int8_t i) override; + IOutputHandler& pi(uint16_t i) override; + IOutputHandler& pi(int16_t i) override; + IOutputHandler& pi(uint32_t i) override; + IOutputHandler& pi(int32_t i) override; + IOutputHandler& pi(uint64_t i) override; + IOutputHandler& pi(int64_t i) override; + IOutputHandler& pf(float f, uint8_t precision = 0) override; + IOutputHandler& pf(double f, uint8_t precision = 0) override; + IOutputHandler& pStyled(const StringEditor& styled) override { return *this; }; + inline IOutputHandler& pStyled(const TextStyleParser::tStyledString& styled) override { return *this; } + inline IOutputHandler& pStyled(const TextStyleBuilder::IRichStringBase& styled) override { return *this; }; + IOutputHandler& nl(void) override; + inline IOutputHandler& flush(void) override { return *this; } + inline IOutputHandler& reset(void) override { return *this; } + + inline IOutputHandler& clear(void) override { m_buffer = ""; return *this; } + inline const StringEditor& getBuffer(void) { return m_buffer; } + + private: + StringEditor m_buffer; + }; + } +} \ No newline at end of file diff --git a/src/ostd/Logger.cpp b/src/ostd/Logger.cpp index 089f71c..3341d27 100755 --- a/src/ostd/Logger.cpp +++ b/src/ostd/Logger.cpp @@ -3,12 +3,12 @@ #include #include #include -#include "TermColor.hpp" -#include "Utils.hpp" +#include "vendor/TermColor.hpp" +#include "IOHandlers.hpp" namespace ostd { - IOutputHandler* Logger::m_out = new ConsoleOutputHandler; + OutputHandlerBase* Logger::m_out = new ConsoleOutputHandler; void Logger::__log_output(uint8_t log_level, String message, ...) { @@ -25,22 +25,22 @@ namespace ostd switch (log_level) { case tLogLevel::Fatal: - m_out->col("red"); + m_out->fg(ConsoleColors::Red); break; case tLogLevel::Error: - m_out->col("b-red"); + m_out->fg(ConsoleColors::BrightRed); break; case tLogLevel::Warning: - m_out->col("b-magenta"); + m_out->fg(ConsoleColors::BrightMagenta); break; case tLogLevel::Info: - m_out->col("cyan"); + m_out->fg(ConsoleColors::Cyan); break; case tLogLevel::Debug: - m_out->col("b-blue"); + m_out->fg(ConsoleColors::BrightBlue); break; case tLogLevel::Trace: - m_out->col("green"); + m_out->fg(ConsoleColors::Green); break; } m_out->p(level_str[log_level]).p(buffer).reset().nl(); @@ -51,8 +51,8 @@ namespace ostd delete m_out; } - void Logger::setOutputHandler(IOutputHandler& __destination) + void Logger::setOutputHandler(OutputHandlerBase& __destination) { m_out = &__destination; //TODO: Destroy old (only if still default) } -} //namesoace ox +} diff --git a/src/ostd/Logger.hpp b/src/ostd/Logger.hpp index ea0cc27..b8bf272 100755 --- a/src/ostd/Logger.hpp +++ b/src/ostd/Logger.hpp @@ -15,19 +15,19 @@ namespace ostd inline static const uint8_t Trace = 5; }; - class IOutputHandler; + class OutputHandlerBase; class Logger { public: static void __log_output(uint8_t log_level, String message, ...); - static void setOutputHandler(IOutputHandler& __destination); + static void setOutputHandler(OutputHandlerBase& __destination); static void destroy(void); - static inline IOutputHandler& getOutputHandler(void) { return *m_out; } + static inline OutputHandlerBase& getOutputHandler(void) { return *m_out; } private: - static IOutputHandler* m_out; + static OutputHandlerBase* m_out; }; -} //namesoace ox +} #define OX_LOG_WARN_ENABLED 1 #define OX_LOG_INFO_ENABLED 1 diff --git a/src/ostd/Logic.cpp b/src/ostd/Logic.cpp index 3488806..91ae148 100755 --- a/src/ostd/Logic.cpp +++ b/src/ostd/Logic.cpp @@ -1,5 +1,6 @@ #include "Logic.hpp" #include "Utils.hpp" +#include "String.hpp" #include namespace ostd diff --git a/src/ostd/Logic.hpp b/src/ostd/Logic.hpp index 2ba9838..e5e8dc7 100755 --- a/src/ostd/Logic.hpp +++ b/src/ostd/Logic.hpp @@ -1,23 +1,3 @@ -/** - * @file Logic.hpp - * @author OmniaX-dev (https://github.com/OmniaX-dev) - * @brief The LogicEvaluator class contained in this file, is a simple static utility class - * used to solve logical expressions in boolean algebra. It only has one public method - * 'eval(...)'. This method takes a String as input, representing the logical expression, - * and returns a boolean representing the result of the expression. - * Example of a logical expression: - * 1&(0+(1&1)) - * where 1 and 0 represent respectively true and false, '&' represents the AND operation - * and '+' represents the OR operation. For a more in-depth view of the expression format, - * and a list of all operations allowed, you can visit the official documentation. - * Note: The CommandShell includes a '/solve' command out of the box. This command - * expects a logical expression as it's only parameter, and returns either true or false as - * it's output. This command internally uses the LogicEvaluator class. - * @version 0.1 - * @copyright Copyright (c) 2022 OmniaX-dev - */ - - #ifndef __LOGIC_HPP__ #define __LOGIC_HPP__ diff --git a/src/ostd/OutputHandlers.cpp b/src/ostd/OutputHandlers.cpp index 1089875..c6b201a 100755 --- a/src/ostd/OutputHandlers.cpp +++ b/src/ostd/OutputHandlers.cpp @@ -3,139 +3,167 @@ #include "BaseObject.hpp" #include "Logger.hpp" #include "TextStyleParser.hpp" -#include +#include "IOHandlers.hpp" +#include "String.hpp" + +#include "vendor/TermColor.hpp" #include #include namespace ostd { - IOutputHandler& ConsoleOutputHandler::col(String color) - { - StringEditor cse = color; - cse.toLower().trim(); - if (cse.startsWith("@[") && cse.endsWith("]")) - { - OX_WARN("ox::ConsoleOutputHandler::col(ox::String): RGB Colors not supported for standard console output: %s", cse.c_str()); - return *this; + std::ostream &operator<<(std::ostream &os, ConsoleColors::tConsoleColor const &col) + { + if (col.background) + { + if (col.name == "red") os << termcolor::on_red; + else if (col.name == "brightred") os << termcolor::on_bright_red; + else if (col.name == "green") os << termcolor::on_green; + else if (col.name == "brightgreen") os << termcolor::on_bright_green; + else if (col.name == "blue") os << termcolor::on_blue; + else if (col.name == "brightblue") os << termcolor::on_bright_blue; + else if (col.name == "magenta") os << termcolor::on_magenta; + else if (col.name == "brightmagenta") os << termcolor::on_bright_magenta; + else if (col.name == "cyan") os << termcolor::on_cyan; + else if (col.name == "brightcyan") os << termcolor::on_bright_cyan; + else if (col.name == "yellow") os << termcolor::on_yellow; + else if (col.name == "brightyellow") os << termcolor::on_bright_yellow; + else if (col.name == "black") os << termcolor::on_grey; + else if (col.name == "darkgray") os << termcolor::on_bright_grey; + else if (col.name == "brightgray") os << termcolor::on_white; + else if (col.name == "white") os << termcolor::on_bright_white; + return os; + } + if (col.name == "red") os << termcolor::red; + else if (col.name == "brightred") os << termcolor::bright_red; + else if (col.name == "green") os << termcolor::green; + else if (col.name == "brightgreen") os << termcolor::bright_green; + else if (col.name == "blue") os << termcolor::blue; + else if (col.name == "brightblue") os << termcolor::bright_blue; + else if (col.name == "magenta") os << termcolor::magenta; + else if (col.name == "brightmagenta") os << termcolor::bright_magenta; + else if (col.name == "cyan") os << termcolor::cyan; + else if (col.name == "brightcyan") os << termcolor::bright_cyan; + else if (col.name == "yellow") os << termcolor::yellow; + else if (col.name == "brightyellow") os << termcolor::bright_yellow; + else if (col.name == "black") os << termcolor::grey; + else if (col.name == "darkgray") os << termcolor::bright_grey; + else if (col.name == "brightgray") os << termcolor::white; + else if (col.name == "white") os << termcolor::bright_white; + return os; } - //RED - if (cse.str() == ConsoleCol::Red) std::cout << termcolor::red; - else if (cse.str() == ConsoleCol::BrightRed) std::cout << termcolor::bright_red; - else if (cse.str() == ConsoleCol::OnRed) std::cout << termcolor::on_red; - else if (cse.str() == ConsoleCol::OnBrightRed) std::cout << termcolor::on_bright_red; - //GREEN - else if (cse.str() == ConsoleCol::Green) std::cout << termcolor::green; - else if (cse.str() == ConsoleCol::BrightGreen) std::cout << termcolor::bright_green; - else if (cse.str() == ConsoleCol::OnGreen) std::cout << termcolor::on_green; - else if (cse.str() == ConsoleCol::OnBrightGreen) std::cout << termcolor::on_bright_green; - //BLUE - else if (cse.str() == ConsoleCol::Blue) std::cout << termcolor::blue; - else if (cse.str() == ConsoleCol::BrightBlue) std::cout << termcolor::bright_blue; - else if (cse.str() == ConsoleCol::OnBlue) std::cout << termcolor::on_blue; - else if (cse.str() == ConsoleCol::OnBrightBlue) std::cout << termcolor::on_bright_blue; - //MAGENTA - else if (cse.str() == ConsoleCol::Magenta) std::cout << termcolor::magenta; - else if (cse.str() == ConsoleCol::BrightMagenta) std::cout << termcolor::bright_magenta; - else if (cse.str() == ConsoleCol::OnMagenta) std::cout << termcolor::on_magenta; - else if (cse.str() == ConsoleCol::OnBrightMagenta) std::cout << termcolor::on_bright_magenta; - //CYAN - else if (cse.str() == ConsoleCol::Cyan || cse.str() == "aqua") std::cout << termcolor::cyan; - else if (cse.str() == ConsoleCol::BrightCyan) std::cout << termcolor::bright_cyan; - else if (cse.str() == ConsoleCol::OnCyan || cse.str() == "o-aqua") std::cout << termcolor::on_cyan; - else if (cse.str() == ConsoleCol::OnBrightCyan) std::cout << termcolor::on_bright_cyan; - //YELLOW - else if (cse.str() == ConsoleCol::Yellow) std::cout << termcolor::yellow; - else if (cse.str() == ConsoleCol::BrightYellow) std::cout << termcolor::bright_yellow; - else if (cse.str() == ConsoleCol::OnYellow) std::cout << termcolor::on_yellow; - else if (cse.str() == ConsoleCol::OnBrightYellow) std::cout << termcolor::on_bright_yellow; - //GRAY - else if (cse.str() == ConsoleCol::Black || cse.str() == "black") std::cout << termcolor::grey; - else if (cse.str() == ConsoleCol::BrightGray) std::cout << termcolor::bright_grey; - else if (cse.str() == ConsoleCol::OnBlack || cse.str() == "o-black") std::cout << termcolor::on_grey; - else if (cse.str() == ConsoleCol::OnBrightGray) std::cout << termcolor::on_bright_grey; - //WHITE - else if (cse.str() == ConsoleCol::Gray) std::cout << termcolor::white; - else if (cse.str() == ConsoleCol::White || cse.str() == "b-lgray") std::cout << termcolor::bright_white; - else if (cse.str() == ConsoleCol::onGray) std::cout << termcolor::on_white; - else if (cse.str() == ConsoleCol::OnWhite || cse.str() == "o-white") std::cout << termcolor::on_bright_white; - else - OX_WARN("ox::ConsoleOutputHandler::col(ox::String): Unknown color string: %s", cse.c_str()); + + + OutputHandlerBase& ConsoleOutputHandler::bg(const ConsoleColors::tConsoleColor& color) + { + std::cout << color.asBackground(); return *this; } - - IOutputHandler& ConsoleOutputHandler::col(const Color& color) + + OutputHandlerBase& ConsoleOutputHandler::bg(const StringEditor& color) { - StringEditor cse = "@["; - cse.addi(color.r).add(", "); - cse.addi(color.g).add(", "); - cse.addi(color.b).add(", "); - cse.addi(color.a).add("]"); - return col(cse.str()); + std::cout << ConsoleColors::getFromName(color, true); + return *this; } - IOutputHandler& ConsoleOutputHandler::p(char c) + OutputHandlerBase& ConsoleOutputHandler::fg(const ConsoleColors::tConsoleColor& color) + { + std::cout << color.asForeground(); + return *this; + } + + OutputHandlerBase& ConsoleOutputHandler::fg(const StringEditor& color) + { + std::cout << ConsoleColors::getFromName(color, false); + return *this; + } + + OutputHandlerBase& ConsoleOutputHandler::pChar(char c) { std::cout << (char)c; return *this; } - IOutputHandler& ConsoleOutputHandler::p(const StringEditor& se) + OutputHandlerBase& ConsoleOutputHandler::pStyled(const StringEditor& styled) + { + return pStyled(TextStyleParser::parse(styled.str())); + } + + OutputHandlerBase& ConsoleOutputHandler::pStyled(const TextStyleParser::tStyledString& styled) + { + std::cout << styled; + return *this; + } + + OutputHandlerBase& ConsoleOutputHandler::pStyled(const TextStyleBuilder::IRichStringBase& styled) + { + std::cout << styled; + return *this; + } + + OutputHandlerBase& ConsoleOutputHandler::pObject(const BaseObject& bo) + { + std::cout << bo; + return *this; + } + + OutputHandlerBase& ConsoleOutputHandler::p(const StringEditor& se) { std::cout << se; return *this; } - IOutputHandler& ConsoleOutputHandler::pi(uint8_t i) + OutputHandlerBase& ConsoleOutputHandler::p(uint8_t i) { - std::cout << (int64_t)i; + std::cout << (uint8_t)i; return *this; } - IOutputHandler& ConsoleOutputHandler::pi(int8_t i) + OutputHandlerBase& ConsoleOutputHandler::p(int8_t i) { - std::cout << (int64_t)i; + std::cout << (int8_t)i; return *this; } - IOutputHandler& ConsoleOutputHandler::pi(uint16_t i) + OutputHandlerBase& ConsoleOutputHandler::p(uint16_t i) { - std::cout << (int64_t)i; + std::cout << (uint16_t)i; return *this; } - IOutputHandler& ConsoleOutputHandler::pi(int16_t i) + OutputHandlerBase& ConsoleOutputHandler::p(int16_t i) { - std::cout << (int64_t)i; + std::cout << (int16_t)i; return *this; } - IOutputHandler& ConsoleOutputHandler::pi(uint32_t i) + OutputHandlerBase& ConsoleOutputHandler::p(uint32_t i) { - std::cout << (int64_t)i; + std::cout << (uint32_t)i; return *this; } - IOutputHandler& ConsoleOutputHandler::pi(int32_t i) + OutputHandlerBase& ConsoleOutputHandler::p(int32_t i) { - std::cout << (int64_t)i; + std::cout << (int32_t)i; return *this; } - IOutputHandler& ConsoleOutputHandler::pi(uint64_t i) + OutputHandlerBase& ConsoleOutputHandler::p(uint64_t i) { std::cout << (uint64_t)i; return *this; } - IOutputHandler& ConsoleOutputHandler::pi(int64_t i) + OutputHandlerBase& ConsoleOutputHandler::p(int64_t i) { std::cout << (int64_t)i; return *this; } - IOutputHandler& ConsoleOutputHandler::pf(float f, uint8_t precision) + OutputHandlerBase& ConsoleOutputHandler::p(float f, uint8_t precision) { if (precision == 0) { @@ -150,7 +178,7 @@ namespace ostd return *this; } - IOutputHandler& ConsoleOutputHandler::pf(double f, uint8_t precision) + OutputHandlerBase& ConsoleOutputHandler::p(double f, uint8_t precision) { if (precision == 0) { @@ -164,43 +192,26 @@ namespace ostd } return *this; } - - IOutputHandler& ConsoleOutputHandler::pStyled(const StringEditor& styled) - { - return pStyled(TextStyleParser::parse(styled.str())); - } - - IOutputHandler& ConsoleOutputHandler::pStyled(const TextStyleParser::tStyledString& styled) - { - std::cout << styled; - return *this; - } - - IOutputHandler& ConsoleOutputHandler::pStyled(const TextStyleBuilder::IRichStringBase& styled) - { - std::cout << styled.getStyledString(); - return *this; - } - IOutputHandler& ConsoleOutputHandler::nl(void) + OutputHandlerBase& ConsoleOutputHandler::nl(void) { std::cout << "\n"; return *this; } - IOutputHandler& ConsoleOutputHandler::flush(void) + OutputHandlerBase& ConsoleOutputHandler::flush(void) { std::cout << std::endl; return *this; } - IOutputHandler& ConsoleOutputHandler::reset(void) + OutputHandlerBase& ConsoleOutputHandler::reset(void) { std::cout << termcolor::reset; return *this; } - IOutputHandler& ConsoleOutputHandler::clear(void) + OutputHandlerBase& ConsoleOutputHandler::clear(void) { Utils::clearConsole(); return *this; @@ -210,82 +221,286 @@ namespace ostd - IOutputHandler& BufferedOutputHandler::p(char c) + namespace legacy { - m_buffer.add(c); - return *this; + IOutputHandler& ConsoleOutputHandler::col(String color) + { + StringEditor cse = color; + cse.toLower().trim(); + if (cse.startsWith("@[") && cse.endsWith("]")) + { + OX_WARN("ox::ConsoleOutputHandler::col(ox::String): RGB Colors not supported for standard console output: %s", cse.c_str()); + return *this; + } + + //RED + if (cse.str() == ConsoleCol::Red) std::cout << termcolor::red; + else if (cse.str() == ConsoleCol::BrightRed) std::cout << termcolor::bright_red; + else if (cse.str() == ConsoleCol::OnRed) std::cout << termcolor::on_red; + else if (cse.str() == ConsoleCol::OnBrightRed) std::cout << termcolor::on_bright_red; + //GREEN + else if (cse.str() == ConsoleCol::Green) std::cout << termcolor::green; + else if (cse.str() == ConsoleCol::BrightGreen) std::cout << termcolor::bright_green; + else if (cse.str() == ConsoleCol::OnGreen) std::cout << termcolor::on_green; + else if (cse.str() == ConsoleCol::OnBrightGreen) std::cout << termcolor::on_bright_green; + //BLUE + else if (cse.str() == ConsoleCol::Blue) std::cout << termcolor::blue; + else if (cse.str() == ConsoleCol::BrightBlue) std::cout << termcolor::bright_blue; + else if (cse.str() == ConsoleCol::OnBlue) std::cout << termcolor::on_blue; + else if (cse.str() == ConsoleCol::OnBrightBlue) std::cout << termcolor::on_bright_blue; + //MAGENTA + else if (cse.str() == ConsoleCol::Magenta) std::cout << termcolor::magenta; + else if (cse.str() == ConsoleCol::BrightMagenta) std::cout << termcolor::bright_magenta; + else if (cse.str() == ConsoleCol::OnMagenta) std::cout << termcolor::on_magenta; + else if (cse.str() == ConsoleCol::OnBrightMagenta) std::cout << termcolor::on_bright_magenta; + //CYAN + else if (cse.str() == ConsoleCol::Cyan || cse.str() == "aqua") std::cout << termcolor::cyan; + else if (cse.str() == ConsoleCol::BrightCyan) std::cout << termcolor::bright_cyan; + else if (cse.str() == ConsoleCol::OnCyan || cse.str() == "o-aqua") std::cout << termcolor::on_cyan; + else if (cse.str() == ConsoleCol::OnBrightCyan) std::cout << termcolor::on_bright_cyan; + //YELLOW + else if (cse.str() == ConsoleCol::Yellow) std::cout << termcolor::yellow; + else if (cse.str() == ConsoleCol::BrightYellow) std::cout << termcolor::bright_yellow; + else if (cse.str() == ConsoleCol::OnYellow) std::cout << termcolor::on_yellow; + else if (cse.str() == ConsoleCol::OnBrightYellow) std::cout << termcolor::on_bright_yellow; + //GRAY + else if (cse.str() == ConsoleCol::Black || cse.str() == "black") std::cout << termcolor::grey; + else if (cse.str() == ConsoleCol::BrightGray) std::cout << termcolor::bright_grey; + else if (cse.str() == ConsoleCol::OnBlack || cse.str() == "o-black") std::cout << termcolor::on_grey; + else if (cse.str() == ConsoleCol::OnBrightGray) std::cout << termcolor::on_bright_grey; + //WHITE + else if (cse.str() == ConsoleCol::Gray) std::cout << termcolor::white; + else if (cse.str() == ConsoleCol::White || cse.str() == "b-lgray") std::cout << termcolor::bright_white; + else if (cse.str() == ConsoleCol::onGray) std::cout << termcolor::on_white; + else if (cse.str() == ConsoleCol::OnWhite || cse.str() == "o-white") std::cout << termcolor::on_bright_white; + else + OX_WARN("ox::ConsoleOutputHandler::col(ox::String): Unknown color string: %s", cse.c_str()); + return *this; + } + + IOutputHandler& ConsoleOutputHandler::col(const Color& color) + { + StringEditor cse = "@["; + cse.addi(color.r).add(", "); + cse.addi(color.g).add(", "); + cse.addi(color.b).add(", "); + cse.addi(color.a).add("]"); + return col(cse.str()); + } + + IOutputHandler& ConsoleOutputHandler::p(char c) + { + std::cout << (char)c; + return *this; + } + + IOutputHandler& ConsoleOutputHandler::p(const StringEditor& se) + { + std::cout << se; + return *this; + } + + IOutputHandler& ConsoleOutputHandler::pi(uint8_t i) + { + std::cout << (int64_t)i; + return *this; + } + + IOutputHandler& ConsoleOutputHandler::pi(int8_t i) + { + std::cout << (int64_t)i; + return *this; + } + + IOutputHandler& ConsoleOutputHandler::pi(uint16_t i) + { + std::cout << (int64_t)i; + return *this; + } + + IOutputHandler& ConsoleOutputHandler::pi(int16_t i) + { + std::cout << (int64_t)i; + return *this; + } + + IOutputHandler& ConsoleOutputHandler::pi(uint32_t i) + { + std::cout << (int64_t)i; + return *this; + } + + IOutputHandler& ConsoleOutputHandler::pi(int32_t i) + { + std::cout << (int64_t)i; + return *this; + } + + IOutputHandler& ConsoleOutputHandler::pi(uint64_t i) + { + std::cout << (uint64_t)i; + return *this; + } + + IOutputHandler& ConsoleOutputHandler::pi(int64_t i) + { + std::cout << (int64_t)i; + return *this; + } + + IOutputHandler& ConsoleOutputHandler::pf(float f, uint8_t precision) + { + if (precision == 0) + { + std::cout << f; + } + else + { + std::ios cout_state(nullptr); + std::cout << std::fixed << std::setprecision(precision) << f; + std::cout.copyfmt(cout_state); + } + return *this; + } + + IOutputHandler& ConsoleOutputHandler::pf(double f, uint8_t precision) + { + if (precision == 0) + { + std::cout << f; + } + else + { + std::ios cout_state(nullptr); + std::cout << std::fixed << std::setprecision(precision) << f; + std::cout.copyfmt(cout_state); + } + return *this; + } + + IOutputHandler& ConsoleOutputHandler::pStyled(const StringEditor& styled) + { + return pStyled(TextStyleParser::parse(styled.str())); + } + + IOutputHandler& ConsoleOutputHandler::pStyled(const TextStyleParser::tStyledString& styled) + { + std::cout << styled; + return *this; + } + + IOutputHandler& ConsoleOutputHandler::pStyled(const TextStyleBuilder::IRichStringBase& styled) + { + std::cout << styled.getStyledString(); + return *this; + } + + IOutputHandler& ConsoleOutputHandler::nl(void) + { + std::cout << "\n"; + return *this; + } + + IOutputHandler& ConsoleOutputHandler::flush(void) + { + std::cout << std::endl; + return *this; + } + + IOutputHandler& ConsoleOutputHandler::reset(void) + { + std::cout << termcolor::reset; + return *this; + } + + IOutputHandler& ConsoleOutputHandler::clear(void) + { + Utils::clearConsole(); + return *this; + } + + + + + + IOutputHandler& BufferedOutputHandler::p(char c) + { + m_buffer.add(c); + return *this; + } + + IOutputHandler& BufferedOutputHandler::p(const StringEditor& se) + { + m_buffer.add(se.str()); + return *this; + } + + IOutputHandler& BufferedOutputHandler::pi(uint8_t i) + { + m_buffer.addi(i); + return *this; + } + + IOutputHandler& BufferedOutputHandler::pi(int8_t i) + { + m_buffer.addi(i); + return *this; + } + + IOutputHandler& BufferedOutputHandler::pi(uint16_t i) + { + m_buffer.addi(i); + return *this; + } + + IOutputHandler& BufferedOutputHandler::pi(int16_t i) + { + m_buffer.addi(i); + return *this; + } + + IOutputHandler& BufferedOutputHandler::pi(uint32_t i) + { + m_buffer.addi(i); + return *this; + } + + IOutputHandler& BufferedOutputHandler::pi(int32_t i) + { + m_buffer.addi(i); + return *this; + } + + IOutputHandler& BufferedOutputHandler::pi(uint64_t i) + { + m_buffer.addi(i); + return *this; + } + + IOutputHandler& BufferedOutputHandler::pi(int64_t i) + { + m_buffer.addi(i); + return *this; + } + + IOutputHandler& BufferedOutputHandler::pf(float f, uint8_t precision) + { + m_buffer.addf(f); + return *this; + } + + IOutputHandler& BufferedOutputHandler::pf(double f, uint8_t precision) + { + m_buffer.addf(f); + return *this; + } + + IOutputHandler& BufferedOutputHandler::nl(void) + { + m_buffer.add("\n"); + return *this; + } + } - - IOutputHandler& BufferedOutputHandler::p(const StringEditor& se) - { - m_buffer.add(se.str()); - return *this; - } - - IOutputHandler& BufferedOutputHandler::pi(uint8_t i) - { - m_buffer.addi(i); - return *this; - } - - IOutputHandler& BufferedOutputHandler::pi(int8_t i) - { - m_buffer.addi(i); - return *this; - } - - IOutputHandler& BufferedOutputHandler::pi(uint16_t i) - { - m_buffer.addi(i); - return *this; - } - - IOutputHandler& BufferedOutputHandler::pi(int16_t i) - { - m_buffer.addi(i); - return *this; - } - - IOutputHandler& BufferedOutputHandler::pi(uint32_t i) - { - m_buffer.addi(i); - return *this; - } - - IOutputHandler& BufferedOutputHandler::pi(int32_t i) - { - m_buffer.addi(i); - return *this; - } - - IOutputHandler& BufferedOutputHandler::pi(uint64_t i) - { - m_buffer.addi(i); - return *this; - } - - IOutputHandler& BufferedOutputHandler::pi(int64_t i) - { - m_buffer.addi(i); - return *this; - } - - IOutputHandler& BufferedOutputHandler::pf(float f, uint8_t precision) - { - m_buffer.addf(f); - return *this; - } - - IOutputHandler& BufferedOutputHandler::pf(double f, uint8_t precision) - { - m_buffer.addf(f); - return *this; - } - - IOutputHandler& BufferedOutputHandler::nl(void) - { - m_buffer.add("\n"); - return *this; - } - + } diff --git a/src/ostd/PathFinder.cpp b/src/ostd/PathFinder.cpp index 9591399..a059d79 100755 --- a/src/ostd/PathFinder.cpp +++ b/src/ostd/PathFinder.cpp @@ -221,4 +221,4 @@ namespace ostd } return hh; } -} // namespace ox +} diff --git a/src/ostd/PathFinder.hpp b/src/ostd/PathFinder.hpp index fc6875d..ca274c6 100755 --- a/src/ostd/PathFinder.hpp +++ b/src/ostd/PathFinder.hpp @@ -78,6 +78,6 @@ namespace ostd bool m_initialized; }; -} // namespace ox +} #endif diff --git a/src/ostd/QuadTree.cpp b/src/ostd/QuadTree.cpp index f738c69..8b08745 100755 --- a/src/ostd/QuadTree.cpp +++ b/src/ostd/QuadTree.cpp @@ -106,4 +106,4 @@ namespace ostd m_se->query(range, list); } } -} // namespace ox +} diff --git a/src/ostd/QuadTree.hpp b/src/ostd/QuadTree.hpp index 1f4d057..2686609 100755 --- a/src/ostd/QuadTree.hpp +++ b/src/ostd/QuadTree.hpp @@ -42,6 +42,6 @@ namespace ostd un_ptr(QuadTree) m_ne; un_ptr(QuadTree) m_se; }; -} // namespace ox +} #endif diff --git a/src/ostd/Random.hpp b/src/ostd/Random.hpp index 335ca56..d4ee341 100755 --- a/src/ostd/Random.hpp +++ b/src/ostd/Random.hpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include namespace ostd { diff --git a/src/ostd/Serial.cpp b/src/ostd/Serial.cpp index 55b4b42..1ddc4e9 100755 --- a/src/ostd/Serial.cpp +++ b/src/ostd/Serial.cpp @@ -1,5 +1,5 @@ #include "Serial.hpp" -#include "TermColor.hpp" +#include "vendor/TermColor.hpp" #include "Utils.hpp" namespace ostd @@ -441,7 +441,7 @@ namespace ostd return true; } - void SerialIO::print(StreamIndex start, IOutputHandler& out) + void SerialIO::print(StreamIndex start, OutputHandlerBase& out) { uint32_t line_len = 32; uint64_t power = 1; diff --git a/src/ostd/Serial.hpp b/src/ostd/Serial.hpp index 1a749d3..d832a3b 100755 --- a/src/ostd/Serial.hpp +++ b/src/ostd/Serial.hpp @@ -8,7 +8,7 @@ namespace ostd { - class IOutputHandler; + class OutputHandlerBase; namespace serial { @@ -50,7 +50,7 @@ namespace ostd inline uint64_t size(void) { return m_data.size(); } inline ByteStream& getData(void) { return m_data; } - void print(StreamIndex start, IOutputHandler& out); + void print(StreamIndex start, OutputHandlerBase& out); bool saveToFile(const String& filePath); inline uint8_t getEndianness(void) const { return m_endianness; } diff --git a/src/ostd/ShuntingYard.cpp b/src/ostd/ShuntingYard.cpp index ec148c0..2a2b924 100644 --- a/src/ostd/ShuntingYard.cpp +++ b/src/ostd/ShuntingYard.cpp @@ -16,7 +16,8 @@ #include #include -#include +#include "String.hpp" +#include "Utils.hpp" namespace ostd { diff --git a/src/ostd/SineWave.cpp b/src/ostd/SineWave.cpp index 4a8e316..7bfcce9 100755 --- a/src/ostd/SineWave.cpp +++ b/src/ostd/SineWave.cpp @@ -11,4 +11,4 @@ namespace ostd y += wave.evaluate(x); return y; } -} // namespace ox +} diff --git a/src/ostd/SineWave.hpp b/src/ostd/SineWave.hpp index 055ff11..41c0512 100755 --- a/src/ostd/SineWave.hpp +++ b/src/ostd/SineWave.hpp @@ -34,6 +34,6 @@ namespace ostd std::vector waves; std::vector additiveWaves; }; -} // namespace ox +} #endif diff --git a/src/ostd/String.hpp b/src/ostd/String.hpp new file mode 100644 index 0000000..0bc0dda --- /dev/null +++ b/src/ostd/String.hpp @@ -0,0 +1,107 @@ +#pragma once + +#include + +namespace ostd +{ + class StringEditor + { + public: class Tokens + { + public: + inline bool hasNext(void) { return m_tokens.size() > 0 && m_current_index < m_tokens.size(); } + inline bool hasPrevious(void) { return m_tokens.size() > 0 && m_current_index > 0; } + String next(void); + String previous(void); + inline uint32_t count(void) { return m_tokens.size(); } + inline std::vector getRawData(void) { return m_tokens; } + inline uint32_t getCurrentIndex(void) { return m_current_index; } + inline void cycle(void) { m_current_index = 0; } + + inline auto begin(void) { return m_tokens.begin(); } + inline auto end(void) { return m_tokens.end(); } + inline auto cbegin(void) const { return m_tokens.begin(); } + inline auto cend(void) const { return m_tokens.end(); } + inline auto begin(void) const { return m_tokens.begin(); } + inline auto end(void) const { return m_tokens.end(); } + + private: + inline Tokens(void) { m_current_index = 0; } + + private: + std::vector m_tokens; + uint32_t m_current_index; + + public: + inline static const String END = "%END%"; + + friend class StringEditor; + }; + + public: + inline StringEditor(void) { m_data = ""; } + inline StringEditor(const String& str) { m_data = str; } + inline StringEditor(const char* str) { m_data = str; } + inline String str(void) const { return m_data; } + inline uint32_t len(void) const { return m_data.length(); } + inline StringEditor& clr(void) { m_data = ""; return *this; } + inline const char* c_str(void) const { return m_data.c_str(); } + inline char at(uint32_t index) const { return m_data[index]; } + inline char operator[](uint32_t index) const { return m_data[index]; } + inline StringEditor& set(String str) { m_data = str; return *this; } + + StringEditor& ltrim(void); + StringEditor& rtrim(void); + StringEditor& trim(void); + + StringEditor& toLower(void); + StringEditor& toUpper(void); + + StringEditor& addPadding(char c = ' ', uint32_t count = 10); + //StringEditor& add(const StringEditor& se); + StringEditor& add(String str); + StringEditor& add(char c); + StringEditor& addi(uint8_t i); + StringEditor& addi(int8_t i); + StringEditor& addi(uint16_t i); + StringEditor& addi(int16_t i); + StringEditor& addi(uint32_t i); + StringEditor& addi(int32_t i); + StringEditor& addi(uint64_t i); + StringEditor& addi(int64_t i); + StringEditor& addf(float f); + StringEditor& addf(double f); + + StringEditor& reverse(void); + StringEditor& replaceAll(String what, String with); + StringEditor& replaceFirst(String what, String with); + StringEditor& regexReplace(String regex_pattern, String replace_with, bool case_insensitive = false); + + StringEditor& put(uint32_t index, char c); + + int64_t toInt(void); + float toFloat(void); + double toDouble(void); + bool isNumeric(bool decimal = false); + bool contains(char c); + bool contains(String str); + bool startsWith(String str); + bool endsWith(String str); + String getReverse(void); + + uint32_t count(String str); + + int32_t indexOf(char c, uint32_t start = 0); + int32_t indexOf(String str, uint32_t start = 0); + int32_t lastIndexOf(char c); + int32_t lastIndexOf(String str); + + String substr(uint32_t start, int32_t end = -1); + Tokens tokenize(String delimiter = " ", bool trim_tokens = true, bool allow_white_space_only_tokens = false); + + friend std::ostream& operator<<(std::ostream& out, const StringEditor& val); + + private: + String m_data; + }; +} \ No newline at end of file diff --git a/src/ostd/StringEditor.cpp b/src/ostd/StringEditor.cpp index b6f8a32..26cd93e 100755 --- a/src/ostd/StringEditor.cpp +++ b/src/ostd/StringEditor.cpp @@ -1,4 +1,5 @@ #include "Utils.hpp" +#include "String.hpp" #include #include #include @@ -325,4 +326,4 @@ namespace ostd return out; } -} // namespace ox +} diff --git a/src/ostd/TextStyleParser.cpp b/src/ostd/TextStyleParser.cpp index de6f5de..6bfe1e6 100644 --- a/src/ostd/TextStyleParser.cpp +++ b/src/ostd/TextStyleParser.cpp @@ -1,5 +1,6 @@ #include "TextStyleParser.hpp" #include "Utils.hpp" +#include "IOHandlers.hpp" namespace ostd { @@ -8,7 +9,7 @@ namespace ostd if (!str.validate()) return os; ostd::ConsoleOutputHandler out; for (int32_t i = 0; i < str.text.length(); i++) - out.col(str.backgroundColors[i].consoleColor).col(str.foregroundColors[i].consoleColor).p(str.text[i]); + out.bg(str.backgroundColors[i].consoleColor).fg(str.foregroundColors[i].consoleColor).pChar(str.text[i]); out.reset(); return os; } @@ -28,31 +29,11 @@ namespace ostd return os << rstr.getStyledString(); } - void TextStyleParser::tColor::convertToBackground(void) - { - StringEditor edit(consoleColor); - if (edit.startsWith("o-") || edit.startsWith("ob-")) return; - if (edit.startsWith("b-")) - consoleColor = "o" + edit.str(); - else - consoleColor = "o-" + edit.str(); - } - - void TextStyleParser::tColor::convertToForeground(void) - { - StringEditor edit(consoleColor); - if (!edit.startsWith("o-") && !edit.startsWith("ob-")) return; - if (edit.startsWith("ob-")) - consoleColor = edit.substr(3); - else - consoleColor = edit.substr(2); - } - void TextStyleParser::tStyledString::add(const String& str, tColor background, tColor foreground) { text += str; - background.convertToBackground(); - foreground.convertToForeground(); + background.background = true; + foreground.background = false; for (int32_t i = 0; i < str.length(); i++) { backgroundColors.push_back(background); @@ -67,7 +48,7 @@ namespace ostd TextStyleParser::tStyledString TextStyleParser::parse(const StringEditor& styledString) { - return parse(styledString, ConsoleColors["black"], ConsoleColors["white"]); + return parse(styledString, convertColor("black"), convertColor("white")); } TextStyleParser::tStyledString TextStyleParser::parse(const StringEditor& styledString, tColor defaultBackgorundColor, tColor defaultForegroundColor) @@ -76,8 +57,8 @@ namespace ostd bool insideBlock = false; bool validBlockStart = false; int32_t countBlockStart = 0; - defaultBackgorundColor.convertToBackground(); - defaultForegroundColor.convertToForeground(); + defaultBackgorundColor.background = true; + defaultForegroundColor.background = false; s_defaultBackgroundColor = defaultBackgorundColor; s_defaultForegroundColor = defaultForegroundColor; tColor fgcol = defaultForegroundColor; @@ -138,6 +119,22 @@ namespace ostd return rstring; } + TextStyleParser::tColor TextStyleParser::convertColor(const StringEditor& name) + { + StringEditor colorStrEditor = name; + colorStrEditor.trim().toLower(); + if (ConsoleColors::isConsoleColor(colorStrEditor)) + { + auto& cc = ConsoleColors::getFromName(colorStrEditor); + return { cc.fullColor, cc.name, cc.background }; + } + tColor col; + col.consoleColor = "black"; + col.fullColor.set(colorStrEditor.str()); + col.background = false; + return col; + } + bool TextStyleParser::test_for_block(const String& block_part) { if (block_part.length() < 3) return false; @@ -175,14 +172,12 @@ namespace ostd value.trim(); if (name.str() == "background") { - auto col = parse_color(value.str()); - col.convertToBackground(); + auto col = convertColor(value.str()); outBackgroundColor = col; } else if (name.str() == "foreground") { - auto col = parse_color(value.str()); - col.convertToForeground(); + auto col = convertColor(value.str()); outForegroundColor = col; } else continue; //TODO: Error, unknown style parameter @@ -191,42 +186,27 @@ namespace ostd return eBlockParserReturnValue::ValidBlock; } - const TextStyleParser::tColor TextStyleParser::parse_color(const String& colorStr) - { - StringEditor colorStrEditor = colorStr; - colorStrEditor.trim().toLower(); - for (auto& col : ConsoleColors) - { - if (col.first == colorStrEditor.str()) - return col.second; - } - tColor col; - col.consoleColor = "black"; - col.fullColor.set(colorStrEditor.str()); - return col; - } - TextStyleBuilder::Console::Console(void) { - m_backgroundColor = TextStyleParser::ConsoleColors["black"]; - m_foregroundColor = TextStyleParser::ConsoleColors["white"]; - m_backgroundColor.convertToBackground(); - m_foregroundColor.convertToForeground(); + m_backgroundColor = TextStyleParser::convertColor("black"); + m_backgroundColor.background = true; + m_foregroundColor = TextStyleParser::convertColor("white"); + m_backgroundColor.background = false; } TextStyleBuilder::Console& TextStyleBuilder::Console::bg(const String& consoleColor) { m_backgroundColor = find_color(consoleColor); - m_backgroundColor.convertToBackground(); + m_backgroundColor.background = true; return *this; } TextStyleBuilder::Console& TextStyleBuilder::Console::fg(const String& consoleColor) { m_foregroundColor = find_color(consoleColor); - m_foregroundColor.convertToForeground(); + m_foregroundColor.background = false; return *this; } @@ -321,7 +301,7 @@ namespace ostd return add(edit.str()); } - TextStyleBuilder::Console& TextStyleBuilder::Console::print(IOutputHandler& out) + TextStyleBuilder::Console& TextStyleBuilder::Console::print(OutputHandlerBase& out) { out.pStyled(m_styledString); return *this; @@ -336,11 +316,7 @@ namespace ostd TextStyleParser::tColor TextStyleBuilder::Console::find_color(const String& consoleColor) { - StringEditor edit(consoleColor); - edit.toLower().trim(); - if (auto findit = TextStyleParser::ConsoleColors.find(edit.str()); findit != TextStyleParser::ConsoleColors.end()) - return findit->second; - return TextStyleParser::ConsoleColors["black"]; + return TextStyleParser::convertColor(consoleColor); } @@ -389,7 +365,7 @@ namespace ostd return *this; } - TextStyleBuilder::Regex& TextStyleBuilder::Regex::print(IOutputHandler& out) + TextStyleBuilder::Regex& TextStyleBuilder::Regex::print(OutputHandlerBase& out) { out.pStyled(m_rawString); return *this; diff --git a/src/ostd/TextStyleParser.hpp b/src/ostd/TextStyleParser.hpp index eeeead0..a0042f1 100644 --- a/src/ostd/TextStyleParser.hpp +++ b/src/ostd/TextStyleParser.hpp @@ -13,9 +13,7 @@ namespace ostd public: struct tColor { Color fullColor; String consoleColor; - - void convertToBackground(void); - void convertToForeground(void); + bool background; }; public: struct tStyledString { @@ -33,36 +31,17 @@ namespace ostd static tStyledString parse(const StringEditor& styledString); static tStyledString parse(const StringEditor& styledString, tColor defaultBackgorundColor, tColor defaultForegroundColor); + static tColor convertColor(const StringEditor& name); + private: static bool test_for_block(const String& block_part); static eBlockParserReturnValue parse_block(const String& blockString, tColor& outBackgroundColor, tColor& outForegroundColor); - static const tColor parse_color(const String& colorStr); private: inline static tColor s_defaultBackgroundColor; inline static tColor s_defaultForegroundColor; inline static const String BlockString_Close = "/"; inline static const String BlockString_Style = "style"; - - public: - inline static std::unordered_map ConsoleColors { - { "red", { { 255, 0, 0, 255 }, "red" } }, - { "brightred", { { 255, 70, 70, 255 }, "b-red" } }, - { "green", { { 0, 255, 0, 255 }, "green" } }, - { "brightgreen", { { 70, 255, 70, 255 }, "b-green" } }, - { "blue", { { 0, 255, 0, 255 }, "blue" } }, - { "brightblue", { { 70, 70, 255, 255 }, "b-blue" } }, - { "magenta", { { 255, 0, 255, 255 }, "magenta" } }, - { "brightmagenta", { { 255, 120, 255, 255 }, "b-magenta" } }, - { "cyan", { { 0, 255, 255, 255 }, "cyan" } }, - { "brightcyan", { { 170, 120, 255, 255 }, "b-cyan" } }, - { "yellow", { { 255, 255, 0, 255 }, "yellow" } }, - { "brightyellow", { { 255, 255, 170, 255 }, "b-yellow" } }, - { "black", { { 0, 0, 0, 255 }, "gray" } }, - { "gray", { { 50, 50, 50, 255 }, "b-gray" } }, - { "brightgray", { { 150, 150, 150, 255 }, "lgray" } }, - { "white", { { 255, 255, 255, 255 }, "white" } } - }; }; class TextStyleBuilder @@ -92,7 +71,7 @@ namespace ostd Console& add(double f); Console& addc(char c); - Console& print(IOutputHandler& out); + Console& print(OutputHandlerBase& out); Console& print(void); inline TextStyleParser::tStyledString getStyledString(void) const override { return m_styledString; } @@ -122,7 +101,7 @@ namespace ostd TextStyleParser::tStyledString getStyledString(void) const override; Regex& print(void); - Regex& print(IOutputHandler& out); + Regex& print(OutputHandlerBase& out); friend std::ostream& operator<<(std::ostream&, Regex const&); diff --git a/src/ostd/Types.hpp b/src/ostd/Types.hpp index fc4fb23..c2bea63 100755 --- a/src/ostd/Types.hpp +++ b/src/ostd/Types.hpp @@ -57,7 +57,7 @@ namespace ostd }; typedef std::vector ByteStream; -} //namesoace ox +} diff --git a/src/ostd/Utils.cpp b/src/ostd/Utils.cpp index 856496e..d1bc83c 100755 --- a/src/ostd/Utils.cpp +++ b/src/ostd/Utils.cpp @@ -1,7 +1,11 @@ #include "Utils.hpp" +#include "String.hpp" #include "Defines.hpp" -#include -//#include +#include "Color.hpp" +#include "IOHandlers.hpp" + +#include "vendor/TermColor.hpp" + #include #include #include @@ -13,7 +17,10 @@ #include #include #include -#include + +#define __get_local_time() \ + std::time_t __cur_t = std::time(0); \ + std::tm* __now_t = std::localtime(&__cur_t); namespace ostd { @@ -140,33 +147,7 @@ namespace ostd return "_MONTH_"; } - // Color ColorInterpolator::get(float percent) - // { - // if (m_colors.size() == 0) return { 0, 0, 0 }; - // if (m_colors.size() == 1) return m_colors[0]; - // if (percent < 0.0f) percent = 0.0f; - // else if (percent > 1.0f) percent = 1.0f; - // Color start, end; - // if (m_colors.size() == 2) - // { - // start = m_colors[0]; - // end = m_colors[1]; - // } - // else - // { - // float step = 1.0f / m_colors.size(); - // float real_percent = Utils::map_value(percent, 0.0f, 1.0f, 0.0f) - // } - // uint8_t r = (int)std::round(std::lerp(start.r, end.r, percent)); - // uint8_t g = (int)std::round(std::lerp(start.g, end.g, percent)); - // uint8_t b = (int)std::round(std::lerp(start.b, end.b, percent)); - // uint8_t a = (int)std::round(std::lerp(start.a, end.a, percent)); - // return { r, g, b, a }; - // } - #define __get_local_time() \ - std::time_t __cur_t = std::time(0); \ - std::tm* __now_t = std::localtime(&__cur_t); String LocalTime::getFullString(bool include_date, bool include_time, bool day_name, bool month_as_name, bool include_seconds) const { @@ -446,7 +427,7 @@ namespace ostd - uint64_t Timer::start(bool print, String name, eTimeUnits timeUnit, IOutputHandler* __destination) + uint64_t Timer::start(bool print, String name, eTimeUnits timeUnit, OutputHandlerBase* __destination) { m_timeUnit = timeUnit; m_started = true; @@ -465,11 +446,11 @@ namespace ostd else { m_dest = __destination; - m_dest->nl().nl().col("magenta").p("====> "); - m_dest->col("cyan").p("Starting test for ["); - m_dest->col("green").p(m_name); - m_dest->col("cyan").p("]"); - m_dest->nl().nl().col("magenta").p(" <===="); + m_dest->nl().nl().fg("magenta").p("====> "); + m_dest->fg("cyan").p("Starting test for ["); + m_dest->fg("green").p(m_name); + m_dest->fg("cyan").p("]"); + m_dest->nl().nl().fg("magenta").p(" <===="); m_dest->reset().nl(); } } @@ -535,12 +516,12 @@ namespace ostd } else { - m_dest->nl().col("magenta").p("====> "); - m_dest->col("cyan").p("Test for ["); - m_dest->col("green").p(m_name); - m_dest->col("cyan").p("] took "); - m_dest->col("b-blue").pi(diff).p(unit); - m_dest->nl().nl().col("magenta").p(" <===="); + m_dest->nl().fg("magenta").p("====> "); + m_dest->fg("cyan").p("Test for ["); + m_dest->fg("green").p(m_name); + m_dest->fg("cyan").p("] took "); + m_dest->fg("b-blue").p(diff).p(unit); + m_dest->nl().nl().fg("magenta").p(" <===="); m_dest->reset().nl(); } } @@ -681,25 +662,11 @@ namespace ostd { return std::chrono::duration_cast (std::chrono::system_clock::now().time_since_epoch()).count() - Utils::s_startTime_ms; } - - /*bool Utils::setClipboardText(String text) - { - return clip::set_text(text); - } - - String Utils::getClipboardText(void) - { - String text = ""; - if (!clip::get_text(text)) return ""; - return text; - }*/ - float Utils::map_value(float input, float input_start, float input_end, float output_start, float output_end) { float slope = 1.0 * (output_end - output_start) / (input_end - input_start); return output_start + round(slope * (input - input_start)); } - bool Utils::loadFileFromHppResource(String output_file_path, const char* resource_buffer, unsigned int size) { unsigned char ext_len = resource_buffer[0]; @@ -714,8 +681,7 @@ namespace ostd bin.close(); return true; } - - void Utils::printByteStream(const ByteStream& data, StreamIndex start, uint8_t line_len, uint16_t n_rows, IOutputHandler& out, int32_t addrHighlight, uint32_t highlightRange, const String& title) + void Utils::printByteStream(const ByteStream& data, StreamIndex start, uint8_t line_len, uint16_t n_rows, OutputHandlerBase& out, int32_t addrHighlight, uint32_t highlightRange, const String& title) { StreamIndex end = start + (n_rows * line_len); if (end > data.size()) end = data.size(); @@ -732,72 +698,52 @@ namespace ostd uint8_t i = 1; ByteStream tmp; uint16_t linew = 1 + 1 + 6 + 1 + 1 + 2 + ((2 + 2) * line_len) + 1 + 4; - out.col(ConsoleCol::BrightBlue).p(Utils::duplicateChar('=', linew)).nl(); + out.fg(ConsoleColors::BrightBlue).p(Utils::duplicateChar('=', linew)).nl(); if (line_len <= 0xFF) { - out.col(ConsoleCol::BrightBlue).p("|"); - out.col(ConsoleCol::BrightMagenta).p(titleEdit.str()); - out.col(ConsoleCol::BrightBlue).p("| "); + out.fg(ConsoleColors::BrightBlue).p("|"); + out.fg(ConsoleColors::BrightMagenta).p(titleEdit.str()); + out.fg(ConsoleColors::BrightBlue).p("| "); for (int32_t i = 0; i < line_len; i++) - out.col(ConsoleCol::Green).p(getHexStr(i, false, 1)).p(" "); - out.col(ConsoleCol::BrightBlue).p("|").nl(); - out.col(ConsoleCol::BrightBlue).p(Utils::duplicateChar('=', linew)).nl(); + out.fg(ConsoleColors::Green).p(getHexStr(i, false, 1)).p(" "); + out.fg(ConsoleColors::BrightBlue).p("|").nl(); + out.fg(ConsoleColors::BrightBlue).p(Utils::duplicateChar('=', linew)).nl(); } - out.col(ConsoleCol::BrightBlue).p("| "); - out.col(ConsoleCol::BrightGray).p("0x"); - out.col(ConsoleCol::BrightCyan).p(Utils::getHexStr(start, false, 4)).col(ConsoleCol::BrightBlue).p(" | "); - // std::cout << termcolor::bright_blue << Utils::duplicateChar('=', linew) << "\n"; - // std::cout << termcolor::bright_blue << "| "; - // std::cout << termcolor::bright_grey << "0x"; - // std::cout << termcolor::bright_cyan << Utils::getHexStr(start, false, 4) << termcolor::bright_blue << " | "; + out.fg(ConsoleColors::BrightBlue).p("| "); + out.fg(ConsoleColors::BrightGray).p("0x"); + out.fg(ConsoleColors::BrightCyan).p(Utils::getHexStr(start, false, 4)).fg(ConsoleColors::BrightBlue).p(" | "); for (StreamIndex addr = start; addr < end; addr++) { tmp.push_back(data[addr]); if (highlight && (addr >= (uint32_t)addrHighlight && addr < (uint32_t)(addrHighlight + highlightRange))) - out.col(ConsoleCol::Red); + out.fg(ConsoleColors::Red); else if (data[addr] == 0) - out.col(ConsoleCol::BrightGray); - //std::cout << termcolor::bright_grey; + out.fg(ConsoleColors::BrightGray); else - out.col(ConsoleCol::White); - //std::cout << termcolor::bright_white; - //std::cout << Utils::getHexStr(data[addr], false) << " "; + out.fg(ConsoleColors::White); out.p(Utils::getHexStr(data[addr], false)).p(" "); if (i++ % line_len == 0 || addr == end - 1) { i = 1; - //std::cout << termcolor::bright_blue << "|"; - out.col(ConsoleCol::BrightBlue).p("|"); + out.fg(ConsoleColors::BrightBlue).p("|"); if (addr == end - 1) break; out.nl(); - out.col(ConsoleCol::BrightBlue).p("|"); - out.col(ConsoleCol::BrightGray).p(" -------- ").col(ConsoleCol::BrightBlue).p("|").col(ConsoleCol::BrightGray).p(" "); - //std::cout << "\n"; - //std::cout << termcolor::bright_blue << "|"; - //std::cout << termcolor::bright_grey << " -------- " << termcolor::bright_blue << "|" << termcolor::bright_grey << " "; + out.fg(ConsoleColors::BrightBlue).p("|"); + out.fg(ConsoleColors::BrightGray).p(" -------- ").fg(ConsoleColors::BrightBlue).p("|").fg(ConsoleColors::BrightGray).p(" "); for (const auto& c : tmp) { - //if (isprint(c)) std::cout << termcolor::bright_yellow << (char)c << termcolor::bright_grey << " "; - if (isprint(c)) out.col(ConsoleCol::BrightYellow).p((char)c).col(ConsoleCol::BrightGray).p(" "); - else out.col(ConsoleCol::BrightGray).p(". "); - //else std::cout << termcolor::bright_grey << ". "; + if (isprint(c)) out.fg(ConsoleColors::BrightYellow).pChar((char)c).fg(ConsoleColors::BrightGray).p(" "); + else out.fg(ConsoleColors::BrightGray).p(". "); } - out.col(ConsoleCol::BrightBlue).p("| "); - //std::cout << termcolor::bright_blue << "|"; + out.fg(ConsoleColors::BrightBlue).p("| "); tmp.clear(); out.reset().nl(); - out.col(ConsoleCol::BrightBlue).p("| "); - out.col(ConsoleCol::BrightGray).p("0x"); - out.col(ConsoleCol::BrightCyan).p(Utils::getHexStr(addr + 1, false, 4)).col(ConsoleCol::BrightBlue).p(" | "); - //std::cout << termcolor::reset; - //std::cout << "\n"; - // std::cout << termcolor::bright_blue << "| "; - // std::cout << termcolor::bright_grey << "0x"; - // std::cout << termcolor::bright_cyan << Utils::getHexStr(addr + 1, false, 4) << termcolor::bright_blue << " | "; + out.fg(ConsoleColors::BrightBlue).p("| "); + out.fg(ConsoleColors::BrightGray).p("0x"); + out.fg(ConsoleColors::BrightCyan).p(Utils::getHexStr(addr + 1, false, 4)).fg(ConsoleColors::BrightBlue).p(" | "); } } - out.nl().col(ConsoleCol::BrightBlue).p(Utils::duplicateChar('=', linew)).nl().reset(); - //std::cout << "\n" << termcolor::bright_blue << Utils::duplicateChar('=', linew) << "\n"; + out.nl().fg(ConsoleColors::BrightBlue).p(Utils::duplicateChar('=', linew)).nl().reset(); } bool Utils::saveByteStreamToFile(const ByteStream& stream, const String& filePath) { @@ -834,4 +780,4 @@ namespace ostd } return out_string.str(); } -} // namespace ox +} diff --git a/src/ostd/Utils.hpp b/src/ostd/Utils.hpp index c1ed251..cf7a657 100755 --- a/src/ostd/Utils.hpp +++ b/src/ostd/Utils.hpp @@ -15,7 +15,6 @@ namespace ostd Microseconds, Nanoseconds }; - enum class eMonths { January = 0, @@ -32,12 +31,13 @@ namespace ostd December }; - class IOutputHandler; + + class OutputHandlerBase; class Timer { public: inline Timer(void) { m_started = false; m_current = 0; m_timeUnit = eTimeUnits::Nanoseconds; m_dest = nullptr; } - uint64_t start(bool print = true, String name = "", eTimeUnits timeUnit = eTimeUnits::Nanoseconds, IOutputHandler* __destination = nullptr); + uint64_t start(bool print = true, String name = "", eTimeUnits timeUnit = eTimeUnits::Nanoseconds, OutputHandlerBase* __destination = nullptr); uint64_t end(bool print = true); static uint64_t getEpoch(eTimeUnits timeUnit = eTimeUnits::Milliseconds); @@ -49,7 +49,7 @@ namespace ostd int64_t m_current; eTimeUnits m_timeUnit; String m_name; - IOutputHandler* m_dest; + OutputHandlerBase* m_dest; }; struct GameClock @@ -78,17 +78,6 @@ namespace ostd float m_totalSeconds; }; - // class ColorInterpolator - // { - // public: - // Color get(float percent); - // inline void addColor(Color col) { m_colors.push_back(col); } - - // private: - // std::vector m_colors; - - // }; - class LocalTime { public: @@ -114,7 +103,6 @@ namespace ostd virtual String monthToText(int32_t month) const; virtual String weekDayToText(int32_t day) const; }; - typedef LocalTime LocalTime_EN; class LocalTime_IT : public LocalTime { @@ -135,10 +123,10 @@ namespace ostd String weekDayToText(int32_t day) const override; }; - class IOutputHandler; class Utils { public: + //Implemented in static inline const uint64_t getStartTime(void) { return Utils::s_startTime_ms; } static void init(void); static bool isHex(String hex); @@ -151,17 +139,15 @@ namespace ostd static String duplicateChar(unsigned char c, uint16_t count); static void sleep(uint32_t __time, eTimeUnits __unit = eTimeUnits::Milliseconds); static uint64_t getRunningTime_ms(void); - //TODO: Doesn't work on Windows - //static bool setClipboardText(String text); - //static String getClipboardText(void); static float map_value(float input, float input_start, float input_end, float output_start, float output_end); static bool loadFileFromHppResource(String output_file_path, const char* resource_buffer, unsigned int size); - static void printByteStream(const ByteStream& data, StreamIndex start, uint8_t line_len, uint16_t n_rows, IOutputHandler& out, int32_t addrHighlight = -1, uint32_t highlightRange = 1, const String& title = ""); + static void printByteStream(const ByteStream& data, StreamIndex start, uint8_t line_len, uint16_t n_rows, OutputHandlerBase& out, int32_t addrHighlight = -1, uint32_t highlightRange = 1, const String& title = ""); static bool saveByteStreamToFile(const ByteStream& stream, const String& filePath); static bool loadByteStreamFromFile(const String& filePath, ByteStream& outStream); static ByteStream stringToByteStream(const String& data); static String byteStreamToString(const ByteStream& data); + //Implemented in static std::vector listFilesInDirectory(const String& directoryPath); static std::vector listDirectoriesInDirectory(const String& directoryPath); static std::vector listDirectory(const String& directoryPath); @@ -169,260 +155,19 @@ namespace ostd static std::vector listDirectoriesInDirectoryRecursive(const String& directoryPath); static std::vector listDirectoryRecursive(const String& directoryPath); + //Implemented in static int32_t solveIntegerExpression(const String& expr); + //Implemented in static void clearConsole(void); - static void getConsoleSize(int32_t& outRows, int32_t& outColumns); + static void getConsoleSize(int32_t& outColumns, int32_t& outRows); + static void setConsoleCursorPosition(int32_t x, int32_t y); static int32_t getConsoleWidth(void); static int32_t getConsoleHeight(void); private: inline static uint64_t s_startTime_ms; }; - - class StringEditor - { - public: class Tokens - { - public: - inline bool hasNext(void) { return m_tokens.size() > 0 && m_current_index < m_tokens.size(); } - inline bool hasPrevious(void) { return m_tokens.size() > 0 && m_current_index > 0; } - String next(void); - String previous(void); - inline uint32_t count(void) { return m_tokens.size(); } - inline std::vector getRawData(void) { return m_tokens; } - inline uint32_t getCurrentIndex(void) { return m_current_index; } - inline void cycle(void) { m_current_index = 0; } - - inline auto begin(void) { return m_tokens.begin(); } - inline auto end(void) { return m_tokens.end(); } - inline auto cbegin(void) const { return m_tokens.begin(); } - inline auto cend(void) const { return m_tokens.end(); } - inline auto begin(void) const { return m_tokens.begin(); } - inline auto end(void) const { return m_tokens.end(); } - - private: - inline Tokens(void) { m_current_index = 0; } - - private: - std::vector m_tokens; - uint32_t m_current_index; - - public: - inline static const String END = "%END%"; - - friend class StringEditor; - }; - - public: - inline StringEditor(void) { m_data = ""; } - inline StringEditor(const String& str) { m_data = str; } - inline StringEditor(const char* str) { m_data = str; } - inline String str(void) const { return m_data; } - inline uint32_t len(void) { return m_data.length(); } - inline StringEditor& clr(void) { m_data = ""; return *this; } - inline const char* c_str(void) { return m_data.c_str(); } - inline char at(uint32_t index) { return m_data[index]; } - inline char operator[](uint32_t index) { return m_data[index]; } - inline StringEditor& set(String str) { m_data = str; return *this; } - - StringEditor& ltrim(void); - StringEditor& rtrim(void); - StringEditor& trim(void); - - StringEditor& toLower(void); - StringEditor& toUpper(void); - - StringEditor& addPadding(char c = ' ', uint32_t count = 10); - //StringEditor& add(const StringEditor& se); - StringEditor& add(String str); - StringEditor& add(char c); - StringEditor& addi(uint8_t i); - StringEditor& addi(int8_t i); - StringEditor& addi(uint16_t i); - StringEditor& addi(int16_t i); - StringEditor& addi(uint32_t i); - StringEditor& addi(int32_t i); - StringEditor& addi(uint64_t i); - StringEditor& addi(int64_t i); - StringEditor& addf(float f); - StringEditor& addf(double f); - - StringEditor& reverse(void); - StringEditor& replaceAll(String what, String with); - StringEditor& replaceFirst(String what, String with); - StringEditor& regexReplace(String regex_pattern, String replace_with, bool case_insensitive = false); - - StringEditor& put(uint32_t index, char c); - - int64_t toInt(void); - float toFloat(void); - double toDouble(void); - bool isNumeric(bool decimal = false); - bool contains(char c); - bool contains(String str); - bool startsWith(String str); - bool endsWith(String str); - String getReverse(void); - - uint32_t count(String str); - - int32_t indexOf(char c, uint32_t start = 0); - int32_t indexOf(String str, uint32_t start = 0); - int32_t lastIndexOf(char c); - int32_t lastIndexOf(String str); - - String substr(uint32_t start, int32_t end = -1); - Tokens tokenize(String delimiter = " ", bool trim_tokens = true, bool allow_white_space_only_tokens = false); - - friend std::ostream& operator<<(std::ostream& out, const StringEditor& val); - - private: - String m_data; - }; - - struct ConsoleCol - { - inline static constexpr const char* Red = "red"; - inline static constexpr const char* BrightRed = "b-red"; - inline static constexpr const char* OnRed = "o-red"; - inline static constexpr const char* OnBrightRed = "ob-red"; - - inline static constexpr const char* Green = "green"; - inline static constexpr const char* BrightGreen = "b-green"; - inline static constexpr const char* OnGreen = "o-green"; - inline static constexpr const char* OnBrightGreen = "ob-green"; - - inline static constexpr const char* Blue = "blue"; - inline static constexpr const char* BrightBlue = "b-blue"; - inline static constexpr const char* OnBlue = "o-blue"; - inline static constexpr const char* OnBrightBlue = "ob-blue"; - - inline static constexpr const char* Magenta = "magenta"; - inline static constexpr const char* BrightMagenta = "b-magenta"; - inline static constexpr const char* OnMagenta = "o-magenta"; - inline static constexpr const char* OnBrightMagenta = "ob-magenta"; - - inline static constexpr const char* Cyan = "cyan"; - inline static constexpr const char* BrightCyan = "b-cyan"; - inline static constexpr const char* OnCyan = "o-cyan"; - inline static constexpr const char* OnBrightCyan = "ob-cyan"; - - inline static constexpr const char* Yellow = "yellow"; - inline static constexpr const char* BrightYellow = "b-yellow"; - inline static constexpr const char* OnYellow = "o-yellow"; - inline static constexpr const char* OnBrightYellow = "ob-yellow"; - - inline static constexpr const char* Black = "gray"; - inline static constexpr const char* BrightGray = "b-gray"; - inline static constexpr const char* OnBlack = "o-gray"; - inline static constexpr const char* OnBrightGray = "ob-gray"; - - inline static constexpr const char* Gray = "lgray"; - inline static constexpr const char* White = "white"; - inline static constexpr const char* onGray = "o-lgray"; - inline static constexpr const char* OnWhite = "o-white"; - }; - - class Color; - class BaseObject; - class IOutputHandler - { - public: - virtual ~IOutputHandler(void) = default; - virtual IOutputHandler& col(String color) = 0; - virtual IOutputHandler& col(const Color& color) = 0; - //virtual IOutputHandler& p(String str) = 0; - virtual IOutputHandler& p(char c) = 0; - virtual IOutputHandler& p(const StringEditor& se) = 0; - //virtual IOutputHandler& p(const BaseObject& bo) = 0; - virtual IOutputHandler& pi(uint8_t i) = 0; - virtual IOutputHandler& pi(int8_t i) = 0; - virtual IOutputHandler& pi(uint16_t i) = 0; - virtual IOutputHandler& pi(int16_t i) = 0; - virtual IOutputHandler& pi(uint32_t i) = 0; - virtual IOutputHandler& pi(int32_t i) = 0; - virtual IOutputHandler& pi(uint64_t i) = 0; - virtual IOutputHandler& pi(int64_t i) = 0; - virtual IOutputHandler& pf(float f, uint8_t precision = 0) = 0; - virtual IOutputHandler& pf(double f, uint8_t precision = 0) = 0; - virtual IOutputHandler& pStyled(const StringEditor& styled) = 0; - virtual IOutputHandler& pStyled(const TextStyleParser::tStyledString& styled) = 0; - virtual IOutputHandler& pStyled(const TextStyleBuilder::IRichStringBase& styled) = 0; - virtual IOutputHandler& nl(void) = 0; - virtual IOutputHandler& flush(void) = 0; - virtual IOutputHandler& reset(void) = 0; - - virtual IOutputHandler& bgcol(const Color& color) = 0; - virtual IOutputHandler& bgcol(String color) = 0; - virtual IOutputHandler& resetColors(void) = 0; - virtual IOutputHandler& clear(void) = 0; - }; - - class ConsoleOutputHandler : public IOutputHandler - { - public: - IOutputHandler& col(String color) override; - IOutputHandler& col(const Color& color) override; - inline IOutputHandler& bgcol(const Color& color) override { return *this; } - inline IOutputHandler& bgcol(String color) override { return *this; } - inline IOutputHandler& resetColors(void) override { return *this; } - //IOutputHandler& p(String str); - IOutputHandler& p(char c) override; - IOutputHandler& p(const StringEditor& se) override; - //IOutputHandler& p(const BaseObject& bo); - IOutputHandler& pi(uint8_t i) override; - IOutputHandler& pi(int8_t i) override; - IOutputHandler& pi(uint16_t i) override; - IOutputHandler& pi(int16_t i) override; - IOutputHandler& pi(uint32_t i) override; - IOutputHandler& pi(int32_t i) override; - IOutputHandler& pi(uint64_t i) override; - IOutputHandler& pi(int64_t i) override; - IOutputHandler& pf(float f, uint8_t precision = 0) override; - IOutputHandler& pf(double f, uint8_t precision = 0) override; - IOutputHandler& pStyled(const StringEditor& styled) override; - IOutputHandler& pStyled(const TextStyleParser::tStyledString& styled) override; - IOutputHandler& pStyled(const TextStyleBuilder::IRichStringBase& styled) override; - IOutputHandler& nl(void) override; - IOutputHandler& flush(void) override; - IOutputHandler& reset(void) override; - IOutputHandler& clear(void) override; - }; - - class BufferedOutputHandler : public IOutputHandler - { - public: - inline IOutputHandler& col(String color) override { return *this; } - inline IOutputHandler& col(const Color& color) override { return *this; } - inline IOutputHandler& bgcol(const Color& color) override { return *this; } - inline IOutputHandler& bgcol(String color) override { return *this; } - inline IOutputHandler& resetColors(void) override { return *this; } - IOutputHandler& p(char c) override; - IOutputHandler& p(const StringEditor& se) override; - IOutputHandler& pi(uint8_t i) override; - IOutputHandler& pi(int8_t i) override; - IOutputHandler& pi(uint16_t i) override; - IOutputHandler& pi(int16_t i) override; - IOutputHandler& pi(uint32_t i) override; - IOutputHandler& pi(int32_t i) override; - IOutputHandler& pi(uint64_t i) override; - IOutputHandler& pi(int64_t i) override; - IOutputHandler& pf(float f, uint8_t precision = 0) override; - IOutputHandler& pf(double f, uint8_t precision = 0) override; - IOutputHandler& pStyled(const StringEditor& styled) override { return *this; }; - inline IOutputHandler& pStyled(const TextStyleParser::tStyledString& styled) override { return *this; } - inline IOutputHandler& pStyled(const TextStyleBuilder::IRichStringBase& styled) override { return *this; }; - IOutputHandler& nl(void) override; - inline IOutputHandler& flush(void) override { return *this; } - inline IOutputHandler& reset(void) override { return *this; } - - inline IOutputHandler& clear(void) override { m_buffer = ""; return *this; } - inline const StringEditor& getBuffer(void) { return m_buffer; } - - private: - StringEditor m_buffer; - }; -} // namespace ox +} #endif diff --git a/src/vendor/FastNoiseLite.hpp b/src/ostd/vendor/FastNoiseLite.hpp old mode 100755 new mode 100644 similarity index 100% rename from src/vendor/FastNoiseLite.hpp rename to src/ostd/vendor/FastNoiseLite.hpp diff --git a/src/vendor/TermColor.hpp b/src/ostd/vendor/TermColor.hpp old mode 100755 new mode 100644 similarity index 96% rename from src/vendor/TermColor.hpp rename to src/ostd/vendor/TermColor.hpp index 83a7273..861ab83 --- a/src/vendor/TermColor.hpp +++ b/src/ostd/vendor/TermColor.hpp @@ -1,911 +1,911 @@ -//! -//! termcolor -//! ~~~~~~~~~ -//! -//! termcolor is a header-only c++ library for printing colored messages -//! to the terminal. Written just for fun with a help of the Force. -//! -//! :copyright: (c) 2013 by Ihor Kalnytskyi -//! :license: BSD, see termcolor-LICENSEfile for details -//! - -#ifndef TERMCOLOR_HPP_ -#define TERMCOLOR_HPP_ - -#include -#include - -// Detect target's platform and set some macros in order to wrap platform -// specific code this library depends on. -#if defined(_WIN32) || defined(_WIN64) -# define TERMCOLOR_TARGET_WINDOWS -#elif defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)) -# define TERMCOLOR_TARGET_POSIX -#endif - -// If implementation has not been explicitly set, try to choose one based on -// target platform. -#if !defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) && !defined(TERMCOLOR_USE_WINDOWS_API) && !defined(TERMCOLOR_USE_NOOP) -# if defined(TERMCOLOR_TARGET_POSIX) -# define TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES -# define TERMCOLOR_AUTODETECTED_IMPLEMENTATION -# elif defined(TERMCOLOR_TARGET_WINDOWS) -# define TERMCOLOR_USE_WINDOWS_API -# define TERMCOLOR_AUTODETECTED_IMPLEMENTATION -# endif -#endif - -// These headers provide isatty()/fileno() functions, which are used for -// testing whether a standard stream refers to the terminal. -#if defined(TERMCOLOR_TARGET_POSIX) -# include -#elif defined(TERMCOLOR_TARGET_WINDOWS) -# include -# include -#endif - - -namespace termcolor -{ - // Forward declaration of the `_internal` namespace. - // All comments are below. - namespace _internal - { - inline int colorize_index(); - inline FILE* get_standard_stream(const std::ostream& stream); - inline bool is_colorized(std::ostream& stream); - inline bool is_atty(const std::ostream& stream); - - #if defined(TERMCOLOR_TARGET_WINDOWS) - inline void win_change_attributes(std::ostream& stream, int foreground, int background=-1); - #endif - } - - inline - std::ostream& colorize(std::ostream& stream) - { - stream.iword(_internal::colorize_index()) = 1L; - return stream; - } - - inline - std::ostream& nocolorize(std::ostream& stream) - { - stream.iword(_internal::colorize_index()) = 0L; - return stream; - } - - inline - std::ostream& reset(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[00m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, -1); - #endif - } - return stream; - } - - inline - std::ostream& bold(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[1m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - #endif - } - return stream; - } - - inline - std::ostream& dark(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[2m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - #endif - } - return stream; - } - - inline - std::ostream& italic(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[3m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - #endif - } - return stream; - } - - inline - std::ostream& underline(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[4m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, COMMON_LVB_UNDERSCORE); - #endif - } - return stream; - } - - inline - std::ostream& blink(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[5m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - #endif - } - return stream; - } - - inline - std::ostream& reverse(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[7m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - #endif - } - return stream; - } - - inline - std::ostream& concealed(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[8m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - #endif - } - return stream; - } - - inline - std::ostream& crossed(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[9m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - #endif - } - return stream; - } - - template inline - std::ostream& color(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - char command[12]; - std::snprintf(command, sizeof(command), "\033[38;5;%dm", code); - stream << command; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - #endif - } - return stream; - } - - template inline - std::ostream& on_color(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - char command[12]; - std::snprintf(command, sizeof(command), "\033[48;5;%dm", code); - stream << command; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - #endif - } - return stream; - } - - template inline - std::ostream& color(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - char command[20]; - std::snprintf(command, sizeof(command), "\033[38;2;%d;%d;%dm", r, g, b); - stream << command; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - #endif - } - return stream; - } - - template inline - std::ostream& on_color(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - char command[20]; - std::snprintf(command, sizeof(command), "\033[48;2;%d;%d;%dm", r, g, b); - stream << command; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - #endif - } - return stream; - } - - inline - std::ostream& grey(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[30m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, - 0 // grey (black) - ); - #endif - } - return stream; - } - - inline - std::ostream& red(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[31m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, - FOREGROUND_RED - ); - #endif - } - return stream; - } - - inline - std::ostream& green(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[32m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, - FOREGROUND_GREEN - ); - #endif - } - return stream; - } - - inline - std::ostream& yellow(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[33m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, - FOREGROUND_GREEN | FOREGROUND_RED - ); - #endif - } - return stream; - } - - inline - std::ostream& blue(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[34m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, - FOREGROUND_BLUE - ); - #endif - } - return stream; - } - - inline - std::ostream& magenta(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[35m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, - FOREGROUND_BLUE | FOREGROUND_RED - ); - #endif - } - return stream; - } - - inline - std::ostream& cyan(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[36m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, - FOREGROUND_BLUE | FOREGROUND_GREEN - ); - #endif - } - return stream; - } - - inline - std::ostream& white(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[37m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, - FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED - ); - #endif - } - return stream; - } - - - inline - std::ostream& bright_grey(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[90m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, - 0 | FOREGROUND_INTENSITY // grey (black) - ); - #endif - } - return stream; - } - - inline - std::ostream& bright_red(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[91m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, - FOREGROUND_RED | FOREGROUND_INTENSITY - ); - #endif - } - return stream; - } - - inline - std::ostream& bright_green(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[92m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, - FOREGROUND_GREEN | FOREGROUND_INTENSITY - ); - #endif - } - return stream; - } - - inline - std::ostream& bright_yellow(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[93m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, - FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY - ); - #endif - } - return stream; - } - - inline - std::ostream& bright_blue(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[94m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, - FOREGROUND_BLUE | FOREGROUND_INTENSITY - ); - #endif - } - return stream; - } - - inline - std::ostream& bright_magenta(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[95m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, - FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY - ); - #endif - } - return stream; - } - - inline - std::ostream& bright_cyan(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[96m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, - FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY - ); - #endif - } - return stream; - } - - inline - std::ostream& bright_white(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[97m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, - FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY - ); - #endif - } - return stream; - } - - - inline - std::ostream& on_grey(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[40m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, - 0 // grey (black) - ); - #endif - } - return stream; - } - - inline - std::ostream& on_red(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[41m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, - BACKGROUND_RED - ); - #endif - } - return stream; - } - - inline - std::ostream& on_green(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[42m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, - BACKGROUND_GREEN - ); - #endif - } - return stream; - } - - inline - std::ostream& on_yellow(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[43m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, - BACKGROUND_GREEN | BACKGROUND_RED - ); - #endif - } - return stream; - } - - inline - std::ostream& on_blue(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[44m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, - BACKGROUND_BLUE - ); - #endif - } - return stream; - } - - inline - std::ostream& on_magenta(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[45m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, - BACKGROUND_BLUE | BACKGROUND_RED - ); - #endif - } - return stream; - } - - inline - std::ostream& on_cyan(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[46m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, - BACKGROUND_GREEN | BACKGROUND_BLUE - ); - #endif - } - return stream; - } - - inline - std::ostream& on_white(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[47m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, - BACKGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_RED - ); - #endif - } - - return stream; - } - - - inline - std::ostream& on_bright_grey(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[100m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, - 0 | BACKGROUND_INTENSITY // grey (black) - ); - #endif - } - return stream; - } - - inline - std::ostream& on_bright_red(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[101m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, - BACKGROUND_RED | BACKGROUND_INTENSITY - ); - #endif - } - return stream; - } - - inline - std::ostream& on_bright_green(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[102m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, - BACKGROUND_GREEN | BACKGROUND_INTENSITY - ); - #endif - } - return stream; - } - - inline - std::ostream& on_bright_yellow(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[103m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, - BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_INTENSITY - ); - #endif - } - return stream; - } - - inline - std::ostream& on_bright_blue(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[104m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, - BACKGROUND_BLUE | BACKGROUND_INTENSITY - ); - #endif - } - return stream; - } - - inline - std::ostream& on_bright_magenta(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[105m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, - BACKGROUND_BLUE | BACKGROUND_RED | BACKGROUND_INTENSITY - ); - #endif - } - return stream; - } - - inline - std::ostream& on_bright_cyan(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[106m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, - BACKGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_INTENSITY - ); - #endif - } - return stream; - } - - inline - std::ostream& on_bright_white(std::ostream& stream) - { - if (_internal::is_colorized(stream)) - { - #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) - stream << "\033[107m"; - #elif defined(TERMCOLOR_USE_WINDOWS_API) - _internal::win_change_attributes(stream, -1, - BACKGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_RED | BACKGROUND_INTENSITY - ); - #endif - } - - return stream; - } - - - - //! Since C++ hasn't a way to hide something in the header from - //! the outer access, I have to introduce this namespace which - //! is used for internal purpose and should't be access from - //! the user code. - namespace _internal - { - // An index to be used to access a private storage of I/O streams. See - // colorize / nocolorize I/O manipulators for details. Due to the fact - // that static variables ain't shared between translation units, inline - // function with local static variable is used to do the trick and share - // the variable value between translation units. - inline int colorize_index() - { - static int colorize_index = std::ios_base::xalloc(); - return colorize_index; - } - - //! Since C++ hasn't a true way to extract stream handler - //! from the a given `std::ostream` object, I have to write - //! this kind of hack. - inline - FILE* get_standard_stream(const std::ostream& stream) - { - if (&stream == &std::cout) - return stdout; - else if ((&stream == &std::cerr) || (&stream == &std::clog)) - return stderr; - - return nullptr; - } - - // Say whether a given stream should be colorized or not. It's always - // true for ATTY streams and may be true for streams marked with - // colorize flag. - inline - bool is_colorized(std::ostream& stream) - { - return is_atty(stream) || static_cast(stream.iword(colorize_index())); - } - - //! Test whether a given `std::ostream` object refers to - //! a terminal. - inline - bool is_atty(const std::ostream& stream) - { - FILE* std_stream = get_standard_stream(stream); - - // Unfortunately, fileno() ends with segmentation fault - // if invalid file descriptor is passed. So we need to - // handle this case gracefully and assume it's not a tty - // if standard stream is not detected, and 0 is returned. - if (!std_stream) - return false; - - #if defined(TERMCOLOR_TARGET_POSIX) - return ::isatty(fileno(std_stream)); - #elif defined(TERMCOLOR_TARGET_WINDOWS) - return ::_isatty(_fileno(std_stream)); - #else - return false; - #endif - } - - #if defined(TERMCOLOR_TARGET_WINDOWS) - //! Change Windows Terminal colors attribute. If some - //! parameter is `-1` then attribute won't changed. - inline void win_change_attributes(std::ostream& stream, int foreground, int background) - { - // yeah, i know.. it's ugly, it's windows. - static WORD defaultAttributes = 0; - - // Windows doesn't have ANSI escape sequences and so we use special - // API to change Terminal output color. That means we can't - // manipulate colors by means of "std::stringstream" and hence - // should do nothing in this case. - if (!_internal::is_atty(stream)) - return; - - // get terminal handle - HANDLE hTerminal = INVALID_HANDLE_VALUE; - if (&stream == &std::cout) - hTerminal = GetStdHandle(STD_OUTPUT_HANDLE); - else if (&stream == &std::cerr) - hTerminal = GetStdHandle(STD_ERROR_HANDLE); - - // save default terminal attributes if it unsaved - if (!defaultAttributes) - { - CONSOLE_SCREEN_BUFFER_INFO info; - if (!GetConsoleScreenBufferInfo(hTerminal, &info)) - return; - defaultAttributes = info.wAttributes; - } - - // restore all default settings - if (foreground == -1 && background == -1) - { - SetConsoleTextAttribute(hTerminal, defaultAttributes); - return; - } - - // get current settings - CONSOLE_SCREEN_BUFFER_INFO info; - if (!GetConsoleScreenBufferInfo(hTerminal, &info)) - return; - - if (foreground != -1) - { - info.wAttributes &= ~(info.wAttributes & 0x0F); - info.wAttributes |= static_cast(foreground); - } - - if (background != -1) - { - info.wAttributes &= ~(info.wAttributes & 0xF0); - info.wAttributes |= static_cast(background); - } - - SetConsoleTextAttribute(hTerminal, info.wAttributes); - } - #endif // TERMCOLOR_TARGET_WINDOWS - - } // namespace _internal - -} // namespace termcolor - - -#undef TERMCOLOR_TARGET_POSIX -#undef TERMCOLOR_TARGET_WINDOWS - -#if defined(TERMCOLOR_AUTODETECTED_IMPLEMENTATION) -# undef TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES -# undef TERMCOLOR_USE_WINDOWS_API -#endif - -#endif // TERMCOLOR_HPP_ +//! +//! termcolor +//! ~~~~~~~~~ +//! +//! termcolor is a header-only c++ library for printing colored messages +//! to the terminal. Written just for fun with a help of the Force. +//! +//! :copyright: (c) 2013 by Ihor Kalnytskyi +//! :license: BSD, see termcolor-LICENSEfile for details +//! + +#ifndef TERMCOLOR_HPP_ +#define TERMCOLOR_HPP_ + +#include +#include + +// Detect target's platform and set some macros in order to wrap platform +// specific code this library depends on. +#if defined(_WIN32) || defined(_WIN64) +# define TERMCOLOR_TARGET_WINDOWS +#elif defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)) +# define TERMCOLOR_TARGET_POSIX +#endif + +// If implementation has not been explicitly set, try to choose one based on +// target platform. +#if !defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) && !defined(TERMCOLOR_USE_WINDOWS_API) && !defined(TERMCOLOR_USE_NOOP) +# if defined(TERMCOLOR_TARGET_POSIX) +# define TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES +# define TERMCOLOR_AUTODETECTED_IMPLEMENTATION +# elif defined(TERMCOLOR_TARGET_WINDOWS) +# define TERMCOLOR_USE_WINDOWS_API +# define TERMCOLOR_AUTODETECTED_IMPLEMENTATION +# endif +#endif + +// These headers provide isatty()/fileno() functions, which are used for +// testing whether a standard stream refers to the terminal. +#if defined(TERMCOLOR_TARGET_POSIX) +# include +#elif defined(TERMCOLOR_TARGET_WINDOWS) +# include +# include +#endif + + +namespace termcolor +{ + // Forward declaration of the `_internal` namespace. + // All comments are below. + namespace _internal + { + inline int colorize_index(); + inline FILE* get_standard_stream(const std::ostream& stream); + inline bool is_colorized(std::ostream& stream); + inline bool is_atty(const std::ostream& stream); + + #if defined(TERMCOLOR_TARGET_WINDOWS) + inline void win_change_attributes(std::ostream& stream, int foreground, int background=-1); + #endif + } + + inline + std::ostream& colorize(std::ostream& stream) + { + stream.iword(_internal::colorize_index()) = 1L; + return stream; + } + + inline + std::ostream& nocolorize(std::ostream& stream) + { + stream.iword(_internal::colorize_index()) = 0L; + return stream; + } + + inline + std::ostream& reset(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[00m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, -1, -1); + #endif + } + return stream; + } + + inline + std::ostream& bold(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[1m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + #endif + } + return stream; + } + + inline + std::ostream& dark(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[2m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + #endif + } + return stream; + } + + inline + std::ostream& italic(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[3m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + #endif + } + return stream; + } + + inline + std::ostream& underline(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[4m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, -1, COMMON_LVB_UNDERSCORE); + #endif + } + return stream; + } + + inline + std::ostream& blink(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[5m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + #endif + } + return stream; + } + + inline + std::ostream& reverse(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[7m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + #endif + } + return stream; + } + + inline + std::ostream& concealed(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[8m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + #endif + } + return stream; + } + + inline + std::ostream& crossed(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[9m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + #endif + } + return stream; + } + + template inline + std::ostream& color(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + char command[12]; + std::snprintf(command, sizeof(command), "\033[38;5;%dm", code); + stream << command; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + #endif + } + return stream; + } + + template inline + std::ostream& on_color(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + char command[12]; + std::snprintf(command, sizeof(command), "\033[48;5;%dm", code); + stream << command; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + #endif + } + return stream; + } + + template inline + std::ostream& color(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + char command[20]; + std::snprintf(command, sizeof(command), "\033[38;2;%d;%d;%dm", r, g, b); + stream << command; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + #endif + } + return stream; + } + + template inline + std::ostream& on_color(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + char command[20]; + std::snprintf(command, sizeof(command), "\033[48;2;%d;%d;%dm", r, g, b); + stream << command; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + #endif + } + return stream; + } + + inline + std::ostream& grey(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[30m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, + 0 // grey (black) + ); + #endif + } + return stream; + } + + inline + std::ostream& red(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[31m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, + FOREGROUND_RED + ); + #endif + } + return stream; + } + + inline + std::ostream& green(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[32m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, + FOREGROUND_GREEN + ); + #endif + } + return stream; + } + + inline + std::ostream& yellow(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[33m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, + FOREGROUND_GREEN | FOREGROUND_RED + ); + #endif + } + return stream; + } + + inline + std::ostream& blue(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[34m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, + FOREGROUND_BLUE + ); + #endif + } + return stream; + } + + inline + std::ostream& magenta(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[35m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, + FOREGROUND_BLUE | FOREGROUND_RED + ); + #endif + } + return stream; + } + + inline + std::ostream& cyan(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[36m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, + FOREGROUND_BLUE | FOREGROUND_GREEN + ); + #endif + } + return stream; + } + + inline + std::ostream& white(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[37m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, + FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED + ); + #endif + } + return stream; + } + + + inline + std::ostream& bright_grey(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[90m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, + 0 | FOREGROUND_INTENSITY // grey (black) + ); + #endif + } + return stream; + } + + inline + std::ostream& bright_red(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[91m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, + FOREGROUND_RED | FOREGROUND_INTENSITY + ); + #endif + } + return stream; + } + + inline + std::ostream& bright_green(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[92m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, + FOREGROUND_GREEN | FOREGROUND_INTENSITY + ); + #endif + } + return stream; + } + + inline + std::ostream& bright_yellow(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[93m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, + FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY + ); + #endif + } + return stream; + } + + inline + std::ostream& bright_blue(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[94m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, + FOREGROUND_BLUE | FOREGROUND_INTENSITY + ); + #endif + } + return stream; + } + + inline + std::ostream& bright_magenta(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[95m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, + FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY + ); + #endif + } + return stream; + } + + inline + std::ostream& bright_cyan(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[96m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, + FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY + ); + #endif + } + return stream; + } + + inline + std::ostream& bright_white(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[97m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, + FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY + ); + #endif + } + return stream; + } + + + inline + std::ostream& on_grey(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[40m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, -1, + 0 // grey (black) + ); + #endif + } + return stream; + } + + inline + std::ostream& on_red(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[41m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, -1, + BACKGROUND_RED + ); + #endif + } + return stream; + } + + inline + std::ostream& on_green(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[42m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, -1, + BACKGROUND_GREEN + ); + #endif + } + return stream; + } + + inline + std::ostream& on_yellow(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[43m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, -1, + BACKGROUND_GREEN | BACKGROUND_RED + ); + #endif + } + return stream; + } + + inline + std::ostream& on_blue(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[44m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, -1, + BACKGROUND_BLUE + ); + #endif + } + return stream; + } + + inline + std::ostream& on_magenta(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[45m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, -1, + BACKGROUND_BLUE | BACKGROUND_RED + ); + #endif + } + return stream; + } + + inline + std::ostream& on_cyan(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[46m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, -1, + BACKGROUND_GREEN | BACKGROUND_BLUE + ); + #endif + } + return stream; + } + + inline + std::ostream& on_white(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[47m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, -1, + BACKGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_RED + ); + #endif + } + + return stream; + } + + + inline + std::ostream& on_bright_grey(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[100m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, -1, + 0 | BACKGROUND_INTENSITY // grey (black) + ); + #endif + } + return stream; + } + + inline + std::ostream& on_bright_red(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[101m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, -1, + BACKGROUND_RED | BACKGROUND_INTENSITY + ); + #endif + } + return stream; + } + + inline + std::ostream& on_bright_green(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[102m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, -1, + BACKGROUND_GREEN | BACKGROUND_INTENSITY + ); + #endif + } + return stream; + } + + inline + std::ostream& on_bright_yellow(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[103m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, -1, + BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_INTENSITY + ); + #endif + } + return stream; + } + + inline + std::ostream& on_bright_blue(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[104m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, -1, + BACKGROUND_BLUE | BACKGROUND_INTENSITY + ); + #endif + } + return stream; + } + + inline + std::ostream& on_bright_magenta(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[105m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, -1, + BACKGROUND_BLUE | BACKGROUND_RED | BACKGROUND_INTENSITY + ); + #endif + } + return stream; + } + + inline + std::ostream& on_bright_cyan(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[106m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, -1, + BACKGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_INTENSITY + ); + #endif + } + return stream; + } + + inline + std::ostream& on_bright_white(std::ostream& stream) + { + if (_internal::is_colorized(stream)) + { + #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) + stream << "\033[107m"; + #elif defined(TERMCOLOR_USE_WINDOWS_API) + _internal::win_change_attributes(stream, -1, + BACKGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_RED | BACKGROUND_INTENSITY + ); + #endif + } + + return stream; + } + + + + //! Since C++ hasn't a way to hide something in the header from + //! the outer access, I have to introduce this namespace which + //! is used for internal purpose and should't be access from + //! the user code. + namespace _internal + { + // An index to be used to access a private storage of I/O streams. See + // colorize / nocolorize I/O manipulators for details. Due to the fact + // that static variables ain't shared between translation units, inline + // function with local static variable is used to do the trick and share + // the variable value between translation units. + inline int colorize_index() + { + static int colorize_index = std::ios_base::xalloc(); + return colorize_index; + } + + //! Since C++ hasn't a true way to extract stream handler + //! from the a given `std::ostream` object, I have to write + //! this kind of hack. + inline + FILE* get_standard_stream(const std::ostream& stream) + { + if (&stream == &std::cout) + return stdout; + else if ((&stream == &std::cerr) || (&stream == &std::clog)) + return stderr; + + return nullptr; + } + + // Say whether a given stream should be colorized or not. It's always + // true for ATTY streams and may be true for streams marked with + // colorize flag. + inline + bool is_colorized(std::ostream& stream) + { + return is_atty(stream) || static_cast(stream.iword(colorize_index())); + } + + //! Test whether a given `std::ostream` object refers to + //! a terminal. + inline + bool is_atty(const std::ostream& stream) + { + FILE* std_stream = get_standard_stream(stream); + + // Unfortunately, fileno() ends with segmentation fault + // if invalid file descriptor is passed. So we need to + // handle this case gracefully and assume it's not a tty + // if standard stream is not detected, and 0 is returned. + if (!std_stream) + return false; + + #if defined(TERMCOLOR_TARGET_POSIX) + return ::isatty(fileno(std_stream)); + #elif defined(TERMCOLOR_TARGET_WINDOWS) + return ::_isatty(_fileno(std_stream)); + #else + return false; + #endif + } + + #if defined(TERMCOLOR_TARGET_WINDOWS) + //! Change Windows Terminal colors attribute. If some + //! parameter is `-1` then attribute won't changed. + inline void win_change_attributes(std::ostream& stream, int foreground, int background) + { + // yeah, i know.. it's ugly, it's windows. + static WORD defaultAttributes = 0; + + // Windows doesn't have ANSI escape sequences and so we use special + // API to change Terminal output color. That means we can't + // manipulate colors by means of "std::stringstream" and hence + // should do nothing in this case. + if (!_internal::is_atty(stream)) + return; + + // get terminal handle + HANDLE hTerminal = INVALID_HANDLE_VALUE; + if (&stream == &std::cout) + hTerminal = GetStdHandle(STD_OUTPUT_HANDLE); + else if (&stream == &std::cerr) + hTerminal = GetStdHandle(STD_ERROR_HANDLE); + + // save default terminal attributes if it unsaved + if (!defaultAttributes) + { + CONSOLE_SCREEN_BUFFER_INFO info; + if (!GetConsoleScreenBufferInfo(hTerminal, &info)) + return; + defaultAttributes = info.wAttributes; + } + + // restore all default settings + if (foreground == -1 && background == -1) + { + SetConsoleTextAttribute(hTerminal, defaultAttributes); + return; + } + + // get current settings + CONSOLE_SCREEN_BUFFER_INFO info; + if (!GetConsoleScreenBufferInfo(hTerminal, &info)) + return; + + if (foreground != -1) + { + info.wAttributes &= ~(info.wAttributes & 0x0F); + info.wAttributes |= static_cast(foreground); + } + + if (background != -1) + { + info.wAttributes &= ~(info.wAttributes & 0xF0); + info.wAttributes |= static_cast(background); + } + + SetConsoleTextAttribute(hTerminal, info.wAttributes); + } + #endif // TERMCOLOR_TARGET_WINDOWS + + } // namespace _internal + +} // namespace termcolor + + +#undef TERMCOLOR_TARGET_POSIX +#undef TERMCOLOR_TARGET_WINDOWS + +#if defined(TERMCOLOR_AUTODETECTED_IMPLEMENTATION) +# undef TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES +# undef TERMCOLOR_USE_WINDOWS_API +#endif + +#endif // TERMCOLOR_HPP_ diff --git a/src/test/TestApp2D.cpp b/src/test/TestApp2D.cpp deleted file mode 100644 index 20f9be3..0000000 --- a/src/test/TestApp2D.cpp +++ /dev/null @@ -1,110 +0,0 @@ -#include "TestApp2D.hpp" -#include -#include -#include -#include - -using namespace ostd; -using namespace ogfx; - - -void TestWidget::create(void) -{ - setSize(120, 50); - setPosition(100, 100); - validate(); - enable(); - connectSignals(); -} - -void TestWidget::renderContent(ogfx::RenderCore& gfx) -{ - // std::cout << getPosition() << "\n"; - gfx.drawQuad(getPosition(), getSize(), { 255, 0, 128 }, false); -} - - -void TestApp2D::onSetup(void) -{ - baseShader = ResourceManager::getDefaultShader(); - gfx.init(); - - camera.createDefault(getWindowWidth(), getWindowHeight()); - gfx.setCamera(camera); - - target.create(getWindowWidth(), getWindowHeight()); - guiLayer.create(getWindowWidth(), getWindowHeight()); - - blender.create({ getWindowWidth(), getWindowHeight() }, camera); - blender.addLayer(target, tBlendModes::Override); - blender.addLayer(guiLayer, tBlendModes::Normal); - - subWin1.create({ 100, 100 }, { 500, 500 }); - subWin1.enable(); - - oxgui::WidgetManager::addWidget(subWin1); - - tabPanel.create(subWin1); - tabPanel.addTab(tab1); - tabPanel.addTab(tab2); - tabPanel.addTab(tab3); - tab1.setText("Tab1"); - tab2.setText("Tab2"); - tab3.setText("Tab3"); - - testWidget.create(); - tab2.addWidget(testWidget); - - validate(); -} - -void TestApp2D::onUpdate(void) -{ - blender.process(gfx); -} - -void TestApp2D::onRender(void) -{ - gfx.bindShader(baseShader); - gfx.setRenderTarget(target); - gfx.clear({ 20, 50, 70 }); - gfx.drawQuad({ 100, 100 }, { 50, 100 }, { 200, 10, 10 }); - gfx.drawText("THIS IS TEXT", Vec2 { 100, 100 }, (float) 40, Color { 255, 255, 0 }); - - gfx.setRenderTarget(guiLayer); - gfx.clear({ 0, 0, 0, 0 }); - oxgui::WidgetManager::render(gfx); - drawDebugInfo(gfx); - - // drawDebugInfo(gfx); - - blender.renderToScreen(gfx, baseShader); -} - -void TestApp2D::onSignal(tSignal& signal) -{ -} - -void TestApp2D::onKeyPressed(Event& evt) -{ -} - -void TestApp2D::onKeyReleased(Event& evt) -{ - -} - -void TestApp2D::onMousePressed(Event& evt) -{ - -} - -void TestApp2D::onMouseReleased(Event& evt) -{ - -} - -void TestApp2D::onMouseMoved(Event& evt) -{ - -} diff --git a/src/test/TestApp2D.hpp b/src/test/TestApp2D.hpp deleted file mode 100644 index a424c96..0000000 --- a/src/test/TestApp2D.hpp +++ /dev/null @@ -1,70 +0,0 @@ -#pragma once - -#include -#include -#include -#include - -class TestWidget : public ogfx::oxgui::Widget -{ - public: - void create(void); - void renderContent(ogfx::RenderCore& gfx) override; -}; - -class TestApp2D : public ogfx::GraphicsApplication2D -{ - public: - void onSetup(void) override; - void onRender(void) override; - void onUpdate(void) override; - - void onSignal(ostd::tSignal& signal) override; - void onKeyPressed(ogfx::Event& evt) override; - void onKeyReleased(ogfx::Event& evt) override; - void onMousePressed(ogfx::Event& evt) override; - void onMouseReleased(ogfx::Event& evt) override; - void onMouseMoved(ogfx::Event& evt) override; - - private: - ostd::ResourceID baseShader; - ogfx::RenderCore gfx; - ogfx::OrthoCamera camera; - ogfx::RenderTarget target; - ogfx::RenderTarget guiLayer; - ogfx::BlendRenderer blender; - - ogfx::oxgui::TabPanel tabPanel; - ogfx::oxgui::SubWindow subWin1; - ogfx::oxgui::TabWidget tab1; - ogfx::oxgui::TabWidget tab2; - ogfx::oxgui::TabWidget tab3; - TestWidget testWidget; - - // ogfx::oxgui::SubWindow panel2; - // ogfx::oxgui::SubWindow panel3; - // ogfx::oxgui::SubWindow subPanel1; -}; - -// #pragma once - -// #include -// #include -// #include -// #include - -// class TestApp2D : public ostd::BaseObject -// { -// public: -// TestApp2D(void); -// void handleSignal(ostd::tSignal& signal); -// void mainLoop(void); - -// private: -// ogfx::Window window; -// ostd::ResourceID baseShader; -// ogfx::RenderCore gfx; -// ogfx::OrthoCamera camera; -// ogfx::RenderTarget target; -// ogfx::BlendRenderer blender; -// }; \ No newline at end of file diff --git a/src/test/TestApp3D.cpp b/src/test/TestApp3D.cpp deleted file mode 100644 index c860930..0000000 --- a/src/test/TestApp3D.cpp +++ /dev/null @@ -1,233 +0,0 @@ -#include "TestApp3D.hpp" -#include -#include -#include -#include - -TestApp3D::TestApp3D(void) -{ - UI16Point screenSize = { 1280, 720 }; - - window.create(screenSize, "OmniaX 3D Test", tContextSettings()); - window.centerMouse().hideMouseCursor(); - camera.create(window); - - tempMesh = OX3DLoader::loadSingleMeshFromFile("models/monkey2.ox3d", "textures"); - screenPlane = Mesh::newPlaneMesh(); - floor = Mesh::newCubeMesh(); - lightEmitter = Mesh::newCubeMesh(); - skyboxCube = Mesh::newCubeMesh(); - if (OX3DLoader::errorOccurred()) - { - OX_ERROR("OX3DLoader failed to load model."); - exit(1); - return; - } - -// glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); //TODO: Add option for wireframe - glEnable(GL_BLEND); - glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - glEnable(GL_DEPTH_TEST); - glEnable(GL_CULL_FACE); - - - basicShaderID = ResourceManager::loadShader("basicShader", false); - lightShaderID = ResourceManager::loadShader("lightShader", false); - screenPlaneShaderID = ResourceManager::loadShader("screenPlane", false); - skyboxShaderID = ResourceManager::loadShader("skybox", false); - boxTextureID = ResourceManager::loadTexture("textures/container2.png"); - boxTextureSpecID = ResourceManager::loadTexture("textures/container2_specular.png"); - - auto& basicShader = ResourceManager::getShader(basicShaderID); - basicShader.registerUniform("material.diffuse"); - basicShader.registerUniform("material.specular"); - basicShader.registerUniform("material.shininess"); - - basicShader.registerUniform("light.position"); - basicShader.registerUniform("light.direction"); - basicShader.registerUniform("light.cutOff"); - basicShader.registerUniform("light.outerCutOff"); - basicShader.registerUniform("light.ambient"); - basicShader.registerUniform("light.diffuse"); - basicShader.registerUniform("light.specular"); - basicShader.registerUniform("light.linear"); - basicShader.registerUniform("light.constant"); - basicShader.registerUniform("light.quadratic"); - basicShader.registerUniform("light.type"); - - skyBox.create(skyboxPaths); - - validate(); - enableSignals(); - connectSignal(tBuiltinSignals::OnGuiEvent); - window.initialize(); - tempMesh.initialize(); - screenPlane.initialize(); - target.create(screenSize.x, screenSize.y); - - floor.initialize(); - floor.getTransform().rotate({ -90.0f, 0.0f, 0.0f }).scale({ 300.0f, 0.01f, 300.0f }).translate({ 0.0f, -3.0f, 0.0f }).apply(); - lightEmitter.initialize(); - lightEmitter.getTransform().scale({ 0.3f, 0.3f, 0.3f }).translate({ 10.0f, 10.0f, 2.0f }).apply(); - skyboxCube.initialize(); - skyboxCube.getTransform().scale({ 400.0f, 400.0f, 400.0f }).apply(); -} - -void TestApp3D::handleSignal(ostd::tSignal &signal) -{ - if (signal.ID == tBuiltinSignals::OnGuiEvent) - { - Event& evt = (Event&)signal.userData; - sf::Event& event = evt.sf(); - if (event.type == sf::Event::Closed) - { - window.close(); - } - else if (event.type == sf::Event::KeyPressed) - { - if (event.key.code == sf::Keyboard::Escape) - window.close(); - else if (event.key.code == sf::Keyboard::W) - camera.KeyPressed(FirstPersonCamera::KeyForward); - else if (event.key.code == sf::Keyboard::A) - camera.KeyPressed(FirstPersonCamera::KeyLeft); - else if (event.key.code == sf::Keyboard::S) - camera.KeyPressed(FirstPersonCamera::KeyBackwards); - else if (event.key.code == sf::Keyboard::D) - camera.KeyPressed(FirstPersonCamera::KeyRight); - else if (event.key.code == sf::Keyboard::Space) - camera.KeyPressed(FirstPersonCamera::KeyUp); - else if (event.key.code == sf::Keyboard::LShift) - camera.KeyPressed(FirstPersonCamera::KeyDown); - } - else if (event.type == sf::Event::KeyReleased) - { - if (event.key.code == sf::Keyboard::W) - camera.keyReleased(FirstPersonCamera::KeyForward); - else if (event.key.code == sf::Keyboard::A) - camera.keyReleased(FirstPersonCamera::KeyLeft); - else if (event.key.code == sf::Keyboard::S) - camera.keyReleased(FirstPersonCamera::KeyBackwards); - else if (event.key.code == sf::Keyboard::D) - camera.keyReleased(FirstPersonCamera::KeyRight); - else if (event.key.code == sf::Keyboard::Space) - camera.keyReleased(FirstPersonCamera::KeyUp); - else if (event.key.code == sf::Keyboard::LShift) - camera.keyReleased(FirstPersonCamera::KeyDown); - } - else if (event.type == sf::Event::Resized) - { - // adjust the viewport when the window is resized - glViewport(0, 0, event.size.width, event.size.height); - window.initialize(); - camera.updateProjectionMatrix(); - } - else if (event.type == sf::Event::MouseMoved) - { - if (!window.isMouseMoveEnabled()) - { - window.disableMouseMove(false); - return; - } - camera.mouseMoved((float)event.mouseMove.x, (float)event.mouseMove.y); - } - } -} - -void TestApp3D::gameLoop(void) -{ - auto& basicShader = ResourceManager::getShader(basicShaderID); - if (basicShader.isInvalid()) exit(1); - auto& lightShader = ResourceManager::getShader(lightShaderID); - if (lightShader.isInvalid()) exit(2); - auto& boxTexture = ResourceManager::getTexture(boxTextureID); - auto& boxTextureSpec = ResourceManager::getTexture(boxTextureSpecID); - - auto& tempMeshTexture = ResourceManager::getTexture(tempMesh.textures[0]); - - auto& screenPlaneShader = ResourceManager::getShader(screenPlaneShaderID); - - auto& skyboxShader = ResourceManager::getShader(skyboxShaderID); - - Color::FloatCol skyCol { 10.0f / 255.0f, 30.0f / 255.0f, 30.0f / 255.0f, 1.0f }; - - while (window.isRunning()) - { - window.handleEvents(); - camera.update(); - target.bind(); - glEnable(GL_DEPTH_TEST); - glClearColor(skyCol.r, skyCol.g, skyCol.b, skyCol.a); - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); - - glDepthMask(GL_FALSE); - glDisable(GL_CULL_FACE); - skyboxShader.bind(); - skyboxShader.updateUniform_mat4f("view", glm::mat4(glm::mat3(camera.getViewMat()))); - skyboxShader.updateUniform_mat4f("proj", camera.getProjMat()); - skyboxShader.updateUniform_i("skybox", 0); - skyboxCube.bind(); - skyboxCube.draw(); - glDepthMask(GL_TRUE); - - tempMesh.getTransform().rotate({ 0.0f, 0.0f, 0.5f }).apply(); - - - tempMeshTexture.bind(0); - boxTextureSpec.bind(1); - basicShader.bind(); - - basicShader.updateUniform_i("material.diffuse", 0); - basicShader.updateUniform_i("material.specular", 1); - basicShader.updateUniform_f("material.shininess", 64.0f); - - basicShader.updateUniform_vec3f("light.ambient", { 0.07f, 0.07f, 0.07f }); - basicShader.updateUniform_vec3f("light.diffuse", { 0.5f, 0.5f, 0.5f }); - basicShader.updateUniform_vec3f("light.specular", { 1.0f, 1.0f, 1.0f }); - basicShader.updateUniform_vec3f("light.position", lightEmitter.getTransform().getTranslation()); - basicShader.updateUniform_vec3f("light.direction", camera.getFront()); - basicShader.updateUniform_f("light.constant", 1.0f); - basicShader.updateUniform_f("light.linear", 0.009f); - basicShader.updateUniform_f("light.quadratic", 0.032f); - basicShader.updateUniform_i("light.type", 2); - basicShader.updateUniform_f("light.cutOff", glm::cos(glm::radians(12.5f))); - basicShader.updateUniform_f("light.outerCutOff", glm::cos(glm::radians(17.5f))); - - basicShader.updateUniform_vec3f("uViewPosition", camera.getPosition()); - basicShader.updateUniform_mat4f("uModel", tempMesh.getTransform().getMatrix()); - basicShader.updateUniform_mat4f("uView", camera.getViewMat()); - basicShader.updateUniform_mat4f("uProj", camera.getProjMat()); - basicShader.updateUniform_mat4f("uNorm", tempMesh.getTransform().getNormalMatrix()); - tempMesh.bind(); - tempMesh.draw(); - - basicShader.updateUniform_f("material.shininess", 4.0f); - basicShader.updateUniform_mat4f("uModel", floor.getTransform().getMatrix()); - basicShader.updateUniform_mat4f("uNorm", floor.getTransform().getNormalMatrix()); - boxTexture.bind(); - floor.bind(); - floor.draw(); - - glDisable(GL_CULL_FACE); - lightShader.bind(); - lightShader.updateUniform_mat4f("uModel", lightEmitter.getTransform().getMatrix()); - lightShader.updateUniform_mat4f("uView", camera.getViewMat()); - lightShader.updateUniform_mat4f("uProj", camera.getProjMat()); - lightEmitter.draw(); - - - target.unbind(); - - screenPlaneShader.bind(); - glDisable(GL_DEPTH_TEST); - glDisable(GL_CULL_FACE); - ResourceManager::getTexture(target.getResourceID()).bind(0); - screenPlaneShader.updateUniform_i("screenTexture", 0); - glClear(GL_COLOR_BUFFER_BIT); - screenPlane.bind(); - screenPlane.draw(); - - window.renderFrame(); - } -} \ No newline at end of file diff --git a/src/test/TestApp3D.hpp b/src/test/TestApp3D.hpp deleted file mode 100644 index 7a00232..0000000 --- a/src/test/TestApp3D.hpp +++ /dev/null @@ -1,51 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include - -using namespace ostd; -using namespace ogfx; - -class TestApp3D : public ostd::BaseObject -{ - public: - TestApp3D(void); - void handleSignal(ostd::tSignal& signal) override; - void gameLoop(void); - - public: - Window window; - FirstPersonCamera camera; - - Mesh floor; - //TempCubeMesh cube; - Mesh lightEmitter; - - ResourceID basicShaderID; - ResourceID lightShaderID; - ResourceID boxTextureID; - ResourceID boxTextureSpecID; - - Mesh tempMesh; - - RenderTarget target; - Mesh screenPlane; - ResourceID screenPlaneShaderID; - - CubeTexture skyBox; - - const std::vector skyboxPaths { - "textures/skybox/right.jpg", - "textures/skybox/left.jpg", - "textures/skybox/top.jpg", - "textures/skybox/bottom.jpg", - "textures/skybox/front.jpg", - "textures/skybox/back.jpg", - }; - - Mesh skyboxCube; - ResourceID skyboxShaderID; -}; \ No newline at end of file diff --git a/src/test/TetrisApp.cpp b/src/test/TetrisApp.cpp deleted file mode 100644 index 655d07c..0000000 --- a/src/test/TetrisApp.cpp +++ /dev/null @@ -1,265 +0,0 @@ -#include "TetrisApp.hpp" -#include -#include -#include -#include - -using namespace ostd; -using namespace ogfx; - -TetrisPiece::TetrisPiece(ostd::Vec2 spawnPos) -{ - newRandomPiece(); - m_topLeft = spawnPos; -} - -void TetrisPiece::rotate(void) -{ - m_currentPosition = (++m_currentPosition % 4); -} - -void TetrisPiece::newRandomPiece(void) -{ - uint8_t pieceIndex = Random::geti8(0, 6); - uint8_t rotationIndex = Random::geti8(0, 3); - - switch(pieceIndex) - { - case 0: copy_positions(TetrisPieces::O); break; - case 1: copy_positions(TetrisPieces::I); break; - case 2: copy_positions(TetrisPieces::S); break; - case 3: copy_positions(TetrisPieces::Z); break; - case 4: copy_positions(TetrisPieces::L); break; - case 5: copy_positions(TetrisPieces::J); break; - case 6: copy_positions(TetrisPieces::T); break; - } - - m_currentPosition = rotationIndex; -} - -void TetrisPiece::draw(ogfx::RenderCore& gfx, float tileSize, ostd::TextureID texture) -{ - for (uint8_t x = 0; x < 4; x++) - { - for (uint8_t y = 0; y < 4; y++) - { - if (m_positions[m_currentPosition][y][x] == 1) - { - ostd::Vec2 pos = m_topLeft; - pos.x += (tileSize * x); - pos.y += (tileSize * y); - gfx.drawImage(texture, pos, { tileSize, tileSize }, { 128, 0, 0 }, false); - } - else - { - ostd::Vec2 pos = m_topLeft; - pos.x += (tileSize * x); - pos.y += (tileSize * y); - gfx.drawImage(texture, pos, { tileSize, tileSize }, { 0, 128, 0, 50 }, false); - } - } - } -} - -void TetrisPiece::update(float tileSize, int32_t currentSpeed) -{ - if (m_currentStep++ < currentSpeed) return; - m_currentStep = 0; - m_topLeft.y += tileSize; -} - -float TetrisPiece::getBottomPoint(float tileSize) -{ - for (int8_t y = 3; y >= 0; y--) - { - for (int8_t x = 0; x < 4; x++) - { - if (m_positions[m_currentPosition][y][x] == 1) - return (y + 1) * tileSize; - } - } - return 0; -} - -float TetrisPiece::getTopPoint(float tileSize) -{ - for (int8_t y = 0; y < 4; y++) - { - for (int8_t x = 0; x < 4; x++) - { - if (m_positions[m_currentPosition][y][x] == 1) - return y * tileSize; - } - } - return 0; -} - -float TetrisPiece::getLeftPoint(float tileSize) -{ - for (int8_t x = 0; x < 4; x++) - { - for (int8_t y = 0; y < 4; y++) - { - if (m_positions[m_currentPosition][y][x] == 1) - return x * tileSize; - } - } - return 0; -} - -float TetrisPiece::getRightPoint(float tileSize) -{ - for (int8_t x = 3; x >= 0; x--) - { - for (int8_t y = 0; y < 4; y++) - { - if (m_positions[m_currentPosition][y][x] == 1) - return (x + 1) * tileSize; - } - } - return 0; -} - -void TetrisPiece::moveLeft(float tileSize) -{ - m_topLeft.x -= tileSize; -} - -void TetrisPiece::moveRight(float tileSize) -{ - m_topLeft.x += tileSize; -} - -void TetrisPiece::copy_positions(const uint8_t pos[4][4][4]) -{ - for (uint8_t i = 0; i < 4; i++) - { - for (uint8_t j = 0; j < 4; j++) - { - for (uint8_t k = 0; k < 4; k++) - { - m_positions[i][j][k] = pos[i][j][k]; - } - } - } -} - - - -void TetrisApp::onSetup(void) -{ - baseShader = ResourceManager::getDefaultShader(); - gfx.init(); - - camera.createDefault(getWindowWidth(), getWindowHeight()); - gfx.setCamera(camera); - - target.create(getWindowWidth(), getWindowHeight()); - guiLayer.create(getWindowWidth(), getWindowHeight()); - - blender.create({ getWindowWidth(), getWindowHeight() }, camera); - blender.addLayer(target, tBlendModes::Override); - blender.addLayer(guiLayer, tBlendModes::Normal); - - tetrisTile.texture = ogfx::ResourceManager::loadTexture("textures/tetris.png"); - auto& tex = ogfx::ResourceManager::getTexture(tetrisTile.texture); - tetrisTile.tile = tex.addTileInfo(0, 0, 32, 32); - - ogfx::DebugTools::m_debugWindowTabPanel.selectTab(1); - - topLeft.x = (getWindowWidth() / 2.0f) - ((tileSize * (hTiles + 2)) / 2.0f); - topLeft.y = getWindowHeight() - (tileSize * (vTiles + 2)); - - ostd::Vec2 piecePos = topLeft; - piecePos.y += tileSize; - piecePos.y -= piece.getBottomPoint(tileSize); - piecePos.x += (((hTiles) * tileSize) - (2 * tileSize)) / 2.0f; - piece.setPosition(piecePos); - - validate(); -} - -void TetrisApp::onUpdate(void) -{ - piece.update(tileSize, speed); - blender.process(gfx); -} - -void TetrisApp::onRender(void) -{ - gfx.bindShader(baseShader); - - gfx.setRenderTarget(target); - gfx.clear({ 10, 10, 10 }); - - gfx.drawQuad(topLeft, { ((hTiles + 2) * tileSize), ((vTiles + 2) * tileSize) }, { 30, 30, 30 }, false); - - piece.draw(gfx, tileSize, tetrisTile); - - for (uint32_t x = 0; x < (hTiles + 2); x++) - { - gfx.drawImage(tetrisTile, { topLeft.x + (x * tileSize), topLeft.y - tileSize }, { tileSize, tileSize }, { 20, 20, 20 }, false); - gfx.drawImage(tetrisTile, { topLeft.x + (x * tileSize), topLeft.y }, { tileSize, tileSize }, borderColor, false); - gfx.drawImage(tetrisTile, { topLeft.x + (x * tileSize), getWindowHeight() - tileSize }, { tileSize, tileSize }, borderColor, false); - } - for (uint32_t y = 1; y <= vTiles; y++) - { - gfx.drawImage(tetrisTile, { topLeft.x, topLeft.y + (y * tileSize) }, { tileSize, tileSize }, borderColor, false); - gfx.drawImage(tetrisTile, { topLeft.x + ((hTiles + 1) * tileSize), topLeft.y + (y * tileSize) }, { tileSize, tileSize }, borderColor, false); - } - - gfx.setRenderTarget(guiLayer); - gfx.clear({ 0, 0, 0, 0 }); - if (showDebugWindow) - oxgui::WidgetManager::render(gfx); - drawDebugInfo(gfx); - - blender.renderToScreen(gfx, baseShader); -} - -void TetrisApp::onSignal(tSignal& signal) -{ -} - -void TetrisApp::onKeyPressed(Event& evt) -{ - if (evt.sf().key.code == sf::Keyboard::F12) - { - showDebugWindow = !showDebugWindow; - ogfx::DebugTools::m_debugWindowTabPanel.selectTab((showDebugWindow ? 0 : 1)); - } - else if (evt.sf().key.code == sf::Keyboard::W) - { - piece.rotate(); - } - else if (evt.sf().key.code == sf::Keyboard::A) - { - if (piece.getPosition().x + piece.getLeftPoint(tileSize) > (topLeft.x + tileSize)) - piece.moveLeft(tileSize); - } - else if (evt.sf().key.code == sf::Keyboard::D) - { - if (piece.getPosition().x + piece.getRightPoint(tileSize) < (topLeft.x + tileSize + (hTiles * tileSize))) - piece.moveRight(tileSize); - } -} - -void TetrisApp::onKeyReleased(Event& evt) -{ - -} - -void TetrisApp::onMousePressed(Event& evt) -{ - -} - -void TetrisApp::onMouseReleased(Event& evt) -{ - -} - -void TetrisApp::onMouseMoved(Event& evt) -{ - -} diff --git a/src/test/TetrisApp.hpp b/src/test/TetrisApp.hpp deleted file mode 100644 index 4a13dba..0000000 --- a/src/test/TetrisApp.hpp +++ /dev/null @@ -1,222 +0,0 @@ -#pragma once - -#include -#include -#include -#include - -struct TetrisPieces -{ - inline static constexpr uint8_t O[4][4][4] = { - { { 0, 1, 1, 0 }, - { 0, 1, 1, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 } }, - - { { 0, 1, 1, 0 }, - { 0, 1, 1, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 } }, - - { { 0, 1, 1, 0 }, - { 0, 1, 1, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 } }, - - { { 0, 1, 1, 0 }, - { 0, 1, 1, 0 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 } } - }; - inline static constexpr uint8_t I[4][4][4] = { - { { 0, 0, 0, 0 }, - { 1, 1, 1, 1 }, - { 0, 0, 0, 0 }, - { 0, 0, 0, 0 } }, - - { { 0, 0, 1, 0 }, - { 0, 0, 1, 0 }, - { 0, 0, 1, 0 }, - { 0, 0, 1, 0 } }, - - { { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 1, 1, 1, 1 }, - { 0, 0, 0, 0 } }, - - { { 0, 1, 0, 0 }, - { 0, 1, 0, 0 }, - { 0, 1, 0, 0 }, - { 0, 1, 0, 0 } } - }; - inline static constexpr uint8_t S[4][4][4] = { - { { 0, 0, 0, 0 }, - { 0, 1, 1, 0 }, - { 1, 1, 0, 0 }, - { 0, 0, 0, 0 } }, - - { { 0, 0, 0, 0 }, - { 0, 1, 0, 0 }, - { 0, 1, 1, 0 }, - { 0, 0, 1, 0 } }, - - { { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 0, 1, 1, 0 }, - { 1, 1, 0, 0 } }, - - { { 0, 0, 0, 0 }, - { 1, 0, 0, 0 }, - { 1, 1, 0, 0 }, - { 0, 1, 0, 0 } } - }; - inline static constexpr uint8_t Z[4][4][4] = { - { { 0, 0, 0, 0 }, - { 1, 1, 0, 0 }, - { 0, 1, 1, 0 }, - { 0, 0, 0, 0 } }, - - { { 0, 0, 0, 0 }, - { 0, 0, 1, 0 }, - { 0, 1, 1, 0 }, - { 0, 1, 0, 0 } }, - - { { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 1, 1, 0, 0 }, - { 0, 1, 1, 0 } }, - - { { 0, 0, 0, 0 }, - { 0, 1, 0, 0 }, - { 1, 1, 0, 0 }, - { 1, 0, 0, 0 } } - }; - inline static constexpr uint8_t L[4][4][4] = { - { { 0, 0, 0, 0 }, - { 0, 0, 1, 0 }, - { 1, 1, 1, 0 }, - { 0, 0, 0, 0 } }, - - { { 0, 0, 0, 0 }, - { 0, 1, 0, 0 }, - { 0, 1, 0, 0 }, - { 0, 1, 1, 0 } }, - - { { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 1, 1, 1, 0 }, - { 1, 0, 0, 0 } }, - - { { 0, 0, 0, 0 }, - { 1, 1, 0, 0 }, - { 0, 1, 0, 0 }, - { 0, 1, 0, 0 } } - }; - inline static constexpr uint8_t J[4][4][4] = { - { { 0, 0, 0, 0 }, - { 1, 0, 0, 0 }, - { 1, 1, 1, 0 }, - { 0, 0, 0, 0 } }, - - { { 0, 0, 0, 0 }, - { 0, 1, 1, 0 }, - { 0, 1, 0, 0 }, - { 0, 1, 0, 0 } }, - - { { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 1, 1, 1, 0 }, - { 0, 0, 1, 0 } }, - - { { 0, 0, 0, 0 }, - { 0, 1, 0, 0 }, - { 0, 1, 0, 0 }, - { 1, 1, 0, 0 } } - }; - inline static constexpr uint8_t T[4][4][4] = { - { { 0, 0, 0, 0 }, - { 0, 1, 0, 0 }, - { 1, 1, 1, 0 }, - { 0, 0, 0, 0 } }, - - { { 0, 0, 0, 0 }, - { 0, 1, 0, 0 }, - { 0, 1, 1, 0 }, - { 0, 1, 0, 0 } }, - - { { 0, 0, 0, 0 }, - { 0, 0, 0, 0 }, - { 1, 1, 1, 0 }, - { 0, 1, 0, 0 } }, - - { { 0, 0, 0, 0 }, - { 0, 1, 0, 0 }, - { 1, 1, 0, 0 }, - { 0, 1, 0, 0 } } - }; -}; - -class TetrisPiece -{ - public: - TetrisPiece(ostd::Vec2 spawnPos = { 0.0f, 0.0f }); - void rotate(void); - void newRandomPiece(void); - void draw(ogfx::RenderCore& gfx, float tileSize, ostd::TextureID texture); - void update(float tileSize, int32_t currentSpeed); - float getBottomPoint(float tileSize); - float getTopPoint(float tileSize); - float getLeftPoint(float tileSize); - float getRightPoint(float tileSize); - void moveLeft(float tileSize); - void moveRight(float tileSize); - - inline void setPosition(ostd::Vec2 pos) { m_topLeft = pos; } - inline ostd::Vec2 getPosition(void) { return m_topLeft; } - - private: - void copy_positions(const uint8_t pos[4][4][4]); - - private: - uint8_t m_positions[4][4][4]; - uint8_t m_currentPosition { 0 }; - - ostd::Vec2 m_topLeft { 0.0f, 0.0f }; - int32_t m_currentStep { 0 }; - -}; - -class TetrisApp : public ogfx::GraphicsApplication2D -{ - public: - void onSetup(void) override; - void onRender(void) override; - void onUpdate(void) override; - - void onSignal(ostd::tSignal& signal) override; - void onKeyPressed(ogfx::Event& evt) override; - void onKeyReleased(ogfx::Event& evt) override; - void onMousePressed(ogfx::Event& evt) override; - void onMouseReleased(ogfx::Event& evt) override; - void onMouseMoved(ogfx::Event& evt) override; - - private: - ostd::ResourceID baseShader; - ogfx::RenderCore gfx; - ogfx::OrthoCamera camera; - ogfx::RenderTarget target; - ogfx::RenderTarget guiLayer; - ogfx::BlendRenderer blender; - ostd::TextureID tetrisTile; - - bool showDebugWindow { false }; - - ostd::Color borderColor { 50, 50, 50 }; - float tileSize = 32.0f; - float hTiles = 10.0f; - float vTiles = 20.0f; - ostd::Vec2 topLeft { 0.0f, 0.0f }; - - TetrisPiece piece; - uint32_t speed { 60 }; -}; \ No newline at end of file diff --git a/src/test/main.cpp b/src/test/main.cpp deleted file mode 100755 index 22e1c7f..0000000 --- a/src/test/main.cpp +++ /dev/null @@ -1,20 +0,0 @@ -// #include "TestApp2D.hpp" -#include "TestApp3D.hpp" -// #include "TetrisApp.hpp" - -int main(int argc, char** argv) -{ - // ogfx::DebugTools::enableDebugWindow(); - // ogfx::DebugTools::m_drawBasicFrameInfo = true; - - // TetrisApp app; - // app.create(32*40, 720, "OmniaFramework TEST"); - // while (app.isRunning()) - // app.nextFrame(); - // app.destroy(); - - TestApp3D app; - app.gameLoop(); - - return 0; -} diff --git a/src/vendor/GLAD/KHR/khrplatform.h b/src/vendor/GLAD/KHR/khrplatform.h deleted file mode 100755 index 0164644..0000000 --- a/src/vendor/GLAD/KHR/khrplatform.h +++ /dev/null @@ -1,311 +0,0 @@ -#ifndef __khrplatform_h_ -#define __khrplatform_h_ - -/* -** Copyright (c) 2008-2018 The Khronos Group Inc. -** -** Permission is hereby granted, free of charge, to any person obtaining a -** copy of this software and/or associated documentation files (the -** "Materials"), to deal in the Materials without restriction, including -** without limitation the rights to use, copy, modify, merge, publish, -** distribute, sublicense, and/or sell copies of the Materials, and to -** permit persons to whom the Materials are 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 Materials. -** -** THE MATERIALS ARE 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 -** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. -*/ - -/* Khronos platform-specific types and definitions. - * - * The master copy of khrplatform.h is maintained in the Khronos EGL - * Registry repository at https://github.com/KhronosGroup/EGL-Registry - * The last semantic modification to khrplatform.h was at commit ID: - * 67a3e0864c2d75ea5287b9f3d2eb74a745936692 - * - * Adopters may modify this file to suit their platform. Adopters are - * encouraged to submit platform specific modifications to the Khronos - * group so that they can be included in future versions of this file. - * Please submit changes by filing pull requests or issues on - * the EGL Registry repository linked above. - * - * - * See the Implementer's Guidelines for information about where this file - * should be located on your system and for more details of its use: - * http://www.khronos.org/registry/implementers_guide.pdf - * - * This file should be included as - * #include - * by Khronos client API header files that use its types and defines. - * - * The types in khrplatform.h should only be used to define API-specific types. - * - * Types defined in khrplatform.h: - * khronos_int8_t signed 8 bit - * khronos_uint8_t unsigned 8 bit - * khronos_int16_t signed 16 bit - * khronos_uint16_t unsigned 16 bit - * khronos_int32_t signed 32 bit - * khronos_uint32_t unsigned 32 bit - * khronos_int64_t signed 64 bit - * khronos_uint64_t unsigned 64 bit - * khronos_intptr_t signed same number of bits as a pointer - * khronos_uintptr_t unsigned same number of bits as a pointer - * khronos_ssize_t signed size - * khronos_usize_t unsigned size - * khronos_float_t signed 32 bit floating point - * khronos_time_ns_t unsigned 64 bit time in nanoseconds - * khronos_utime_nanoseconds_t unsigned time interval or absolute time in - * nanoseconds - * khronos_stime_nanoseconds_t signed time interval in nanoseconds - * khronos_boolean_enum_t enumerated boolean type. This should - * only be used as a base type when a client API's boolean type is - * an enum. Client APIs which use an integer or other type for - * booleans cannot use this as the base type for their boolean. - * - * Tokens defined in khrplatform.h: - * - * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. - * - * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. - * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. - * - * Calling convention macros defined in this file: - * KHRONOS_APICALL - * KHRONOS_APIENTRY - * KHRONOS_APIATTRIBUTES - * - * These may be used in function prototypes as: - * - * KHRONOS_APICALL void KHRONOS_APIENTRY funcname( - * int arg1, - * int arg2) KHRONOS_APIATTRIBUTES; - */ - -#if defined(__SCITECH_SNAP__) && !defined(KHRONOS_STATIC) -# define KHRONOS_STATIC 1 -#endif - -/*------------------------------------------------------------------------- - * Definition of KHRONOS_APICALL - *------------------------------------------------------------------------- - * This precedes the return type of the function in the function prototype. - */ -#if defined(KHRONOS_STATIC) - /* If the preprocessor constant KHRONOS_STATIC is defined, make the - * header compatible with static linking. */ -# define KHRONOS_APICALL -#elif defined(_WIN32) -# define KHRONOS_APICALL __declspec(dllimport) -#elif defined (__SYMBIAN32__) -# define KHRONOS_APICALL IMPORT_C -#elif defined(__ANDROID__) -# define KHRONOS_APICALL __attribute__((visibility("default"))) -#else -# define KHRONOS_APICALL -#endif - -/*------------------------------------------------------------------------- - * Definition of KHRONOS_APIENTRY - *------------------------------------------------------------------------- - * This follows the return type of the function and precedes the function - * name in the function prototype. - */ -#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__) - /* Win32 but not WinCE */ -# define KHRONOS_APIENTRY __stdcall -#else -# define KHRONOS_APIENTRY -#endif - -/*------------------------------------------------------------------------- - * Definition of KHRONOS_APIATTRIBUTES - *------------------------------------------------------------------------- - * This follows the closing parenthesis of the function prototype arguments. - */ -#if defined (__ARMCC_2__) -#define KHRONOS_APIATTRIBUTES __softfp -#else -#define KHRONOS_APIATTRIBUTES -#endif - -/*------------------------------------------------------------------------- - * basic type definitions - *-----------------------------------------------------------------------*/ -#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) - - -/* - * Using - */ -#include -typedef int32_t khronos_int32_t; -typedef uint32_t khronos_uint32_t; -typedef int64_t khronos_int64_t; -typedef uint64_t khronos_uint64_t; -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 -/* - * To support platform where unsigned long cannot be used interchangeably with - * inptr_t (e.g. CHERI-extended ISAs), we can use the stdint.h intptr_t. - * Ideally, we could just use (u)intptr_t everywhere, but this could result in - * ABI breakage if khronos_uintptr_t is changed from unsigned long to - * unsigned long long or similar (this results in different C++ name mangling). - * To avoid changes for existing platforms, we restrict usage of intptr_t to - * platforms where the size of a pointer is larger than the size of long. - */ -#if defined(__SIZEOF_LONG__) && defined(__SIZEOF_POINTER__) -#if __SIZEOF_POINTER__ > __SIZEOF_LONG__ -#define KHRONOS_USE_INTPTR_T -#endif -#endif - -#elif defined(__VMS ) || defined(__sgi) - -/* - * Using - */ -#include -typedef int32_t khronos_int32_t; -typedef uint32_t khronos_uint32_t; -typedef int64_t khronos_int64_t; -typedef uint64_t khronos_uint64_t; -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#elif defined(_WIN32) && !defined(__SCITECH_SNAP__) - -/* - * Win32 - */ -typedef __int32 khronos_int32_t; -typedef unsigned __int32 khronos_uint32_t; -typedef __int64 khronos_int64_t; -typedef unsigned __int64 khronos_uint64_t; -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#elif defined(__sun__) || defined(__digital__) - -/* - * Sun or Digital - */ -typedef int khronos_int32_t; -typedef unsigned int khronos_uint32_t; -#if defined(__arch64__) || defined(_LP64) -typedef long int khronos_int64_t; -typedef unsigned long int khronos_uint64_t; -#else -typedef long long int khronos_int64_t; -typedef unsigned long long int khronos_uint64_t; -#endif /* __arch64__ */ -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#elif 0 - -/* - * Hypothetical platform with no float or int64 support - */ -typedef int khronos_int32_t; -typedef unsigned int khronos_uint32_t; -#define KHRONOS_SUPPORT_INT64 0 -#define KHRONOS_SUPPORT_FLOAT 0 - -#else - -/* - * Generic fallback - */ -#include -typedef int32_t khronos_int32_t; -typedef uint32_t khronos_uint32_t; -typedef int64_t khronos_int64_t; -typedef uint64_t khronos_uint64_t; -#define KHRONOS_SUPPORT_INT64 1 -#define KHRONOS_SUPPORT_FLOAT 1 - -#endif - - -/* - * Types that are (so far) the same on all platforms - */ -typedef signed char khronos_int8_t; -typedef unsigned char khronos_uint8_t; -typedef signed short int khronos_int16_t; -typedef unsigned short int khronos_uint16_t; - -/* - * Types that differ between LLP64 and LP64 architectures - in LLP64, - * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears - * to be the only LLP64 architecture in current use. - */ -#ifdef KHRONOS_USE_INTPTR_T -typedef intptr_t khronos_intptr_t; -typedef uintptr_t khronos_uintptr_t; -#elif defined(_WIN64) -typedef signed long long int khronos_intptr_t; -typedef unsigned long long int khronos_uintptr_t; -#else -typedef signed long int khronos_intptr_t; -typedef unsigned long int khronos_uintptr_t; -#endif - -#if defined(_WIN64) -typedef signed long long int khronos_ssize_t; -typedef unsigned long long int khronos_usize_t; -#else -typedef signed long int khronos_ssize_t; -typedef unsigned long int khronos_usize_t; -#endif - -#if KHRONOS_SUPPORT_FLOAT -/* - * Float type - */ -typedef float khronos_float_t; -#endif - -#if KHRONOS_SUPPORT_INT64 -/* Time types - * - * These types can be used to represent a time interval in nanoseconds or - * an absolute Unadjusted System Time. Unadjusted System Time is the number - * of nanoseconds since some arbitrary system event (e.g. since the last - * time the system booted). The Unadjusted System Time is an unsigned - * 64 bit value that wraps back to 0 every 584 years. Time intervals - * may be either signed or unsigned. - */ -typedef khronos_uint64_t khronos_utime_nanoseconds_t; -typedef khronos_int64_t khronos_stime_nanoseconds_t; -#endif - -/* - * Dummy value used to pad enum types to 32 bits. - */ -#ifndef KHRONOS_MAX_ENUM -#define KHRONOS_MAX_ENUM 0x7FFFFFFF -#endif - -/* - * Enumerated boolean type - * - * Values other than zero should be considered to be true. Therefore - * comparisons should not be made against KHRONOS_TRUE. - */ -typedef enum { - KHRONOS_FALSE = 0, - KHRONOS_TRUE = 1, - KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM -} khronos_boolean_enum_t; - -#endif /* __khrplatform_h_ */ diff --git a/src/vendor/GLAD/glad.c b/src/vendor/GLAD/glad.c deleted file mode 100755 index fd7c93e..0000000 --- a/src/vendor/GLAD/glad.c +++ /dev/null @@ -1,1840 +0,0 @@ -/* - - OpenGL loader generated by glad 0.1.35 on Sat Apr 16 00:37:43 2022. - - Language/Generator: C/C++ - Specification: gl - APIs: gl=3.3 - Profile: compatibility - Extensions: - - Loader: True - Local files: False - Omit khrplatform: False - Reproducible: False - - Commandline: - --profile="compatibility" --api="gl=3.3" --generator="c" --spec="gl" --extensions="" - Online: - https://glad.dav1d.de/#profile=compatibility&language=c&specification=gl&loader=on&api=gl%3D3.3 -*/ - -#include -#include -#include -#include - -static void* get_proc(const char *namez); - -#if defined(_WIN32) || defined(__CYGWIN__) -#ifndef _WINDOWS_ -#undef APIENTRY -#endif -#include -static HMODULE libGL; - -typedef void* (APIENTRYP PFNWGLGETPROCADDRESSPROC_PRIVATE)(const char*); -static PFNWGLGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr; - -#ifdef _MSC_VER -#ifdef __has_include - #if __has_include() - #define HAVE_WINAPIFAMILY 1 - #endif -#elif _MSC_VER >= 1700 && !_USING_V110_SDK71_ - #define HAVE_WINAPIFAMILY 1 -#endif -#endif - -#ifdef HAVE_WINAPIFAMILY - #include - #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) && WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) - #define IS_UWP 1 - #endif -#endif - -static -int open_gl(void) { -#ifndef IS_UWP - libGL = LoadLibraryW(L"opengl32.dll"); - if(libGL != NULL) { - void (* tmp)(void); - tmp = (void(*)(void)) GetProcAddress(libGL, "wglGetProcAddress"); - gladGetProcAddressPtr = (PFNWGLGETPROCADDRESSPROC_PRIVATE) tmp; - return gladGetProcAddressPtr != NULL; - } -#endif - - return 0; -} - -static -void close_gl(void) { - if(libGL != NULL) { - FreeLibrary((HMODULE) libGL); - libGL = NULL; - } -} -#else -#include -static void* libGL; - -#if !defined(__APPLE__) && !defined(__HAIKU__) -typedef void* (APIENTRYP PFNGLXGETPROCADDRESSPROC_PRIVATE)(const char*); -static PFNGLXGETPROCADDRESSPROC_PRIVATE gladGetProcAddressPtr; -#endif - -static -int open_gl(void) { -#ifdef __APPLE__ - static const char *NAMES[] = { - "../Frameworks/OpenGL.framework/OpenGL", - "/Library/Frameworks/OpenGL.framework/OpenGL", - "/System/Library/Frameworks/OpenGL.framework/OpenGL", - "/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL" - }; -#else - static const char *NAMES[] = {"libGL.so.1", "libGL.so"}; -#endif - - unsigned int index = 0; - for(index = 0; index < (sizeof(NAMES) / sizeof(NAMES[0])); index++) { - libGL = dlopen(NAMES[index], RTLD_NOW | RTLD_GLOBAL); - - if(libGL != NULL) { -#if defined(__APPLE__) || defined(__HAIKU__) - return 1; -#else - gladGetProcAddressPtr = (PFNGLXGETPROCADDRESSPROC_PRIVATE)dlsym(libGL, - "glXGetProcAddressARB"); - return gladGetProcAddressPtr != NULL; -#endif - } - } - - return 0; -} - -static -void close_gl(void) { - if(libGL != NULL) { - dlclose(libGL); - libGL = NULL; - } -} -#endif - -static -void* get_proc(const char *namez) { - void* result = NULL; - if(libGL == NULL) return NULL; - -#if !defined(__APPLE__) && !defined(__HAIKU__) - if(gladGetProcAddressPtr != NULL) { - result = gladGetProcAddressPtr(namez); - } -#endif - if(result == NULL) { -#if defined(_WIN32) || defined(__CYGWIN__) - result = (void*)GetProcAddress((HMODULE) libGL, namez); -#else - result = dlsym(libGL, namez); -#endif - } - - return result; -} - -int gladLoadGL(void) { - int status = 0; - - if(open_gl()) { - status = gladLoadGLLoader(&get_proc); - close_gl(); - } - - return status; -} - -struct gladGLversionStruct GLVersion = { 0, 0 }; - -#if defined(GL_ES_VERSION_3_0) || defined(GL_VERSION_3_0) -#define _GLAD_IS_SOME_NEW_VERSION 1 -#endif - -static int max_loaded_major; -static int max_loaded_minor; - -static const char *exts = NULL; -static int num_exts_i = 0; -static char **exts_i = NULL; - -static int get_exts(void) { -#ifdef _GLAD_IS_SOME_NEW_VERSION - if(max_loaded_major < 3) { -#endif - exts = (const char *)glGetString(GL_EXTENSIONS); -#ifdef _GLAD_IS_SOME_NEW_VERSION - } else { - unsigned int index; - - num_exts_i = 0; - glGetIntegerv(GL_NUM_EXTENSIONS, &num_exts_i); - if (num_exts_i > 0) { - exts_i = (char **)malloc((size_t)num_exts_i * (sizeof *exts_i)); - } - - if (exts_i == NULL) { - return 0; - } - - for(index = 0; index < (unsigned)num_exts_i; index++) { - const char *gl_str_tmp = (const char*)glGetStringi(GL_EXTENSIONS, index); - size_t len = strlen(gl_str_tmp); - - char *local_str = (char*)malloc((len+1) * sizeof(char)); - if(local_str != NULL) { - memcpy(local_str, gl_str_tmp, (len+1) * sizeof(char)); - } - exts_i[index] = local_str; - } - } -#endif - return 1; -} - -static void free_exts(void) { - if (exts_i != NULL) { - int index; - for(index = 0; index < num_exts_i; index++) { - free((char *)exts_i[index]); - } - free((void *)exts_i); - exts_i = NULL; - } -} - -static int has_ext(const char *ext) { -#ifdef _GLAD_IS_SOME_NEW_VERSION - if(max_loaded_major < 3) { -#endif - const char *extensions; - const char *loc; - const char *terminator; - extensions = exts; - if(extensions == NULL || ext == NULL) { - return 0; - } - - while(1) { - loc = strstr(extensions, ext); - if(loc == NULL) { - return 0; - } - - terminator = loc + strlen(ext); - if((loc == extensions || *(loc - 1) == ' ') && - (*terminator == ' ' || *terminator == '\0')) { - return 1; - } - extensions = terminator; - } -#ifdef _GLAD_IS_SOME_NEW_VERSION - } else { - int index; - if(exts_i == NULL) return 0; - for(index = 0; index < num_exts_i; index++) { - const char *e = exts_i[index]; - - if(exts_i[index] != NULL && strcmp(e, ext) == 0) { - return 1; - } - } - } -#endif - - return 0; -} -int GLAD_GL_VERSION_1_0 = 0; -int GLAD_GL_VERSION_1_1 = 0; -int GLAD_GL_VERSION_1_2 = 0; -int GLAD_GL_VERSION_1_3 = 0; -int GLAD_GL_VERSION_1_4 = 0; -int GLAD_GL_VERSION_1_5 = 0; -int GLAD_GL_VERSION_2_0 = 0; -int GLAD_GL_VERSION_2_1 = 0; -int GLAD_GL_VERSION_3_0 = 0; -int GLAD_GL_VERSION_3_1 = 0; -int GLAD_GL_VERSION_3_2 = 0; -int GLAD_GL_VERSION_3_3 = 0; -PFNGLACCUMPROC glad_glAccum = NULL; -PFNGLACTIVETEXTUREPROC glad_glActiveTexture = NULL; -PFNGLALPHAFUNCPROC glad_glAlphaFunc = NULL; -PFNGLARETEXTURESRESIDENTPROC glad_glAreTexturesResident = NULL; -PFNGLARRAYELEMENTPROC glad_glArrayElement = NULL; -PFNGLATTACHSHADERPROC glad_glAttachShader = NULL; -PFNGLBEGINPROC glad_glBegin = NULL; -PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender = NULL; -PFNGLBEGINQUERYPROC glad_glBeginQuery = NULL; -PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback = NULL; -PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation = NULL; -PFNGLBINDBUFFERPROC glad_glBindBuffer = NULL; -PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase = NULL; -PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange = NULL; -PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation = NULL; -PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed = NULL; -PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer = NULL; -PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer = NULL; -PFNGLBINDSAMPLERPROC glad_glBindSampler = NULL; -PFNGLBINDTEXTUREPROC glad_glBindTexture = NULL; -PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray = NULL; -PFNGLBITMAPPROC glad_glBitmap = NULL; -PFNGLBLENDCOLORPROC glad_glBlendColor = NULL; -PFNGLBLENDEQUATIONPROC glad_glBlendEquation = NULL; -PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate = NULL; -PFNGLBLENDFUNCPROC glad_glBlendFunc = NULL; -PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate = NULL; -PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer = NULL; -PFNGLBUFFERDATAPROC glad_glBufferData = NULL; -PFNGLBUFFERSUBDATAPROC glad_glBufferSubData = NULL; -PFNGLCALLLISTPROC glad_glCallList = NULL; -PFNGLCALLLISTSPROC glad_glCallLists = NULL; -PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus = NULL; -PFNGLCLAMPCOLORPROC glad_glClampColor = NULL; -PFNGLCLEARPROC glad_glClear = NULL; -PFNGLCLEARACCUMPROC glad_glClearAccum = NULL; -PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi = NULL; -PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv = NULL; -PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv = NULL; -PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv = NULL; -PFNGLCLEARCOLORPROC glad_glClearColor = NULL; -PFNGLCLEARDEPTHPROC glad_glClearDepth = NULL; -PFNGLCLEARINDEXPROC glad_glClearIndex = NULL; -PFNGLCLEARSTENCILPROC glad_glClearStencil = NULL; -PFNGLCLIENTACTIVETEXTUREPROC glad_glClientActiveTexture = NULL; -PFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync = NULL; -PFNGLCLIPPLANEPROC glad_glClipPlane = NULL; -PFNGLCOLOR3BPROC glad_glColor3b = NULL; -PFNGLCOLOR3BVPROC glad_glColor3bv = NULL; -PFNGLCOLOR3DPROC glad_glColor3d = NULL; -PFNGLCOLOR3DVPROC glad_glColor3dv = NULL; -PFNGLCOLOR3FPROC glad_glColor3f = NULL; -PFNGLCOLOR3FVPROC glad_glColor3fv = NULL; -PFNGLCOLOR3IPROC glad_glColor3i = NULL; -PFNGLCOLOR3IVPROC glad_glColor3iv = NULL; -PFNGLCOLOR3SPROC glad_glColor3s = NULL; -PFNGLCOLOR3SVPROC glad_glColor3sv = NULL; -PFNGLCOLOR3UBPROC glad_glColor3ub = NULL; -PFNGLCOLOR3UBVPROC glad_glColor3ubv = NULL; -PFNGLCOLOR3UIPROC glad_glColor3ui = NULL; -PFNGLCOLOR3UIVPROC glad_glColor3uiv = NULL; -PFNGLCOLOR3USPROC glad_glColor3us = NULL; -PFNGLCOLOR3USVPROC glad_glColor3usv = NULL; -PFNGLCOLOR4BPROC glad_glColor4b = NULL; -PFNGLCOLOR4BVPROC glad_glColor4bv = NULL; -PFNGLCOLOR4DPROC glad_glColor4d = NULL; -PFNGLCOLOR4DVPROC glad_glColor4dv = NULL; -PFNGLCOLOR4FPROC glad_glColor4f = NULL; -PFNGLCOLOR4FVPROC glad_glColor4fv = NULL; -PFNGLCOLOR4IPROC glad_glColor4i = NULL; -PFNGLCOLOR4IVPROC glad_glColor4iv = NULL; -PFNGLCOLOR4SPROC glad_glColor4s = NULL; -PFNGLCOLOR4SVPROC glad_glColor4sv = NULL; -PFNGLCOLOR4UBPROC glad_glColor4ub = NULL; -PFNGLCOLOR4UBVPROC glad_glColor4ubv = NULL; -PFNGLCOLOR4UIPROC glad_glColor4ui = NULL; -PFNGLCOLOR4UIVPROC glad_glColor4uiv = NULL; -PFNGLCOLOR4USPROC glad_glColor4us = NULL; -PFNGLCOLOR4USVPROC glad_glColor4usv = NULL; -PFNGLCOLORMASKPROC glad_glColorMask = NULL; -PFNGLCOLORMASKIPROC glad_glColorMaski = NULL; -PFNGLCOLORMATERIALPROC glad_glColorMaterial = NULL; -PFNGLCOLORP3UIPROC glad_glColorP3ui = NULL; -PFNGLCOLORP3UIVPROC glad_glColorP3uiv = NULL; -PFNGLCOLORP4UIPROC glad_glColorP4ui = NULL; -PFNGLCOLORP4UIVPROC glad_glColorP4uiv = NULL; -PFNGLCOLORPOINTERPROC glad_glColorPointer = NULL; -PFNGLCOMPILESHADERPROC glad_glCompileShader = NULL; -PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D = NULL; -PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D = NULL; -PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D = NULL; -PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D = NULL; -PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D = NULL; -PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D = NULL; -PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData = NULL; -PFNGLCOPYPIXELSPROC glad_glCopyPixels = NULL; -PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D = NULL; -PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D = NULL; -PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D = NULL; -PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D = NULL; -PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D = NULL; -PFNGLCREATEPROGRAMPROC glad_glCreateProgram = NULL; -PFNGLCREATESHADERPROC glad_glCreateShader = NULL; -PFNGLCULLFACEPROC glad_glCullFace = NULL; -PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers = NULL; -PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers = NULL; -PFNGLDELETELISTSPROC glad_glDeleteLists = NULL; -PFNGLDELETEPROGRAMPROC glad_glDeleteProgram = NULL; -PFNGLDELETEQUERIESPROC glad_glDeleteQueries = NULL; -PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers = NULL; -PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers = NULL; -PFNGLDELETESHADERPROC glad_glDeleteShader = NULL; -PFNGLDELETESYNCPROC glad_glDeleteSync = NULL; -PFNGLDELETETEXTURESPROC glad_glDeleteTextures = NULL; -PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays = NULL; -PFNGLDEPTHFUNCPROC glad_glDepthFunc = NULL; -PFNGLDEPTHMASKPROC glad_glDepthMask = NULL; -PFNGLDEPTHRANGEPROC glad_glDepthRange = NULL; -PFNGLDETACHSHADERPROC glad_glDetachShader = NULL; -PFNGLDISABLEPROC glad_glDisable = NULL; -PFNGLDISABLECLIENTSTATEPROC glad_glDisableClientState = NULL; -PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray = NULL; -PFNGLDISABLEIPROC glad_glDisablei = NULL; -PFNGLDRAWARRAYSPROC glad_glDrawArrays = NULL; -PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced = NULL; -PFNGLDRAWBUFFERPROC glad_glDrawBuffer = NULL; -PFNGLDRAWBUFFERSPROC glad_glDrawBuffers = NULL; -PFNGLDRAWELEMENTSPROC glad_glDrawElements = NULL; -PFNGLDRAWELEMENTSBASEVERTEXPROC glad_glDrawElementsBaseVertex = NULL; -PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced = NULL; -PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex = NULL; -PFNGLDRAWPIXELSPROC glad_glDrawPixels = NULL; -PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements = NULL; -PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_glDrawRangeElementsBaseVertex = NULL; -PFNGLEDGEFLAGPROC glad_glEdgeFlag = NULL; -PFNGLEDGEFLAGPOINTERPROC glad_glEdgeFlagPointer = NULL; -PFNGLEDGEFLAGVPROC glad_glEdgeFlagv = NULL; -PFNGLENABLEPROC glad_glEnable = NULL; -PFNGLENABLECLIENTSTATEPROC glad_glEnableClientState = NULL; -PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray = NULL; -PFNGLENABLEIPROC glad_glEnablei = NULL; -PFNGLENDPROC glad_glEnd = NULL; -PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender = NULL; -PFNGLENDLISTPROC glad_glEndList = NULL; -PFNGLENDQUERYPROC glad_glEndQuery = NULL; -PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback = NULL; -PFNGLEVALCOORD1DPROC glad_glEvalCoord1d = NULL; -PFNGLEVALCOORD1DVPROC glad_glEvalCoord1dv = NULL; -PFNGLEVALCOORD1FPROC glad_glEvalCoord1f = NULL; -PFNGLEVALCOORD1FVPROC glad_glEvalCoord1fv = NULL; -PFNGLEVALCOORD2DPROC glad_glEvalCoord2d = NULL; -PFNGLEVALCOORD2DVPROC glad_glEvalCoord2dv = NULL; -PFNGLEVALCOORD2FPROC glad_glEvalCoord2f = NULL; -PFNGLEVALCOORD2FVPROC glad_glEvalCoord2fv = NULL; -PFNGLEVALMESH1PROC glad_glEvalMesh1 = NULL; -PFNGLEVALMESH2PROC glad_glEvalMesh2 = NULL; -PFNGLEVALPOINT1PROC glad_glEvalPoint1 = NULL; -PFNGLEVALPOINT2PROC glad_glEvalPoint2 = NULL; -PFNGLFEEDBACKBUFFERPROC glad_glFeedbackBuffer = NULL; -PFNGLFENCESYNCPROC glad_glFenceSync = NULL; -PFNGLFINISHPROC glad_glFinish = NULL; -PFNGLFLUSHPROC glad_glFlush = NULL; -PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange = NULL; -PFNGLFOGCOORDPOINTERPROC glad_glFogCoordPointer = NULL; -PFNGLFOGCOORDDPROC glad_glFogCoordd = NULL; -PFNGLFOGCOORDDVPROC glad_glFogCoorddv = NULL; -PFNGLFOGCOORDFPROC glad_glFogCoordf = NULL; -PFNGLFOGCOORDFVPROC glad_glFogCoordfv = NULL; -PFNGLFOGFPROC glad_glFogf = NULL; -PFNGLFOGFVPROC glad_glFogfv = NULL; -PFNGLFOGIPROC glad_glFogi = NULL; -PFNGLFOGIVPROC glad_glFogiv = NULL; -PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer = NULL; -PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture = NULL; -PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D = NULL; -PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D = NULL; -PFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D = NULL; -PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer = NULL; -PFNGLFRONTFACEPROC glad_glFrontFace = NULL; -PFNGLFRUSTUMPROC glad_glFrustum = NULL; -PFNGLGENBUFFERSPROC glad_glGenBuffers = NULL; -PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers = NULL; -PFNGLGENLISTSPROC glad_glGenLists = NULL; -PFNGLGENQUERIESPROC glad_glGenQueries = NULL; -PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers = NULL; -PFNGLGENSAMPLERSPROC glad_glGenSamplers = NULL; -PFNGLGENTEXTURESPROC glad_glGenTextures = NULL; -PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays = NULL; -PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap = NULL; -PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib = NULL; -PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform = NULL; -PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName = NULL; -PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv = NULL; -PFNGLGETACTIVEUNIFORMNAMEPROC glad_glGetActiveUniformName = NULL; -PFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv = NULL; -PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders = NULL; -PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation = NULL; -PFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v = NULL; -PFNGLGETBOOLEANVPROC glad_glGetBooleanv = NULL; -PFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v = NULL; -PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv = NULL; -PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv = NULL; -PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData = NULL; -PFNGLGETCLIPPLANEPROC glad_glGetClipPlane = NULL; -PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage = NULL; -PFNGLGETDOUBLEVPROC glad_glGetDoublev = NULL; -PFNGLGETERRORPROC glad_glGetError = NULL; -PFNGLGETFLOATVPROC glad_glGetFloatv = NULL; -PFNGLGETFRAGDATAINDEXPROC glad_glGetFragDataIndex = NULL; -PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation = NULL; -PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv = NULL; -PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v = NULL; -PFNGLGETINTEGER64VPROC glad_glGetInteger64v = NULL; -PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v = NULL; -PFNGLGETINTEGERVPROC glad_glGetIntegerv = NULL; -PFNGLGETLIGHTFVPROC glad_glGetLightfv = NULL; -PFNGLGETLIGHTIVPROC glad_glGetLightiv = NULL; -PFNGLGETMAPDVPROC glad_glGetMapdv = NULL; -PFNGLGETMAPFVPROC glad_glGetMapfv = NULL; -PFNGLGETMAPIVPROC glad_glGetMapiv = NULL; -PFNGLGETMATERIALFVPROC glad_glGetMaterialfv = NULL; -PFNGLGETMATERIALIVPROC glad_glGetMaterialiv = NULL; -PFNGLGETMULTISAMPLEFVPROC glad_glGetMultisamplefv = NULL; -PFNGLGETPIXELMAPFVPROC glad_glGetPixelMapfv = NULL; -PFNGLGETPIXELMAPUIVPROC glad_glGetPixelMapuiv = NULL; -PFNGLGETPIXELMAPUSVPROC glad_glGetPixelMapusv = NULL; -PFNGLGETPOINTERVPROC glad_glGetPointerv = NULL; -PFNGLGETPOLYGONSTIPPLEPROC glad_glGetPolygonStipple = NULL; -PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog = NULL; -PFNGLGETPROGRAMIVPROC glad_glGetProgramiv = NULL; -PFNGLGETQUERYOBJECTI64VPROC glad_glGetQueryObjecti64v = NULL; -PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv = NULL; -PFNGLGETQUERYOBJECTUI64VPROC glad_glGetQueryObjectui64v = NULL; -PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv = NULL; -PFNGLGETQUERYIVPROC glad_glGetQueryiv = NULL; -PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv = NULL; -PFNGLGETSAMPLERPARAMETERIIVPROC glad_glGetSamplerParameterIiv = NULL; -PFNGLGETSAMPLERPARAMETERIUIVPROC glad_glGetSamplerParameterIuiv = NULL; -PFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv = NULL; -PFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv = NULL; -PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog = NULL; -PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource = NULL; -PFNGLGETSHADERIVPROC glad_glGetShaderiv = NULL; -PFNGLGETSTRINGPROC glad_glGetString = NULL; -PFNGLGETSTRINGIPROC glad_glGetStringi = NULL; -PFNGLGETSYNCIVPROC glad_glGetSynciv = NULL; -PFNGLGETTEXENVFVPROC glad_glGetTexEnvfv = NULL; -PFNGLGETTEXENVIVPROC glad_glGetTexEnviv = NULL; -PFNGLGETTEXGENDVPROC glad_glGetTexGendv = NULL; -PFNGLGETTEXGENFVPROC glad_glGetTexGenfv = NULL; -PFNGLGETTEXGENIVPROC glad_glGetTexGeniv = NULL; -PFNGLGETTEXIMAGEPROC glad_glGetTexImage = NULL; -PFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv = NULL; -PFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv = NULL; -PFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv = NULL; -PFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv = NULL; -PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv = NULL; -PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv = NULL; -PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying = NULL; -PFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex = NULL; -PFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices = NULL; -PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation = NULL; -PFNGLGETUNIFORMFVPROC glad_glGetUniformfv = NULL; -PFNGLGETUNIFORMIVPROC glad_glGetUniformiv = NULL; -PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv = NULL; -PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv = NULL; -PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv = NULL; -PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv = NULL; -PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv = NULL; -PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv = NULL; -PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv = NULL; -PFNGLHINTPROC glad_glHint = NULL; -PFNGLINDEXMASKPROC glad_glIndexMask = NULL; -PFNGLINDEXPOINTERPROC glad_glIndexPointer = NULL; -PFNGLINDEXDPROC glad_glIndexd = NULL; -PFNGLINDEXDVPROC glad_glIndexdv = NULL; -PFNGLINDEXFPROC glad_glIndexf = NULL; -PFNGLINDEXFVPROC glad_glIndexfv = NULL; -PFNGLINDEXIPROC glad_glIndexi = NULL; -PFNGLINDEXIVPROC glad_glIndexiv = NULL; -PFNGLINDEXSPROC glad_glIndexs = NULL; -PFNGLINDEXSVPROC glad_glIndexsv = NULL; -PFNGLINDEXUBPROC glad_glIndexub = NULL; -PFNGLINDEXUBVPROC glad_glIndexubv = NULL; -PFNGLINITNAMESPROC glad_glInitNames = NULL; -PFNGLINTERLEAVEDARRAYSPROC glad_glInterleavedArrays = NULL; -PFNGLISBUFFERPROC glad_glIsBuffer = NULL; -PFNGLISENABLEDPROC glad_glIsEnabled = NULL; -PFNGLISENABLEDIPROC glad_glIsEnabledi = NULL; -PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer = NULL; -PFNGLISLISTPROC glad_glIsList = NULL; -PFNGLISPROGRAMPROC glad_glIsProgram = NULL; -PFNGLISQUERYPROC glad_glIsQuery = NULL; -PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer = NULL; -PFNGLISSAMPLERPROC glad_glIsSampler = NULL; -PFNGLISSHADERPROC glad_glIsShader = NULL; -PFNGLISSYNCPROC glad_glIsSync = NULL; -PFNGLISTEXTUREPROC glad_glIsTexture = NULL; -PFNGLISVERTEXARRAYPROC glad_glIsVertexArray = NULL; -PFNGLLIGHTMODELFPROC glad_glLightModelf = NULL; -PFNGLLIGHTMODELFVPROC glad_glLightModelfv = NULL; -PFNGLLIGHTMODELIPROC glad_glLightModeli = NULL; -PFNGLLIGHTMODELIVPROC glad_glLightModeliv = NULL; -PFNGLLIGHTFPROC glad_glLightf = NULL; -PFNGLLIGHTFVPROC glad_glLightfv = NULL; -PFNGLLIGHTIPROC glad_glLighti = NULL; -PFNGLLIGHTIVPROC glad_glLightiv = NULL; -PFNGLLINESTIPPLEPROC glad_glLineStipple = NULL; -PFNGLLINEWIDTHPROC glad_glLineWidth = NULL; -PFNGLLINKPROGRAMPROC glad_glLinkProgram = NULL; -PFNGLLISTBASEPROC glad_glListBase = NULL; -PFNGLLOADIDENTITYPROC glad_glLoadIdentity = NULL; -PFNGLLOADMATRIXDPROC glad_glLoadMatrixd = NULL; -PFNGLLOADMATRIXFPROC glad_glLoadMatrixf = NULL; -PFNGLLOADNAMEPROC glad_glLoadName = NULL; -PFNGLLOADTRANSPOSEMATRIXDPROC glad_glLoadTransposeMatrixd = NULL; -PFNGLLOADTRANSPOSEMATRIXFPROC glad_glLoadTransposeMatrixf = NULL; -PFNGLLOGICOPPROC glad_glLogicOp = NULL; -PFNGLMAP1DPROC glad_glMap1d = NULL; -PFNGLMAP1FPROC glad_glMap1f = NULL; -PFNGLMAP2DPROC glad_glMap2d = NULL; -PFNGLMAP2FPROC glad_glMap2f = NULL; -PFNGLMAPBUFFERPROC glad_glMapBuffer = NULL; -PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange = NULL; -PFNGLMAPGRID1DPROC glad_glMapGrid1d = NULL; -PFNGLMAPGRID1FPROC glad_glMapGrid1f = NULL; -PFNGLMAPGRID2DPROC glad_glMapGrid2d = NULL; -PFNGLMAPGRID2FPROC glad_glMapGrid2f = NULL; -PFNGLMATERIALFPROC glad_glMaterialf = NULL; -PFNGLMATERIALFVPROC glad_glMaterialfv = NULL; -PFNGLMATERIALIPROC glad_glMateriali = NULL; -PFNGLMATERIALIVPROC glad_glMaterialiv = NULL; -PFNGLMATRIXMODEPROC glad_glMatrixMode = NULL; -PFNGLMULTMATRIXDPROC glad_glMultMatrixd = NULL; -PFNGLMULTMATRIXFPROC glad_glMultMatrixf = NULL; -PFNGLMULTTRANSPOSEMATRIXDPROC glad_glMultTransposeMatrixd = NULL; -PFNGLMULTTRANSPOSEMATRIXFPROC glad_glMultTransposeMatrixf = NULL; -PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays = NULL; -PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements = NULL; -PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex = NULL; -PFNGLMULTITEXCOORD1DPROC glad_glMultiTexCoord1d = NULL; -PFNGLMULTITEXCOORD1DVPROC glad_glMultiTexCoord1dv = NULL; -PFNGLMULTITEXCOORD1FPROC glad_glMultiTexCoord1f = NULL; -PFNGLMULTITEXCOORD1FVPROC glad_glMultiTexCoord1fv = NULL; -PFNGLMULTITEXCOORD1IPROC glad_glMultiTexCoord1i = NULL; -PFNGLMULTITEXCOORD1IVPROC glad_glMultiTexCoord1iv = NULL; -PFNGLMULTITEXCOORD1SPROC glad_glMultiTexCoord1s = NULL; -PFNGLMULTITEXCOORD1SVPROC glad_glMultiTexCoord1sv = NULL; -PFNGLMULTITEXCOORD2DPROC glad_glMultiTexCoord2d = NULL; -PFNGLMULTITEXCOORD2DVPROC glad_glMultiTexCoord2dv = NULL; -PFNGLMULTITEXCOORD2FPROC glad_glMultiTexCoord2f = NULL; -PFNGLMULTITEXCOORD2FVPROC glad_glMultiTexCoord2fv = NULL; -PFNGLMULTITEXCOORD2IPROC glad_glMultiTexCoord2i = NULL; -PFNGLMULTITEXCOORD2IVPROC glad_glMultiTexCoord2iv = NULL; -PFNGLMULTITEXCOORD2SPROC glad_glMultiTexCoord2s = NULL; -PFNGLMULTITEXCOORD2SVPROC glad_glMultiTexCoord2sv = NULL; -PFNGLMULTITEXCOORD3DPROC glad_glMultiTexCoord3d = NULL; -PFNGLMULTITEXCOORD3DVPROC glad_glMultiTexCoord3dv = NULL; -PFNGLMULTITEXCOORD3FPROC glad_glMultiTexCoord3f = NULL; -PFNGLMULTITEXCOORD3FVPROC glad_glMultiTexCoord3fv = NULL; -PFNGLMULTITEXCOORD3IPROC glad_glMultiTexCoord3i = NULL; -PFNGLMULTITEXCOORD3IVPROC glad_glMultiTexCoord3iv = NULL; -PFNGLMULTITEXCOORD3SPROC glad_glMultiTexCoord3s = NULL; -PFNGLMULTITEXCOORD3SVPROC glad_glMultiTexCoord3sv = NULL; -PFNGLMULTITEXCOORD4DPROC glad_glMultiTexCoord4d = NULL; -PFNGLMULTITEXCOORD4DVPROC glad_glMultiTexCoord4dv = NULL; -PFNGLMULTITEXCOORD4FPROC glad_glMultiTexCoord4f = NULL; -PFNGLMULTITEXCOORD4FVPROC glad_glMultiTexCoord4fv = NULL; -PFNGLMULTITEXCOORD4IPROC glad_glMultiTexCoord4i = NULL; -PFNGLMULTITEXCOORD4IVPROC glad_glMultiTexCoord4iv = NULL; -PFNGLMULTITEXCOORD4SPROC glad_glMultiTexCoord4s = NULL; -PFNGLMULTITEXCOORD4SVPROC glad_glMultiTexCoord4sv = NULL; -PFNGLMULTITEXCOORDP1UIPROC glad_glMultiTexCoordP1ui = NULL; -PFNGLMULTITEXCOORDP1UIVPROC glad_glMultiTexCoordP1uiv = NULL; -PFNGLMULTITEXCOORDP2UIPROC glad_glMultiTexCoordP2ui = NULL; -PFNGLMULTITEXCOORDP2UIVPROC glad_glMultiTexCoordP2uiv = NULL; -PFNGLMULTITEXCOORDP3UIPROC glad_glMultiTexCoordP3ui = NULL; -PFNGLMULTITEXCOORDP3UIVPROC glad_glMultiTexCoordP3uiv = NULL; -PFNGLMULTITEXCOORDP4UIPROC glad_glMultiTexCoordP4ui = NULL; -PFNGLMULTITEXCOORDP4UIVPROC glad_glMultiTexCoordP4uiv = NULL; -PFNGLNEWLISTPROC glad_glNewList = NULL; -PFNGLNORMAL3BPROC glad_glNormal3b = NULL; -PFNGLNORMAL3BVPROC glad_glNormal3bv = NULL; -PFNGLNORMAL3DPROC glad_glNormal3d = NULL; -PFNGLNORMAL3DVPROC glad_glNormal3dv = NULL; -PFNGLNORMAL3FPROC glad_glNormal3f = NULL; -PFNGLNORMAL3FVPROC glad_glNormal3fv = NULL; -PFNGLNORMAL3IPROC glad_glNormal3i = NULL; -PFNGLNORMAL3IVPROC glad_glNormal3iv = NULL; -PFNGLNORMAL3SPROC glad_glNormal3s = NULL; -PFNGLNORMAL3SVPROC glad_glNormal3sv = NULL; -PFNGLNORMALP3UIPROC glad_glNormalP3ui = NULL; -PFNGLNORMALP3UIVPROC glad_glNormalP3uiv = NULL; -PFNGLNORMALPOINTERPROC glad_glNormalPointer = NULL; -PFNGLORTHOPROC glad_glOrtho = NULL; -PFNGLPASSTHROUGHPROC glad_glPassThrough = NULL; -PFNGLPIXELMAPFVPROC glad_glPixelMapfv = NULL; -PFNGLPIXELMAPUIVPROC glad_glPixelMapuiv = NULL; -PFNGLPIXELMAPUSVPROC glad_glPixelMapusv = NULL; -PFNGLPIXELSTOREFPROC glad_glPixelStoref = NULL; -PFNGLPIXELSTOREIPROC glad_glPixelStorei = NULL; -PFNGLPIXELTRANSFERFPROC glad_glPixelTransferf = NULL; -PFNGLPIXELTRANSFERIPROC glad_glPixelTransferi = NULL; -PFNGLPIXELZOOMPROC glad_glPixelZoom = NULL; -PFNGLPOINTPARAMETERFPROC glad_glPointParameterf = NULL; -PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv = NULL; -PFNGLPOINTPARAMETERIPROC glad_glPointParameteri = NULL; -PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv = NULL; -PFNGLPOINTSIZEPROC glad_glPointSize = NULL; -PFNGLPOLYGONMODEPROC glad_glPolygonMode = NULL; -PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset = NULL; -PFNGLPOLYGONSTIPPLEPROC glad_glPolygonStipple = NULL; -PFNGLPOPATTRIBPROC glad_glPopAttrib = NULL; -PFNGLPOPCLIENTATTRIBPROC glad_glPopClientAttrib = NULL; -PFNGLPOPMATRIXPROC glad_glPopMatrix = NULL; -PFNGLPOPNAMEPROC glad_glPopName = NULL; -PFNGLPRIMITIVERESTARTINDEXPROC glad_glPrimitiveRestartIndex = NULL; -PFNGLPRIORITIZETEXTURESPROC glad_glPrioritizeTextures = NULL; -PFNGLPROVOKINGVERTEXPROC glad_glProvokingVertex = NULL; -PFNGLPUSHATTRIBPROC glad_glPushAttrib = NULL; -PFNGLPUSHCLIENTATTRIBPROC glad_glPushClientAttrib = NULL; -PFNGLPUSHMATRIXPROC glad_glPushMatrix = NULL; -PFNGLPUSHNAMEPROC glad_glPushName = NULL; -PFNGLQUERYCOUNTERPROC glad_glQueryCounter = NULL; -PFNGLRASTERPOS2DPROC glad_glRasterPos2d = NULL; -PFNGLRASTERPOS2DVPROC glad_glRasterPos2dv = NULL; -PFNGLRASTERPOS2FPROC glad_glRasterPos2f = NULL; -PFNGLRASTERPOS2FVPROC glad_glRasterPos2fv = NULL; -PFNGLRASTERPOS2IPROC glad_glRasterPos2i = NULL; -PFNGLRASTERPOS2IVPROC glad_glRasterPos2iv = NULL; -PFNGLRASTERPOS2SPROC glad_glRasterPos2s = NULL; -PFNGLRASTERPOS2SVPROC glad_glRasterPos2sv = NULL; -PFNGLRASTERPOS3DPROC glad_glRasterPos3d = NULL; -PFNGLRASTERPOS3DVPROC glad_glRasterPos3dv = NULL; -PFNGLRASTERPOS3FPROC glad_glRasterPos3f = NULL; -PFNGLRASTERPOS3FVPROC glad_glRasterPos3fv = NULL; -PFNGLRASTERPOS3IPROC glad_glRasterPos3i = NULL; -PFNGLRASTERPOS3IVPROC glad_glRasterPos3iv = NULL; -PFNGLRASTERPOS3SPROC glad_glRasterPos3s = NULL; -PFNGLRASTERPOS3SVPROC glad_glRasterPos3sv = NULL; -PFNGLRASTERPOS4DPROC glad_glRasterPos4d = NULL; -PFNGLRASTERPOS4DVPROC glad_glRasterPos4dv = NULL; -PFNGLRASTERPOS4FPROC glad_glRasterPos4f = NULL; -PFNGLRASTERPOS4FVPROC glad_glRasterPos4fv = NULL; -PFNGLRASTERPOS4IPROC glad_glRasterPos4i = NULL; -PFNGLRASTERPOS4IVPROC glad_glRasterPos4iv = NULL; -PFNGLRASTERPOS4SPROC glad_glRasterPos4s = NULL; -PFNGLRASTERPOS4SVPROC glad_glRasterPos4sv = NULL; -PFNGLREADBUFFERPROC glad_glReadBuffer = NULL; -PFNGLREADPIXELSPROC glad_glReadPixels = NULL; -PFNGLRECTDPROC glad_glRectd = NULL; -PFNGLRECTDVPROC glad_glRectdv = NULL; -PFNGLRECTFPROC glad_glRectf = NULL; -PFNGLRECTFVPROC glad_glRectfv = NULL; -PFNGLRECTIPROC glad_glRecti = NULL; -PFNGLRECTIVPROC glad_glRectiv = NULL; -PFNGLRECTSPROC glad_glRects = NULL; -PFNGLRECTSVPROC glad_glRectsv = NULL; -PFNGLRENDERMODEPROC glad_glRenderMode = NULL; -PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage = NULL; -PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample = NULL; -PFNGLROTATEDPROC glad_glRotated = NULL; -PFNGLROTATEFPROC glad_glRotatef = NULL; -PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage = NULL; -PFNGLSAMPLEMASKIPROC glad_glSampleMaski = NULL; -PFNGLSAMPLERPARAMETERIIVPROC glad_glSamplerParameterIiv = NULL; -PFNGLSAMPLERPARAMETERIUIVPROC glad_glSamplerParameterIuiv = NULL; -PFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf = NULL; -PFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv = NULL; -PFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri = NULL; -PFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv = NULL; -PFNGLSCALEDPROC glad_glScaled = NULL; -PFNGLSCALEFPROC glad_glScalef = NULL; -PFNGLSCISSORPROC glad_glScissor = NULL; -PFNGLSECONDARYCOLOR3BPROC glad_glSecondaryColor3b = NULL; -PFNGLSECONDARYCOLOR3BVPROC glad_glSecondaryColor3bv = NULL; -PFNGLSECONDARYCOLOR3DPROC glad_glSecondaryColor3d = NULL; -PFNGLSECONDARYCOLOR3DVPROC glad_glSecondaryColor3dv = NULL; -PFNGLSECONDARYCOLOR3FPROC glad_glSecondaryColor3f = NULL; -PFNGLSECONDARYCOLOR3FVPROC glad_glSecondaryColor3fv = NULL; -PFNGLSECONDARYCOLOR3IPROC glad_glSecondaryColor3i = NULL; -PFNGLSECONDARYCOLOR3IVPROC glad_glSecondaryColor3iv = NULL; -PFNGLSECONDARYCOLOR3SPROC glad_glSecondaryColor3s = NULL; -PFNGLSECONDARYCOLOR3SVPROC glad_glSecondaryColor3sv = NULL; -PFNGLSECONDARYCOLOR3UBPROC glad_glSecondaryColor3ub = NULL; -PFNGLSECONDARYCOLOR3UBVPROC glad_glSecondaryColor3ubv = NULL; -PFNGLSECONDARYCOLOR3UIPROC glad_glSecondaryColor3ui = NULL; -PFNGLSECONDARYCOLOR3UIVPROC glad_glSecondaryColor3uiv = NULL; -PFNGLSECONDARYCOLOR3USPROC glad_glSecondaryColor3us = NULL; -PFNGLSECONDARYCOLOR3USVPROC glad_glSecondaryColor3usv = NULL; -PFNGLSECONDARYCOLORP3UIPROC glad_glSecondaryColorP3ui = NULL; -PFNGLSECONDARYCOLORP3UIVPROC glad_glSecondaryColorP3uiv = NULL; -PFNGLSECONDARYCOLORPOINTERPROC glad_glSecondaryColorPointer = NULL; -PFNGLSELECTBUFFERPROC glad_glSelectBuffer = NULL; -PFNGLSHADEMODELPROC glad_glShadeModel = NULL; -PFNGLSHADERSOURCEPROC glad_glShaderSource = NULL; -PFNGLSTENCILFUNCPROC glad_glStencilFunc = NULL; -PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate = NULL; -PFNGLSTENCILMASKPROC glad_glStencilMask = NULL; -PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate = NULL; -PFNGLSTENCILOPPROC glad_glStencilOp = NULL; -PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate = NULL; -PFNGLTEXBUFFERPROC glad_glTexBuffer = NULL; -PFNGLTEXCOORD1DPROC glad_glTexCoord1d = NULL; -PFNGLTEXCOORD1DVPROC glad_glTexCoord1dv = NULL; -PFNGLTEXCOORD1FPROC glad_glTexCoord1f = NULL; -PFNGLTEXCOORD1FVPROC glad_glTexCoord1fv = NULL; -PFNGLTEXCOORD1IPROC glad_glTexCoord1i = NULL; -PFNGLTEXCOORD1IVPROC glad_glTexCoord1iv = NULL; -PFNGLTEXCOORD1SPROC glad_glTexCoord1s = NULL; -PFNGLTEXCOORD1SVPROC glad_glTexCoord1sv = NULL; -PFNGLTEXCOORD2DPROC glad_glTexCoord2d = NULL; -PFNGLTEXCOORD2DVPROC glad_glTexCoord2dv = NULL; -PFNGLTEXCOORD2FPROC glad_glTexCoord2f = NULL; -PFNGLTEXCOORD2FVPROC glad_glTexCoord2fv = NULL; -PFNGLTEXCOORD2IPROC glad_glTexCoord2i = NULL; -PFNGLTEXCOORD2IVPROC glad_glTexCoord2iv = NULL; -PFNGLTEXCOORD2SPROC glad_glTexCoord2s = NULL; -PFNGLTEXCOORD2SVPROC glad_glTexCoord2sv = NULL; -PFNGLTEXCOORD3DPROC glad_glTexCoord3d = NULL; -PFNGLTEXCOORD3DVPROC glad_glTexCoord3dv = NULL; -PFNGLTEXCOORD3FPROC glad_glTexCoord3f = NULL; -PFNGLTEXCOORD3FVPROC glad_glTexCoord3fv = NULL; -PFNGLTEXCOORD3IPROC glad_glTexCoord3i = NULL; -PFNGLTEXCOORD3IVPROC glad_glTexCoord3iv = NULL; -PFNGLTEXCOORD3SPROC glad_glTexCoord3s = NULL; -PFNGLTEXCOORD3SVPROC glad_glTexCoord3sv = NULL; -PFNGLTEXCOORD4DPROC glad_glTexCoord4d = NULL; -PFNGLTEXCOORD4DVPROC glad_glTexCoord4dv = NULL; -PFNGLTEXCOORD4FPROC glad_glTexCoord4f = NULL; -PFNGLTEXCOORD4FVPROC glad_glTexCoord4fv = NULL; -PFNGLTEXCOORD4IPROC glad_glTexCoord4i = NULL; -PFNGLTEXCOORD4IVPROC glad_glTexCoord4iv = NULL; -PFNGLTEXCOORD4SPROC glad_glTexCoord4s = NULL; -PFNGLTEXCOORD4SVPROC glad_glTexCoord4sv = NULL; -PFNGLTEXCOORDP1UIPROC glad_glTexCoordP1ui = NULL; -PFNGLTEXCOORDP1UIVPROC glad_glTexCoordP1uiv = NULL; -PFNGLTEXCOORDP2UIPROC glad_glTexCoordP2ui = NULL; -PFNGLTEXCOORDP2UIVPROC glad_glTexCoordP2uiv = NULL; -PFNGLTEXCOORDP3UIPROC glad_glTexCoordP3ui = NULL; -PFNGLTEXCOORDP3UIVPROC glad_glTexCoordP3uiv = NULL; -PFNGLTEXCOORDP4UIPROC glad_glTexCoordP4ui = NULL; -PFNGLTEXCOORDP4UIVPROC glad_glTexCoordP4uiv = NULL; -PFNGLTEXCOORDPOINTERPROC glad_glTexCoordPointer = NULL; -PFNGLTEXENVFPROC glad_glTexEnvf = NULL; -PFNGLTEXENVFVPROC glad_glTexEnvfv = NULL; -PFNGLTEXENVIPROC glad_glTexEnvi = NULL; -PFNGLTEXENVIVPROC glad_glTexEnviv = NULL; -PFNGLTEXGENDPROC glad_glTexGend = NULL; -PFNGLTEXGENDVPROC glad_glTexGendv = NULL; -PFNGLTEXGENFPROC glad_glTexGenf = NULL; -PFNGLTEXGENFVPROC glad_glTexGenfv = NULL; -PFNGLTEXGENIPROC glad_glTexGeni = NULL; -PFNGLTEXGENIVPROC glad_glTexGeniv = NULL; -PFNGLTEXIMAGE1DPROC glad_glTexImage1D = NULL; -PFNGLTEXIMAGE2DPROC glad_glTexImage2D = NULL; -PFNGLTEXIMAGE2DMULTISAMPLEPROC glad_glTexImage2DMultisample = NULL; -PFNGLTEXIMAGE3DPROC glad_glTexImage3D = NULL; -PFNGLTEXIMAGE3DMULTISAMPLEPROC glad_glTexImage3DMultisample = NULL; -PFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv = NULL; -PFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv = NULL; -PFNGLTEXPARAMETERFPROC glad_glTexParameterf = NULL; -PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv = NULL; -PFNGLTEXPARAMETERIPROC glad_glTexParameteri = NULL; -PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv = NULL; -PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D = NULL; -PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D = NULL; -PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D = NULL; -PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings = NULL; -PFNGLTRANSLATEDPROC glad_glTranslated = NULL; -PFNGLTRANSLATEFPROC glad_glTranslatef = NULL; -PFNGLUNIFORM1FPROC glad_glUniform1f = NULL; -PFNGLUNIFORM1FVPROC glad_glUniform1fv = NULL; -PFNGLUNIFORM1IPROC glad_glUniform1i = NULL; -PFNGLUNIFORM1IVPROC glad_glUniform1iv = NULL; -PFNGLUNIFORM1UIPROC glad_glUniform1ui = NULL; -PFNGLUNIFORM1UIVPROC glad_glUniform1uiv = NULL; -PFNGLUNIFORM2FPROC glad_glUniform2f = NULL; -PFNGLUNIFORM2FVPROC glad_glUniform2fv = NULL; -PFNGLUNIFORM2IPROC glad_glUniform2i = NULL; -PFNGLUNIFORM2IVPROC glad_glUniform2iv = NULL; -PFNGLUNIFORM2UIPROC glad_glUniform2ui = NULL; -PFNGLUNIFORM2UIVPROC glad_glUniform2uiv = NULL; -PFNGLUNIFORM3FPROC glad_glUniform3f = NULL; -PFNGLUNIFORM3FVPROC glad_glUniform3fv = NULL; -PFNGLUNIFORM3IPROC glad_glUniform3i = NULL; -PFNGLUNIFORM3IVPROC glad_glUniform3iv = NULL; -PFNGLUNIFORM3UIPROC glad_glUniform3ui = NULL; -PFNGLUNIFORM3UIVPROC glad_glUniform3uiv = NULL; -PFNGLUNIFORM4FPROC glad_glUniform4f = NULL; -PFNGLUNIFORM4FVPROC glad_glUniform4fv = NULL; -PFNGLUNIFORM4IPROC glad_glUniform4i = NULL; -PFNGLUNIFORM4IVPROC glad_glUniform4iv = NULL; -PFNGLUNIFORM4UIPROC glad_glUniform4ui = NULL; -PFNGLUNIFORM4UIVPROC glad_glUniform4uiv = NULL; -PFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding = NULL; -PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv = NULL; -PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv = NULL; -PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv = NULL; -PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv = NULL; -PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv = NULL; -PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv = NULL; -PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv = NULL; -PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv = NULL; -PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv = NULL; -PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer = NULL; -PFNGLUSEPROGRAMPROC glad_glUseProgram = NULL; -PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram = NULL; -PFNGLVERTEX2DPROC glad_glVertex2d = NULL; -PFNGLVERTEX2DVPROC glad_glVertex2dv = NULL; -PFNGLVERTEX2FPROC glad_glVertex2f = NULL; -PFNGLVERTEX2FVPROC glad_glVertex2fv = NULL; -PFNGLVERTEX2IPROC glad_glVertex2i = NULL; -PFNGLVERTEX2IVPROC glad_glVertex2iv = NULL; -PFNGLVERTEX2SPROC glad_glVertex2s = NULL; -PFNGLVERTEX2SVPROC glad_glVertex2sv = NULL; -PFNGLVERTEX3DPROC glad_glVertex3d = NULL; -PFNGLVERTEX3DVPROC glad_glVertex3dv = NULL; -PFNGLVERTEX3FPROC glad_glVertex3f = NULL; -PFNGLVERTEX3FVPROC glad_glVertex3fv = NULL; -PFNGLVERTEX3IPROC glad_glVertex3i = NULL; -PFNGLVERTEX3IVPROC glad_glVertex3iv = NULL; -PFNGLVERTEX3SPROC glad_glVertex3s = NULL; -PFNGLVERTEX3SVPROC glad_glVertex3sv = NULL; -PFNGLVERTEX4DPROC glad_glVertex4d = NULL; -PFNGLVERTEX4DVPROC glad_glVertex4dv = NULL; -PFNGLVERTEX4FPROC glad_glVertex4f = NULL; -PFNGLVERTEX4FVPROC glad_glVertex4fv = NULL; -PFNGLVERTEX4IPROC glad_glVertex4i = NULL; -PFNGLVERTEX4IVPROC glad_glVertex4iv = NULL; -PFNGLVERTEX4SPROC glad_glVertex4s = NULL; -PFNGLVERTEX4SVPROC glad_glVertex4sv = NULL; -PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d = NULL; -PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv = NULL; -PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f = NULL; -PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv = NULL; -PFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s = NULL; -PFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv = NULL; -PFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d = NULL; -PFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv = NULL; -PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f = NULL; -PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv = NULL; -PFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s = NULL; -PFNGLVERTEXATTRIB2SVPROC glad_glVertexAttrib2sv = NULL; -PFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d = NULL; -PFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv = NULL; -PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f = NULL; -PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv = NULL; -PFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s = NULL; -PFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv = NULL; -PFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv = NULL; -PFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv = NULL; -PFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv = NULL; -PFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub = NULL; -PFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv = NULL; -PFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv = NULL; -PFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv = NULL; -PFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv = NULL; -PFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d = NULL; -PFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv = NULL; -PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f = NULL; -PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv = NULL; -PFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv = NULL; -PFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s = NULL; -PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv = NULL; -PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv = NULL; -PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv = NULL; -PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv = NULL; -PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor = NULL; -PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i = NULL; -PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv = NULL; -PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui = NULL; -PFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv = NULL; -PFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i = NULL; -PFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv = NULL; -PFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui = NULL; -PFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv = NULL; -PFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i = NULL; -PFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv = NULL; -PFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui = NULL; -PFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv = NULL; -PFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv = NULL; -PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i = NULL; -PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv = NULL; -PFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv = NULL; -PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv = NULL; -PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui = NULL; -PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv = NULL; -PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv = NULL; -PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer = NULL; -PFNGLVERTEXATTRIBP1UIPROC glad_glVertexAttribP1ui = NULL; -PFNGLVERTEXATTRIBP1UIVPROC glad_glVertexAttribP1uiv = NULL; -PFNGLVERTEXATTRIBP2UIPROC glad_glVertexAttribP2ui = NULL; -PFNGLVERTEXATTRIBP2UIVPROC glad_glVertexAttribP2uiv = NULL; -PFNGLVERTEXATTRIBP3UIPROC glad_glVertexAttribP3ui = NULL; -PFNGLVERTEXATTRIBP3UIVPROC glad_glVertexAttribP3uiv = NULL; -PFNGLVERTEXATTRIBP4UIPROC glad_glVertexAttribP4ui = NULL; -PFNGLVERTEXATTRIBP4UIVPROC glad_glVertexAttribP4uiv = NULL; -PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer = NULL; -PFNGLVERTEXP2UIPROC glad_glVertexP2ui = NULL; -PFNGLVERTEXP2UIVPROC glad_glVertexP2uiv = NULL; -PFNGLVERTEXP3UIPROC glad_glVertexP3ui = NULL; -PFNGLVERTEXP3UIVPROC glad_glVertexP3uiv = NULL; -PFNGLVERTEXP4UIPROC glad_glVertexP4ui = NULL; -PFNGLVERTEXP4UIVPROC glad_glVertexP4uiv = NULL; -PFNGLVERTEXPOINTERPROC glad_glVertexPointer = NULL; -PFNGLVIEWPORTPROC glad_glViewport = NULL; -PFNGLWAITSYNCPROC glad_glWaitSync = NULL; -PFNGLWINDOWPOS2DPROC glad_glWindowPos2d = NULL; -PFNGLWINDOWPOS2DVPROC glad_glWindowPos2dv = NULL; -PFNGLWINDOWPOS2FPROC glad_glWindowPos2f = NULL; -PFNGLWINDOWPOS2FVPROC glad_glWindowPos2fv = NULL; -PFNGLWINDOWPOS2IPROC glad_glWindowPos2i = NULL; -PFNGLWINDOWPOS2IVPROC glad_glWindowPos2iv = NULL; -PFNGLWINDOWPOS2SPROC glad_glWindowPos2s = NULL; -PFNGLWINDOWPOS2SVPROC glad_glWindowPos2sv = NULL; -PFNGLWINDOWPOS3DPROC glad_glWindowPos3d = NULL; -PFNGLWINDOWPOS3DVPROC glad_glWindowPos3dv = NULL; -PFNGLWINDOWPOS3FPROC glad_glWindowPos3f = NULL; -PFNGLWINDOWPOS3FVPROC glad_glWindowPos3fv = NULL; -PFNGLWINDOWPOS3IPROC glad_glWindowPos3i = NULL; -PFNGLWINDOWPOS3IVPROC glad_glWindowPos3iv = NULL; -PFNGLWINDOWPOS3SPROC glad_glWindowPos3s = NULL; -PFNGLWINDOWPOS3SVPROC glad_glWindowPos3sv = NULL; -static void load_GL_VERSION_1_0(GLADloadproc load) { - if(!GLAD_GL_VERSION_1_0) return; - glad_glCullFace = (PFNGLCULLFACEPROC)load("glCullFace"); - glad_glFrontFace = (PFNGLFRONTFACEPROC)load("glFrontFace"); - glad_glHint = (PFNGLHINTPROC)load("glHint"); - glad_glLineWidth = (PFNGLLINEWIDTHPROC)load("glLineWidth"); - glad_glPointSize = (PFNGLPOINTSIZEPROC)load("glPointSize"); - glad_glPolygonMode = (PFNGLPOLYGONMODEPROC)load("glPolygonMode"); - glad_glScissor = (PFNGLSCISSORPROC)load("glScissor"); - glad_glTexParameterf = (PFNGLTEXPARAMETERFPROC)load("glTexParameterf"); - glad_glTexParameterfv = (PFNGLTEXPARAMETERFVPROC)load("glTexParameterfv"); - glad_glTexParameteri = (PFNGLTEXPARAMETERIPROC)load("glTexParameteri"); - glad_glTexParameteriv = (PFNGLTEXPARAMETERIVPROC)load("glTexParameteriv"); - glad_glTexImage1D = (PFNGLTEXIMAGE1DPROC)load("glTexImage1D"); - glad_glTexImage2D = (PFNGLTEXIMAGE2DPROC)load("glTexImage2D"); - glad_glDrawBuffer = (PFNGLDRAWBUFFERPROC)load("glDrawBuffer"); - glad_glClear = (PFNGLCLEARPROC)load("glClear"); - glad_glClearColor = (PFNGLCLEARCOLORPROC)load("glClearColor"); - glad_glClearStencil = (PFNGLCLEARSTENCILPROC)load("glClearStencil"); - glad_glClearDepth = (PFNGLCLEARDEPTHPROC)load("glClearDepth"); - glad_glStencilMask = (PFNGLSTENCILMASKPROC)load("glStencilMask"); - glad_glColorMask = (PFNGLCOLORMASKPROC)load("glColorMask"); - glad_glDepthMask = (PFNGLDEPTHMASKPROC)load("glDepthMask"); - glad_glDisable = (PFNGLDISABLEPROC)load("glDisable"); - glad_glEnable = (PFNGLENABLEPROC)load("glEnable"); - glad_glFinish = (PFNGLFINISHPROC)load("glFinish"); - glad_glFlush = (PFNGLFLUSHPROC)load("glFlush"); - glad_glBlendFunc = (PFNGLBLENDFUNCPROC)load("glBlendFunc"); - glad_glLogicOp = (PFNGLLOGICOPPROC)load("glLogicOp"); - glad_glStencilFunc = (PFNGLSTENCILFUNCPROC)load("glStencilFunc"); - glad_glStencilOp = (PFNGLSTENCILOPPROC)load("glStencilOp"); - glad_glDepthFunc = (PFNGLDEPTHFUNCPROC)load("glDepthFunc"); - glad_glPixelStoref = (PFNGLPIXELSTOREFPROC)load("glPixelStoref"); - glad_glPixelStorei = (PFNGLPIXELSTOREIPROC)load("glPixelStorei"); - glad_glReadBuffer = (PFNGLREADBUFFERPROC)load("glReadBuffer"); - glad_glReadPixels = (PFNGLREADPIXELSPROC)load("glReadPixels"); - glad_glGetBooleanv = (PFNGLGETBOOLEANVPROC)load("glGetBooleanv"); - glad_glGetDoublev = (PFNGLGETDOUBLEVPROC)load("glGetDoublev"); - glad_glGetError = (PFNGLGETERRORPROC)load("glGetError"); - glad_glGetFloatv = (PFNGLGETFLOATVPROC)load("glGetFloatv"); - glad_glGetIntegerv = (PFNGLGETINTEGERVPROC)load("glGetIntegerv"); - glad_glGetString = (PFNGLGETSTRINGPROC)load("glGetString"); - glad_glGetTexImage = (PFNGLGETTEXIMAGEPROC)load("glGetTexImage"); - glad_glGetTexParameterfv = (PFNGLGETTEXPARAMETERFVPROC)load("glGetTexParameterfv"); - glad_glGetTexParameteriv = (PFNGLGETTEXPARAMETERIVPROC)load("glGetTexParameteriv"); - glad_glGetTexLevelParameterfv = (PFNGLGETTEXLEVELPARAMETERFVPROC)load("glGetTexLevelParameterfv"); - glad_glGetTexLevelParameteriv = (PFNGLGETTEXLEVELPARAMETERIVPROC)load("glGetTexLevelParameteriv"); - glad_glIsEnabled = (PFNGLISENABLEDPROC)load("glIsEnabled"); - glad_glDepthRange = (PFNGLDEPTHRANGEPROC)load("glDepthRange"); - glad_glViewport = (PFNGLVIEWPORTPROC)load("glViewport"); - glad_glNewList = (PFNGLNEWLISTPROC)load("glNewList"); - glad_glEndList = (PFNGLENDLISTPROC)load("glEndList"); - glad_glCallList = (PFNGLCALLLISTPROC)load("glCallList"); - glad_glCallLists = (PFNGLCALLLISTSPROC)load("glCallLists"); - glad_glDeleteLists = (PFNGLDELETELISTSPROC)load("glDeleteLists"); - glad_glGenLists = (PFNGLGENLISTSPROC)load("glGenLists"); - glad_glListBase = (PFNGLLISTBASEPROC)load("glListBase"); - glad_glBegin = (PFNGLBEGINPROC)load("glBegin"); - glad_glBitmap = (PFNGLBITMAPPROC)load("glBitmap"); - glad_glColor3b = (PFNGLCOLOR3BPROC)load("glColor3b"); - glad_glColor3bv = (PFNGLCOLOR3BVPROC)load("glColor3bv"); - glad_glColor3d = (PFNGLCOLOR3DPROC)load("glColor3d"); - glad_glColor3dv = (PFNGLCOLOR3DVPROC)load("glColor3dv"); - glad_glColor3f = (PFNGLCOLOR3FPROC)load("glColor3f"); - glad_glColor3fv = (PFNGLCOLOR3FVPROC)load("glColor3fv"); - glad_glColor3i = (PFNGLCOLOR3IPROC)load("glColor3i"); - glad_glColor3iv = (PFNGLCOLOR3IVPROC)load("glColor3iv"); - glad_glColor3s = (PFNGLCOLOR3SPROC)load("glColor3s"); - glad_glColor3sv = (PFNGLCOLOR3SVPROC)load("glColor3sv"); - glad_glColor3ub = (PFNGLCOLOR3UBPROC)load("glColor3ub"); - glad_glColor3ubv = (PFNGLCOLOR3UBVPROC)load("glColor3ubv"); - glad_glColor3ui = (PFNGLCOLOR3UIPROC)load("glColor3ui"); - glad_glColor3uiv = (PFNGLCOLOR3UIVPROC)load("glColor3uiv"); - glad_glColor3us = (PFNGLCOLOR3USPROC)load("glColor3us"); - glad_glColor3usv = (PFNGLCOLOR3USVPROC)load("glColor3usv"); - glad_glColor4b = (PFNGLCOLOR4BPROC)load("glColor4b"); - glad_glColor4bv = (PFNGLCOLOR4BVPROC)load("glColor4bv"); - glad_glColor4d = (PFNGLCOLOR4DPROC)load("glColor4d"); - glad_glColor4dv = (PFNGLCOLOR4DVPROC)load("glColor4dv"); - glad_glColor4f = (PFNGLCOLOR4FPROC)load("glColor4f"); - glad_glColor4fv = (PFNGLCOLOR4FVPROC)load("glColor4fv"); - glad_glColor4i = (PFNGLCOLOR4IPROC)load("glColor4i"); - glad_glColor4iv = (PFNGLCOLOR4IVPROC)load("glColor4iv"); - glad_glColor4s = (PFNGLCOLOR4SPROC)load("glColor4s"); - glad_glColor4sv = (PFNGLCOLOR4SVPROC)load("glColor4sv"); - glad_glColor4ub = (PFNGLCOLOR4UBPROC)load("glColor4ub"); - glad_glColor4ubv = (PFNGLCOLOR4UBVPROC)load("glColor4ubv"); - glad_glColor4ui = (PFNGLCOLOR4UIPROC)load("glColor4ui"); - glad_glColor4uiv = (PFNGLCOLOR4UIVPROC)load("glColor4uiv"); - glad_glColor4us = (PFNGLCOLOR4USPROC)load("glColor4us"); - glad_glColor4usv = (PFNGLCOLOR4USVPROC)load("glColor4usv"); - glad_glEdgeFlag = (PFNGLEDGEFLAGPROC)load("glEdgeFlag"); - glad_glEdgeFlagv = (PFNGLEDGEFLAGVPROC)load("glEdgeFlagv"); - glad_glEnd = (PFNGLENDPROC)load("glEnd"); - glad_glIndexd = (PFNGLINDEXDPROC)load("glIndexd"); - glad_glIndexdv = (PFNGLINDEXDVPROC)load("glIndexdv"); - glad_glIndexf = (PFNGLINDEXFPROC)load("glIndexf"); - glad_glIndexfv = (PFNGLINDEXFVPROC)load("glIndexfv"); - glad_glIndexi = (PFNGLINDEXIPROC)load("glIndexi"); - glad_glIndexiv = (PFNGLINDEXIVPROC)load("glIndexiv"); - glad_glIndexs = (PFNGLINDEXSPROC)load("glIndexs"); - glad_glIndexsv = (PFNGLINDEXSVPROC)load("glIndexsv"); - glad_glNormal3b = (PFNGLNORMAL3BPROC)load("glNormal3b"); - glad_glNormal3bv = (PFNGLNORMAL3BVPROC)load("glNormal3bv"); - glad_glNormal3d = (PFNGLNORMAL3DPROC)load("glNormal3d"); - glad_glNormal3dv = (PFNGLNORMAL3DVPROC)load("glNormal3dv"); - glad_glNormal3f = (PFNGLNORMAL3FPROC)load("glNormal3f"); - glad_glNormal3fv = (PFNGLNORMAL3FVPROC)load("glNormal3fv"); - glad_glNormal3i = (PFNGLNORMAL3IPROC)load("glNormal3i"); - glad_glNormal3iv = (PFNGLNORMAL3IVPROC)load("glNormal3iv"); - glad_glNormal3s = (PFNGLNORMAL3SPROC)load("glNormal3s"); - glad_glNormal3sv = (PFNGLNORMAL3SVPROC)load("glNormal3sv"); - glad_glRasterPos2d = (PFNGLRASTERPOS2DPROC)load("glRasterPos2d"); - glad_glRasterPos2dv = (PFNGLRASTERPOS2DVPROC)load("glRasterPos2dv"); - glad_glRasterPos2f = (PFNGLRASTERPOS2FPROC)load("glRasterPos2f"); - glad_glRasterPos2fv = (PFNGLRASTERPOS2FVPROC)load("glRasterPos2fv"); - glad_glRasterPos2i = (PFNGLRASTERPOS2IPROC)load("glRasterPos2i"); - glad_glRasterPos2iv = (PFNGLRASTERPOS2IVPROC)load("glRasterPos2iv"); - glad_glRasterPos2s = (PFNGLRASTERPOS2SPROC)load("glRasterPos2s"); - glad_glRasterPos2sv = (PFNGLRASTERPOS2SVPROC)load("glRasterPos2sv"); - glad_glRasterPos3d = (PFNGLRASTERPOS3DPROC)load("glRasterPos3d"); - glad_glRasterPos3dv = (PFNGLRASTERPOS3DVPROC)load("glRasterPos3dv"); - glad_glRasterPos3f = (PFNGLRASTERPOS3FPROC)load("glRasterPos3f"); - glad_glRasterPos3fv = (PFNGLRASTERPOS3FVPROC)load("glRasterPos3fv"); - glad_glRasterPos3i = (PFNGLRASTERPOS3IPROC)load("glRasterPos3i"); - glad_glRasterPos3iv = (PFNGLRASTERPOS3IVPROC)load("glRasterPos3iv"); - glad_glRasterPos3s = (PFNGLRASTERPOS3SPROC)load("glRasterPos3s"); - glad_glRasterPos3sv = (PFNGLRASTERPOS3SVPROC)load("glRasterPos3sv"); - glad_glRasterPos4d = (PFNGLRASTERPOS4DPROC)load("glRasterPos4d"); - glad_glRasterPos4dv = (PFNGLRASTERPOS4DVPROC)load("glRasterPos4dv"); - glad_glRasterPos4f = (PFNGLRASTERPOS4FPROC)load("glRasterPos4f"); - glad_glRasterPos4fv = (PFNGLRASTERPOS4FVPROC)load("glRasterPos4fv"); - glad_glRasterPos4i = (PFNGLRASTERPOS4IPROC)load("glRasterPos4i"); - glad_glRasterPos4iv = (PFNGLRASTERPOS4IVPROC)load("glRasterPos4iv"); - glad_glRasterPos4s = (PFNGLRASTERPOS4SPROC)load("glRasterPos4s"); - glad_glRasterPos4sv = (PFNGLRASTERPOS4SVPROC)load("glRasterPos4sv"); - glad_glRectd = (PFNGLRECTDPROC)load("glRectd"); - glad_glRectdv = (PFNGLRECTDVPROC)load("glRectdv"); - glad_glRectf = (PFNGLRECTFPROC)load("glRectf"); - glad_glRectfv = (PFNGLRECTFVPROC)load("glRectfv"); - glad_glRecti = (PFNGLRECTIPROC)load("glRecti"); - glad_glRectiv = (PFNGLRECTIVPROC)load("glRectiv"); - glad_glRects = (PFNGLRECTSPROC)load("glRects"); - glad_glRectsv = (PFNGLRECTSVPROC)load("glRectsv"); - glad_glTexCoord1d = (PFNGLTEXCOORD1DPROC)load("glTexCoord1d"); - glad_glTexCoord1dv = (PFNGLTEXCOORD1DVPROC)load("glTexCoord1dv"); - glad_glTexCoord1f = (PFNGLTEXCOORD1FPROC)load("glTexCoord1f"); - glad_glTexCoord1fv = (PFNGLTEXCOORD1FVPROC)load("glTexCoord1fv"); - glad_glTexCoord1i = (PFNGLTEXCOORD1IPROC)load("glTexCoord1i"); - glad_glTexCoord1iv = (PFNGLTEXCOORD1IVPROC)load("glTexCoord1iv"); - glad_glTexCoord1s = (PFNGLTEXCOORD1SPROC)load("glTexCoord1s"); - glad_glTexCoord1sv = (PFNGLTEXCOORD1SVPROC)load("glTexCoord1sv"); - glad_glTexCoord2d = (PFNGLTEXCOORD2DPROC)load("glTexCoord2d"); - glad_glTexCoord2dv = (PFNGLTEXCOORD2DVPROC)load("glTexCoord2dv"); - glad_glTexCoord2f = (PFNGLTEXCOORD2FPROC)load("glTexCoord2f"); - glad_glTexCoord2fv = (PFNGLTEXCOORD2FVPROC)load("glTexCoord2fv"); - glad_glTexCoord2i = (PFNGLTEXCOORD2IPROC)load("glTexCoord2i"); - glad_glTexCoord2iv = (PFNGLTEXCOORD2IVPROC)load("glTexCoord2iv"); - glad_glTexCoord2s = (PFNGLTEXCOORD2SPROC)load("glTexCoord2s"); - glad_glTexCoord2sv = (PFNGLTEXCOORD2SVPROC)load("glTexCoord2sv"); - glad_glTexCoord3d = (PFNGLTEXCOORD3DPROC)load("glTexCoord3d"); - glad_glTexCoord3dv = (PFNGLTEXCOORD3DVPROC)load("glTexCoord3dv"); - glad_glTexCoord3f = (PFNGLTEXCOORD3FPROC)load("glTexCoord3f"); - glad_glTexCoord3fv = (PFNGLTEXCOORD3FVPROC)load("glTexCoord3fv"); - glad_glTexCoord3i = (PFNGLTEXCOORD3IPROC)load("glTexCoord3i"); - glad_glTexCoord3iv = (PFNGLTEXCOORD3IVPROC)load("glTexCoord3iv"); - glad_glTexCoord3s = (PFNGLTEXCOORD3SPROC)load("glTexCoord3s"); - glad_glTexCoord3sv = (PFNGLTEXCOORD3SVPROC)load("glTexCoord3sv"); - glad_glTexCoord4d = (PFNGLTEXCOORD4DPROC)load("glTexCoord4d"); - glad_glTexCoord4dv = (PFNGLTEXCOORD4DVPROC)load("glTexCoord4dv"); - glad_glTexCoord4f = (PFNGLTEXCOORD4FPROC)load("glTexCoord4f"); - glad_glTexCoord4fv = (PFNGLTEXCOORD4FVPROC)load("glTexCoord4fv"); - glad_glTexCoord4i = (PFNGLTEXCOORD4IPROC)load("glTexCoord4i"); - glad_glTexCoord4iv = (PFNGLTEXCOORD4IVPROC)load("glTexCoord4iv"); - glad_glTexCoord4s = (PFNGLTEXCOORD4SPROC)load("glTexCoord4s"); - glad_glTexCoord4sv = (PFNGLTEXCOORD4SVPROC)load("glTexCoord4sv"); - glad_glVertex2d = (PFNGLVERTEX2DPROC)load("glVertex2d"); - glad_glVertex2dv = (PFNGLVERTEX2DVPROC)load("glVertex2dv"); - glad_glVertex2f = (PFNGLVERTEX2FPROC)load("glVertex2f"); - glad_glVertex2fv = (PFNGLVERTEX2FVPROC)load("glVertex2fv"); - glad_glVertex2i = (PFNGLVERTEX2IPROC)load("glVertex2i"); - glad_glVertex2iv = (PFNGLVERTEX2IVPROC)load("glVertex2iv"); - glad_glVertex2s = (PFNGLVERTEX2SPROC)load("glVertex2s"); - glad_glVertex2sv = (PFNGLVERTEX2SVPROC)load("glVertex2sv"); - glad_glVertex3d = (PFNGLVERTEX3DPROC)load("glVertex3d"); - glad_glVertex3dv = (PFNGLVERTEX3DVPROC)load("glVertex3dv"); - glad_glVertex3f = (PFNGLVERTEX3FPROC)load("glVertex3f"); - glad_glVertex3fv = (PFNGLVERTEX3FVPROC)load("glVertex3fv"); - glad_glVertex3i = (PFNGLVERTEX3IPROC)load("glVertex3i"); - glad_glVertex3iv = (PFNGLVERTEX3IVPROC)load("glVertex3iv"); - glad_glVertex3s = (PFNGLVERTEX3SPROC)load("glVertex3s"); - glad_glVertex3sv = (PFNGLVERTEX3SVPROC)load("glVertex3sv"); - glad_glVertex4d = (PFNGLVERTEX4DPROC)load("glVertex4d"); - glad_glVertex4dv = (PFNGLVERTEX4DVPROC)load("glVertex4dv"); - glad_glVertex4f = (PFNGLVERTEX4FPROC)load("glVertex4f"); - glad_glVertex4fv = (PFNGLVERTEX4FVPROC)load("glVertex4fv"); - glad_glVertex4i = (PFNGLVERTEX4IPROC)load("glVertex4i"); - glad_glVertex4iv = (PFNGLVERTEX4IVPROC)load("glVertex4iv"); - glad_glVertex4s = (PFNGLVERTEX4SPROC)load("glVertex4s"); - glad_glVertex4sv = (PFNGLVERTEX4SVPROC)load("glVertex4sv"); - glad_glClipPlane = (PFNGLCLIPPLANEPROC)load("glClipPlane"); - glad_glColorMaterial = (PFNGLCOLORMATERIALPROC)load("glColorMaterial"); - glad_glFogf = (PFNGLFOGFPROC)load("glFogf"); - glad_glFogfv = (PFNGLFOGFVPROC)load("glFogfv"); - glad_glFogi = (PFNGLFOGIPROC)load("glFogi"); - glad_glFogiv = (PFNGLFOGIVPROC)load("glFogiv"); - glad_glLightf = (PFNGLLIGHTFPROC)load("glLightf"); - glad_glLightfv = (PFNGLLIGHTFVPROC)load("glLightfv"); - glad_glLighti = (PFNGLLIGHTIPROC)load("glLighti"); - glad_glLightiv = (PFNGLLIGHTIVPROC)load("glLightiv"); - glad_glLightModelf = (PFNGLLIGHTMODELFPROC)load("glLightModelf"); - glad_glLightModelfv = (PFNGLLIGHTMODELFVPROC)load("glLightModelfv"); - glad_glLightModeli = (PFNGLLIGHTMODELIPROC)load("glLightModeli"); - glad_glLightModeliv = (PFNGLLIGHTMODELIVPROC)load("glLightModeliv"); - glad_glLineStipple = (PFNGLLINESTIPPLEPROC)load("glLineStipple"); - glad_glMaterialf = (PFNGLMATERIALFPROC)load("glMaterialf"); - glad_glMaterialfv = (PFNGLMATERIALFVPROC)load("glMaterialfv"); - glad_glMateriali = (PFNGLMATERIALIPROC)load("glMateriali"); - glad_glMaterialiv = (PFNGLMATERIALIVPROC)load("glMaterialiv"); - glad_glPolygonStipple = (PFNGLPOLYGONSTIPPLEPROC)load("glPolygonStipple"); - glad_glShadeModel = (PFNGLSHADEMODELPROC)load("glShadeModel"); - glad_glTexEnvf = (PFNGLTEXENVFPROC)load("glTexEnvf"); - glad_glTexEnvfv = (PFNGLTEXENVFVPROC)load("glTexEnvfv"); - glad_glTexEnvi = (PFNGLTEXENVIPROC)load("glTexEnvi"); - glad_glTexEnviv = (PFNGLTEXENVIVPROC)load("glTexEnviv"); - glad_glTexGend = (PFNGLTEXGENDPROC)load("glTexGend"); - glad_glTexGendv = (PFNGLTEXGENDVPROC)load("glTexGendv"); - glad_glTexGenf = (PFNGLTEXGENFPROC)load("glTexGenf"); - glad_glTexGenfv = (PFNGLTEXGENFVPROC)load("glTexGenfv"); - glad_glTexGeni = (PFNGLTEXGENIPROC)load("glTexGeni"); - glad_glTexGeniv = (PFNGLTEXGENIVPROC)load("glTexGeniv"); - glad_glFeedbackBuffer = (PFNGLFEEDBACKBUFFERPROC)load("glFeedbackBuffer"); - glad_glSelectBuffer = (PFNGLSELECTBUFFERPROC)load("glSelectBuffer"); - glad_glRenderMode = (PFNGLRENDERMODEPROC)load("glRenderMode"); - glad_glInitNames = (PFNGLINITNAMESPROC)load("glInitNames"); - glad_glLoadName = (PFNGLLOADNAMEPROC)load("glLoadName"); - glad_glPassThrough = (PFNGLPASSTHROUGHPROC)load("glPassThrough"); - glad_glPopName = (PFNGLPOPNAMEPROC)load("glPopName"); - glad_glPushName = (PFNGLPUSHNAMEPROC)load("glPushName"); - glad_glClearAccum = (PFNGLCLEARACCUMPROC)load("glClearAccum"); - glad_glClearIndex = (PFNGLCLEARINDEXPROC)load("glClearIndex"); - glad_glIndexMask = (PFNGLINDEXMASKPROC)load("glIndexMask"); - glad_glAccum = (PFNGLACCUMPROC)load("glAccum"); - glad_glPopAttrib = (PFNGLPOPATTRIBPROC)load("glPopAttrib"); - glad_glPushAttrib = (PFNGLPUSHATTRIBPROC)load("glPushAttrib"); - glad_glMap1d = (PFNGLMAP1DPROC)load("glMap1d"); - glad_glMap1f = (PFNGLMAP1FPROC)load("glMap1f"); - glad_glMap2d = (PFNGLMAP2DPROC)load("glMap2d"); - glad_glMap2f = (PFNGLMAP2FPROC)load("glMap2f"); - glad_glMapGrid1d = (PFNGLMAPGRID1DPROC)load("glMapGrid1d"); - glad_glMapGrid1f = (PFNGLMAPGRID1FPROC)load("glMapGrid1f"); - glad_glMapGrid2d = (PFNGLMAPGRID2DPROC)load("glMapGrid2d"); - glad_glMapGrid2f = (PFNGLMAPGRID2FPROC)load("glMapGrid2f"); - glad_glEvalCoord1d = (PFNGLEVALCOORD1DPROC)load("glEvalCoord1d"); - glad_glEvalCoord1dv = (PFNGLEVALCOORD1DVPROC)load("glEvalCoord1dv"); - glad_glEvalCoord1f = (PFNGLEVALCOORD1FPROC)load("glEvalCoord1f"); - glad_glEvalCoord1fv = (PFNGLEVALCOORD1FVPROC)load("glEvalCoord1fv"); - glad_glEvalCoord2d = (PFNGLEVALCOORD2DPROC)load("glEvalCoord2d"); - glad_glEvalCoord2dv = (PFNGLEVALCOORD2DVPROC)load("glEvalCoord2dv"); - glad_glEvalCoord2f = (PFNGLEVALCOORD2FPROC)load("glEvalCoord2f"); - glad_glEvalCoord2fv = (PFNGLEVALCOORD2FVPROC)load("glEvalCoord2fv"); - glad_glEvalMesh1 = (PFNGLEVALMESH1PROC)load("glEvalMesh1"); - glad_glEvalPoint1 = (PFNGLEVALPOINT1PROC)load("glEvalPoint1"); - glad_glEvalMesh2 = (PFNGLEVALMESH2PROC)load("glEvalMesh2"); - glad_glEvalPoint2 = (PFNGLEVALPOINT2PROC)load("glEvalPoint2"); - glad_glAlphaFunc = (PFNGLALPHAFUNCPROC)load("glAlphaFunc"); - glad_glPixelZoom = (PFNGLPIXELZOOMPROC)load("glPixelZoom"); - glad_glPixelTransferf = (PFNGLPIXELTRANSFERFPROC)load("glPixelTransferf"); - glad_glPixelTransferi = (PFNGLPIXELTRANSFERIPROC)load("glPixelTransferi"); - glad_glPixelMapfv = (PFNGLPIXELMAPFVPROC)load("glPixelMapfv"); - glad_glPixelMapuiv = (PFNGLPIXELMAPUIVPROC)load("glPixelMapuiv"); - glad_glPixelMapusv = (PFNGLPIXELMAPUSVPROC)load("glPixelMapusv"); - glad_glCopyPixels = (PFNGLCOPYPIXELSPROC)load("glCopyPixels"); - glad_glDrawPixels = (PFNGLDRAWPIXELSPROC)load("glDrawPixels"); - glad_glGetClipPlane = (PFNGLGETCLIPPLANEPROC)load("glGetClipPlane"); - glad_glGetLightfv = (PFNGLGETLIGHTFVPROC)load("glGetLightfv"); - glad_glGetLightiv = (PFNGLGETLIGHTIVPROC)load("glGetLightiv"); - glad_glGetMapdv = (PFNGLGETMAPDVPROC)load("glGetMapdv"); - glad_glGetMapfv = (PFNGLGETMAPFVPROC)load("glGetMapfv"); - glad_glGetMapiv = (PFNGLGETMAPIVPROC)load("glGetMapiv"); - glad_glGetMaterialfv = (PFNGLGETMATERIALFVPROC)load("glGetMaterialfv"); - glad_glGetMaterialiv = (PFNGLGETMATERIALIVPROC)load("glGetMaterialiv"); - glad_glGetPixelMapfv = (PFNGLGETPIXELMAPFVPROC)load("glGetPixelMapfv"); - glad_glGetPixelMapuiv = (PFNGLGETPIXELMAPUIVPROC)load("glGetPixelMapuiv"); - glad_glGetPixelMapusv = (PFNGLGETPIXELMAPUSVPROC)load("glGetPixelMapusv"); - glad_glGetPolygonStipple = (PFNGLGETPOLYGONSTIPPLEPROC)load("glGetPolygonStipple"); - glad_glGetTexEnvfv = (PFNGLGETTEXENVFVPROC)load("glGetTexEnvfv"); - glad_glGetTexEnviv = (PFNGLGETTEXENVIVPROC)load("glGetTexEnviv"); - glad_glGetTexGendv = (PFNGLGETTEXGENDVPROC)load("glGetTexGendv"); - glad_glGetTexGenfv = (PFNGLGETTEXGENFVPROC)load("glGetTexGenfv"); - glad_glGetTexGeniv = (PFNGLGETTEXGENIVPROC)load("glGetTexGeniv"); - glad_glIsList = (PFNGLISLISTPROC)load("glIsList"); - glad_glFrustum = (PFNGLFRUSTUMPROC)load("glFrustum"); - glad_glLoadIdentity = (PFNGLLOADIDENTITYPROC)load("glLoadIdentity"); - glad_glLoadMatrixf = (PFNGLLOADMATRIXFPROC)load("glLoadMatrixf"); - glad_glLoadMatrixd = (PFNGLLOADMATRIXDPROC)load("glLoadMatrixd"); - glad_glMatrixMode = (PFNGLMATRIXMODEPROC)load("glMatrixMode"); - glad_glMultMatrixf = (PFNGLMULTMATRIXFPROC)load("glMultMatrixf"); - glad_glMultMatrixd = (PFNGLMULTMATRIXDPROC)load("glMultMatrixd"); - glad_glOrtho = (PFNGLORTHOPROC)load("glOrtho"); - glad_glPopMatrix = (PFNGLPOPMATRIXPROC)load("glPopMatrix"); - glad_glPushMatrix = (PFNGLPUSHMATRIXPROC)load("glPushMatrix"); - glad_glRotated = (PFNGLROTATEDPROC)load("glRotated"); - glad_glRotatef = (PFNGLROTATEFPROC)load("glRotatef"); - glad_glScaled = (PFNGLSCALEDPROC)load("glScaled"); - glad_glScalef = (PFNGLSCALEFPROC)load("glScalef"); - glad_glTranslated = (PFNGLTRANSLATEDPROC)load("glTranslated"); - glad_glTranslatef = (PFNGLTRANSLATEFPROC)load("glTranslatef"); -} -static void load_GL_VERSION_1_1(GLADloadproc load) { - if(!GLAD_GL_VERSION_1_1) return; - glad_glDrawArrays = (PFNGLDRAWARRAYSPROC)load("glDrawArrays"); - glad_glDrawElements = (PFNGLDRAWELEMENTSPROC)load("glDrawElements"); - glad_glGetPointerv = (PFNGLGETPOINTERVPROC)load("glGetPointerv"); - glad_glPolygonOffset = (PFNGLPOLYGONOFFSETPROC)load("glPolygonOffset"); - glad_glCopyTexImage1D = (PFNGLCOPYTEXIMAGE1DPROC)load("glCopyTexImage1D"); - glad_glCopyTexImage2D = (PFNGLCOPYTEXIMAGE2DPROC)load("glCopyTexImage2D"); - glad_glCopyTexSubImage1D = (PFNGLCOPYTEXSUBIMAGE1DPROC)load("glCopyTexSubImage1D"); - glad_glCopyTexSubImage2D = (PFNGLCOPYTEXSUBIMAGE2DPROC)load("glCopyTexSubImage2D"); - glad_glTexSubImage1D = (PFNGLTEXSUBIMAGE1DPROC)load("glTexSubImage1D"); - glad_glTexSubImage2D = (PFNGLTEXSUBIMAGE2DPROC)load("glTexSubImage2D"); - glad_glBindTexture = (PFNGLBINDTEXTUREPROC)load("glBindTexture"); - glad_glDeleteTextures = (PFNGLDELETETEXTURESPROC)load("glDeleteTextures"); - glad_glGenTextures = (PFNGLGENTEXTURESPROC)load("glGenTextures"); - glad_glIsTexture = (PFNGLISTEXTUREPROC)load("glIsTexture"); - glad_glArrayElement = (PFNGLARRAYELEMENTPROC)load("glArrayElement"); - glad_glColorPointer = (PFNGLCOLORPOINTERPROC)load("glColorPointer"); - glad_glDisableClientState = (PFNGLDISABLECLIENTSTATEPROC)load("glDisableClientState"); - glad_glEdgeFlagPointer = (PFNGLEDGEFLAGPOINTERPROC)load("glEdgeFlagPointer"); - glad_glEnableClientState = (PFNGLENABLECLIENTSTATEPROC)load("glEnableClientState"); - glad_glIndexPointer = (PFNGLINDEXPOINTERPROC)load("glIndexPointer"); - glad_glInterleavedArrays = (PFNGLINTERLEAVEDARRAYSPROC)load("glInterleavedArrays"); - glad_glNormalPointer = (PFNGLNORMALPOINTERPROC)load("glNormalPointer"); - glad_glTexCoordPointer = (PFNGLTEXCOORDPOINTERPROC)load("glTexCoordPointer"); - glad_glVertexPointer = (PFNGLVERTEXPOINTERPROC)load("glVertexPointer"); - glad_glAreTexturesResident = (PFNGLARETEXTURESRESIDENTPROC)load("glAreTexturesResident"); - glad_glPrioritizeTextures = (PFNGLPRIORITIZETEXTURESPROC)load("glPrioritizeTextures"); - glad_glIndexub = (PFNGLINDEXUBPROC)load("glIndexub"); - glad_glIndexubv = (PFNGLINDEXUBVPROC)load("glIndexubv"); - glad_glPopClientAttrib = (PFNGLPOPCLIENTATTRIBPROC)load("glPopClientAttrib"); - glad_glPushClientAttrib = (PFNGLPUSHCLIENTATTRIBPROC)load("glPushClientAttrib"); -} -static void load_GL_VERSION_1_2(GLADloadproc load) { - if(!GLAD_GL_VERSION_1_2) return; - glad_glDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC)load("glDrawRangeElements"); - glad_glTexImage3D = (PFNGLTEXIMAGE3DPROC)load("glTexImage3D"); - glad_glTexSubImage3D = (PFNGLTEXSUBIMAGE3DPROC)load("glTexSubImage3D"); - glad_glCopyTexSubImage3D = (PFNGLCOPYTEXSUBIMAGE3DPROC)load("glCopyTexSubImage3D"); -} -static void load_GL_VERSION_1_3(GLADloadproc load) { - if(!GLAD_GL_VERSION_1_3) return; - glad_glActiveTexture = (PFNGLACTIVETEXTUREPROC)load("glActiveTexture"); - glad_glSampleCoverage = (PFNGLSAMPLECOVERAGEPROC)load("glSampleCoverage"); - glad_glCompressedTexImage3D = (PFNGLCOMPRESSEDTEXIMAGE3DPROC)load("glCompressedTexImage3D"); - glad_glCompressedTexImage2D = (PFNGLCOMPRESSEDTEXIMAGE2DPROC)load("glCompressedTexImage2D"); - glad_glCompressedTexImage1D = (PFNGLCOMPRESSEDTEXIMAGE1DPROC)load("glCompressedTexImage1D"); - glad_glCompressedTexSubImage3D = (PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)load("glCompressedTexSubImage3D"); - glad_glCompressedTexSubImage2D = (PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)load("glCompressedTexSubImage2D"); - glad_glCompressedTexSubImage1D = (PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)load("glCompressedTexSubImage1D"); - glad_glGetCompressedTexImage = (PFNGLGETCOMPRESSEDTEXIMAGEPROC)load("glGetCompressedTexImage"); - glad_glClientActiveTexture = (PFNGLCLIENTACTIVETEXTUREPROC)load("glClientActiveTexture"); - glad_glMultiTexCoord1d = (PFNGLMULTITEXCOORD1DPROC)load("glMultiTexCoord1d"); - glad_glMultiTexCoord1dv = (PFNGLMULTITEXCOORD1DVPROC)load("glMultiTexCoord1dv"); - glad_glMultiTexCoord1f = (PFNGLMULTITEXCOORD1FPROC)load("glMultiTexCoord1f"); - glad_glMultiTexCoord1fv = (PFNGLMULTITEXCOORD1FVPROC)load("glMultiTexCoord1fv"); - glad_glMultiTexCoord1i = (PFNGLMULTITEXCOORD1IPROC)load("glMultiTexCoord1i"); - glad_glMultiTexCoord1iv = (PFNGLMULTITEXCOORD1IVPROC)load("glMultiTexCoord1iv"); - glad_glMultiTexCoord1s = (PFNGLMULTITEXCOORD1SPROC)load("glMultiTexCoord1s"); - glad_glMultiTexCoord1sv = (PFNGLMULTITEXCOORD1SVPROC)load("glMultiTexCoord1sv"); - glad_glMultiTexCoord2d = (PFNGLMULTITEXCOORD2DPROC)load("glMultiTexCoord2d"); - glad_glMultiTexCoord2dv = (PFNGLMULTITEXCOORD2DVPROC)load("glMultiTexCoord2dv"); - glad_glMultiTexCoord2f = (PFNGLMULTITEXCOORD2FPROC)load("glMultiTexCoord2f"); - glad_glMultiTexCoord2fv = (PFNGLMULTITEXCOORD2FVPROC)load("glMultiTexCoord2fv"); - glad_glMultiTexCoord2i = (PFNGLMULTITEXCOORD2IPROC)load("glMultiTexCoord2i"); - glad_glMultiTexCoord2iv = (PFNGLMULTITEXCOORD2IVPROC)load("glMultiTexCoord2iv"); - glad_glMultiTexCoord2s = (PFNGLMULTITEXCOORD2SPROC)load("glMultiTexCoord2s"); - glad_glMultiTexCoord2sv = (PFNGLMULTITEXCOORD2SVPROC)load("glMultiTexCoord2sv"); - glad_glMultiTexCoord3d = (PFNGLMULTITEXCOORD3DPROC)load("glMultiTexCoord3d"); - glad_glMultiTexCoord3dv = (PFNGLMULTITEXCOORD3DVPROC)load("glMultiTexCoord3dv"); - glad_glMultiTexCoord3f = (PFNGLMULTITEXCOORD3FPROC)load("glMultiTexCoord3f"); - glad_glMultiTexCoord3fv = (PFNGLMULTITEXCOORD3FVPROC)load("glMultiTexCoord3fv"); - glad_glMultiTexCoord3i = (PFNGLMULTITEXCOORD3IPROC)load("glMultiTexCoord3i"); - glad_glMultiTexCoord3iv = (PFNGLMULTITEXCOORD3IVPROC)load("glMultiTexCoord3iv"); - glad_glMultiTexCoord3s = (PFNGLMULTITEXCOORD3SPROC)load("glMultiTexCoord3s"); - glad_glMultiTexCoord3sv = (PFNGLMULTITEXCOORD3SVPROC)load("glMultiTexCoord3sv"); - glad_glMultiTexCoord4d = (PFNGLMULTITEXCOORD4DPROC)load("glMultiTexCoord4d"); - glad_glMultiTexCoord4dv = (PFNGLMULTITEXCOORD4DVPROC)load("glMultiTexCoord4dv"); - glad_glMultiTexCoord4f = (PFNGLMULTITEXCOORD4FPROC)load("glMultiTexCoord4f"); - glad_glMultiTexCoord4fv = (PFNGLMULTITEXCOORD4FVPROC)load("glMultiTexCoord4fv"); - glad_glMultiTexCoord4i = (PFNGLMULTITEXCOORD4IPROC)load("glMultiTexCoord4i"); - glad_glMultiTexCoord4iv = (PFNGLMULTITEXCOORD4IVPROC)load("glMultiTexCoord4iv"); - glad_glMultiTexCoord4s = (PFNGLMULTITEXCOORD4SPROC)load("glMultiTexCoord4s"); - glad_glMultiTexCoord4sv = (PFNGLMULTITEXCOORD4SVPROC)load("glMultiTexCoord4sv"); - glad_glLoadTransposeMatrixf = (PFNGLLOADTRANSPOSEMATRIXFPROC)load("glLoadTransposeMatrixf"); - glad_glLoadTransposeMatrixd = (PFNGLLOADTRANSPOSEMATRIXDPROC)load("glLoadTransposeMatrixd"); - glad_glMultTransposeMatrixf = (PFNGLMULTTRANSPOSEMATRIXFPROC)load("glMultTransposeMatrixf"); - glad_glMultTransposeMatrixd = (PFNGLMULTTRANSPOSEMATRIXDPROC)load("glMultTransposeMatrixd"); -} -static void load_GL_VERSION_1_4(GLADloadproc load) { - if(!GLAD_GL_VERSION_1_4) return; - glad_glBlendFuncSeparate = (PFNGLBLENDFUNCSEPARATEPROC)load("glBlendFuncSeparate"); - glad_glMultiDrawArrays = (PFNGLMULTIDRAWARRAYSPROC)load("glMultiDrawArrays"); - glad_glMultiDrawElements = (PFNGLMULTIDRAWELEMENTSPROC)load("glMultiDrawElements"); - glad_glPointParameterf = (PFNGLPOINTPARAMETERFPROC)load("glPointParameterf"); - glad_glPointParameterfv = (PFNGLPOINTPARAMETERFVPROC)load("glPointParameterfv"); - glad_glPointParameteri = (PFNGLPOINTPARAMETERIPROC)load("glPointParameteri"); - glad_glPointParameteriv = (PFNGLPOINTPARAMETERIVPROC)load("glPointParameteriv"); - glad_glFogCoordf = (PFNGLFOGCOORDFPROC)load("glFogCoordf"); - glad_glFogCoordfv = (PFNGLFOGCOORDFVPROC)load("glFogCoordfv"); - glad_glFogCoordd = (PFNGLFOGCOORDDPROC)load("glFogCoordd"); - glad_glFogCoorddv = (PFNGLFOGCOORDDVPROC)load("glFogCoorddv"); - glad_glFogCoordPointer = (PFNGLFOGCOORDPOINTERPROC)load("glFogCoordPointer"); - glad_glSecondaryColor3b = (PFNGLSECONDARYCOLOR3BPROC)load("glSecondaryColor3b"); - glad_glSecondaryColor3bv = (PFNGLSECONDARYCOLOR3BVPROC)load("glSecondaryColor3bv"); - glad_glSecondaryColor3d = (PFNGLSECONDARYCOLOR3DPROC)load("glSecondaryColor3d"); - glad_glSecondaryColor3dv = (PFNGLSECONDARYCOLOR3DVPROC)load("glSecondaryColor3dv"); - glad_glSecondaryColor3f = (PFNGLSECONDARYCOLOR3FPROC)load("glSecondaryColor3f"); - glad_glSecondaryColor3fv = (PFNGLSECONDARYCOLOR3FVPROC)load("glSecondaryColor3fv"); - glad_glSecondaryColor3i = (PFNGLSECONDARYCOLOR3IPROC)load("glSecondaryColor3i"); - glad_glSecondaryColor3iv = (PFNGLSECONDARYCOLOR3IVPROC)load("glSecondaryColor3iv"); - glad_glSecondaryColor3s = (PFNGLSECONDARYCOLOR3SPROC)load("glSecondaryColor3s"); - glad_glSecondaryColor3sv = (PFNGLSECONDARYCOLOR3SVPROC)load("glSecondaryColor3sv"); - glad_glSecondaryColor3ub = (PFNGLSECONDARYCOLOR3UBPROC)load("glSecondaryColor3ub"); - glad_glSecondaryColor3ubv = (PFNGLSECONDARYCOLOR3UBVPROC)load("glSecondaryColor3ubv"); - glad_glSecondaryColor3ui = (PFNGLSECONDARYCOLOR3UIPROC)load("glSecondaryColor3ui"); - glad_glSecondaryColor3uiv = (PFNGLSECONDARYCOLOR3UIVPROC)load("glSecondaryColor3uiv"); - glad_glSecondaryColor3us = (PFNGLSECONDARYCOLOR3USPROC)load("glSecondaryColor3us"); - glad_glSecondaryColor3usv = (PFNGLSECONDARYCOLOR3USVPROC)load("glSecondaryColor3usv"); - glad_glSecondaryColorPointer = (PFNGLSECONDARYCOLORPOINTERPROC)load("glSecondaryColorPointer"); - glad_glWindowPos2d = (PFNGLWINDOWPOS2DPROC)load("glWindowPos2d"); - glad_glWindowPos2dv = (PFNGLWINDOWPOS2DVPROC)load("glWindowPos2dv"); - glad_glWindowPos2f = (PFNGLWINDOWPOS2FPROC)load("glWindowPos2f"); - glad_glWindowPos2fv = (PFNGLWINDOWPOS2FVPROC)load("glWindowPos2fv"); - glad_glWindowPos2i = (PFNGLWINDOWPOS2IPROC)load("glWindowPos2i"); - glad_glWindowPos2iv = (PFNGLWINDOWPOS2IVPROC)load("glWindowPos2iv"); - glad_glWindowPos2s = (PFNGLWINDOWPOS2SPROC)load("glWindowPos2s"); - glad_glWindowPos2sv = (PFNGLWINDOWPOS2SVPROC)load("glWindowPos2sv"); - glad_glWindowPos3d = (PFNGLWINDOWPOS3DPROC)load("glWindowPos3d"); - glad_glWindowPos3dv = (PFNGLWINDOWPOS3DVPROC)load("glWindowPos3dv"); - glad_glWindowPos3f = (PFNGLWINDOWPOS3FPROC)load("glWindowPos3f"); - glad_glWindowPos3fv = (PFNGLWINDOWPOS3FVPROC)load("glWindowPos3fv"); - glad_glWindowPos3i = (PFNGLWINDOWPOS3IPROC)load("glWindowPos3i"); - glad_glWindowPos3iv = (PFNGLWINDOWPOS3IVPROC)load("glWindowPos3iv"); - glad_glWindowPos3s = (PFNGLWINDOWPOS3SPROC)load("glWindowPos3s"); - glad_glWindowPos3sv = (PFNGLWINDOWPOS3SVPROC)load("glWindowPos3sv"); - glad_glBlendColor = (PFNGLBLENDCOLORPROC)load("glBlendColor"); - glad_glBlendEquation = (PFNGLBLENDEQUATIONPROC)load("glBlendEquation"); -} -static void load_GL_VERSION_1_5(GLADloadproc load) { - if(!GLAD_GL_VERSION_1_5) return; - glad_glGenQueries = (PFNGLGENQUERIESPROC)load("glGenQueries"); - glad_glDeleteQueries = (PFNGLDELETEQUERIESPROC)load("glDeleteQueries"); - glad_glIsQuery = (PFNGLISQUERYPROC)load("glIsQuery"); - glad_glBeginQuery = (PFNGLBEGINQUERYPROC)load("glBeginQuery"); - glad_glEndQuery = (PFNGLENDQUERYPROC)load("glEndQuery"); - glad_glGetQueryiv = (PFNGLGETQUERYIVPROC)load("glGetQueryiv"); - glad_glGetQueryObjectiv = (PFNGLGETQUERYOBJECTIVPROC)load("glGetQueryObjectiv"); - glad_glGetQueryObjectuiv = (PFNGLGETQUERYOBJECTUIVPROC)load("glGetQueryObjectuiv"); - glad_glBindBuffer = (PFNGLBINDBUFFERPROC)load("glBindBuffer"); - glad_glDeleteBuffers = (PFNGLDELETEBUFFERSPROC)load("glDeleteBuffers"); - glad_glGenBuffers = (PFNGLGENBUFFERSPROC)load("glGenBuffers"); - glad_glIsBuffer = (PFNGLISBUFFERPROC)load("glIsBuffer"); - glad_glBufferData = (PFNGLBUFFERDATAPROC)load("glBufferData"); - glad_glBufferSubData = (PFNGLBUFFERSUBDATAPROC)load("glBufferSubData"); - glad_glGetBufferSubData = (PFNGLGETBUFFERSUBDATAPROC)load("glGetBufferSubData"); - glad_glMapBuffer = (PFNGLMAPBUFFERPROC)load("glMapBuffer"); - glad_glUnmapBuffer = (PFNGLUNMAPBUFFERPROC)load("glUnmapBuffer"); - glad_glGetBufferParameteriv = (PFNGLGETBUFFERPARAMETERIVPROC)load("glGetBufferParameteriv"); - glad_glGetBufferPointerv = (PFNGLGETBUFFERPOINTERVPROC)load("glGetBufferPointerv"); -} -static void load_GL_VERSION_2_0(GLADloadproc load) { - if(!GLAD_GL_VERSION_2_0) return; - glad_glBlendEquationSeparate = (PFNGLBLENDEQUATIONSEPARATEPROC)load("glBlendEquationSeparate"); - glad_glDrawBuffers = (PFNGLDRAWBUFFERSPROC)load("glDrawBuffers"); - glad_glStencilOpSeparate = (PFNGLSTENCILOPSEPARATEPROC)load("glStencilOpSeparate"); - glad_glStencilFuncSeparate = (PFNGLSTENCILFUNCSEPARATEPROC)load("glStencilFuncSeparate"); - glad_glStencilMaskSeparate = (PFNGLSTENCILMASKSEPARATEPROC)load("glStencilMaskSeparate"); - glad_glAttachShader = (PFNGLATTACHSHADERPROC)load("glAttachShader"); - glad_glBindAttribLocation = (PFNGLBINDATTRIBLOCATIONPROC)load("glBindAttribLocation"); - glad_glCompileShader = (PFNGLCOMPILESHADERPROC)load("glCompileShader"); - glad_glCreateProgram = (PFNGLCREATEPROGRAMPROC)load("glCreateProgram"); - glad_glCreateShader = (PFNGLCREATESHADERPROC)load("glCreateShader"); - glad_glDeleteProgram = (PFNGLDELETEPROGRAMPROC)load("glDeleteProgram"); - glad_glDeleteShader = (PFNGLDELETESHADERPROC)load("glDeleteShader"); - glad_glDetachShader = (PFNGLDETACHSHADERPROC)load("glDetachShader"); - glad_glDisableVertexAttribArray = (PFNGLDISABLEVERTEXATTRIBARRAYPROC)load("glDisableVertexAttribArray"); - glad_glEnableVertexAttribArray = (PFNGLENABLEVERTEXATTRIBARRAYPROC)load("glEnableVertexAttribArray"); - glad_glGetActiveAttrib = (PFNGLGETACTIVEATTRIBPROC)load("glGetActiveAttrib"); - glad_glGetActiveUniform = (PFNGLGETACTIVEUNIFORMPROC)load("glGetActiveUniform"); - glad_glGetAttachedShaders = (PFNGLGETATTACHEDSHADERSPROC)load("glGetAttachedShaders"); - glad_glGetAttribLocation = (PFNGLGETATTRIBLOCATIONPROC)load("glGetAttribLocation"); - glad_glGetProgramiv = (PFNGLGETPROGRAMIVPROC)load("glGetProgramiv"); - glad_glGetProgramInfoLog = (PFNGLGETPROGRAMINFOLOGPROC)load("glGetProgramInfoLog"); - glad_glGetShaderiv = (PFNGLGETSHADERIVPROC)load("glGetShaderiv"); - glad_glGetShaderInfoLog = (PFNGLGETSHADERINFOLOGPROC)load("glGetShaderInfoLog"); - glad_glGetShaderSource = (PFNGLGETSHADERSOURCEPROC)load("glGetShaderSource"); - glad_glGetUniformLocation = (PFNGLGETUNIFORMLOCATIONPROC)load("glGetUniformLocation"); - glad_glGetUniformfv = (PFNGLGETUNIFORMFVPROC)load("glGetUniformfv"); - glad_glGetUniformiv = (PFNGLGETUNIFORMIVPROC)load("glGetUniformiv"); - glad_glGetVertexAttribdv = (PFNGLGETVERTEXATTRIBDVPROC)load("glGetVertexAttribdv"); - glad_glGetVertexAttribfv = (PFNGLGETVERTEXATTRIBFVPROC)load("glGetVertexAttribfv"); - glad_glGetVertexAttribiv = (PFNGLGETVERTEXATTRIBIVPROC)load("glGetVertexAttribiv"); - glad_glGetVertexAttribPointerv = (PFNGLGETVERTEXATTRIBPOINTERVPROC)load("glGetVertexAttribPointerv"); - glad_glIsProgram = (PFNGLISPROGRAMPROC)load("glIsProgram"); - glad_glIsShader = (PFNGLISSHADERPROC)load("glIsShader"); - glad_glLinkProgram = (PFNGLLINKPROGRAMPROC)load("glLinkProgram"); - glad_glShaderSource = (PFNGLSHADERSOURCEPROC)load("glShaderSource"); - glad_glUseProgram = (PFNGLUSEPROGRAMPROC)load("glUseProgram"); - glad_glUniform1f = (PFNGLUNIFORM1FPROC)load("glUniform1f"); - glad_glUniform2f = (PFNGLUNIFORM2FPROC)load("glUniform2f"); - glad_glUniform3f = (PFNGLUNIFORM3FPROC)load("glUniform3f"); - glad_glUniform4f = (PFNGLUNIFORM4FPROC)load("glUniform4f"); - glad_glUniform1i = (PFNGLUNIFORM1IPROC)load("glUniform1i"); - glad_glUniform2i = (PFNGLUNIFORM2IPROC)load("glUniform2i"); - glad_glUniform3i = (PFNGLUNIFORM3IPROC)load("glUniform3i"); - glad_glUniform4i = (PFNGLUNIFORM4IPROC)load("glUniform4i"); - glad_glUniform1fv = (PFNGLUNIFORM1FVPROC)load("glUniform1fv"); - glad_glUniform2fv = (PFNGLUNIFORM2FVPROC)load("glUniform2fv"); - glad_glUniform3fv = (PFNGLUNIFORM3FVPROC)load("glUniform3fv"); - glad_glUniform4fv = (PFNGLUNIFORM4FVPROC)load("glUniform4fv"); - glad_glUniform1iv = (PFNGLUNIFORM1IVPROC)load("glUniform1iv"); - glad_glUniform2iv = (PFNGLUNIFORM2IVPROC)load("glUniform2iv"); - glad_glUniform3iv = (PFNGLUNIFORM3IVPROC)load("glUniform3iv"); - glad_glUniform4iv = (PFNGLUNIFORM4IVPROC)load("glUniform4iv"); - glad_glUniformMatrix2fv = (PFNGLUNIFORMMATRIX2FVPROC)load("glUniformMatrix2fv"); - glad_glUniformMatrix3fv = (PFNGLUNIFORMMATRIX3FVPROC)load("glUniformMatrix3fv"); - glad_glUniformMatrix4fv = (PFNGLUNIFORMMATRIX4FVPROC)load("glUniformMatrix4fv"); - glad_glValidateProgram = (PFNGLVALIDATEPROGRAMPROC)load("glValidateProgram"); - glad_glVertexAttrib1d = (PFNGLVERTEXATTRIB1DPROC)load("glVertexAttrib1d"); - glad_glVertexAttrib1dv = (PFNGLVERTEXATTRIB1DVPROC)load("glVertexAttrib1dv"); - glad_glVertexAttrib1f = (PFNGLVERTEXATTRIB1FPROC)load("glVertexAttrib1f"); - glad_glVertexAttrib1fv = (PFNGLVERTEXATTRIB1FVPROC)load("glVertexAttrib1fv"); - glad_glVertexAttrib1s = (PFNGLVERTEXATTRIB1SPROC)load("glVertexAttrib1s"); - glad_glVertexAttrib1sv = (PFNGLVERTEXATTRIB1SVPROC)load("glVertexAttrib1sv"); - glad_glVertexAttrib2d = (PFNGLVERTEXATTRIB2DPROC)load("glVertexAttrib2d"); - glad_glVertexAttrib2dv = (PFNGLVERTEXATTRIB2DVPROC)load("glVertexAttrib2dv"); - glad_glVertexAttrib2f = (PFNGLVERTEXATTRIB2FPROC)load("glVertexAttrib2f"); - glad_glVertexAttrib2fv = (PFNGLVERTEXATTRIB2FVPROC)load("glVertexAttrib2fv"); - glad_glVertexAttrib2s = (PFNGLVERTEXATTRIB2SPROC)load("glVertexAttrib2s"); - glad_glVertexAttrib2sv = (PFNGLVERTEXATTRIB2SVPROC)load("glVertexAttrib2sv"); - glad_glVertexAttrib3d = (PFNGLVERTEXATTRIB3DPROC)load("glVertexAttrib3d"); - glad_glVertexAttrib3dv = (PFNGLVERTEXATTRIB3DVPROC)load("glVertexAttrib3dv"); - glad_glVertexAttrib3f = (PFNGLVERTEXATTRIB3FPROC)load("glVertexAttrib3f"); - glad_glVertexAttrib3fv = (PFNGLVERTEXATTRIB3FVPROC)load("glVertexAttrib3fv"); - glad_glVertexAttrib3s = (PFNGLVERTEXATTRIB3SPROC)load("glVertexAttrib3s"); - glad_glVertexAttrib3sv = (PFNGLVERTEXATTRIB3SVPROC)load("glVertexAttrib3sv"); - glad_glVertexAttrib4Nbv = (PFNGLVERTEXATTRIB4NBVPROC)load("glVertexAttrib4Nbv"); - glad_glVertexAttrib4Niv = (PFNGLVERTEXATTRIB4NIVPROC)load("glVertexAttrib4Niv"); - glad_glVertexAttrib4Nsv = (PFNGLVERTEXATTRIB4NSVPROC)load("glVertexAttrib4Nsv"); - glad_glVertexAttrib4Nub = (PFNGLVERTEXATTRIB4NUBPROC)load("glVertexAttrib4Nub"); - glad_glVertexAttrib4Nubv = (PFNGLVERTEXATTRIB4NUBVPROC)load("glVertexAttrib4Nubv"); - glad_glVertexAttrib4Nuiv = (PFNGLVERTEXATTRIB4NUIVPROC)load("glVertexAttrib4Nuiv"); - glad_glVertexAttrib4Nusv = (PFNGLVERTEXATTRIB4NUSVPROC)load("glVertexAttrib4Nusv"); - glad_glVertexAttrib4bv = (PFNGLVERTEXATTRIB4BVPROC)load("glVertexAttrib4bv"); - glad_glVertexAttrib4d = (PFNGLVERTEXATTRIB4DPROC)load("glVertexAttrib4d"); - glad_glVertexAttrib4dv = (PFNGLVERTEXATTRIB4DVPROC)load("glVertexAttrib4dv"); - glad_glVertexAttrib4f = (PFNGLVERTEXATTRIB4FPROC)load("glVertexAttrib4f"); - glad_glVertexAttrib4fv = (PFNGLVERTEXATTRIB4FVPROC)load("glVertexAttrib4fv"); - glad_glVertexAttrib4iv = (PFNGLVERTEXATTRIB4IVPROC)load("glVertexAttrib4iv"); - glad_glVertexAttrib4s = (PFNGLVERTEXATTRIB4SPROC)load("glVertexAttrib4s"); - glad_glVertexAttrib4sv = (PFNGLVERTEXATTRIB4SVPROC)load("glVertexAttrib4sv"); - glad_glVertexAttrib4ubv = (PFNGLVERTEXATTRIB4UBVPROC)load("glVertexAttrib4ubv"); - glad_glVertexAttrib4uiv = (PFNGLVERTEXATTRIB4UIVPROC)load("glVertexAttrib4uiv"); - glad_glVertexAttrib4usv = (PFNGLVERTEXATTRIB4USVPROC)load("glVertexAttrib4usv"); - glad_glVertexAttribPointer = (PFNGLVERTEXATTRIBPOINTERPROC)load("glVertexAttribPointer"); -} -static void load_GL_VERSION_2_1(GLADloadproc load) { - if(!GLAD_GL_VERSION_2_1) return; - glad_glUniformMatrix2x3fv = (PFNGLUNIFORMMATRIX2X3FVPROC)load("glUniformMatrix2x3fv"); - glad_glUniformMatrix3x2fv = (PFNGLUNIFORMMATRIX3X2FVPROC)load("glUniformMatrix3x2fv"); - glad_glUniformMatrix2x4fv = (PFNGLUNIFORMMATRIX2X4FVPROC)load("glUniformMatrix2x4fv"); - glad_glUniformMatrix4x2fv = (PFNGLUNIFORMMATRIX4X2FVPROC)load("glUniformMatrix4x2fv"); - glad_glUniformMatrix3x4fv = (PFNGLUNIFORMMATRIX3X4FVPROC)load("glUniformMatrix3x4fv"); - glad_glUniformMatrix4x3fv = (PFNGLUNIFORMMATRIX4X3FVPROC)load("glUniformMatrix4x3fv"); -} -static void load_GL_VERSION_3_0(GLADloadproc load) { - if(!GLAD_GL_VERSION_3_0) return; - glad_glColorMaski = (PFNGLCOLORMASKIPROC)load("glColorMaski"); - glad_glGetBooleani_v = (PFNGLGETBOOLEANI_VPROC)load("glGetBooleani_v"); - glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load("glGetIntegeri_v"); - glad_glEnablei = (PFNGLENABLEIPROC)load("glEnablei"); - glad_glDisablei = (PFNGLDISABLEIPROC)load("glDisablei"); - glad_glIsEnabledi = (PFNGLISENABLEDIPROC)load("glIsEnabledi"); - glad_glBeginTransformFeedback = (PFNGLBEGINTRANSFORMFEEDBACKPROC)load("glBeginTransformFeedback"); - glad_glEndTransformFeedback = (PFNGLENDTRANSFORMFEEDBACKPROC)load("glEndTransformFeedback"); - glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)load("glBindBufferRange"); - glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load("glBindBufferBase"); - glad_glTransformFeedbackVaryings = (PFNGLTRANSFORMFEEDBACKVARYINGSPROC)load("glTransformFeedbackVaryings"); - glad_glGetTransformFeedbackVarying = (PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)load("glGetTransformFeedbackVarying"); - glad_glClampColor = (PFNGLCLAMPCOLORPROC)load("glClampColor"); - glad_glBeginConditionalRender = (PFNGLBEGINCONDITIONALRENDERPROC)load("glBeginConditionalRender"); - glad_glEndConditionalRender = (PFNGLENDCONDITIONALRENDERPROC)load("glEndConditionalRender"); - glad_glVertexAttribIPointer = (PFNGLVERTEXATTRIBIPOINTERPROC)load("glVertexAttribIPointer"); - glad_glGetVertexAttribIiv = (PFNGLGETVERTEXATTRIBIIVPROC)load("glGetVertexAttribIiv"); - glad_glGetVertexAttribIuiv = (PFNGLGETVERTEXATTRIBIUIVPROC)load("glGetVertexAttribIuiv"); - glad_glVertexAttribI1i = (PFNGLVERTEXATTRIBI1IPROC)load("glVertexAttribI1i"); - glad_glVertexAttribI2i = (PFNGLVERTEXATTRIBI2IPROC)load("glVertexAttribI2i"); - glad_glVertexAttribI3i = (PFNGLVERTEXATTRIBI3IPROC)load("glVertexAttribI3i"); - glad_glVertexAttribI4i = (PFNGLVERTEXATTRIBI4IPROC)load("glVertexAttribI4i"); - glad_glVertexAttribI1ui = (PFNGLVERTEXATTRIBI1UIPROC)load("glVertexAttribI1ui"); - glad_glVertexAttribI2ui = (PFNGLVERTEXATTRIBI2UIPROC)load("glVertexAttribI2ui"); - glad_glVertexAttribI3ui = (PFNGLVERTEXATTRIBI3UIPROC)load("glVertexAttribI3ui"); - glad_glVertexAttribI4ui = (PFNGLVERTEXATTRIBI4UIPROC)load("glVertexAttribI4ui"); - glad_glVertexAttribI1iv = (PFNGLVERTEXATTRIBI1IVPROC)load("glVertexAttribI1iv"); - glad_glVertexAttribI2iv = (PFNGLVERTEXATTRIBI2IVPROC)load("glVertexAttribI2iv"); - glad_glVertexAttribI3iv = (PFNGLVERTEXATTRIBI3IVPROC)load("glVertexAttribI3iv"); - glad_glVertexAttribI4iv = (PFNGLVERTEXATTRIBI4IVPROC)load("glVertexAttribI4iv"); - glad_glVertexAttribI1uiv = (PFNGLVERTEXATTRIBI1UIVPROC)load("glVertexAttribI1uiv"); - glad_glVertexAttribI2uiv = (PFNGLVERTEXATTRIBI2UIVPROC)load("glVertexAttribI2uiv"); - glad_glVertexAttribI3uiv = (PFNGLVERTEXATTRIBI3UIVPROC)load("glVertexAttribI3uiv"); - glad_glVertexAttribI4uiv = (PFNGLVERTEXATTRIBI4UIVPROC)load("glVertexAttribI4uiv"); - glad_glVertexAttribI4bv = (PFNGLVERTEXATTRIBI4BVPROC)load("glVertexAttribI4bv"); - glad_glVertexAttribI4sv = (PFNGLVERTEXATTRIBI4SVPROC)load("glVertexAttribI4sv"); - glad_glVertexAttribI4ubv = (PFNGLVERTEXATTRIBI4UBVPROC)load("glVertexAttribI4ubv"); - glad_glVertexAttribI4usv = (PFNGLVERTEXATTRIBI4USVPROC)load("glVertexAttribI4usv"); - glad_glGetUniformuiv = (PFNGLGETUNIFORMUIVPROC)load("glGetUniformuiv"); - glad_glBindFragDataLocation = (PFNGLBINDFRAGDATALOCATIONPROC)load("glBindFragDataLocation"); - glad_glGetFragDataLocation = (PFNGLGETFRAGDATALOCATIONPROC)load("glGetFragDataLocation"); - glad_glUniform1ui = (PFNGLUNIFORM1UIPROC)load("glUniform1ui"); - glad_glUniform2ui = (PFNGLUNIFORM2UIPROC)load("glUniform2ui"); - glad_glUniform3ui = (PFNGLUNIFORM3UIPROC)load("glUniform3ui"); - glad_glUniform4ui = (PFNGLUNIFORM4UIPROC)load("glUniform4ui"); - glad_glUniform1uiv = (PFNGLUNIFORM1UIVPROC)load("glUniform1uiv"); - glad_glUniform2uiv = (PFNGLUNIFORM2UIVPROC)load("glUniform2uiv"); - glad_glUniform3uiv = (PFNGLUNIFORM3UIVPROC)load("glUniform3uiv"); - glad_glUniform4uiv = (PFNGLUNIFORM4UIVPROC)load("glUniform4uiv"); - glad_glTexParameterIiv = (PFNGLTEXPARAMETERIIVPROC)load("glTexParameterIiv"); - glad_glTexParameterIuiv = (PFNGLTEXPARAMETERIUIVPROC)load("glTexParameterIuiv"); - glad_glGetTexParameterIiv = (PFNGLGETTEXPARAMETERIIVPROC)load("glGetTexParameterIiv"); - glad_glGetTexParameterIuiv = (PFNGLGETTEXPARAMETERIUIVPROC)load("glGetTexParameterIuiv"); - glad_glClearBufferiv = (PFNGLCLEARBUFFERIVPROC)load("glClearBufferiv"); - glad_glClearBufferuiv = (PFNGLCLEARBUFFERUIVPROC)load("glClearBufferuiv"); - glad_glClearBufferfv = (PFNGLCLEARBUFFERFVPROC)load("glClearBufferfv"); - glad_glClearBufferfi = (PFNGLCLEARBUFFERFIPROC)load("glClearBufferfi"); - glad_glGetStringi = (PFNGLGETSTRINGIPROC)load("glGetStringi"); - glad_glIsRenderbuffer = (PFNGLISRENDERBUFFERPROC)load("glIsRenderbuffer"); - glad_glBindRenderbuffer = (PFNGLBINDRENDERBUFFERPROC)load("glBindRenderbuffer"); - glad_glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSPROC)load("glDeleteRenderbuffers"); - glad_glGenRenderbuffers = (PFNGLGENRENDERBUFFERSPROC)load("glGenRenderbuffers"); - glad_glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEPROC)load("glRenderbufferStorage"); - glad_glGetRenderbufferParameteriv = (PFNGLGETRENDERBUFFERPARAMETERIVPROC)load("glGetRenderbufferParameteriv"); - glad_glIsFramebuffer = (PFNGLISFRAMEBUFFERPROC)load("glIsFramebuffer"); - glad_glBindFramebuffer = (PFNGLBINDFRAMEBUFFERPROC)load("glBindFramebuffer"); - glad_glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)load("glDeleteFramebuffers"); - glad_glGenFramebuffers = (PFNGLGENFRAMEBUFFERSPROC)load("glGenFramebuffers"); - glad_glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)load("glCheckFramebufferStatus"); - glad_glFramebufferTexture1D = (PFNGLFRAMEBUFFERTEXTURE1DPROC)load("glFramebufferTexture1D"); - glad_glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DPROC)load("glFramebufferTexture2D"); - glad_glFramebufferTexture3D = (PFNGLFRAMEBUFFERTEXTURE3DPROC)load("glFramebufferTexture3D"); - glad_glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFERPROC)load("glFramebufferRenderbuffer"); - glad_glGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)load("glGetFramebufferAttachmentParameteriv"); - glad_glGenerateMipmap = (PFNGLGENERATEMIPMAPPROC)load("glGenerateMipmap"); - glad_glBlitFramebuffer = (PFNGLBLITFRAMEBUFFERPROC)load("glBlitFramebuffer"); - glad_glRenderbufferStorageMultisample = (PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)load("glRenderbufferStorageMultisample"); - glad_glFramebufferTextureLayer = (PFNGLFRAMEBUFFERTEXTURELAYERPROC)load("glFramebufferTextureLayer"); - glad_glMapBufferRange = (PFNGLMAPBUFFERRANGEPROC)load("glMapBufferRange"); - glad_glFlushMappedBufferRange = (PFNGLFLUSHMAPPEDBUFFERRANGEPROC)load("glFlushMappedBufferRange"); - glad_glBindVertexArray = (PFNGLBINDVERTEXARRAYPROC)load("glBindVertexArray"); - glad_glDeleteVertexArrays = (PFNGLDELETEVERTEXARRAYSPROC)load("glDeleteVertexArrays"); - glad_glGenVertexArrays = (PFNGLGENVERTEXARRAYSPROC)load("glGenVertexArrays"); - glad_glIsVertexArray = (PFNGLISVERTEXARRAYPROC)load("glIsVertexArray"); -} -static void load_GL_VERSION_3_1(GLADloadproc load) { - if(!GLAD_GL_VERSION_3_1) return; - glad_glDrawArraysInstanced = (PFNGLDRAWARRAYSINSTANCEDPROC)load("glDrawArraysInstanced"); - glad_glDrawElementsInstanced = (PFNGLDRAWELEMENTSINSTANCEDPROC)load("glDrawElementsInstanced"); - glad_glTexBuffer = (PFNGLTEXBUFFERPROC)load("glTexBuffer"); - glad_glPrimitiveRestartIndex = (PFNGLPRIMITIVERESTARTINDEXPROC)load("glPrimitiveRestartIndex"); - glad_glCopyBufferSubData = (PFNGLCOPYBUFFERSUBDATAPROC)load("glCopyBufferSubData"); - glad_glGetUniformIndices = (PFNGLGETUNIFORMINDICESPROC)load("glGetUniformIndices"); - glad_glGetActiveUniformsiv = (PFNGLGETACTIVEUNIFORMSIVPROC)load("glGetActiveUniformsiv"); - glad_glGetActiveUniformName = (PFNGLGETACTIVEUNIFORMNAMEPROC)load("glGetActiveUniformName"); - glad_glGetUniformBlockIndex = (PFNGLGETUNIFORMBLOCKINDEXPROC)load("glGetUniformBlockIndex"); - glad_glGetActiveUniformBlockiv = (PFNGLGETACTIVEUNIFORMBLOCKIVPROC)load("glGetActiveUniformBlockiv"); - glad_glGetActiveUniformBlockName = (PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)load("glGetActiveUniformBlockName"); - glad_glUniformBlockBinding = (PFNGLUNIFORMBLOCKBINDINGPROC)load("glUniformBlockBinding"); - glad_glBindBufferRange = (PFNGLBINDBUFFERRANGEPROC)load("glBindBufferRange"); - glad_glBindBufferBase = (PFNGLBINDBUFFERBASEPROC)load("glBindBufferBase"); - glad_glGetIntegeri_v = (PFNGLGETINTEGERI_VPROC)load("glGetIntegeri_v"); -} -static void load_GL_VERSION_3_2(GLADloadproc load) { - if(!GLAD_GL_VERSION_3_2) return; - glad_glDrawElementsBaseVertex = (PFNGLDRAWELEMENTSBASEVERTEXPROC)load("glDrawElementsBaseVertex"); - glad_glDrawRangeElementsBaseVertex = (PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)load("glDrawRangeElementsBaseVertex"); - glad_glDrawElementsInstancedBaseVertex = (PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)load("glDrawElementsInstancedBaseVertex"); - glad_glMultiDrawElementsBaseVertex = (PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)load("glMultiDrawElementsBaseVertex"); - glad_glProvokingVertex = (PFNGLPROVOKINGVERTEXPROC)load("glProvokingVertex"); - glad_glFenceSync = (PFNGLFENCESYNCPROC)load("glFenceSync"); - glad_glIsSync = (PFNGLISSYNCPROC)load("glIsSync"); - glad_glDeleteSync = (PFNGLDELETESYNCPROC)load("glDeleteSync"); - glad_glClientWaitSync = (PFNGLCLIENTWAITSYNCPROC)load("glClientWaitSync"); - glad_glWaitSync = (PFNGLWAITSYNCPROC)load("glWaitSync"); - glad_glGetInteger64v = (PFNGLGETINTEGER64VPROC)load("glGetInteger64v"); - glad_glGetSynciv = (PFNGLGETSYNCIVPROC)load("glGetSynciv"); - glad_glGetInteger64i_v = (PFNGLGETINTEGER64I_VPROC)load("glGetInteger64i_v"); - glad_glGetBufferParameteri64v = (PFNGLGETBUFFERPARAMETERI64VPROC)load("glGetBufferParameteri64v"); - glad_glFramebufferTexture = (PFNGLFRAMEBUFFERTEXTUREPROC)load("glFramebufferTexture"); - glad_glTexImage2DMultisample = (PFNGLTEXIMAGE2DMULTISAMPLEPROC)load("glTexImage2DMultisample"); - glad_glTexImage3DMultisample = (PFNGLTEXIMAGE3DMULTISAMPLEPROC)load("glTexImage3DMultisample"); - glad_glGetMultisamplefv = (PFNGLGETMULTISAMPLEFVPROC)load("glGetMultisamplefv"); - glad_glSampleMaski = (PFNGLSAMPLEMASKIPROC)load("glSampleMaski"); -} -static void load_GL_VERSION_3_3(GLADloadproc load) { - if(!GLAD_GL_VERSION_3_3) return; - glad_glBindFragDataLocationIndexed = (PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)load("glBindFragDataLocationIndexed"); - glad_glGetFragDataIndex = (PFNGLGETFRAGDATAINDEXPROC)load("glGetFragDataIndex"); - glad_glGenSamplers = (PFNGLGENSAMPLERSPROC)load("glGenSamplers"); - glad_glDeleteSamplers = (PFNGLDELETESAMPLERSPROC)load("glDeleteSamplers"); - glad_glIsSampler = (PFNGLISSAMPLERPROC)load("glIsSampler"); - glad_glBindSampler = (PFNGLBINDSAMPLERPROC)load("glBindSampler"); - glad_glSamplerParameteri = (PFNGLSAMPLERPARAMETERIPROC)load("glSamplerParameteri"); - glad_glSamplerParameteriv = (PFNGLSAMPLERPARAMETERIVPROC)load("glSamplerParameteriv"); - glad_glSamplerParameterf = (PFNGLSAMPLERPARAMETERFPROC)load("glSamplerParameterf"); - glad_glSamplerParameterfv = (PFNGLSAMPLERPARAMETERFVPROC)load("glSamplerParameterfv"); - glad_glSamplerParameterIiv = (PFNGLSAMPLERPARAMETERIIVPROC)load("glSamplerParameterIiv"); - glad_glSamplerParameterIuiv = (PFNGLSAMPLERPARAMETERIUIVPROC)load("glSamplerParameterIuiv"); - glad_glGetSamplerParameteriv = (PFNGLGETSAMPLERPARAMETERIVPROC)load("glGetSamplerParameteriv"); - glad_glGetSamplerParameterIiv = (PFNGLGETSAMPLERPARAMETERIIVPROC)load("glGetSamplerParameterIiv"); - glad_glGetSamplerParameterfv = (PFNGLGETSAMPLERPARAMETERFVPROC)load("glGetSamplerParameterfv"); - glad_glGetSamplerParameterIuiv = (PFNGLGETSAMPLERPARAMETERIUIVPROC)load("glGetSamplerParameterIuiv"); - glad_glQueryCounter = (PFNGLQUERYCOUNTERPROC)load("glQueryCounter"); - glad_glGetQueryObjecti64v = (PFNGLGETQUERYOBJECTI64VPROC)load("glGetQueryObjecti64v"); - glad_glGetQueryObjectui64v = (PFNGLGETQUERYOBJECTUI64VPROC)load("glGetQueryObjectui64v"); - glad_glVertexAttribDivisor = (PFNGLVERTEXATTRIBDIVISORPROC)load("glVertexAttribDivisor"); - glad_glVertexAttribP1ui = (PFNGLVERTEXATTRIBP1UIPROC)load("glVertexAttribP1ui"); - glad_glVertexAttribP1uiv = (PFNGLVERTEXATTRIBP1UIVPROC)load("glVertexAttribP1uiv"); - glad_glVertexAttribP2ui = (PFNGLVERTEXATTRIBP2UIPROC)load("glVertexAttribP2ui"); - glad_glVertexAttribP2uiv = (PFNGLVERTEXATTRIBP2UIVPROC)load("glVertexAttribP2uiv"); - glad_glVertexAttribP3ui = (PFNGLVERTEXATTRIBP3UIPROC)load("glVertexAttribP3ui"); - glad_glVertexAttribP3uiv = (PFNGLVERTEXATTRIBP3UIVPROC)load("glVertexAttribP3uiv"); - glad_glVertexAttribP4ui = (PFNGLVERTEXATTRIBP4UIPROC)load("glVertexAttribP4ui"); - glad_glVertexAttribP4uiv = (PFNGLVERTEXATTRIBP4UIVPROC)load("glVertexAttribP4uiv"); - glad_glVertexP2ui = (PFNGLVERTEXP2UIPROC)load("glVertexP2ui"); - glad_glVertexP2uiv = (PFNGLVERTEXP2UIVPROC)load("glVertexP2uiv"); - glad_glVertexP3ui = (PFNGLVERTEXP3UIPROC)load("glVertexP3ui"); - glad_glVertexP3uiv = (PFNGLVERTEXP3UIVPROC)load("glVertexP3uiv"); - glad_glVertexP4ui = (PFNGLVERTEXP4UIPROC)load("glVertexP4ui"); - glad_glVertexP4uiv = (PFNGLVERTEXP4UIVPROC)load("glVertexP4uiv"); - glad_glTexCoordP1ui = (PFNGLTEXCOORDP1UIPROC)load("glTexCoordP1ui"); - glad_glTexCoordP1uiv = (PFNGLTEXCOORDP1UIVPROC)load("glTexCoordP1uiv"); - glad_glTexCoordP2ui = (PFNGLTEXCOORDP2UIPROC)load("glTexCoordP2ui"); - glad_glTexCoordP2uiv = (PFNGLTEXCOORDP2UIVPROC)load("glTexCoordP2uiv"); - glad_glTexCoordP3ui = (PFNGLTEXCOORDP3UIPROC)load("glTexCoordP3ui"); - glad_glTexCoordP3uiv = (PFNGLTEXCOORDP3UIVPROC)load("glTexCoordP3uiv"); - glad_glTexCoordP4ui = (PFNGLTEXCOORDP4UIPROC)load("glTexCoordP4ui"); - glad_glTexCoordP4uiv = (PFNGLTEXCOORDP4UIVPROC)load("glTexCoordP4uiv"); - glad_glMultiTexCoordP1ui = (PFNGLMULTITEXCOORDP1UIPROC)load("glMultiTexCoordP1ui"); - glad_glMultiTexCoordP1uiv = (PFNGLMULTITEXCOORDP1UIVPROC)load("glMultiTexCoordP1uiv"); - glad_glMultiTexCoordP2ui = (PFNGLMULTITEXCOORDP2UIPROC)load("glMultiTexCoordP2ui"); - glad_glMultiTexCoordP2uiv = (PFNGLMULTITEXCOORDP2UIVPROC)load("glMultiTexCoordP2uiv"); - glad_glMultiTexCoordP3ui = (PFNGLMULTITEXCOORDP3UIPROC)load("glMultiTexCoordP3ui"); - glad_glMultiTexCoordP3uiv = (PFNGLMULTITEXCOORDP3UIVPROC)load("glMultiTexCoordP3uiv"); - glad_glMultiTexCoordP4ui = (PFNGLMULTITEXCOORDP4UIPROC)load("glMultiTexCoordP4ui"); - glad_glMultiTexCoordP4uiv = (PFNGLMULTITEXCOORDP4UIVPROC)load("glMultiTexCoordP4uiv"); - glad_glNormalP3ui = (PFNGLNORMALP3UIPROC)load("glNormalP3ui"); - glad_glNormalP3uiv = (PFNGLNORMALP3UIVPROC)load("glNormalP3uiv"); - glad_glColorP3ui = (PFNGLCOLORP3UIPROC)load("glColorP3ui"); - glad_glColorP3uiv = (PFNGLCOLORP3UIVPROC)load("glColorP3uiv"); - glad_glColorP4ui = (PFNGLCOLORP4UIPROC)load("glColorP4ui"); - glad_glColorP4uiv = (PFNGLCOLORP4UIVPROC)load("glColorP4uiv"); - glad_glSecondaryColorP3ui = (PFNGLSECONDARYCOLORP3UIPROC)load("glSecondaryColorP3ui"); - glad_glSecondaryColorP3uiv = (PFNGLSECONDARYCOLORP3UIVPROC)load("glSecondaryColorP3uiv"); -} -static int find_extensionsGL(void) { - if (!get_exts()) return 0; - (void)&has_ext; - free_exts(); - return 1; -} - -static void find_coreGL(void) { - - /* Thank you @elmindreda - * https://github.com/elmindreda/greg/blob/master/templates/greg.c.in#L176 - * https://github.com/glfw/glfw/blob/master/src/context.c#L36 - */ - int i, major, minor; - - const char* version; - const char* prefixes[] = { - "OpenGL ES-CM ", - "OpenGL ES-CL ", - "OpenGL ES ", - NULL - }; - - version = (const char*) glGetString(GL_VERSION); - if (!version) return; - - for (i = 0; prefixes[i]; i++) { - const size_t length = strlen(prefixes[i]); - if (strncmp(version, prefixes[i], length) == 0) { - version += length; - break; - } - } - -/* PR #18 */ -#ifdef _MSC_VER - sscanf_s(version, "%d.%d", &major, &minor); -#else - sscanf(version, "%d.%d", &major, &minor); -#endif - - GLVersion.major = major; GLVersion.minor = minor; - max_loaded_major = major; max_loaded_minor = minor; - GLAD_GL_VERSION_1_0 = (major == 1 && minor >= 0) || major > 1; - GLAD_GL_VERSION_1_1 = (major == 1 && minor >= 1) || major > 1; - GLAD_GL_VERSION_1_2 = (major == 1 && minor >= 2) || major > 1; - GLAD_GL_VERSION_1_3 = (major == 1 && minor >= 3) || major > 1; - GLAD_GL_VERSION_1_4 = (major == 1 && minor >= 4) || major > 1; - GLAD_GL_VERSION_1_5 = (major == 1 && minor >= 5) || major > 1; - GLAD_GL_VERSION_2_0 = (major == 2 && minor >= 0) || major > 2; - GLAD_GL_VERSION_2_1 = (major == 2 && minor >= 1) || major > 2; - GLAD_GL_VERSION_3_0 = (major == 3 && minor >= 0) || major > 3; - GLAD_GL_VERSION_3_1 = (major == 3 && minor >= 1) || major > 3; - GLAD_GL_VERSION_3_2 = (major == 3 && minor >= 2) || major > 3; - GLAD_GL_VERSION_3_3 = (major == 3 && minor >= 3) || major > 3; - if (GLVersion.major > 3 || (GLVersion.major >= 3 && GLVersion.minor >= 3)) { - max_loaded_major = 3; - max_loaded_minor = 3; - } -} - -int gladLoadGLLoader(GLADloadproc load) { - GLVersion.major = 0; GLVersion.minor = 0; - glGetString = (PFNGLGETSTRINGPROC)load("glGetString"); - if(glGetString == NULL) return 0; - if(glGetString(GL_VERSION) == NULL) return 0; - find_coreGL(); - load_GL_VERSION_1_0(load); - load_GL_VERSION_1_1(load); - load_GL_VERSION_1_2(load); - load_GL_VERSION_1_3(load); - load_GL_VERSION_1_4(load); - load_GL_VERSION_1_5(load); - load_GL_VERSION_2_0(load); - load_GL_VERSION_2_1(load); - load_GL_VERSION_3_0(load); - load_GL_VERSION_3_1(load); - load_GL_VERSION_3_2(load); - load_GL_VERSION_3_3(load); - - if (!find_extensionsGL()) return 0; - return GLVersion.major != 0 || GLVersion.minor != 0; -} - diff --git a/src/vendor/GLAD/glad/glad.h b/src/vendor/GLAD/glad/glad.h deleted file mode 100755 index 9027475..0000000 --- a/src/vendor/GLAD/glad/glad.h +++ /dev/null @@ -1,3611 +0,0 @@ -/* - - OpenGL loader generated by glad 0.1.35 on Sat Apr 16 00:37:43 2022. - - Language/Generator: C/C++ - Specification: gl - APIs: gl=3.3 - Profile: compatibility - Extensions: - - Loader: True - Local files: False - Omit khrplatform: False - Reproducible: False - - Commandline: - --profile="compatibility" --api="gl=3.3" --generator="c" --spec="gl" --extensions="" - Online: - https://glad.dav1d.de/#profile=compatibility&language=c&specification=gl&loader=on&api=gl%3D3.3 -*/ - - -#ifndef __glad_h_ -#define __glad_h_ - -#ifdef __gl_h_ -#error OpenGL header already included, remove this include, glad already provides it -#endif -#define __gl_h_ - -#if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) -#define APIENTRY __stdcall -#endif - -#ifndef APIENTRY -#define APIENTRY -#endif -#ifndef APIENTRYP -#define APIENTRYP APIENTRY * -#endif - -#ifndef GLAPIENTRY -#define GLAPIENTRY APIENTRY -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -struct gladGLversionStruct { - int major; - int minor; -}; - -typedef void* (* GLADloadproc)(const char *name); - -#ifndef GLAPI -# if defined(GLAD_GLAPI_EXPORT) -# if defined(_WIN32) || defined(__CYGWIN__) -# if defined(GLAD_GLAPI_EXPORT_BUILD) -# if defined(__GNUC__) -# define GLAPI __attribute__ ((dllexport)) extern -# else -# define GLAPI __declspec(dllexport) extern -# endif -# else -# if defined(__GNUC__) -# define GLAPI __attribute__ ((dllimport)) extern -# else -# define GLAPI __declspec(dllimport) extern -# endif -# endif -# elif defined(__GNUC__) && defined(GLAD_GLAPI_EXPORT_BUILD) -# define GLAPI __attribute__ ((visibility ("default"))) extern -# else -# define GLAPI extern -# endif -# else -# define GLAPI extern -# endif -#endif - -GLAPI struct gladGLversionStruct GLVersion; - -GLAPI int gladLoadGL(void); - -GLAPI int gladLoadGLLoader(GLADloadproc); - -#include -typedef unsigned int GLenum; -typedef unsigned char GLboolean; -typedef unsigned int GLbitfield; -typedef void GLvoid; -typedef khronos_int8_t GLbyte; -typedef khronos_uint8_t GLubyte; -typedef khronos_int16_t GLshort; -typedef khronos_uint16_t GLushort; -typedef int GLint; -typedef unsigned int GLuint; -typedef khronos_int32_t GLclampx; -typedef int GLsizei; -typedef khronos_float_t GLfloat; -typedef khronos_float_t GLclampf; -typedef double GLdouble; -typedef double GLclampd; -typedef void *GLeglClientBufferEXT; -typedef void *GLeglImageOES; -typedef char GLchar; -typedef char GLcharARB; -#ifdef __APPLE__ -typedef void *GLhandleARB; -#else -typedef unsigned int GLhandleARB; -#endif -typedef khronos_uint16_t GLhalf; -typedef khronos_uint16_t GLhalfARB; -typedef khronos_int32_t GLfixed; -typedef khronos_intptr_t GLintptr; -typedef khronos_intptr_t GLintptrARB; -typedef khronos_ssize_t GLsizeiptr; -typedef khronos_ssize_t GLsizeiptrARB; -typedef khronos_int64_t GLint64; -typedef khronos_int64_t GLint64EXT; -typedef khronos_uint64_t GLuint64; -typedef khronos_uint64_t GLuint64EXT; -typedef struct __GLsync *GLsync; -struct _cl_context; -struct _cl_event; -typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); -typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); -typedef void (APIENTRY *GLDEBUGPROCKHR)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); -typedef void (APIENTRY *GLDEBUGPROCAMD)(GLuint id,GLenum category,GLenum severity,GLsizei length,const GLchar *message,void *userParam); -typedef unsigned short GLhalfNV; -typedef GLintptr GLvdpauSurfaceNV; -typedef void (APIENTRY *GLVULKANPROCNV)(void); -#define GL_DEPTH_BUFFER_BIT 0x00000100 -#define GL_STENCIL_BUFFER_BIT 0x00000400 -#define GL_COLOR_BUFFER_BIT 0x00004000 -#define GL_FALSE 0 -#define GL_TRUE 1 -#define GL_POINTS 0x0000 -#define GL_LINES 0x0001 -#define GL_LINE_LOOP 0x0002 -#define GL_LINE_STRIP 0x0003 -#define GL_TRIANGLES 0x0004 -#define GL_TRIANGLE_STRIP 0x0005 -#define GL_TRIANGLE_FAN 0x0006 -#define GL_QUADS 0x0007 -#define GL_NEVER 0x0200 -#define GL_LESS 0x0201 -#define GL_EQUAL 0x0202 -#define GL_LEQUAL 0x0203 -#define GL_GREATER 0x0204 -#define GL_NOTEQUAL 0x0205 -#define GL_GEQUAL 0x0206 -#define GL_ALWAYS 0x0207 -#define GL_ZERO 0 -#define GL_ONE 1 -#define GL_SRC_COLOR 0x0300 -#define GL_ONE_MINUS_SRC_COLOR 0x0301 -#define GL_SRC_ALPHA 0x0302 -#define GL_ONE_MINUS_SRC_ALPHA 0x0303 -#define GL_DST_ALPHA 0x0304 -#define GL_ONE_MINUS_DST_ALPHA 0x0305 -#define GL_DST_COLOR 0x0306 -#define GL_ONE_MINUS_DST_COLOR 0x0307 -#define GL_SRC_ALPHA_SATURATE 0x0308 -#define GL_NONE 0 -#define GL_FRONT_LEFT 0x0400 -#define GL_FRONT_RIGHT 0x0401 -#define GL_BACK_LEFT 0x0402 -#define GL_BACK_RIGHT 0x0403 -#define GL_FRONT 0x0404 -#define GL_BACK 0x0405 -#define GL_LEFT 0x0406 -#define GL_RIGHT 0x0407 -#define GL_FRONT_AND_BACK 0x0408 -#define GL_NO_ERROR 0 -#define GL_INVALID_ENUM 0x0500 -#define GL_INVALID_VALUE 0x0501 -#define GL_INVALID_OPERATION 0x0502 -#define GL_OUT_OF_MEMORY 0x0505 -#define GL_CW 0x0900 -#define GL_CCW 0x0901 -#define GL_POINT_SIZE 0x0B11 -#define GL_POINT_SIZE_RANGE 0x0B12 -#define GL_POINT_SIZE_GRANULARITY 0x0B13 -#define GL_LINE_SMOOTH 0x0B20 -#define GL_LINE_WIDTH 0x0B21 -#define GL_LINE_WIDTH_RANGE 0x0B22 -#define GL_LINE_WIDTH_GRANULARITY 0x0B23 -#define GL_POLYGON_MODE 0x0B40 -#define GL_POLYGON_SMOOTH 0x0B41 -#define GL_CULL_FACE 0x0B44 -#define GL_CULL_FACE_MODE 0x0B45 -#define GL_FRONT_FACE 0x0B46 -#define GL_DEPTH_RANGE 0x0B70 -#define GL_DEPTH_TEST 0x0B71 -#define GL_DEPTH_WRITEMASK 0x0B72 -#define GL_DEPTH_CLEAR_VALUE 0x0B73 -#define GL_DEPTH_FUNC 0x0B74 -#define GL_STENCIL_TEST 0x0B90 -#define GL_STENCIL_CLEAR_VALUE 0x0B91 -#define GL_STENCIL_FUNC 0x0B92 -#define GL_STENCIL_VALUE_MASK 0x0B93 -#define GL_STENCIL_FAIL 0x0B94 -#define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 -#define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 -#define GL_STENCIL_REF 0x0B97 -#define GL_STENCIL_WRITEMASK 0x0B98 -#define GL_VIEWPORT 0x0BA2 -#define GL_DITHER 0x0BD0 -#define GL_BLEND_DST 0x0BE0 -#define GL_BLEND_SRC 0x0BE1 -#define GL_BLEND 0x0BE2 -#define GL_LOGIC_OP_MODE 0x0BF0 -#define GL_DRAW_BUFFER 0x0C01 -#define GL_READ_BUFFER 0x0C02 -#define GL_SCISSOR_BOX 0x0C10 -#define GL_SCISSOR_TEST 0x0C11 -#define GL_COLOR_CLEAR_VALUE 0x0C22 -#define GL_COLOR_WRITEMASK 0x0C23 -#define GL_DOUBLEBUFFER 0x0C32 -#define GL_STEREO 0x0C33 -#define GL_LINE_SMOOTH_HINT 0x0C52 -#define GL_POLYGON_SMOOTH_HINT 0x0C53 -#define GL_UNPACK_SWAP_BYTES 0x0CF0 -#define GL_UNPACK_LSB_FIRST 0x0CF1 -#define GL_UNPACK_ROW_LENGTH 0x0CF2 -#define GL_UNPACK_SKIP_ROWS 0x0CF3 -#define GL_UNPACK_SKIP_PIXELS 0x0CF4 -#define GL_UNPACK_ALIGNMENT 0x0CF5 -#define GL_PACK_SWAP_BYTES 0x0D00 -#define GL_PACK_LSB_FIRST 0x0D01 -#define GL_PACK_ROW_LENGTH 0x0D02 -#define GL_PACK_SKIP_ROWS 0x0D03 -#define GL_PACK_SKIP_PIXELS 0x0D04 -#define GL_PACK_ALIGNMENT 0x0D05 -#define GL_MAX_TEXTURE_SIZE 0x0D33 -#define GL_MAX_VIEWPORT_DIMS 0x0D3A -#define GL_SUBPIXEL_BITS 0x0D50 -#define GL_TEXTURE_1D 0x0DE0 -#define GL_TEXTURE_2D 0x0DE1 -#define GL_TEXTURE_WIDTH 0x1000 -#define GL_TEXTURE_HEIGHT 0x1001 -#define GL_TEXTURE_BORDER_COLOR 0x1004 -#define GL_DONT_CARE 0x1100 -#define GL_FASTEST 0x1101 -#define GL_NICEST 0x1102 -#define GL_BYTE 0x1400 -#define GL_UNSIGNED_BYTE 0x1401 -#define GL_SHORT 0x1402 -#define GL_UNSIGNED_SHORT 0x1403 -#define GL_INT 0x1404 -#define GL_UNSIGNED_INT 0x1405 -#define GL_FLOAT 0x1406 -#define GL_STACK_OVERFLOW 0x0503 -#define GL_STACK_UNDERFLOW 0x0504 -#define GL_CLEAR 0x1500 -#define GL_AND 0x1501 -#define GL_AND_REVERSE 0x1502 -#define GL_COPY 0x1503 -#define GL_AND_INVERTED 0x1504 -#define GL_NOOP 0x1505 -#define GL_XOR 0x1506 -#define GL_OR 0x1507 -#define GL_NOR 0x1508 -#define GL_EQUIV 0x1509 -#define GL_INVERT 0x150A -#define GL_OR_REVERSE 0x150B -#define GL_COPY_INVERTED 0x150C -#define GL_OR_INVERTED 0x150D -#define GL_NAND 0x150E -#define GL_SET 0x150F -#define GL_TEXTURE 0x1702 -#define GL_COLOR 0x1800 -#define GL_DEPTH 0x1801 -#define GL_STENCIL 0x1802 -#define GL_STENCIL_INDEX 0x1901 -#define GL_DEPTH_COMPONENT 0x1902 -#define GL_RED 0x1903 -#define GL_GREEN 0x1904 -#define GL_BLUE 0x1905 -#define GL_ALPHA 0x1906 -#define GL_RGB 0x1907 -#define GL_RGBA 0x1908 -#define GL_POINT 0x1B00 -#define GL_LINE 0x1B01 -#define GL_FILL 0x1B02 -#define GL_KEEP 0x1E00 -#define GL_REPLACE 0x1E01 -#define GL_INCR 0x1E02 -#define GL_DECR 0x1E03 -#define GL_VENDOR 0x1F00 -#define GL_RENDERER 0x1F01 -#define GL_VERSION 0x1F02 -#define GL_EXTENSIONS 0x1F03 -#define GL_NEAREST 0x2600 -#define GL_LINEAR 0x2601 -#define GL_NEAREST_MIPMAP_NEAREST 0x2700 -#define GL_LINEAR_MIPMAP_NEAREST 0x2701 -#define GL_NEAREST_MIPMAP_LINEAR 0x2702 -#define GL_LINEAR_MIPMAP_LINEAR 0x2703 -#define GL_TEXTURE_MAG_FILTER 0x2800 -#define GL_TEXTURE_MIN_FILTER 0x2801 -#define GL_TEXTURE_WRAP_S 0x2802 -#define GL_TEXTURE_WRAP_T 0x2803 -#define GL_REPEAT 0x2901 -#define GL_CURRENT_BIT 0x00000001 -#define GL_POINT_BIT 0x00000002 -#define GL_LINE_BIT 0x00000004 -#define GL_POLYGON_BIT 0x00000008 -#define GL_POLYGON_STIPPLE_BIT 0x00000010 -#define GL_PIXEL_MODE_BIT 0x00000020 -#define GL_LIGHTING_BIT 0x00000040 -#define GL_FOG_BIT 0x00000080 -#define GL_ACCUM_BUFFER_BIT 0x00000200 -#define GL_VIEWPORT_BIT 0x00000800 -#define GL_TRANSFORM_BIT 0x00001000 -#define GL_ENABLE_BIT 0x00002000 -#define GL_HINT_BIT 0x00008000 -#define GL_EVAL_BIT 0x00010000 -#define GL_LIST_BIT 0x00020000 -#define GL_TEXTURE_BIT 0x00040000 -#define GL_SCISSOR_BIT 0x00080000 -#define GL_ALL_ATTRIB_BITS 0xFFFFFFFF -#define GL_QUAD_STRIP 0x0008 -#define GL_POLYGON 0x0009 -#define GL_ACCUM 0x0100 -#define GL_LOAD 0x0101 -#define GL_RETURN 0x0102 -#define GL_MULT 0x0103 -#define GL_ADD 0x0104 -#define GL_AUX0 0x0409 -#define GL_AUX1 0x040A -#define GL_AUX2 0x040B -#define GL_AUX3 0x040C -#define GL_2D 0x0600 -#define GL_3D 0x0601 -#define GL_3D_COLOR 0x0602 -#define GL_3D_COLOR_TEXTURE 0x0603 -#define GL_4D_COLOR_TEXTURE 0x0604 -#define GL_PASS_THROUGH_TOKEN 0x0700 -#define GL_POINT_TOKEN 0x0701 -#define GL_LINE_TOKEN 0x0702 -#define GL_POLYGON_TOKEN 0x0703 -#define GL_BITMAP_TOKEN 0x0704 -#define GL_DRAW_PIXEL_TOKEN 0x0705 -#define GL_COPY_PIXEL_TOKEN 0x0706 -#define GL_LINE_RESET_TOKEN 0x0707 -#define GL_EXP 0x0800 -#define GL_EXP2 0x0801 -#define GL_COEFF 0x0A00 -#define GL_ORDER 0x0A01 -#define GL_DOMAIN 0x0A02 -#define GL_PIXEL_MAP_I_TO_I 0x0C70 -#define GL_PIXEL_MAP_S_TO_S 0x0C71 -#define GL_PIXEL_MAP_I_TO_R 0x0C72 -#define GL_PIXEL_MAP_I_TO_G 0x0C73 -#define GL_PIXEL_MAP_I_TO_B 0x0C74 -#define GL_PIXEL_MAP_I_TO_A 0x0C75 -#define GL_PIXEL_MAP_R_TO_R 0x0C76 -#define GL_PIXEL_MAP_G_TO_G 0x0C77 -#define GL_PIXEL_MAP_B_TO_B 0x0C78 -#define GL_PIXEL_MAP_A_TO_A 0x0C79 -#define GL_CURRENT_COLOR 0x0B00 -#define GL_CURRENT_INDEX 0x0B01 -#define GL_CURRENT_NORMAL 0x0B02 -#define GL_CURRENT_TEXTURE_COORDS 0x0B03 -#define GL_CURRENT_RASTER_COLOR 0x0B04 -#define GL_CURRENT_RASTER_INDEX 0x0B05 -#define GL_CURRENT_RASTER_TEXTURE_COORDS 0x0B06 -#define GL_CURRENT_RASTER_POSITION 0x0B07 -#define GL_CURRENT_RASTER_POSITION_VALID 0x0B08 -#define GL_CURRENT_RASTER_DISTANCE 0x0B09 -#define GL_POINT_SMOOTH 0x0B10 -#define GL_LINE_STIPPLE 0x0B24 -#define GL_LINE_STIPPLE_PATTERN 0x0B25 -#define GL_LINE_STIPPLE_REPEAT 0x0B26 -#define GL_LIST_MODE 0x0B30 -#define GL_MAX_LIST_NESTING 0x0B31 -#define GL_LIST_BASE 0x0B32 -#define GL_LIST_INDEX 0x0B33 -#define GL_POLYGON_STIPPLE 0x0B42 -#define GL_EDGE_FLAG 0x0B43 -#define GL_LIGHTING 0x0B50 -#define GL_LIGHT_MODEL_LOCAL_VIEWER 0x0B51 -#define GL_LIGHT_MODEL_TWO_SIDE 0x0B52 -#define GL_LIGHT_MODEL_AMBIENT 0x0B53 -#define GL_SHADE_MODEL 0x0B54 -#define GL_COLOR_MATERIAL_FACE 0x0B55 -#define GL_COLOR_MATERIAL_PARAMETER 0x0B56 -#define GL_COLOR_MATERIAL 0x0B57 -#define GL_FOG 0x0B60 -#define GL_FOG_INDEX 0x0B61 -#define GL_FOG_DENSITY 0x0B62 -#define GL_FOG_START 0x0B63 -#define GL_FOG_END 0x0B64 -#define GL_FOG_MODE 0x0B65 -#define GL_FOG_COLOR 0x0B66 -#define GL_ACCUM_CLEAR_VALUE 0x0B80 -#define GL_MATRIX_MODE 0x0BA0 -#define GL_NORMALIZE 0x0BA1 -#define GL_MODELVIEW_STACK_DEPTH 0x0BA3 -#define GL_PROJECTION_STACK_DEPTH 0x0BA4 -#define GL_TEXTURE_STACK_DEPTH 0x0BA5 -#define GL_MODELVIEW_MATRIX 0x0BA6 -#define GL_PROJECTION_MATRIX 0x0BA7 -#define GL_TEXTURE_MATRIX 0x0BA8 -#define GL_ATTRIB_STACK_DEPTH 0x0BB0 -#define GL_ALPHA_TEST 0x0BC0 -#define GL_ALPHA_TEST_FUNC 0x0BC1 -#define GL_ALPHA_TEST_REF 0x0BC2 -#define GL_LOGIC_OP 0x0BF1 -#define GL_AUX_BUFFERS 0x0C00 -#define GL_INDEX_CLEAR_VALUE 0x0C20 -#define GL_INDEX_WRITEMASK 0x0C21 -#define GL_INDEX_MODE 0x0C30 -#define GL_RGBA_MODE 0x0C31 -#define GL_RENDER_MODE 0x0C40 -#define GL_PERSPECTIVE_CORRECTION_HINT 0x0C50 -#define GL_POINT_SMOOTH_HINT 0x0C51 -#define GL_FOG_HINT 0x0C54 -#define GL_TEXTURE_GEN_S 0x0C60 -#define GL_TEXTURE_GEN_T 0x0C61 -#define GL_TEXTURE_GEN_R 0x0C62 -#define GL_TEXTURE_GEN_Q 0x0C63 -#define GL_PIXEL_MAP_I_TO_I_SIZE 0x0CB0 -#define GL_PIXEL_MAP_S_TO_S_SIZE 0x0CB1 -#define GL_PIXEL_MAP_I_TO_R_SIZE 0x0CB2 -#define GL_PIXEL_MAP_I_TO_G_SIZE 0x0CB3 -#define GL_PIXEL_MAP_I_TO_B_SIZE 0x0CB4 -#define GL_PIXEL_MAP_I_TO_A_SIZE 0x0CB5 -#define GL_PIXEL_MAP_R_TO_R_SIZE 0x0CB6 -#define GL_PIXEL_MAP_G_TO_G_SIZE 0x0CB7 -#define GL_PIXEL_MAP_B_TO_B_SIZE 0x0CB8 -#define GL_PIXEL_MAP_A_TO_A_SIZE 0x0CB9 -#define GL_MAP_COLOR 0x0D10 -#define GL_MAP_STENCIL 0x0D11 -#define GL_INDEX_SHIFT 0x0D12 -#define GL_INDEX_OFFSET 0x0D13 -#define GL_RED_SCALE 0x0D14 -#define GL_RED_BIAS 0x0D15 -#define GL_ZOOM_X 0x0D16 -#define GL_ZOOM_Y 0x0D17 -#define GL_GREEN_SCALE 0x0D18 -#define GL_GREEN_BIAS 0x0D19 -#define GL_BLUE_SCALE 0x0D1A -#define GL_BLUE_BIAS 0x0D1B -#define GL_ALPHA_SCALE 0x0D1C -#define GL_ALPHA_BIAS 0x0D1D -#define GL_DEPTH_SCALE 0x0D1E -#define GL_DEPTH_BIAS 0x0D1F -#define GL_MAX_EVAL_ORDER 0x0D30 -#define GL_MAX_LIGHTS 0x0D31 -#define GL_MAX_CLIP_PLANES 0x0D32 -#define GL_MAX_PIXEL_MAP_TABLE 0x0D34 -#define GL_MAX_ATTRIB_STACK_DEPTH 0x0D35 -#define GL_MAX_MODELVIEW_STACK_DEPTH 0x0D36 -#define GL_MAX_NAME_STACK_DEPTH 0x0D37 -#define GL_MAX_PROJECTION_STACK_DEPTH 0x0D38 -#define GL_MAX_TEXTURE_STACK_DEPTH 0x0D39 -#define GL_INDEX_BITS 0x0D51 -#define GL_RED_BITS 0x0D52 -#define GL_GREEN_BITS 0x0D53 -#define GL_BLUE_BITS 0x0D54 -#define GL_ALPHA_BITS 0x0D55 -#define GL_DEPTH_BITS 0x0D56 -#define GL_STENCIL_BITS 0x0D57 -#define GL_ACCUM_RED_BITS 0x0D58 -#define GL_ACCUM_GREEN_BITS 0x0D59 -#define GL_ACCUM_BLUE_BITS 0x0D5A -#define GL_ACCUM_ALPHA_BITS 0x0D5B -#define GL_NAME_STACK_DEPTH 0x0D70 -#define GL_AUTO_NORMAL 0x0D80 -#define GL_MAP1_COLOR_4 0x0D90 -#define GL_MAP1_INDEX 0x0D91 -#define GL_MAP1_NORMAL 0x0D92 -#define GL_MAP1_TEXTURE_COORD_1 0x0D93 -#define GL_MAP1_TEXTURE_COORD_2 0x0D94 -#define GL_MAP1_TEXTURE_COORD_3 0x0D95 -#define GL_MAP1_TEXTURE_COORD_4 0x0D96 -#define GL_MAP1_VERTEX_3 0x0D97 -#define GL_MAP1_VERTEX_4 0x0D98 -#define GL_MAP2_COLOR_4 0x0DB0 -#define GL_MAP2_INDEX 0x0DB1 -#define GL_MAP2_NORMAL 0x0DB2 -#define GL_MAP2_TEXTURE_COORD_1 0x0DB3 -#define GL_MAP2_TEXTURE_COORD_2 0x0DB4 -#define GL_MAP2_TEXTURE_COORD_3 0x0DB5 -#define GL_MAP2_TEXTURE_COORD_4 0x0DB6 -#define GL_MAP2_VERTEX_3 0x0DB7 -#define GL_MAP2_VERTEX_4 0x0DB8 -#define GL_MAP1_GRID_DOMAIN 0x0DD0 -#define GL_MAP1_GRID_SEGMENTS 0x0DD1 -#define GL_MAP2_GRID_DOMAIN 0x0DD2 -#define GL_MAP2_GRID_SEGMENTS 0x0DD3 -#define GL_TEXTURE_COMPONENTS 0x1003 -#define GL_TEXTURE_BORDER 0x1005 -#define GL_AMBIENT 0x1200 -#define GL_DIFFUSE 0x1201 -#define GL_SPECULAR 0x1202 -#define GL_POSITION 0x1203 -#define GL_SPOT_DIRECTION 0x1204 -#define GL_SPOT_EXPONENT 0x1205 -#define GL_SPOT_CUTOFF 0x1206 -#define GL_CONSTANT_ATTENUATION 0x1207 -#define GL_LINEAR_ATTENUATION 0x1208 -#define GL_QUADRATIC_ATTENUATION 0x1209 -#define GL_COMPILE 0x1300 -#define GL_COMPILE_AND_EXECUTE 0x1301 -#define GL_2_BYTES 0x1407 -#define GL_3_BYTES 0x1408 -#define GL_4_BYTES 0x1409 -#define GL_EMISSION 0x1600 -#define GL_SHININESS 0x1601 -#define GL_AMBIENT_AND_DIFFUSE 0x1602 -#define GL_COLOR_INDEXES 0x1603 -#define GL_MODELVIEW 0x1700 -#define GL_PROJECTION 0x1701 -#define GL_COLOR_INDEX 0x1900 -#define GL_LUMINANCE 0x1909 -#define GL_LUMINANCE_ALPHA 0x190A -#define GL_BITMAP 0x1A00 -#define GL_RENDER 0x1C00 -#define GL_FEEDBACK 0x1C01 -#define GL_SELECT 0x1C02 -#define GL_FLAT 0x1D00 -#define GL_SMOOTH 0x1D01 -#define GL_S 0x2000 -#define GL_T 0x2001 -#define GL_R 0x2002 -#define GL_Q 0x2003 -#define GL_MODULATE 0x2100 -#define GL_DECAL 0x2101 -#define GL_TEXTURE_ENV_MODE 0x2200 -#define GL_TEXTURE_ENV_COLOR 0x2201 -#define GL_TEXTURE_ENV 0x2300 -#define GL_EYE_LINEAR 0x2400 -#define GL_OBJECT_LINEAR 0x2401 -#define GL_SPHERE_MAP 0x2402 -#define GL_TEXTURE_GEN_MODE 0x2500 -#define GL_OBJECT_PLANE 0x2501 -#define GL_EYE_PLANE 0x2502 -#define GL_CLAMP 0x2900 -#define GL_CLIP_PLANE0 0x3000 -#define GL_CLIP_PLANE1 0x3001 -#define GL_CLIP_PLANE2 0x3002 -#define GL_CLIP_PLANE3 0x3003 -#define GL_CLIP_PLANE4 0x3004 -#define GL_CLIP_PLANE5 0x3005 -#define GL_LIGHT0 0x4000 -#define GL_LIGHT1 0x4001 -#define GL_LIGHT2 0x4002 -#define GL_LIGHT3 0x4003 -#define GL_LIGHT4 0x4004 -#define GL_LIGHT5 0x4005 -#define GL_LIGHT6 0x4006 -#define GL_LIGHT7 0x4007 -#define GL_COLOR_LOGIC_OP 0x0BF2 -#define GL_POLYGON_OFFSET_UNITS 0x2A00 -#define GL_POLYGON_OFFSET_POINT 0x2A01 -#define GL_POLYGON_OFFSET_LINE 0x2A02 -#define GL_POLYGON_OFFSET_FILL 0x8037 -#define GL_POLYGON_OFFSET_FACTOR 0x8038 -#define GL_TEXTURE_BINDING_1D 0x8068 -#define GL_TEXTURE_BINDING_2D 0x8069 -#define GL_TEXTURE_INTERNAL_FORMAT 0x1003 -#define GL_TEXTURE_RED_SIZE 0x805C -#define GL_TEXTURE_GREEN_SIZE 0x805D -#define GL_TEXTURE_BLUE_SIZE 0x805E -#define GL_TEXTURE_ALPHA_SIZE 0x805F -#define GL_DOUBLE 0x140A -#define GL_PROXY_TEXTURE_1D 0x8063 -#define GL_PROXY_TEXTURE_2D 0x8064 -#define GL_R3_G3_B2 0x2A10 -#define GL_RGB4 0x804F -#define GL_RGB5 0x8050 -#define GL_RGB8 0x8051 -#define GL_RGB10 0x8052 -#define GL_RGB12 0x8053 -#define GL_RGB16 0x8054 -#define GL_RGBA2 0x8055 -#define GL_RGBA4 0x8056 -#define GL_RGB5_A1 0x8057 -#define GL_RGBA8 0x8058 -#define GL_RGB10_A2 0x8059 -#define GL_RGBA12 0x805A -#define GL_RGBA16 0x805B -#define GL_CLIENT_PIXEL_STORE_BIT 0x00000001 -#define GL_CLIENT_VERTEX_ARRAY_BIT 0x00000002 -#define GL_CLIENT_ALL_ATTRIB_BITS 0xFFFFFFFF -#define GL_VERTEX_ARRAY_POINTER 0x808E -#define GL_NORMAL_ARRAY_POINTER 0x808F -#define GL_COLOR_ARRAY_POINTER 0x8090 -#define GL_INDEX_ARRAY_POINTER 0x8091 -#define GL_TEXTURE_COORD_ARRAY_POINTER 0x8092 -#define GL_EDGE_FLAG_ARRAY_POINTER 0x8093 -#define GL_FEEDBACK_BUFFER_POINTER 0x0DF0 -#define GL_SELECTION_BUFFER_POINTER 0x0DF3 -#define GL_CLIENT_ATTRIB_STACK_DEPTH 0x0BB1 -#define GL_INDEX_LOGIC_OP 0x0BF1 -#define GL_MAX_CLIENT_ATTRIB_STACK_DEPTH 0x0D3B -#define GL_FEEDBACK_BUFFER_SIZE 0x0DF1 -#define GL_FEEDBACK_BUFFER_TYPE 0x0DF2 -#define GL_SELECTION_BUFFER_SIZE 0x0DF4 -#define GL_VERTEX_ARRAY 0x8074 -#define GL_NORMAL_ARRAY 0x8075 -#define GL_COLOR_ARRAY 0x8076 -#define GL_INDEX_ARRAY 0x8077 -#define GL_TEXTURE_COORD_ARRAY 0x8078 -#define GL_EDGE_FLAG_ARRAY 0x8079 -#define GL_VERTEX_ARRAY_SIZE 0x807A -#define GL_VERTEX_ARRAY_TYPE 0x807B -#define GL_VERTEX_ARRAY_STRIDE 0x807C -#define GL_NORMAL_ARRAY_TYPE 0x807E -#define GL_NORMAL_ARRAY_STRIDE 0x807F -#define GL_COLOR_ARRAY_SIZE 0x8081 -#define GL_COLOR_ARRAY_TYPE 0x8082 -#define GL_COLOR_ARRAY_STRIDE 0x8083 -#define GL_INDEX_ARRAY_TYPE 0x8085 -#define GL_INDEX_ARRAY_STRIDE 0x8086 -#define GL_TEXTURE_COORD_ARRAY_SIZE 0x8088 -#define GL_TEXTURE_COORD_ARRAY_TYPE 0x8089 -#define GL_TEXTURE_COORD_ARRAY_STRIDE 0x808A -#define GL_EDGE_FLAG_ARRAY_STRIDE 0x808C -#define GL_TEXTURE_LUMINANCE_SIZE 0x8060 -#define GL_TEXTURE_INTENSITY_SIZE 0x8061 -#define GL_TEXTURE_PRIORITY 0x8066 -#define GL_TEXTURE_RESIDENT 0x8067 -#define GL_ALPHA4 0x803B -#define GL_ALPHA8 0x803C -#define GL_ALPHA12 0x803D -#define GL_ALPHA16 0x803E -#define GL_LUMINANCE4 0x803F -#define GL_LUMINANCE8 0x8040 -#define GL_LUMINANCE12 0x8041 -#define GL_LUMINANCE16 0x8042 -#define GL_LUMINANCE4_ALPHA4 0x8043 -#define GL_LUMINANCE6_ALPHA2 0x8044 -#define GL_LUMINANCE8_ALPHA8 0x8045 -#define GL_LUMINANCE12_ALPHA4 0x8046 -#define GL_LUMINANCE12_ALPHA12 0x8047 -#define GL_LUMINANCE16_ALPHA16 0x8048 -#define GL_INTENSITY 0x8049 -#define GL_INTENSITY4 0x804A -#define GL_INTENSITY8 0x804B -#define GL_INTENSITY12 0x804C -#define GL_INTENSITY16 0x804D -#define GL_V2F 0x2A20 -#define GL_V3F 0x2A21 -#define GL_C4UB_V2F 0x2A22 -#define GL_C4UB_V3F 0x2A23 -#define GL_C3F_V3F 0x2A24 -#define GL_N3F_V3F 0x2A25 -#define GL_C4F_N3F_V3F 0x2A26 -#define GL_T2F_V3F 0x2A27 -#define GL_T4F_V4F 0x2A28 -#define GL_T2F_C4UB_V3F 0x2A29 -#define GL_T2F_C3F_V3F 0x2A2A -#define GL_T2F_N3F_V3F 0x2A2B -#define GL_T2F_C4F_N3F_V3F 0x2A2C -#define GL_T4F_C4F_N3F_V4F 0x2A2D -#define GL_UNSIGNED_BYTE_3_3_2 0x8032 -#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033 -#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034 -#define GL_UNSIGNED_INT_8_8_8_8 0x8035 -#define GL_UNSIGNED_INT_10_10_10_2 0x8036 -#define GL_TEXTURE_BINDING_3D 0x806A -#define GL_PACK_SKIP_IMAGES 0x806B -#define GL_PACK_IMAGE_HEIGHT 0x806C -#define GL_UNPACK_SKIP_IMAGES 0x806D -#define GL_UNPACK_IMAGE_HEIGHT 0x806E -#define GL_TEXTURE_3D 0x806F -#define GL_PROXY_TEXTURE_3D 0x8070 -#define GL_TEXTURE_DEPTH 0x8071 -#define GL_TEXTURE_WRAP_R 0x8072 -#define GL_MAX_3D_TEXTURE_SIZE 0x8073 -#define GL_UNSIGNED_BYTE_2_3_3_REV 0x8362 -#define GL_UNSIGNED_SHORT_5_6_5 0x8363 -#define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364 -#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365 -#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366 -#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367 -#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368 -#define GL_BGR 0x80E0 -#define GL_BGRA 0x80E1 -#define GL_MAX_ELEMENTS_VERTICES 0x80E8 -#define GL_MAX_ELEMENTS_INDICES 0x80E9 -#define GL_CLAMP_TO_EDGE 0x812F -#define GL_TEXTURE_MIN_LOD 0x813A -#define GL_TEXTURE_MAX_LOD 0x813B -#define GL_TEXTURE_BASE_LEVEL 0x813C -#define GL_TEXTURE_MAX_LEVEL 0x813D -#define GL_SMOOTH_POINT_SIZE_RANGE 0x0B12 -#define GL_SMOOTH_POINT_SIZE_GRANULARITY 0x0B13 -#define GL_SMOOTH_LINE_WIDTH_RANGE 0x0B22 -#define GL_SMOOTH_LINE_WIDTH_GRANULARITY 0x0B23 -#define GL_ALIASED_LINE_WIDTH_RANGE 0x846E -#define GL_RESCALE_NORMAL 0x803A -#define GL_LIGHT_MODEL_COLOR_CONTROL 0x81F8 -#define GL_SINGLE_COLOR 0x81F9 -#define GL_SEPARATE_SPECULAR_COLOR 0x81FA -#define GL_ALIASED_POINT_SIZE_RANGE 0x846D -#define GL_TEXTURE0 0x84C0 -#define GL_TEXTURE1 0x84C1 -#define GL_TEXTURE2 0x84C2 -#define GL_TEXTURE3 0x84C3 -#define GL_TEXTURE4 0x84C4 -#define GL_TEXTURE5 0x84C5 -#define GL_TEXTURE6 0x84C6 -#define GL_TEXTURE7 0x84C7 -#define GL_TEXTURE8 0x84C8 -#define GL_TEXTURE9 0x84C9 -#define GL_TEXTURE10 0x84CA -#define GL_TEXTURE11 0x84CB -#define GL_TEXTURE12 0x84CC -#define GL_TEXTURE13 0x84CD -#define GL_TEXTURE14 0x84CE -#define GL_TEXTURE15 0x84CF -#define GL_TEXTURE16 0x84D0 -#define GL_TEXTURE17 0x84D1 -#define GL_TEXTURE18 0x84D2 -#define GL_TEXTURE19 0x84D3 -#define GL_TEXTURE20 0x84D4 -#define GL_TEXTURE21 0x84D5 -#define GL_TEXTURE22 0x84D6 -#define GL_TEXTURE23 0x84D7 -#define GL_TEXTURE24 0x84D8 -#define GL_TEXTURE25 0x84D9 -#define GL_TEXTURE26 0x84DA -#define GL_TEXTURE27 0x84DB -#define GL_TEXTURE28 0x84DC -#define GL_TEXTURE29 0x84DD -#define GL_TEXTURE30 0x84DE -#define GL_TEXTURE31 0x84DF -#define GL_ACTIVE_TEXTURE 0x84E0 -#define GL_MULTISAMPLE 0x809D -#define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E -#define GL_SAMPLE_ALPHA_TO_ONE 0x809F -#define GL_SAMPLE_COVERAGE 0x80A0 -#define GL_SAMPLE_BUFFERS 0x80A8 -#define GL_SAMPLES 0x80A9 -#define GL_SAMPLE_COVERAGE_VALUE 0x80AA -#define GL_SAMPLE_COVERAGE_INVERT 0x80AB -#define GL_TEXTURE_CUBE_MAP 0x8513 -#define GL_TEXTURE_BINDING_CUBE_MAP 0x8514 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_X 0x8515 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_X 0x8516 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Y 0x8517 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Y 0x8518 -#define GL_TEXTURE_CUBE_MAP_POSITIVE_Z 0x8519 -#define GL_TEXTURE_CUBE_MAP_NEGATIVE_Z 0x851A -#define GL_PROXY_TEXTURE_CUBE_MAP 0x851B -#define GL_MAX_CUBE_MAP_TEXTURE_SIZE 0x851C -#define GL_COMPRESSED_RGB 0x84ED -#define GL_COMPRESSED_RGBA 0x84EE -#define GL_TEXTURE_COMPRESSION_HINT 0x84EF -#define GL_TEXTURE_COMPRESSED_IMAGE_SIZE 0x86A0 -#define GL_TEXTURE_COMPRESSED 0x86A1 -#define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 -#define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 -#define GL_CLAMP_TO_BORDER 0x812D -#define GL_CLIENT_ACTIVE_TEXTURE 0x84E1 -#define GL_MAX_TEXTURE_UNITS 0x84E2 -#define GL_TRANSPOSE_MODELVIEW_MATRIX 0x84E3 -#define GL_TRANSPOSE_PROJECTION_MATRIX 0x84E4 -#define GL_TRANSPOSE_TEXTURE_MATRIX 0x84E5 -#define GL_TRANSPOSE_COLOR_MATRIX 0x84E6 -#define GL_MULTISAMPLE_BIT 0x20000000 -#define GL_NORMAL_MAP 0x8511 -#define GL_REFLECTION_MAP 0x8512 -#define GL_COMPRESSED_ALPHA 0x84E9 -#define GL_COMPRESSED_LUMINANCE 0x84EA -#define GL_COMPRESSED_LUMINANCE_ALPHA 0x84EB -#define GL_COMPRESSED_INTENSITY 0x84EC -#define GL_COMBINE 0x8570 -#define GL_COMBINE_RGB 0x8571 -#define GL_COMBINE_ALPHA 0x8572 -#define GL_SOURCE0_RGB 0x8580 -#define GL_SOURCE1_RGB 0x8581 -#define GL_SOURCE2_RGB 0x8582 -#define GL_SOURCE0_ALPHA 0x8588 -#define GL_SOURCE1_ALPHA 0x8589 -#define GL_SOURCE2_ALPHA 0x858A -#define GL_OPERAND0_RGB 0x8590 -#define GL_OPERAND1_RGB 0x8591 -#define GL_OPERAND2_RGB 0x8592 -#define GL_OPERAND0_ALPHA 0x8598 -#define GL_OPERAND1_ALPHA 0x8599 -#define GL_OPERAND2_ALPHA 0x859A -#define GL_RGB_SCALE 0x8573 -#define GL_ADD_SIGNED 0x8574 -#define GL_INTERPOLATE 0x8575 -#define GL_SUBTRACT 0x84E7 -#define GL_CONSTANT 0x8576 -#define GL_PRIMARY_COLOR 0x8577 -#define GL_PREVIOUS 0x8578 -#define GL_DOT3_RGB 0x86AE -#define GL_DOT3_RGBA 0x86AF -#define GL_BLEND_DST_RGB 0x80C8 -#define GL_BLEND_SRC_RGB 0x80C9 -#define GL_BLEND_DST_ALPHA 0x80CA -#define GL_BLEND_SRC_ALPHA 0x80CB -#define GL_POINT_FADE_THRESHOLD_SIZE 0x8128 -#define GL_DEPTH_COMPONENT16 0x81A5 -#define GL_DEPTH_COMPONENT24 0x81A6 -#define GL_DEPTH_COMPONENT32 0x81A7 -#define GL_MIRRORED_REPEAT 0x8370 -#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD -#define GL_TEXTURE_LOD_BIAS 0x8501 -#define GL_INCR_WRAP 0x8507 -#define GL_DECR_WRAP 0x8508 -#define GL_TEXTURE_DEPTH_SIZE 0x884A -#define GL_TEXTURE_COMPARE_MODE 0x884C -#define GL_TEXTURE_COMPARE_FUNC 0x884D -#define GL_POINT_SIZE_MIN 0x8126 -#define GL_POINT_SIZE_MAX 0x8127 -#define GL_POINT_DISTANCE_ATTENUATION 0x8129 -#define GL_GENERATE_MIPMAP 0x8191 -#define GL_GENERATE_MIPMAP_HINT 0x8192 -#define GL_FOG_COORDINATE_SOURCE 0x8450 -#define GL_FOG_COORDINATE 0x8451 -#define GL_FRAGMENT_DEPTH 0x8452 -#define GL_CURRENT_FOG_COORDINATE 0x8453 -#define GL_FOG_COORDINATE_ARRAY_TYPE 0x8454 -#define GL_FOG_COORDINATE_ARRAY_STRIDE 0x8455 -#define GL_FOG_COORDINATE_ARRAY_POINTER 0x8456 -#define GL_FOG_COORDINATE_ARRAY 0x8457 -#define GL_COLOR_SUM 0x8458 -#define GL_CURRENT_SECONDARY_COLOR 0x8459 -#define GL_SECONDARY_COLOR_ARRAY_SIZE 0x845A -#define GL_SECONDARY_COLOR_ARRAY_TYPE 0x845B -#define GL_SECONDARY_COLOR_ARRAY_STRIDE 0x845C -#define GL_SECONDARY_COLOR_ARRAY_POINTER 0x845D -#define GL_SECONDARY_COLOR_ARRAY 0x845E -#define GL_TEXTURE_FILTER_CONTROL 0x8500 -#define GL_DEPTH_TEXTURE_MODE 0x884B -#define GL_COMPARE_R_TO_TEXTURE 0x884E -#define GL_BLEND_COLOR 0x8005 -#define GL_BLEND_EQUATION 0x8009 -#define GL_CONSTANT_COLOR 0x8001 -#define GL_ONE_MINUS_CONSTANT_COLOR 0x8002 -#define GL_CONSTANT_ALPHA 0x8003 -#define GL_ONE_MINUS_CONSTANT_ALPHA 0x8004 -#define GL_FUNC_ADD 0x8006 -#define GL_FUNC_REVERSE_SUBTRACT 0x800B -#define GL_FUNC_SUBTRACT 0x800A -#define GL_MIN 0x8007 -#define GL_MAX 0x8008 -#define GL_BUFFER_SIZE 0x8764 -#define GL_BUFFER_USAGE 0x8765 -#define GL_QUERY_COUNTER_BITS 0x8864 -#define GL_CURRENT_QUERY 0x8865 -#define GL_QUERY_RESULT 0x8866 -#define GL_QUERY_RESULT_AVAILABLE 0x8867 -#define GL_ARRAY_BUFFER 0x8892 -#define GL_ELEMENT_ARRAY_BUFFER 0x8893 -#define GL_ARRAY_BUFFER_BINDING 0x8894 -#define GL_ELEMENT_ARRAY_BUFFER_BINDING 0x8895 -#define GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING 0x889F -#define GL_READ_ONLY 0x88B8 -#define GL_WRITE_ONLY 0x88B9 -#define GL_READ_WRITE 0x88BA -#define GL_BUFFER_ACCESS 0x88BB -#define GL_BUFFER_MAPPED 0x88BC -#define GL_BUFFER_MAP_POINTER 0x88BD -#define GL_STREAM_DRAW 0x88E0 -#define GL_STREAM_READ 0x88E1 -#define GL_STREAM_COPY 0x88E2 -#define GL_STATIC_DRAW 0x88E4 -#define GL_STATIC_READ 0x88E5 -#define GL_STATIC_COPY 0x88E6 -#define GL_DYNAMIC_DRAW 0x88E8 -#define GL_DYNAMIC_READ 0x88E9 -#define GL_DYNAMIC_COPY 0x88EA -#define GL_SAMPLES_PASSED 0x8914 -#define GL_SRC1_ALPHA 0x8589 -#define GL_VERTEX_ARRAY_BUFFER_BINDING 0x8896 -#define GL_NORMAL_ARRAY_BUFFER_BINDING 0x8897 -#define GL_COLOR_ARRAY_BUFFER_BINDING 0x8898 -#define GL_INDEX_ARRAY_BUFFER_BINDING 0x8899 -#define GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING 0x889A -#define GL_EDGE_FLAG_ARRAY_BUFFER_BINDING 0x889B -#define GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING 0x889C -#define GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING 0x889D -#define GL_WEIGHT_ARRAY_BUFFER_BINDING 0x889E -#define GL_FOG_COORD_SRC 0x8450 -#define GL_FOG_COORD 0x8451 -#define GL_CURRENT_FOG_COORD 0x8453 -#define GL_FOG_COORD_ARRAY_TYPE 0x8454 -#define GL_FOG_COORD_ARRAY_STRIDE 0x8455 -#define GL_FOG_COORD_ARRAY_POINTER 0x8456 -#define GL_FOG_COORD_ARRAY 0x8457 -#define GL_FOG_COORD_ARRAY_BUFFER_BINDING 0x889D -#define GL_SRC0_RGB 0x8580 -#define GL_SRC1_RGB 0x8581 -#define GL_SRC2_RGB 0x8582 -#define GL_SRC0_ALPHA 0x8588 -#define GL_SRC2_ALPHA 0x858A -#define GL_BLEND_EQUATION_RGB 0x8009 -#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 -#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 -#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 -#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 -#define GL_CURRENT_VERTEX_ATTRIB 0x8626 -#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 -#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 -#define GL_STENCIL_BACK_FUNC 0x8800 -#define GL_STENCIL_BACK_FAIL 0x8801 -#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 -#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 -#define GL_MAX_DRAW_BUFFERS 0x8824 -#define GL_DRAW_BUFFER0 0x8825 -#define GL_DRAW_BUFFER1 0x8826 -#define GL_DRAW_BUFFER2 0x8827 -#define GL_DRAW_BUFFER3 0x8828 -#define GL_DRAW_BUFFER4 0x8829 -#define GL_DRAW_BUFFER5 0x882A -#define GL_DRAW_BUFFER6 0x882B -#define GL_DRAW_BUFFER7 0x882C -#define GL_DRAW_BUFFER8 0x882D -#define GL_DRAW_BUFFER9 0x882E -#define GL_DRAW_BUFFER10 0x882F -#define GL_DRAW_BUFFER11 0x8830 -#define GL_DRAW_BUFFER12 0x8831 -#define GL_DRAW_BUFFER13 0x8832 -#define GL_DRAW_BUFFER14 0x8833 -#define GL_DRAW_BUFFER15 0x8834 -#define GL_BLEND_EQUATION_ALPHA 0x883D -#define GL_MAX_VERTEX_ATTRIBS 0x8869 -#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A -#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 -#define GL_FRAGMENT_SHADER 0x8B30 -#define GL_VERTEX_SHADER 0x8B31 -#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 -#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A -#define GL_MAX_VARYING_FLOATS 0x8B4B -#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C -#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D -#define GL_SHADER_TYPE 0x8B4F -#define GL_FLOAT_VEC2 0x8B50 -#define GL_FLOAT_VEC3 0x8B51 -#define GL_FLOAT_VEC4 0x8B52 -#define GL_INT_VEC2 0x8B53 -#define GL_INT_VEC3 0x8B54 -#define GL_INT_VEC4 0x8B55 -#define GL_BOOL 0x8B56 -#define GL_BOOL_VEC2 0x8B57 -#define GL_BOOL_VEC3 0x8B58 -#define GL_BOOL_VEC4 0x8B59 -#define GL_FLOAT_MAT2 0x8B5A -#define GL_FLOAT_MAT3 0x8B5B -#define GL_FLOAT_MAT4 0x8B5C -#define GL_SAMPLER_1D 0x8B5D -#define GL_SAMPLER_2D 0x8B5E -#define GL_SAMPLER_3D 0x8B5F -#define GL_SAMPLER_CUBE 0x8B60 -#define GL_SAMPLER_1D_SHADOW 0x8B61 -#define GL_SAMPLER_2D_SHADOW 0x8B62 -#define GL_DELETE_STATUS 0x8B80 -#define GL_COMPILE_STATUS 0x8B81 -#define GL_LINK_STATUS 0x8B82 -#define GL_VALIDATE_STATUS 0x8B83 -#define GL_INFO_LOG_LENGTH 0x8B84 -#define GL_ATTACHED_SHADERS 0x8B85 -#define GL_ACTIVE_UNIFORMS 0x8B86 -#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 -#define GL_SHADER_SOURCE_LENGTH 0x8B88 -#define GL_ACTIVE_ATTRIBUTES 0x8B89 -#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A -#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B -#define GL_SHADING_LANGUAGE_VERSION 0x8B8C -#define GL_CURRENT_PROGRAM 0x8B8D -#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 -#define GL_LOWER_LEFT 0x8CA1 -#define GL_UPPER_LEFT 0x8CA2 -#define GL_STENCIL_BACK_REF 0x8CA3 -#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 -#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 -#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 -#define GL_POINT_SPRITE 0x8861 -#define GL_COORD_REPLACE 0x8862 -#define GL_MAX_TEXTURE_COORDS 0x8871 -#define GL_PIXEL_PACK_BUFFER 0x88EB -#define GL_PIXEL_UNPACK_BUFFER 0x88EC -#define GL_PIXEL_PACK_BUFFER_BINDING 0x88ED -#define GL_PIXEL_UNPACK_BUFFER_BINDING 0x88EF -#define GL_FLOAT_MAT2x3 0x8B65 -#define GL_FLOAT_MAT2x4 0x8B66 -#define GL_FLOAT_MAT3x2 0x8B67 -#define GL_FLOAT_MAT3x4 0x8B68 -#define GL_FLOAT_MAT4x2 0x8B69 -#define GL_FLOAT_MAT4x3 0x8B6A -#define GL_SRGB 0x8C40 -#define GL_SRGB8 0x8C41 -#define GL_SRGB_ALPHA 0x8C42 -#define GL_SRGB8_ALPHA8 0x8C43 -#define GL_COMPRESSED_SRGB 0x8C48 -#define GL_COMPRESSED_SRGB_ALPHA 0x8C49 -#define GL_CURRENT_RASTER_SECONDARY_COLOR 0x845F -#define GL_SLUMINANCE_ALPHA 0x8C44 -#define GL_SLUMINANCE8_ALPHA8 0x8C45 -#define GL_SLUMINANCE 0x8C46 -#define GL_SLUMINANCE8 0x8C47 -#define GL_COMPRESSED_SLUMINANCE 0x8C4A -#define GL_COMPRESSED_SLUMINANCE_ALPHA 0x8C4B -#define GL_COMPARE_REF_TO_TEXTURE 0x884E -#define GL_CLIP_DISTANCE0 0x3000 -#define GL_CLIP_DISTANCE1 0x3001 -#define GL_CLIP_DISTANCE2 0x3002 -#define GL_CLIP_DISTANCE3 0x3003 -#define GL_CLIP_DISTANCE4 0x3004 -#define GL_CLIP_DISTANCE5 0x3005 -#define GL_CLIP_DISTANCE6 0x3006 -#define GL_CLIP_DISTANCE7 0x3007 -#define GL_MAX_CLIP_DISTANCES 0x0D32 -#define GL_MAJOR_VERSION 0x821B -#define GL_MINOR_VERSION 0x821C -#define GL_NUM_EXTENSIONS 0x821D -#define GL_CONTEXT_FLAGS 0x821E -#define GL_COMPRESSED_RED 0x8225 -#define GL_COMPRESSED_RG 0x8226 -#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x00000001 -#define GL_RGBA32F 0x8814 -#define GL_RGB32F 0x8815 -#define GL_RGBA16F 0x881A -#define GL_RGB16F 0x881B -#define GL_VERTEX_ATTRIB_ARRAY_INTEGER 0x88FD -#define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF -#define GL_MIN_PROGRAM_TEXEL_OFFSET 0x8904 -#define GL_MAX_PROGRAM_TEXEL_OFFSET 0x8905 -#define GL_CLAMP_READ_COLOR 0x891C -#define GL_FIXED_ONLY 0x891D -#define GL_MAX_VARYING_COMPONENTS 0x8B4B -#define GL_TEXTURE_1D_ARRAY 0x8C18 -#define GL_PROXY_TEXTURE_1D_ARRAY 0x8C19 -#define GL_TEXTURE_2D_ARRAY 0x8C1A -#define GL_PROXY_TEXTURE_2D_ARRAY 0x8C1B -#define GL_TEXTURE_BINDING_1D_ARRAY 0x8C1C -#define GL_TEXTURE_BINDING_2D_ARRAY 0x8C1D -#define GL_R11F_G11F_B10F 0x8C3A -#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B -#define GL_RGB9_E5 0x8C3D -#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E -#define GL_TEXTURE_SHARED_SIZE 0x8C3F -#define GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH 0x8C76 -#define GL_TRANSFORM_FEEDBACK_BUFFER_MODE 0x8C7F -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS 0x8C80 -#define GL_TRANSFORM_FEEDBACK_VARYINGS 0x8C83 -#define GL_TRANSFORM_FEEDBACK_BUFFER_START 0x8C84 -#define GL_TRANSFORM_FEEDBACK_BUFFER_SIZE 0x8C85 -#define GL_PRIMITIVES_GENERATED 0x8C87 -#define GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN 0x8C88 -#define GL_RASTERIZER_DISCARD 0x8C89 -#define GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS 0x8C8A -#define GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS 0x8C8B -#define GL_INTERLEAVED_ATTRIBS 0x8C8C -#define GL_SEPARATE_ATTRIBS 0x8C8D -#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8C8E -#define GL_TRANSFORM_FEEDBACK_BUFFER_BINDING 0x8C8F -#define GL_RGBA32UI 0x8D70 -#define GL_RGB32UI 0x8D71 -#define GL_RGBA16UI 0x8D76 -#define GL_RGB16UI 0x8D77 -#define GL_RGBA8UI 0x8D7C -#define GL_RGB8UI 0x8D7D -#define GL_RGBA32I 0x8D82 -#define GL_RGB32I 0x8D83 -#define GL_RGBA16I 0x8D88 -#define GL_RGB16I 0x8D89 -#define GL_RGBA8I 0x8D8E -#define GL_RGB8I 0x8D8F -#define GL_RED_INTEGER 0x8D94 -#define GL_GREEN_INTEGER 0x8D95 -#define GL_BLUE_INTEGER 0x8D96 -#define GL_RGB_INTEGER 0x8D98 -#define GL_RGBA_INTEGER 0x8D99 -#define GL_BGR_INTEGER 0x8D9A -#define GL_BGRA_INTEGER 0x8D9B -#define GL_SAMPLER_1D_ARRAY 0x8DC0 -#define GL_SAMPLER_2D_ARRAY 0x8DC1 -#define GL_SAMPLER_1D_ARRAY_SHADOW 0x8DC3 -#define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4 -#define GL_SAMPLER_CUBE_SHADOW 0x8DC5 -#define GL_UNSIGNED_INT_VEC2 0x8DC6 -#define GL_UNSIGNED_INT_VEC3 0x8DC7 -#define GL_UNSIGNED_INT_VEC4 0x8DC8 -#define GL_INT_SAMPLER_1D 0x8DC9 -#define GL_INT_SAMPLER_2D 0x8DCA -#define GL_INT_SAMPLER_3D 0x8DCB -#define GL_INT_SAMPLER_CUBE 0x8DCC -#define GL_INT_SAMPLER_1D_ARRAY 0x8DCE -#define GL_INT_SAMPLER_2D_ARRAY 0x8DCF -#define GL_UNSIGNED_INT_SAMPLER_1D 0x8DD1 -#define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2 -#define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3 -#define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4 -#define GL_UNSIGNED_INT_SAMPLER_1D_ARRAY 0x8DD6 -#define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7 -#define GL_QUERY_WAIT 0x8E13 -#define GL_QUERY_NO_WAIT 0x8E14 -#define GL_QUERY_BY_REGION_WAIT 0x8E15 -#define GL_QUERY_BY_REGION_NO_WAIT 0x8E16 -#define GL_BUFFER_ACCESS_FLAGS 0x911F -#define GL_BUFFER_MAP_LENGTH 0x9120 -#define GL_BUFFER_MAP_OFFSET 0x9121 -#define GL_DEPTH_COMPONENT32F 0x8CAC -#define GL_DEPTH32F_STENCIL8 0x8CAD -#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD -#define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506 -#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210 -#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211 -#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212 -#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213 -#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214 -#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215 -#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216 -#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217 -#define GL_FRAMEBUFFER_DEFAULT 0x8218 -#define GL_FRAMEBUFFER_UNDEFINED 0x8219 -#define GL_DEPTH_STENCIL_ATTACHMENT 0x821A -#define GL_MAX_RENDERBUFFER_SIZE 0x84E8 -#define GL_DEPTH_STENCIL 0x84F9 -#define GL_UNSIGNED_INT_24_8 0x84FA -#define GL_DEPTH24_STENCIL8 0x88F0 -#define GL_TEXTURE_STENCIL_SIZE 0x88F1 -#define GL_TEXTURE_RED_TYPE 0x8C10 -#define GL_TEXTURE_GREEN_TYPE 0x8C11 -#define GL_TEXTURE_BLUE_TYPE 0x8C12 -#define GL_TEXTURE_ALPHA_TYPE 0x8C13 -#define GL_TEXTURE_DEPTH_TYPE 0x8C16 -#define GL_UNSIGNED_NORMALIZED 0x8C17 -#define GL_FRAMEBUFFER_BINDING 0x8CA6 -#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6 -#define GL_RENDERBUFFER_BINDING 0x8CA7 -#define GL_READ_FRAMEBUFFER 0x8CA8 -#define GL_DRAW_FRAMEBUFFER 0x8CA9 -#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA -#define GL_RENDERBUFFER_SAMPLES 0x8CAB -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE 0x8CD0 -#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME 0x8CD1 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL 0x8CD2 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE 0x8CD3 -#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER 0x8CD4 -#define GL_FRAMEBUFFER_COMPLETE 0x8CD5 -#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6 -#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7 -#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB -#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC -#define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD -#define GL_MAX_COLOR_ATTACHMENTS 0x8CDF -#define GL_COLOR_ATTACHMENT0 0x8CE0 -#define GL_COLOR_ATTACHMENT1 0x8CE1 -#define GL_COLOR_ATTACHMENT2 0x8CE2 -#define GL_COLOR_ATTACHMENT3 0x8CE3 -#define GL_COLOR_ATTACHMENT4 0x8CE4 -#define GL_COLOR_ATTACHMENT5 0x8CE5 -#define GL_COLOR_ATTACHMENT6 0x8CE6 -#define GL_COLOR_ATTACHMENT7 0x8CE7 -#define GL_COLOR_ATTACHMENT8 0x8CE8 -#define GL_COLOR_ATTACHMENT9 0x8CE9 -#define GL_COLOR_ATTACHMENT10 0x8CEA -#define GL_COLOR_ATTACHMENT11 0x8CEB -#define GL_COLOR_ATTACHMENT12 0x8CEC -#define GL_COLOR_ATTACHMENT13 0x8CED -#define GL_COLOR_ATTACHMENT14 0x8CEE -#define GL_COLOR_ATTACHMENT15 0x8CEF -#define GL_COLOR_ATTACHMENT16 0x8CF0 -#define GL_COLOR_ATTACHMENT17 0x8CF1 -#define GL_COLOR_ATTACHMENT18 0x8CF2 -#define GL_COLOR_ATTACHMENT19 0x8CF3 -#define GL_COLOR_ATTACHMENT20 0x8CF4 -#define GL_COLOR_ATTACHMENT21 0x8CF5 -#define GL_COLOR_ATTACHMENT22 0x8CF6 -#define GL_COLOR_ATTACHMENT23 0x8CF7 -#define GL_COLOR_ATTACHMENT24 0x8CF8 -#define GL_COLOR_ATTACHMENT25 0x8CF9 -#define GL_COLOR_ATTACHMENT26 0x8CFA -#define GL_COLOR_ATTACHMENT27 0x8CFB -#define GL_COLOR_ATTACHMENT28 0x8CFC -#define GL_COLOR_ATTACHMENT29 0x8CFD -#define GL_COLOR_ATTACHMENT30 0x8CFE -#define GL_COLOR_ATTACHMENT31 0x8CFF -#define GL_DEPTH_ATTACHMENT 0x8D00 -#define GL_STENCIL_ATTACHMENT 0x8D20 -#define GL_FRAMEBUFFER 0x8D40 -#define GL_RENDERBUFFER 0x8D41 -#define GL_RENDERBUFFER_WIDTH 0x8D42 -#define GL_RENDERBUFFER_HEIGHT 0x8D43 -#define GL_RENDERBUFFER_INTERNAL_FORMAT 0x8D44 -#define GL_STENCIL_INDEX1 0x8D46 -#define GL_STENCIL_INDEX4 0x8D47 -#define GL_STENCIL_INDEX8 0x8D48 -#define GL_STENCIL_INDEX16 0x8D49 -#define GL_RENDERBUFFER_RED_SIZE 0x8D50 -#define GL_RENDERBUFFER_GREEN_SIZE 0x8D51 -#define GL_RENDERBUFFER_BLUE_SIZE 0x8D52 -#define GL_RENDERBUFFER_ALPHA_SIZE 0x8D53 -#define GL_RENDERBUFFER_DEPTH_SIZE 0x8D54 -#define GL_RENDERBUFFER_STENCIL_SIZE 0x8D55 -#define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56 -#define GL_MAX_SAMPLES 0x8D57 -#define GL_INDEX 0x8222 -#define GL_TEXTURE_LUMINANCE_TYPE 0x8C14 -#define GL_TEXTURE_INTENSITY_TYPE 0x8C15 -#define GL_FRAMEBUFFER_SRGB 0x8DB9 -#define GL_HALF_FLOAT 0x140B -#define GL_MAP_READ_BIT 0x0001 -#define GL_MAP_WRITE_BIT 0x0002 -#define GL_MAP_INVALIDATE_RANGE_BIT 0x0004 -#define GL_MAP_INVALIDATE_BUFFER_BIT 0x0008 -#define GL_MAP_FLUSH_EXPLICIT_BIT 0x0010 -#define GL_MAP_UNSYNCHRONIZED_BIT 0x0020 -#define GL_COMPRESSED_RED_RGTC1 0x8DBB -#define GL_COMPRESSED_SIGNED_RED_RGTC1 0x8DBC -#define GL_COMPRESSED_RG_RGTC2 0x8DBD -#define GL_COMPRESSED_SIGNED_RG_RGTC2 0x8DBE -#define GL_RG 0x8227 -#define GL_RG_INTEGER 0x8228 -#define GL_R8 0x8229 -#define GL_R16 0x822A -#define GL_RG8 0x822B -#define GL_RG16 0x822C -#define GL_R16F 0x822D -#define GL_R32F 0x822E -#define GL_RG16F 0x822F -#define GL_RG32F 0x8230 -#define GL_R8I 0x8231 -#define GL_R8UI 0x8232 -#define GL_R16I 0x8233 -#define GL_R16UI 0x8234 -#define GL_R32I 0x8235 -#define GL_R32UI 0x8236 -#define GL_RG8I 0x8237 -#define GL_RG8UI 0x8238 -#define GL_RG16I 0x8239 -#define GL_RG16UI 0x823A -#define GL_RG32I 0x823B -#define GL_RG32UI 0x823C -#define GL_VERTEX_ARRAY_BINDING 0x85B5 -#define GL_CLAMP_VERTEX_COLOR 0x891A -#define GL_CLAMP_FRAGMENT_COLOR 0x891B -#define GL_ALPHA_INTEGER 0x8D97 -#define GL_SAMPLER_2D_RECT 0x8B63 -#define GL_SAMPLER_2D_RECT_SHADOW 0x8B64 -#define GL_SAMPLER_BUFFER 0x8DC2 -#define GL_INT_SAMPLER_2D_RECT 0x8DCD -#define GL_INT_SAMPLER_BUFFER 0x8DD0 -#define GL_UNSIGNED_INT_SAMPLER_2D_RECT 0x8DD5 -#define GL_UNSIGNED_INT_SAMPLER_BUFFER 0x8DD8 -#define GL_TEXTURE_BUFFER 0x8C2A -#define GL_MAX_TEXTURE_BUFFER_SIZE 0x8C2B -#define GL_TEXTURE_BINDING_BUFFER 0x8C2C -#define GL_TEXTURE_BUFFER_DATA_STORE_BINDING 0x8C2D -#define GL_TEXTURE_RECTANGLE 0x84F5 -#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 -#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 -#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 -#define GL_R8_SNORM 0x8F94 -#define GL_RG8_SNORM 0x8F95 -#define GL_RGB8_SNORM 0x8F96 -#define GL_RGBA8_SNORM 0x8F97 -#define GL_R16_SNORM 0x8F98 -#define GL_RG16_SNORM 0x8F99 -#define GL_RGB16_SNORM 0x8F9A -#define GL_RGBA16_SNORM 0x8F9B -#define GL_SIGNED_NORMALIZED 0x8F9C -#define GL_PRIMITIVE_RESTART 0x8F9D -#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E -#define GL_COPY_READ_BUFFER 0x8F36 -#define GL_COPY_WRITE_BUFFER 0x8F37 -#define GL_UNIFORM_BUFFER 0x8A11 -#define GL_UNIFORM_BUFFER_BINDING 0x8A28 -#define GL_UNIFORM_BUFFER_START 0x8A29 -#define GL_UNIFORM_BUFFER_SIZE 0x8A2A -#define GL_MAX_VERTEX_UNIFORM_BLOCKS 0x8A2B -#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS 0x8A2C -#define GL_MAX_FRAGMENT_UNIFORM_BLOCKS 0x8A2D -#define GL_MAX_COMBINED_UNIFORM_BLOCKS 0x8A2E -#define GL_MAX_UNIFORM_BUFFER_BINDINGS 0x8A2F -#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8A30 -#define GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS 0x8A31 -#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS 0x8A32 -#define GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS 0x8A33 -#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8A34 -#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8A35 -#define GL_ACTIVE_UNIFORM_BLOCKS 0x8A36 -#define GL_UNIFORM_TYPE 0x8A37 -#define GL_UNIFORM_SIZE 0x8A38 -#define GL_UNIFORM_NAME_LENGTH 0x8A39 -#define GL_UNIFORM_BLOCK_INDEX 0x8A3A -#define GL_UNIFORM_OFFSET 0x8A3B -#define GL_UNIFORM_ARRAY_STRIDE 0x8A3C -#define GL_UNIFORM_MATRIX_STRIDE 0x8A3D -#define GL_UNIFORM_IS_ROW_MAJOR 0x8A3E -#define GL_UNIFORM_BLOCK_BINDING 0x8A3F -#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8A40 -#define GL_UNIFORM_BLOCK_NAME_LENGTH 0x8A41 -#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8A42 -#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8A43 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER 0x8A44 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER 0x8A45 -#define GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER 0x8A46 -#define GL_INVALID_INDEX 0xFFFFFFFF -#define GL_CONTEXT_CORE_PROFILE_BIT 0x00000001 -#define GL_CONTEXT_COMPATIBILITY_PROFILE_BIT 0x00000002 -#define GL_LINES_ADJACENCY 0x000A -#define GL_LINE_STRIP_ADJACENCY 0x000B -#define GL_TRIANGLES_ADJACENCY 0x000C -#define GL_TRIANGLE_STRIP_ADJACENCY 0x000D -#define GL_PROGRAM_POINT_SIZE 0x8642 -#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS 0x8C29 -#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED 0x8DA7 -#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8 -#define GL_GEOMETRY_SHADER 0x8DD9 -#define GL_GEOMETRY_VERTICES_OUT 0x8916 -#define GL_GEOMETRY_INPUT_TYPE 0x8917 -#define GL_GEOMETRY_OUTPUT_TYPE 0x8918 -#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS 0x8DDF -#define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0 -#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1 -#define GL_MAX_VERTEX_OUTPUT_COMPONENTS 0x9122 -#define GL_MAX_GEOMETRY_INPUT_COMPONENTS 0x9123 -#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS 0x9124 -#define GL_MAX_FRAGMENT_INPUT_COMPONENTS 0x9125 -#define GL_CONTEXT_PROFILE_MASK 0x9126 -#define GL_DEPTH_CLAMP 0x864F -#define GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION 0x8E4C -#define GL_FIRST_VERTEX_CONVENTION 0x8E4D -#define GL_LAST_VERTEX_CONVENTION 0x8E4E -#define GL_PROVOKING_VERTEX 0x8E4F -#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F -#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111 -#define GL_OBJECT_TYPE 0x9112 -#define GL_SYNC_CONDITION 0x9113 -#define GL_SYNC_STATUS 0x9114 -#define GL_SYNC_FLAGS 0x9115 -#define GL_SYNC_FENCE 0x9116 -#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117 -#define GL_UNSIGNALED 0x9118 -#define GL_SIGNALED 0x9119 -#define GL_ALREADY_SIGNALED 0x911A -#define GL_TIMEOUT_EXPIRED 0x911B -#define GL_CONDITION_SATISFIED 0x911C -#define GL_WAIT_FAILED 0x911D -#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFF -#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 -#define GL_SAMPLE_POSITION 0x8E50 -#define GL_SAMPLE_MASK 0x8E51 -#define GL_SAMPLE_MASK_VALUE 0x8E52 -#define GL_MAX_SAMPLE_MASK_WORDS 0x8E59 -#define GL_TEXTURE_2D_MULTISAMPLE 0x9100 -#define GL_PROXY_TEXTURE_2D_MULTISAMPLE 0x9101 -#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102 -#define GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9103 -#define GL_TEXTURE_BINDING_2D_MULTISAMPLE 0x9104 -#define GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY 0x9105 -#define GL_TEXTURE_SAMPLES 0x9106 -#define GL_TEXTURE_FIXED_SAMPLE_LOCATIONS 0x9107 -#define GL_SAMPLER_2D_MULTISAMPLE 0x9108 -#define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109 -#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A -#define GL_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910B -#define GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910C -#define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY 0x910D -#define GL_MAX_COLOR_TEXTURE_SAMPLES 0x910E -#define GL_MAX_DEPTH_TEXTURE_SAMPLES 0x910F -#define GL_MAX_INTEGER_SAMPLES 0x9110 -#define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE -#define GL_SRC1_COLOR 0x88F9 -#define GL_ONE_MINUS_SRC1_COLOR 0x88FA -#define GL_ONE_MINUS_SRC1_ALPHA 0x88FB -#define GL_MAX_DUAL_SOURCE_DRAW_BUFFERS 0x88FC -#define GL_ANY_SAMPLES_PASSED 0x8C2F -#define GL_SAMPLER_BINDING 0x8919 -#define GL_RGB10_A2UI 0x906F -#define GL_TEXTURE_SWIZZLE_R 0x8E42 -#define GL_TEXTURE_SWIZZLE_G 0x8E43 -#define GL_TEXTURE_SWIZZLE_B 0x8E44 -#define GL_TEXTURE_SWIZZLE_A 0x8E45 -#define GL_TEXTURE_SWIZZLE_RGBA 0x8E46 -#define GL_TIME_ELAPSED 0x88BF -#define GL_TIMESTAMP 0x8E28 -#define GL_INT_2_10_10_10_REV 0x8D9F -#ifndef GL_VERSION_1_0 -#define GL_VERSION_1_0 1 -GLAPI int GLAD_GL_VERSION_1_0; -typedef void (APIENTRYP PFNGLCULLFACEPROC)(GLenum mode); -GLAPI PFNGLCULLFACEPROC glad_glCullFace; -#define glCullFace glad_glCullFace -typedef void (APIENTRYP PFNGLFRONTFACEPROC)(GLenum mode); -GLAPI PFNGLFRONTFACEPROC glad_glFrontFace; -#define glFrontFace glad_glFrontFace -typedef void (APIENTRYP PFNGLHINTPROC)(GLenum target, GLenum mode); -GLAPI PFNGLHINTPROC glad_glHint; -#define glHint glad_glHint -typedef void (APIENTRYP PFNGLLINEWIDTHPROC)(GLfloat width); -GLAPI PFNGLLINEWIDTHPROC glad_glLineWidth; -#define glLineWidth glad_glLineWidth -typedef void (APIENTRYP PFNGLPOINTSIZEPROC)(GLfloat size); -GLAPI PFNGLPOINTSIZEPROC glad_glPointSize; -#define glPointSize glad_glPointSize -typedef void (APIENTRYP PFNGLPOLYGONMODEPROC)(GLenum face, GLenum mode); -GLAPI PFNGLPOLYGONMODEPROC glad_glPolygonMode; -#define glPolygonMode glad_glPolygonMode -typedef void (APIENTRYP PFNGLSCISSORPROC)(GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI PFNGLSCISSORPROC glad_glScissor; -#define glScissor glad_glScissor -typedef void (APIENTRYP PFNGLTEXPARAMETERFPROC)(GLenum target, GLenum pname, GLfloat param); -GLAPI PFNGLTEXPARAMETERFPROC glad_glTexParameterf; -#define glTexParameterf glad_glTexParameterf -typedef void (APIENTRYP PFNGLTEXPARAMETERFVPROC)(GLenum target, GLenum pname, const GLfloat *params); -GLAPI PFNGLTEXPARAMETERFVPROC glad_glTexParameterfv; -#define glTexParameterfv glad_glTexParameterfv -typedef void (APIENTRYP PFNGLTEXPARAMETERIPROC)(GLenum target, GLenum pname, GLint param); -GLAPI PFNGLTEXPARAMETERIPROC glad_glTexParameteri; -#define glTexParameteri glad_glTexParameteri -typedef void (APIENTRYP PFNGLTEXPARAMETERIVPROC)(GLenum target, GLenum pname, const GLint *params); -GLAPI PFNGLTEXPARAMETERIVPROC glad_glTexParameteriv; -#define glTexParameteriv glad_glTexParameteriv -typedef void (APIENTRYP PFNGLTEXIMAGE1DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLTEXIMAGE1DPROC glad_glTexImage1D; -#define glTexImage1D glad_glTexImage1D -typedef void (APIENTRYP PFNGLTEXIMAGE2DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLTEXIMAGE2DPROC glad_glTexImage2D; -#define glTexImage2D glad_glTexImage2D -typedef void (APIENTRYP PFNGLDRAWBUFFERPROC)(GLenum buf); -GLAPI PFNGLDRAWBUFFERPROC glad_glDrawBuffer; -#define glDrawBuffer glad_glDrawBuffer -typedef void (APIENTRYP PFNGLCLEARPROC)(GLbitfield mask); -GLAPI PFNGLCLEARPROC glad_glClear; -#define glClear glad_glClear -typedef void (APIENTRYP PFNGLCLEARCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -GLAPI PFNGLCLEARCOLORPROC glad_glClearColor; -#define glClearColor glad_glClearColor -typedef void (APIENTRYP PFNGLCLEARSTENCILPROC)(GLint s); -GLAPI PFNGLCLEARSTENCILPROC glad_glClearStencil; -#define glClearStencil glad_glClearStencil -typedef void (APIENTRYP PFNGLCLEARDEPTHPROC)(GLdouble depth); -GLAPI PFNGLCLEARDEPTHPROC glad_glClearDepth; -#define glClearDepth glad_glClearDepth -typedef void (APIENTRYP PFNGLSTENCILMASKPROC)(GLuint mask); -GLAPI PFNGLSTENCILMASKPROC glad_glStencilMask; -#define glStencilMask glad_glStencilMask -typedef void (APIENTRYP PFNGLCOLORMASKPROC)(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); -GLAPI PFNGLCOLORMASKPROC glad_glColorMask; -#define glColorMask glad_glColorMask -typedef void (APIENTRYP PFNGLDEPTHMASKPROC)(GLboolean flag); -GLAPI PFNGLDEPTHMASKPROC glad_glDepthMask; -#define glDepthMask glad_glDepthMask -typedef void (APIENTRYP PFNGLDISABLEPROC)(GLenum cap); -GLAPI PFNGLDISABLEPROC glad_glDisable; -#define glDisable glad_glDisable -typedef void (APIENTRYP PFNGLENABLEPROC)(GLenum cap); -GLAPI PFNGLENABLEPROC glad_glEnable; -#define glEnable glad_glEnable -typedef void (APIENTRYP PFNGLFINISHPROC)(void); -GLAPI PFNGLFINISHPROC glad_glFinish; -#define glFinish glad_glFinish -typedef void (APIENTRYP PFNGLFLUSHPROC)(void); -GLAPI PFNGLFLUSHPROC glad_glFlush; -#define glFlush glad_glFlush -typedef void (APIENTRYP PFNGLBLENDFUNCPROC)(GLenum sfactor, GLenum dfactor); -GLAPI PFNGLBLENDFUNCPROC glad_glBlendFunc; -#define glBlendFunc glad_glBlendFunc -typedef void (APIENTRYP PFNGLLOGICOPPROC)(GLenum opcode); -GLAPI PFNGLLOGICOPPROC glad_glLogicOp; -#define glLogicOp glad_glLogicOp -typedef void (APIENTRYP PFNGLSTENCILFUNCPROC)(GLenum func, GLint ref, GLuint mask); -GLAPI PFNGLSTENCILFUNCPROC glad_glStencilFunc; -#define glStencilFunc glad_glStencilFunc -typedef void (APIENTRYP PFNGLSTENCILOPPROC)(GLenum fail, GLenum zfail, GLenum zpass); -GLAPI PFNGLSTENCILOPPROC glad_glStencilOp; -#define glStencilOp glad_glStencilOp -typedef void (APIENTRYP PFNGLDEPTHFUNCPROC)(GLenum func); -GLAPI PFNGLDEPTHFUNCPROC glad_glDepthFunc; -#define glDepthFunc glad_glDepthFunc -typedef void (APIENTRYP PFNGLPIXELSTOREFPROC)(GLenum pname, GLfloat param); -GLAPI PFNGLPIXELSTOREFPROC glad_glPixelStoref; -#define glPixelStoref glad_glPixelStoref -typedef void (APIENTRYP PFNGLPIXELSTOREIPROC)(GLenum pname, GLint param); -GLAPI PFNGLPIXELSTOREIPROC glad_glPixelStorei; -#define glPixelStorei glad_glPixelStorei -typedef void (APIENTRYP PFNGLREADBUFFERPROC)(GLenum src); -GLAPI PFNGLREADBUFFERPROC glad_glReadBuffer; -#define glReadBuffer glad_glReadBuffer -typedef void (APIENTRYP PFNGLREADPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels); -GLAPI PFNGLREADPIXELSPROC glad_glReadPixels; -#define glReadPixels glad_glReadPixels -typedef void (APIENTRYP PFNGLGETBOOLEANVPROC)(GLenum pname, GLboolean *data); -GLAPI PFNGLGETBOOLEANVPROC glad_glGetBooleanv; -#define glGetBooleanv glad_glGetBooleanv -typedef void (APIENTRYP PFNGLGETDOUBLEVPROC)(GLenum pname, GLdouble *data); -GLAPI PFNGLGETDOUBLEVPROC glad_glGetDoublev; -#define glGetDoublev glad_glGetDoublev -typedef GLenum (APIENTRYP PFNGLGETERRORPROC)(void); -GLAPI PFNGLGETERRORPROC glad_glGetError; -#define glGetError glad_glGetError -typedef void (APIENTRYP PFNGLGETFLOATVPROC)(GLenum pname, GLfloat *data); -GLAPI PFNGLGETFLOATVPROC glad_glGetFloatv; -#define glGetFloatv glad_glGetFloatv -typedef void (APIENTRYP PFNGLGETINTEGERVPROC)(GLenum pname, GLint *data); -GLAPI PFNGLGETINTEGERVPROC glad_glGetIntegerv; -#define glGetIntegerv glad_glGetIntegerv -typedef const GLubyte * (APIENTRYP PFNGLGETSTRINGPROC)(GLenum name); -GLAPI PFNGLGETSTRINGPROC glad_glGetString; -#define glGetString glad_glGetString -typedef void (APIENTRYP PFNGLGETTEXIMAGEPROC)(GLenum target, GLint level, GLenum format, GLenum type, void *pixels); -GLAPI PFNGLGETTEXIMAGEPROC glad_glGetTexImage; -#define glGetTexImage glad_glGetTexImage -typedef void (APIENTRYP PFNGLGETTEXPARAMETERFVPROC)(GLenum target, GLenum pname, GLfloat *params); -GLAPI PFNGLGETTEXPARAMETERFVPROC glad_glGetTexParameterfv; -#define glGetTexParameterfv glad_glGetTexParameterfv -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETTEXPARAMETERIVPROC glad_glGetTexParameteriv; -#define glGetTexParameteriv glad_glGetTexParameteriv -typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERFVPROC)(GLenum target, GLint level, GLenum pname, GLfloat *params); -GLAPI PFNGLGETTEXLEVELPARAMETERFVPROC glad_glGetTexLevelParameterfv; -#define glGetTexLevelParameterfv glad_glGetTexLevelParameterfv -typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERIVPROC)(GLenum target, GLint level, GLenum pname, GLint *params); -GLAPI PFNGLGETTEXLEVELPARAMETERIVPROC glad_glGetTexLevelParameteriv; -#define glGetTexLevelParameteriv glad_glGetTexLevelParameteriv -typedef GLboolean (APIENTRYP PFNGLISENABLEDPROC)(GLenum cap); -GLAPI PFNGLISENABLEDPROC glad_glIsEnabled; -#define glIsEnabled glad_glIsEnabled -typedef void (APIENTRYP PFNGLDEPTHRANGEPROC)(GLdouble n, GLdouble f); -GLAPI PFNGLDEPTHRANGEPROC glad_glDepthRange; -#define glDepthRange glad_glDepthRange -typedef void (APIENTRYP PFNGLVIEWPORTPROC)(GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI PFNGLVIEWPORTPROC glad_glViewport; -#define glViewport glad_glViewport -typedef void (APIENTRYP PFNGLNEWLISTPROC)(GLuint list, GLenum mode); -GLAPI PFNGLNEWLISTPROC glad_glNewList; -#define glNewList glad_glNewList -typedef void (APIENTRYP PFNGLENDLISTPROC)(void); -GLAPI PFNGLENDLISTPROC glad_glEndList; -#define glEndList glad_glEndList -typedef void (APIENTRYP PFNGLCALLLISTPROC)(GLuint list); -GLAPI PFNGLCALLLISTPROC glad_glCallList; -#define glCallList glad_glCallList -typedef void (APIENTRYP PFNGLCALLLISTSPROC)(GLsizei n, GLenum type, const void *lists); -GLAPI PFNGLCALLLISTSPROC glad_glCallLists; -#define glCallLists glad_glCallLists -typedef void (APIENTRYP PFNGLDELETELISTSPROC)(GLuint list, GLsizei range); -GLAPI PFNGLDELETELISTSPROC glad_glDeleteLists; -#define glDeleteLists glad_glDeleteLists -typedef GLuint (APIENTRYP PFNGLGENLISTSPROC)(GLsizei range); -GLAPI PFNGLGENLISTSPROC glad_glGenLists; -#define glGenLists glad_glGenLists -typedef void (APIENTRYP PFNGLLISTBASEPROC)(GLuint base); -GLAPI PFNGLLISTBASEPROC glad_glListBase; -#define glListBase glad_glListBase -typedef void (APIENTRYP PFNGLBEGINPROC)(GLenum mode); -GLAPI PFNGLBEGINPROC glad_glBegin; -#define glBegin glad_glBegin -typedef void (APIENTRYP PFNGLBITMAPPROC)(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bitmap); -GLAPI PFNGLBITMAPPROC glad_glBitmap; -#define glBitmap glad_glBitmap -typedef void (APIENTRYP PFNGLCOLOR3BPROC)(GLbyte red, GLbyte green, GLbyte blue); -GLAPI PFNGLCOLOR3BPROC glad_glColor3b; -#define glColor3b glad_glColor3b -typedef void (APIENTRYP PFNGLCOLOR3BVPROC)(const GLbyte *v); -GLAPI PFNGLCOLOR3BVPROC glad_glColor3bv; -#define glColor3bv glad_glColor3bv -typedef void (APIENTRYP PFNGLCOLOR3DPROC)(GLdouble red, GLdouble green, GLdouble blue); -GLAPI PFNGLCOLOR3DPROC glad_glColor3d; -#define glColor3d glad_glColor3d -typedef void (APIENTRYP PFNGLCOLOR3DVPROC)(const GLdouble *v); -GLAPI PFNGLCOLOR3DVPROC glad_glColor3dv; -#define glColor3dv glad_glColor3dv -typedef void (APIENTRYP PFNGLCOLOR3FPROC)(GLfloat red, GLfloat green, GLfloat blue); -GLAPI PFNGLCOLOR3FPROC glad_glColor3f; -#define glColor3f glad_glColor3f -typedef void (APIENTRYP PFNGLCOLOR3FVPROC)(const GLfloat *v); -GLAPI PFNGLCOLOR3FVPROC glad_glColor3fv; -#define glColor3fv glad_glColor3fv -typedef void (APIENTRYP PFNGLCOLOR3IPROC)(GLint red, GLint green, GLint blue); -GLAPI PFNGLCOLOR3IPROC glad_glColor3i; -#define glColor3i glad_glColor3i -typedef void (APIENTRYP PFNGLCOLOR3IVPROC)(const GLint *v); -GLAPI PFNGLCOLOR3IVPROC glad_glColor3iv; -#define glColor3iv glad_glColor3iv -typedef void (APIENTRYP PFNGLCOLOR3SPROC)(GLshort red, GLshort green, GLshort blue); -GLAPI PFNGLCOLOR3SPROC glad_glColor3s; -#define glColor3s glad_glColor3s -typedef void (APIENTRYP PFNGLCOLOR3SVPROC)(const GLshort *v); -GLAPI PFNGLCOLOR3SVPROC glad_glColor3sv; -#define glColor3sv glad_glColor3sv -typedef void (APIENTRYP PFNGLCOLOR3UBPROC)(GLubyte red, GLubyte green, GLubyte blue); -GLAPI PFNGLCOLOR3UBPROC glad_glColor3ub; -#define glColor3ub glad_glColor3ub -typedef void (APIENTRYP PFNGLCOLOR3UBVPROC)(const GLubyte *v); -GLAPI PFNGLCOLOR3UBVPROC glad_glColor3ubv; -#define glColor3ubv glad_glColor3ubv -typedef void (APIENTRYP PFNGLCOLOR3UIPROC)(GLuint red, GLuint green, GLuint blue); -GLAPI PFNGLCOLOR3UIPROC glad_glColor3ui; -#define glColor3ui glad_glColor3ui -typedef void (APIENTRYP PFNGLCOLOR3UIVPROC)(const GLuint *v); -GLAPI PFNGLCOLOR3UIVPROC glad_glColor3uiv; -#define glColor3uiv glad_glColor3uiv -typedef void (APIENTRYP PFNGLCOLOR3USPROC)(GLushort red, GLushort green, GLushort blue); -GLAPI PFNGLCOLOR3USPROC glad_glColor3us; -#define glColor3us glad_glColor3us -typedef void (APIENTRYP PFNGLCOLOR3USVPROC)(const GLushort *v); -GLAPI PFNGLCOLOR3USVPROC glad_glColor3usv; -#define glColor3usv glad_glColor3usv -typedef void (APIENTRYP PFNGLCOLOR4BPROC)(GLbyte red, GLbyte green, GLbyte blue, GLbyte alpha); -GLAPI PFNGLCOLOR4BPROC glad_glColor4b; -#define glColor4b glad_glColor4b -typedef void (APIENTRYP PFNGLCOLOR4BVPROC)(const GLbyte *v); -GLAPI PFNGLCOLOR4BVPROC glad_glColor4bv; -#define glColor4bv glad_glColor4bv -typedef void (APIENTRYP PFNGLCOLOR4DPROC)(GLdouble red, GLdouble green, GLdouble blue, GLdouble alpha); -GLAPI PFNGLCOLOR4DPROC glad_glColor4d; -#define glColor4d glad_glColor4d -typedef void (APIENTRYP PFNGLCOLOR4DVPROC)(const GLdouble *v); -GLAPI PFNGLCOLOR4DVPROC glad_glColor4dv; -#define glColor4dv glad_glColor4dv -typedef void (APIENTRYP PFNGLCOLOR4FPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -GLAPI PFNGLCOLOR4FPROC glad_glColor4f; -#define glColor4f glad_glColor4f -typedef void (APIENTRYP PFNGLCOLOR4FVPROC)(const GLfloat *v); -GLAPI PFNGLCOLOR4FVPROC glad_glColor4fv; -#define glColor4fv glad_glColor4fv -typedef void (APIENTRYP PFNGLCOLOR4IPROC)(GLint red, GLint green, GLint blue, GLint alpha); -GLAPI PFNGLCOLOR4IPROC glad_glColor4i; -#define glColor4i glad_glColor4i -typedef void (APIENTRYP PFNGLCOLOR4IVPROC)(const GLint *v); -GLAPI PFNGLCOLOR4IVPROC glad_glColor4iv; -#define glColor4iv glad_glColor4iv -typedef void (APIENTRYP PFNGLCOLOR4SPROC)(GLshort red, GLshort green, GLshort blue, GLshort alpha); -GLAPI PFNGLCOLOR4SPROC glad_glColor4s; -#define glColor4s glad_glColor4s -typedef void (APIENTRYP PFNGLCOLOR4SVPROC)(const GLshort *v); -GLAPI PFNGLCOLOR4SVPROC glad_glColor4sv; -#define glColor4sv glad_glColor4sv -typedef void (APIENTRYP PFNGLCOLOR4UBPROC)(GLubyte red, GLubyte green, GLubyte blue, GLubyte alpha); -GLAPI PFNGLCOLOR4UBPROC glad_glColor4ub; -#define glColor4ub glad_glColor4ub -typedef void (APIENTRYP PFNGLCOLOR4UBVPROC)(const GLubyte *v); -GLAPI PFNGLCOLOR4UBVPROC glad_glColor4ubv; -#define glColor4ubv glad_glColor4ubv -typedef void (APIENTRYP PFNGLCOLOR4UIPROC)(GLuint red, GLuint green, GLuint blue, GLuint alpha); -GLAPI PFNGLCOLOR4UIPROC glad_glColor4ui; -#define glColor4ui glad_glColor4ui -typedef void (APIENTRYP PFNGLCOLOR4UIVPROC)(const GLuint *v); -GLAPI PFNGLCOLOR4UIVPROC glad_glColor4uiv; -#define glColor4uiv glad_glColor4uiv -typedef void (APIENTRYP PFNGLCOLOR4USPROC)(GLushort red, GLushort green, GLushort blue, GLushort alpha); -GLAPI PFNGLCOLOR4USPROC glad_glColor4us; -#define glColor4us glad_glColor4us -typedef void (APIENTRYP PFNGLCOLOR4USVPROC)(const GLushort *v); -GLAPI PFNGLCOLOR4USVPROC glad_glColor4usv; -#define glColor4usv glad_glColor4usv -typedef void (APIENTRYP PFNGLEDGEFLAGPROC)(GLboolean flag); -GLAPI PFNGLEDGEFLAGPROC glad_glEdgeFlag; -#define glEdgeFlag glad_glEdgeFlag -typedef void (APIENTRYP PFNGLEDGEFLAGVPROC)(const GLboolean *flag); -GLAPI PFNGLEDGEFLAGVPROC glad_glEdgeFlagv; -#define glEdgeFlagv glad_glEdgeFlagv -typedef void (APIENTRYP PFNGLENDPROC)(void); -GLAPI PFNGLENDPROC glad_glEnd; -#define glEnd glad_glEnd -typedef void (APIENTRYP PFNGLINDEXDPROC)(GLdouble c); -GLAPI PFNGLINDEXDPROC glad_glIndexd; -#define glIndexd glad_glIndexd -typedef void (APIENTRYP PFNGLINDEXDVPROC)(const GLdouble *c); -GLAPI PFNGLINDEXDVPROC glad_glIndexdv; -#define glIndexdv glad_glIndexdv -typedef void (APIENTRYP PFNGLINDEXFPROC)(GLfloat c); -GLAPI PFNGLINDEXFPROC glad_glIndexf; -#define glIndexf glad_glIndexf -typedef void (APIENTRYP PFNGLINDEXFVPROC)(const GLfloat *c); -GLAPI PFNGLINDEXFVPROC glad_glIndexfv; -#define glIndexfv glad_glIndexfv -typedef void (APIENTRYP PFNGLINDEXIPROC)(GLint c); -GLAPI PFNGLINDEXIPROC glad_glIndexi; -#define glIndexi glad_glIndexi -typedef void (APIENTRYP PFNGLINDEXIVPROC)(const GLint *c); -GLAPI PFNGLINDEXIVPROC glad_glIndexiv; -#define glIndexiv glad_glIndexiv -typedef void (APIENTRYP PFNGLINDEXSPROC)(GLshort c); -GLAPI PFNGLINDEXSPROC glad_glIndexs; -#define glIndexs glad_glIndexs -typedef void (APIENTRYP PFNGLINDEXSVPROC)(const GLshort *c); -GLAPI PFNGLINDEXSVPROC glad_glIndexsv; -#define glIndexsv glad_glIndexsv -typedef void (APIENTRYP PFNGLNORMAL3BPROC)(GLbyte nx, GLbyte ny, GLbyte nz); -GLAPI PFNGLNORMAL3BPROC glad_glNormal3b; -#define glNormal3b glad_glNormal3b -typedef void (APIENTRYP PFNGLNORMAL3BVPROC)(const GLbyte *v); -GLAPI PFNGLNORMAL3BVPROC glad_glNormal3bv; -#define glNormal3bv glad_glNormal3bv -typedef void (APIENTRYP PFNGLNORMAL3DPROC)(GLdouble nx, GLdouble ny, GLdouble nz); -GLAPI PFNGLNORMAL3DPROC glad_glNormal3d; -#define glNormal3d glad_glNormal3d -typedef void (APIENTRYP PFNGLNORMAL3DVPROC)(const GLdouble *v); -GLAPI PFNGLNORMAL3DVPROC glad_glNormal3dv; -#define glNormal3dv glad_glNormal3dv -typedef void (APIENTRYP PFNGLNORMAL3FPROC)(GLfloat nx, GLfloat ny, GLfloat nz); -GLAPI PFNGLNORMAL3FPROC glad_glNormal3f; -#define glNormal3f glad_glNormal3f -typedef void (APIENTRYP PFNGLNORMAL3FVPROC)(const GLfloat *v); -GLAPI PFNGLNORMAL3FVPROC glad_glNormal3fv; -#define glNormal3fv glad_glNormal3fv -typedef void (APIENTRYP PFNGLNORMAL3IPROC)(GLint nx, GLint ny, GLint nz); -GLAPI PFNGLNORMAL3IPROC glad_glNormal3i; -#define glNormal3i glad_glNormal3i -typedef void (APIENTRYP PFNGLNORMAL3IVPROC)(const GLint *v); -GLAPI PFNGLNORMAL3IVPROC glad_glNormal3iv; -#define glNormal3iv glad_glNormal3iv -typedef void (APIENTRYP PFNGLNORMAL3SPROC)(GLshort nx, GLshort ny, GLshort nz); -GLAPI PFNGLNORMAL3SPROC glad_glNormal3s; -#define glNormal3s glad_glNormal3s -typedef void (APIENTRYP PFNGLNORMAL3SVPROC)(const GLshort *v); -GLAPI PFNGLNORMAL3SVPROC glad_glNormal3sv; -#define glNormal3sv glad_glNormal3sv -typedef void (APIENTRYP PFNGLRASTERPOS2DPROC)(GLdouble x, GLdouble y); -GLAPI PFNGLRASTERPOS2DPROC glad_glRasterPos2d; -#define glRasterPos2d glad_glRasterPos2d -typedef void (APIENTRYP PFNGLRASTERPOS2DVPROC)(const GLdouble *v); -GLAPI PFNGLRASTERPOS2DVPROC glad_glRasterPos2dv; -#define glRasterPos2dv glad_glRasterPos2dv -typedef void (APIENTRYP PFNGLRASTERPOS2FPROC)(GLfloat x, GLfloat y); -GLAPI PFNGLRASTERPOS2FPROC glad_glRasterPos2f; -#define glRasterPos2f glad_glRasterPos2f -typedef void (APIENTRYP PFNGLRASTERPOS2FVPROC)(const GLfloat *v); -GLAPI PFNGLRASTERPOS2FVPROC glad_glRasterPos2fv; -#define glRasterPos2fv glad_glRasterPos2fv -typedef void (APIENTRYP PFNGLRASTERPOS2IPROC)(GLint x, GLint y); -GLAPI PFNGLRASTERPOS2IPROC glad_glRasterPos2i; -#define glRasterPos2i glad_glRasterPos2i -typedef void (APIENTRYP PFNGLRASTERPOS2IVPROC)(const GLint *v); -GLAPI PFNGLRASTERPOS2IVPROC glad_glRasterPos2iv; -#define glRasterPos2iv glad_glRasterPos2iv -typedef void (APIENTRYP PFNGLRASTERPOS2SPROC)(GLshort x, GLshort y); -GLAPI PFNGLRASTERPOS2SPROC glad_glRasterPos2s; -#define glRasterPos2s glad_glRasterPos2s -typedef void (APIENTRYP PFNGLRASTERPOS2SVPROC)(const GLshort *v); -GLAPI PFNGLRASTERPOS2SVPROC glad_glRasterPos2sv; -#define glRasterPos2sv glad_glRasterPos2sv -typedef void (APIENTRYP PFNGLRASTERPOS3DPROC)(GLdouble x, GLdouble y, GLdouble z); -GLAPI PFNGLRASTERPOS3DPROC glad_glRasterPos3d; -#define glRasterPos3d glad_glRasterPos3d -typedef void (APIENTRYP PFNGLRASTERPOS3DVPROC)(const GLdouble *v); -GLAPI PFNGLRASTERPOS3DVPROC glad_glRasterPos3dv; -#define glRasterPos3dv glad_glRasterPos3dv -typedef void (APIENTRYP PFNGLRASTERPOS3FPROC)(GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLRASTERPOS3FPROC glad_glRasterPos3f; -#define glRasterPos3f glad_glRasterPos3f -typedef void (APIENTRYP PFNGLRASTERPOS3FVPROC)(const GLfloat *v); -GLAPI PFNGLRASTERPOS3FVPROC glad_glRasterPos3fv; -#define glRasterPos3fv glad_glRasterPos3fv -typedef void (APIENTRYP PFNGLRASTERPOS3IPROC)(GLint x, GLint y, GLint z); -GLAPI PFNGLRASTERPOS3IPROC glad_glRasterPos3i; -#define glRasterPos3i glad_glRasterPos3i -typedef void (APIENTRYP PFNGLRASTERPOS3IVPROC)(const GLint *v); -GLAPI PFNGLRASTERPOS3IVPROC glad_glRasterPos3iv; -#define glRasterPos3iv glad_glRasterPos3iv -typedef void (APIENTRYP PFNGLRASTERPOS3SPROC)(GLshort x, GLshort y, GLshort z); -GLAPI PFNGLRASTERPOS3SPROC glad_glRasterPos3s; -#define glRasterPos3s glad_glRasterPos3s -typedef void (APIENTRYP PFNGLRASTERPOS3SVPROC)(const GLshort *v); -GLAPI PFNGLRASTERPOS3SVPROC glad_glRasterPos3sv; -#define glRasterPos3sv glad_glRasterPos3sv -typedef void (APIENTRYP PFNGLRASTERPOS4DPROC)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI PFNGLRASTERPOS4DPROC glad_glRasterPos4d; -#define glRasterPos4d glad_glRasterPos4d -typedef void (APIENTRYP PFNGLRASTERPOS4DVPROC)(const GLdouble *v); -GLAPI PFNGLRASTERPOS4DVPROC glad_glRasterPos4dv; -#define glRasterPos4dv glad_glRasterPos4dv -typedef void (APIENTRYP PFNGLRASTERPOS4FPROC)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI PFNGLRASTERPOS4FPROC glad_glRasterPos4f; -#define glRasterPos4f glad_glRasterPos4f -typedef void (APIENTRYP PFNGLRASTERPOS4FVPROC)(const GLfloat *v); -GLAPI PFNGLRASTERPOS4FVPROC glad_glRasterPos4fv; -#define glRasterPos4fv glad_glRasterPos4fv -typedef void (APIENTRYP PFNGLRASTERPOS4IPROC)(GLint x, GLint y, GLint z, GLint w); -GLAPI PFNGLRASTERPOS4IPROC glad_glRasterPos4i; -#define glRasterPos4i glad_glRasterPos4i -typedef void (APIENTRYP PFNGLRASTERPOS4IVPROC)(const GLint *v); -GLAPI PFNGLRASTERPOS4IVPROC glad_glRasterPos4iv; -#define glRasterPos4iv glad_glRasterPos4iv -typedef void (APIENTRYP PFNGLRASTERPOS4SPROC)(GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI PFNGLRASTERPOS4SPROC glad_glRasterPos4s; -#define glRasterPos4s glad_glRasterPos4s -typedef void (APIENTRYP PFNGLRASTERPOS4SVPROC)(const GLshort *v); -GLAPI PFNGLRASTERPOS4SVPROC glad_glRasterPos4sv; -#define glRasterPos4sv glad_glRasterPos4sv -typedef void (APIENTRYP PFNGLRECTDPROC)(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2); -GLAPI PFNGLRECTDPROC glad_glRectd; -#define glRectd glad_glRectd -typedef void (APIENTRYP PFNGLRECTDVPROC)(const GLdouble *v1, const GLdouble *v2); -GLAPI PFNGLRECTDVPROC glad_glRectdv; -#define glRectdv glad_glRectdv -typedef void (APIENTRYP PFNGLRECTFPROC)(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2); -GLAPI PFNGLRECTFPROC glad_glRectf; -#define glRectf glad_glRectf -typedef void (APIENTRYP PFNGLRECTFVPROC)(const GLfloat *v1, const GLfloat *v2); -GLAPI PFNGLRECTFVPROC glad_glRectfv; -#define glRectfv glad_glRectfv -typedef void (APIENTRYP PFNGLRECTIPROC)(GLint x1, GLint y1, GLint x2, GLint y2); -GLAPI PFNGLRECTIPROC glad_glRecti; -#define glRecti glad_glRecti -typedef void (APIENTRYP PFNGLRECTIVPROC)(const GLint *v1, const GLint *v2); -GLAPI PFNGLRECTIVPROC glad_glRectiv; -#define glRectiv glad_glRectiv -typedef void (APIENTRYP PFNGLRECTSPROC)(GLshort x1, GLshort y1, GLshort x2, GLshort y2); -GLAPI PFNGLRECTSPROC glad_glRects; -#define glRects glad_glRects -typedef void (APIENTRYP PFNGLRECTSVPROC)(const GLshort *v1, const GLshort *v2); -GLAPI PFNGLRECTSVPROC glad_glRectsv; -#define glRectsv glad_glRectsv -typedef void (APIENTRYP PFNGLTEXCOORD1DPROC)(GLdouble s); -GLAPI PFNGLTEXCOORD1DPROC glad_glTexCoord1d; -#define glTexCoord1d glad_glTexCoord1d -typedef void (APIENTRYP PFNGLTEXCOORD1DVPROC)(const GLdouble *v); -GLAPI PFNGLTEXCOORD1DVPROC glad_glTexCoord1dv; -#define glTexCoord1dv glad_glTexCoord1dv -typedef void (APIENTRYP PFNGLTEXCOORD1FPROC)(GLfloat s); -GLAPI PFNGLTEXCOORD1FPROC glad_glTexCoord1f; -#define glTexCoord1f glad_glTexCoord1f -typedef void (APIENTRYP PFNGLTEXCOORD1FVPROC)(const GLfloat *v); -GLAPI PFNGLTEXCOORD1FVPROC glad_glTexCoord1fv; -#define glTexCoord1fv glad_glTexCoord1fv -typedef void (APIENTRYP PFNGLTEXCOORD1IPROC)(GLint s); -GLAPI PFNGLTEXCOORD1IPROC glad_glTexCoord1i; -#define glTexCoord1i glad_glTexCoord1i -typedef void (APIENTRYP PFNGLTEXCOORD1IVPROC)(const GLint *v); -GLAPI PFNGLTEXCOORD1IVPROC glad_glTexCoord1iv; -#define glTexCoord1iv glad_glTexCoord1iv -typedef void (APIENTRYP PFNGLTEXCOORD1SPROC)(GLshort s); -GLAPI PFNGLTEXCOORD1SPROC glad_glTexCoord1s; -#define glTexCoord1s glad_glTexCoord1s -typedef void (APIENTRYP PFNGLTEXCOORD1SVPROC)(const GLshort *v); -GLAPI PFNGLTEXCOORD1SVPROC glad_glTexCoord1sv; -#define glTexCoord1sv glad_glTexCoord1sv -typedef void (APIENTRYP PFNGLTEXCOORD2DPROC)(GLdouble s, GLdouble t); -GLAPI PFNGLTEXCOORD2DPROC glad_glTexCoord2d; -#define glTexCoord2d glad_glTexCoord2d -typedef void (APIENTRYP PFNGLTEXCOORD2DVPROC)(const GLdouble *v); -GLAPI PFNGLTEXCOORD2DVPROC glad_glTexCoord2dv; -#define glTexCoord2dv glad_glTexCoord2dv -typedef void (APIENTRYP PFNGLTEXCOORD2FPROC)(GLfloat s, GLfloat t); -GLAPI PFNGLTEXCOORD2FPROC glad_glTexCoord2f; -#define glTexCoord2f glad_glTexCoord2f -typedef void (APIENTRYP PFNGLTEXCOORD2FVPROC)(const GLfloat *v); -GLAPI PFNGLTEXCOORD2FVPROC glad_glTexCoord2fv; -#define glTexCoord2fv glad_glTexCoord2fv -typedef void (APIENTRYP PFNGLTEXCOORD2IPROC)(GLint s, GLint t); -GLAPI PFNGLTEXCOORD2IPROC glad_glTexCoord2i; -#define glTexCoord2i glad_glTexCoord2i -typedef void (APIENTRYP PFNGLTEXCOORD2IVPROC)(const GLint *v); -GLAPI PFNGLTEXCOORD2IVPROC glad_glTexCoord2iv; -#define glTexCoord2iv glad_glTexCoord2iv -typedef void (APIENTRYP PFNGLTEXCOORD2SPROC)(GLshort s, GLshort t); -GLAPI PFNGLTEXCOORD2SPROC glad_glTexCoord2s; -#define glTexCoord2s glad_glTexCoord2s -typedef void (APIENTRYP PFNGLTEXCOORD2SVPROC)(const GLshort *v); -GLAPI PFNGLTEXCOORD2SVPROC glad_glTexCoord2sv; -#define glTexCoord2sv glad_glTexCoord2sv -typedef void (APIENTRYP PFNGLTEXCOORD3DPROC)(GLdouble s, GLdouble t, GLdouble r); -GLAPI PFNGLTEXCOORD3DPROC glad_glTexCoord3d; -#define glTexCoord3d glad_glTexCoord3d -typedef void (APIENTRYP PFNGLTEXCOORD3DVPROC)(const GLdouble *v); -GLAPI PFNGLTEXCOORD3DVPROC glad_glTexCoord3dv; -#define glTexCoord3dv glad_glTexCoord3dv -typedef void (APIENTRYP PFNGLTEXCOORD3FPROC)(GLfloat s, GLfloat t, GLfloat r); -GLAPI PFNGLTEXCOORD3FPROC glad_glTexCoord3f; -#define glTexCoord3f glad_glTexCoord3f -typedef void (APIENTRYP PFNGLTEXCOORD3FVPROC)(const GLfloat *v); -GLAPI PFNGLTEXCOORD3FVPROC glad_glTexCoord3fv; -#define glTexCoord3fv glad_glTexCoord3fv -typedef void (APIENTRYP PFNGLTEXCOORD3IPROC)(GLint s, GLint t, GLint r); -GLAPI PFNGLTEXCOORD3IPROC glad_glTexCoord3i; -#define glTexCoord3i glad_glTexCoord3i -typedef void (APIENTRYP PFNGLTEXCOORD3IVPROC)(const GLint *v); -GLAPI PFNGLTEXCOORD3IVPROC glad_glTexCoord3iv; -#define glTexCoord3iv glad_glTexCoord3iv -typedef void (APIENTRYP PFNGLTEXCOORD3SPROC)(GLshort s, GLshort t, GLshort r); -GLAPI PFNGLTEXCOORD3SPROC glad_glTexCoord3s; -#define glTexCoord3s glad_glTexCoord3s -typedef void (APIENTRYP PFNGLTEXCOORD3SVPROC)(const GLshort *v); -GLAPI PFNGLTEXCOORD3SVPROC glad_glTexCoord3sv; -#define glTexCoord3sv glad_glTexCoord3sv -typedef void (APIENTRYP PFNGLTEXCOORD4DPROC)(GLdouble s, GLdouble t, GLdouble r, GLdouble q); -GLAPI PFNGLTEXCOORD4DPROC glad_glTexCoord4d; -#define glTexCoord4d glad_glTexCoord4d -typedef void (APIENTRYP PFNGLTEXCOORD4DVPROC)(const GLdouble *v); -GLAPI PFNGLTEXCOORD4DVPROC glad_glTexCoord4dv; -#define glTexCoord4dv glad_glTexCoord4dv -typedef void (APIENTRYP PFNGLTEXCOORD4FPROC)(GLfloat s, GLfloat t, GLfloat r, GLfloat q); -GLAPI PFNGLTEXCOORD4FPROC glad_glTexCoord4f; -#define glTexCoord4f glad_glTexCoord4f -typedef void (APIENTRYP PFNGLTEXCOORD4FVPROC)(const GLfloat *v); -GLAPI PFNGLTEXCOORD4FVPROC glad_glTexCoord4fv; -#define glTexCoord4fv glad_glTexCoord4fv -typedef void (APIENTRYP PFNGLTEXCOORD4IPROC)(GLint s, GLint t, GLint r, GLint q); -GLAPI PFNGLTEXCOORD4IPROC glad_glTexCoord4i; -#define glTexCoord4i glad_glTexCoord4i -typedef void (APIENTRYP PFNGLTEXCOORD4IVPROC)(const GLint *v); -GLAPI PFNGLTEXCOORD4IVPROC glad_glTexCoord4iv; -#define glTexCoord4iv glad_glTexCoord4iv -typedef void (APIENTRYP PFNGLTEXCOORD4SPROC)(GLshort s, GLshort t, GLshort r, GLshort q); -GLAPI PFNGLTEXCOORD4SPROC glad_glTexCoord4s; -#define glTexCoord4s glad_glTexCoord4s -typedef void (APIENTRYP PFNGLTEXCOORD4SVPROC)(const GLshort *v); -GLAPI PFNGLTEXCOORD4SVPROC glad_glTexCoord4sv; -#define glTexCoord4sv glad_glTexCoord4sv -typedef void (APIENTRYP PFNGLVERTEX2DPROC)(GLdouble x, GLdouble y); -GLAPI PFNGLVERTEX2DPROC glad_glVertex2d; -#define glVertex2d glad_glVertex2d -typedef void (APIENTRYP PFNGLVERTEX2DVPROC)(const GLdouble *v); -GLAPI PFNGLVERTEX2DVPROC glad_glVertex2dv; -#define glVertex2dv glad_glVertex2dv -typedef void (APIENTRYP PFNGLVERTEX2FPROC)(GLfloat x, GLfloat y); -GLAPI PFNGLVERTEX2FPROC glad_glVertex2f; -#define glVertex2f glad_glVertex2f -typedef void (APIENTRYP PFNGLVERTEX2FVPROC)(const GLfloat *v); -GLAPI PFNGLVERTEX2FVPROC glad_glVertex2fv; -#define glVertex2fv glad_glVertex2fv -typedef void (APIENTRYP PFNGLVERTEX2IPROC)(GLint x, GLint y); -GLAPI PFNGLVERTEX2IPROC glad_glVertex2i; -#define glVertex2i glad_glVertex2i -typedef void (APIENTRYP PFNGLVERTEX2IVPROC)(const GLint *v); -GLAPI PFNGLVERTEX2IVPROC glad_glVertex2iv; -#define glVertex2iv glad_glVertex2iv -typedef void (APIENTRYP PFNGLVERTEX2SPROC)(GLshort x, GLshort y); -GLAPI PFNGLVERTEX2SPROC glad_glVertex2s; -#define glVertex2s glad_glVertex2s -typedef void (APIENTRYP PFNGLVERTEX2SVPROC)(const GLshort *v); -GLAPI PFNGLVERTEX2SVPROC glad_glVertex2sv; -#define glVertex2sv glad_glVertex2sv -typedef void (APIENTRYP PFNGLVERTEX3DPROC)(GLdouble x, GLdouble y, GLdouble z); -GLAPI PFNGLVERTEX3DPROC glad_glVertex3d; -#define glVertex3d glad_glVertex3d -typedef void (APIENTRYP PFNGLVERTEX3DVPROC)(const GLdouble *v); -GLAPI PFNGLVERTEX3DVPROC glad_glVertex3dv; -#define glVertex3dv glad_glVertex3dv -typedef void (APIENTRYP PFNGLVERTEX3FPROC)(GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLVERTEX3FPROC glad_glVertex3f; -#define glVertex3f glad_glVertex3f -typedef void (APIENTRYP PFNGLVERTEX3FVPROC)(const GLfloat *v); -GLAPI PFNGLVERTEX3FVPROC glad_glVertex3fv; -#define glVertex3fv glad_glVertex3fv -typedef void (APIENTRYP PFNGLVERTEX3IPROC)(GLint x, GLint y, GLint z); -GLAPI PFNGLVERTEX3IPROC glad_glVertex3i; -#define glVertex3i glad_glVertex3i -typedef void (APIENTRYP PFNGLVERTEX3IVPROC)(const GLint *v); -GLAPI PFNGLVERTEX3IVPROC glad_glVertex3iv; -#define glVertex3iv glad_glVertex3iv -typedef void (APIENTRYP PFNGLVERTEX3SPROC)(GLshort x, GLshort y, GLshort z); -GLAPI PFNGLVERTEX3SPROC glad_glVertex3s; -#define glVertex3s glad_glVertex3s -typedef void (APIENTRYP PFNGLVERTEX3SVPROC)(const GLshort *v); -GLAPI PFNGLVERTEX3SVPROC glad_glVertex3sv; -#define glVertex3sv glad_glVertex3sv -typedef void (APIENTRYP PFNGLVERTEX4DPROC)(GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI PFNGLVERTEX4DPROC glad_glVertex4d; -#define glVertex4d glad_glVertex4d -typedef void (APIENTRYP PFNGLVERTEX4DVPROC)(const GLdouble *v); -GLAPI PFNGLVERTEX4DVPROC glad_glVertex4dv; -#define glVertex4dv glad_glVertex4dv -typedef void (APIENTRYP PFNGLVERTEX4FPROC)(GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI PFNGLVERTEX4FPROC glad_glVertex4f; -#define glVertex4f glad_glVertex4f -typedef void (APIENTRYP PFNGLVERTEX4FVPROC)(const GLfloat *v); -GLAPI PFNGLVERTEX4FVPROC glad_glVertex4fv; -#define glVertex4fv glad_glVertex4fv -typedef void (APIENTRYP PFNGLVERTEX4IPROC)(GLint x, GLint y, GLint z, GLint w); -GLAPI PFNGLVERTEX4IPROC glad_glVertex4i; -#define glVertex4i glad_glVertex4i -typedef void (APIENTRYP PFNGLVERTEX4IVPROC)(const GLint *v); -GLAPI PFNGLVERTEX4IVPROC glad_glVertex4iv; -#define glVertex4iv glad_glVertex4iv -typedef void (APIENTRYP PFNGLVERTEX4SPROC)(GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI PFNGLVERTEX4SPROC glad_glVertex4s; -#define glVertex4s glad_glVertex4s -typedef void (APIENTRYP PFNGLVERTEX4SVPROC)(const GLshort *v); -GLAPI PFNGLVERTEX4SVPROC glad_glVertex4sv; -#define glVertex4sv glad_glVertex4sv -typedef void (APIENTRYP PFNGLCLIPPLANEPROC)(GLenum plane, const GLdouble *equation); -GLAPI PFNGLCLIPPLANEPROC glad_glClipPlane; -#define glClipPlane glad_glClipPlane -typedef void (APIENTRYP PFNGLCOLORMATERIALPROC)(GLenum face, GLenum mode); -GLAPI PFNGLCOLORMATERIALPROC glad_glColorMaterial; -#define glColorMaterial glad_glColorMaterial -typedef void (APIENTRYP PFNGLFOGFPROC)(GLenum pname, GLfloat param); -GLAPI PFNGLFOGFPROC glad_glFogf; -#define glFogf glad_glFogf -typedef void (APIENTRYP PFNGLFOGFVPROC)(GLenum pname, const GLfloat *params); -GLAPI PFNGLFOGFVPROC glad_glFogfv; -#define glFogfv glad_glFogfv -typedef void (APIENTRYP PFNGLFOGIPROC)(GLenum pname, GLint param); -GLAPI PFNGLFOGIPROC glad_glFogi; -#define glFogi glad_glFogi -typedef void (APIENTRYP PFNGLFOGIVPROC)(GLenum pname, const GLint *params); -GLAPI PFNGLFOGIVPROC glad_glFogiv; -#define glFogiv glad_glFogiv -typedef void (APIENTRYP PFNGLLIGHTFPROC)(GLenum light, GLenum pname, GLfloat param); -GLAPI PFNGLLIGHTFPROC glad_glLightf; -#define glLightf glad_glLightf -typedef void (APIENTRYP PFNGLLIGHTFVPROC)(GLenum light, GLenum pname, const GLfloat *params); -GLAPI PFNGLLIGHTFVPROC glad_glLightfv; -#define glLightfv glad_glLightfv -typedef void (APIENTRYP PFNGLLIGHTIPROC)(GLenum light, GLenum pname, GLint param); -GLAPI PFNGLLIGHTIPROC glad_glLighti; -#define glLighti glad_glLighti -typedef void (APIENTRYP PFNGLLIGHTIVPROC)(GLenum light, GLenum pname, const GLint *params); -GLAPI PFNGLLIGHTIVPROC glad_glLightiv; -#define glLightiv glad_glLightiv -typedef void (APIENTRYP PFNGLLIGHTMODELFPROC)(GLenum pname, GLfloat param); -GLAPI PFNGLLIGHTMODELFPROC glad_glLightModelf; -#define glLightModelf glad_glLightModelf -typedef void (APIENTRYP PFNGLLIGHTMODELFVPROC)(GLenum pname, const GLfloat *params); -GLAPI PFNGLLIGHTMODELFVPROC glad_glLightModelfv; -#define glLightModelfv glad_glLightModelfv -typedef void (APIENTRYP PFNGLLIGHTMODELIPROC)(GLenum pname, GLint param); -GLAPI PFNGLLIGHTMODELIPROC glad_glLightModeli; -#define glLightModeli glad_glLightModeli -typedef void (APIENTRYP PFNGLLIGHTMODELIVPROC)(GLenum pname, const GLint *params); -GLAPI PFNGLLIGHTMODELIVPROC glad_glLightModeliv; -#define glLightModeliv glad_glLightModeliv -typedef void (APIENTRYP PFNGLLINESTIPPLEPROC)(GLint factor, GLushort pattern); -GLAPI PFNGLLINESTIPPLEPROC glad_glLineStipple; -#define glLineStipple glad_glLineStipple -typedef void (APIENTRYP PFNGLMATERIALFPROC)(GLenum face, GLenum pname, GLfloat param); -GLAPI PFNGLMATERIALFPROC glad_glMaterialf; -#define glMaterialf glad_glMaterialf -typedef void (APIENTRYP PFNGLMATERIALFVPROC)(GLenum face, GLenum pname, const GLfloat *params); -GLAPI PFNGLMATERIALFVPROC glad_glMaterialfv; -#define glMaterialfv glad_glMaterialfv -typedef void (APIENTRYP PFNGLMATERIALIPROC)(GLenum face, GLenum pname, GLint param); -GLAPI PFNGLMATERIALIPROC glad_glMateriali; -#define glMateriali glad_glMateriali -typedef void (APIENTRYP PFNGLMATERIALIVPROC)(GLenum face, GLenum pname, const GLint *params); -GLAPI PFNGLMATERIALIVPROC glad_glMaterialiv; -#define glMaterialiv glad_glMaterialiv -typedef void (APIENTRYP PFNGLPOLYGONSTIPPLEPROC)(const GLubyte *mask); -GLAPI PFNGLPOLYGONSTIPPLEPROC glad_glPolygonStipple; -#define glPolygonStipple glad_glPolygonStipple -typedef void (APIENTRYP PFNGLSHADEMODELPROC)(GLenum mode); -GLAPI PFNGLSHADEMODELPROC glad_glShadeModel; -#define glShadeModel glad_glShadeModel -typedef void (APIENTRYP PFNGLTEXENVFPROC)(GLenum target, GLenum pname, GLfloat param); -GLAPI PFNGLTEXENVFPROC glad_glTexEnvf; -#define glTexEnvf glad_glTexEnvf -typedef void (APIENTRYP PFNGLTEXENVFVPROC)(GLenum target, GLenum pname, const GLfloat *params); -GLAPI PFNGLTEXENVFVPROC glad_glTexEnvfv; -#define glTexEnvfv glad_glTexEnvfv -typedef void (APIENTRYP PFNGLTEXENVIPROC)(GLenum target, GLenum pname, GLint param); -GLAPI PFNGLTEXENVIPROC glad_glTexEnvi; -#define glTexEnvi glad_glTexEnvi -typedef void (APIENTRYP PFNGLTEXENVIVPROC)(GLenum target, GLenum pname, const GLint *params); -GLAPI PFNGLTEXENVIVPROC glad_glTexEnviv; -#define glTexEnviv glad_glTexEnviv -typedef void (APIENTRYP PFNGLTEXGENDPROC)(GLenum coord, GLenum pname, GLdouble param); -GLAPI PFNGLTEXGENDPROC glad_glTexGend; -#define glTexGend glad_glTexGend -typedef void (APIENTRYP PFNGLTEXGENDVPROC)(GLenum coord, GLenum pname, const GLdouble *params); -GLAPI PFNGLTEXGENDVPROC glad_glTexGendv; -#define glTexGendv glad_glTexGendv -typedef void (APIENTRYP PFNGLTEXGENFPROC)(GLenum coord, GLenum pname, GLfloat param); -GLAPI PFNGLTEXGENFPROC glad_glTexGenf; -#define glTexGenf glad_glTexGenf -typedef void (APIENTRYP PFNGLTEXGENFVPROC)(GLenum coord, GLenum pname, const GLfloat *params); -GLAPI PFNGLTEXGENFVPROC glad_glTexGenfv; -#define glTexGenfv glad_glTexGenfv -typedef void (APIENTRYP PFNGLTEXGENIPROC)(GLenum coord, GLenum pname, GLint param); -GLAPI PFNGLTEXGENIPROC glad_glTexGeni; -#define glTexGeni glad_glTexGeni -typedef void (APIENTRYP PFNGLTEXGENIVPROC)(GLenum coord, GLenum pname, const GLint *params); -GLAPI PFNGLTEXGENIVPROC glad_glTexGeniv; -#define glTexGeniv glad_glTexGeniv -typedef void (APIENTRYP PFNGLFEEDBACKBUFFERPROC)(GLsizei size, GLenum type, GLfloat *buffer); -GLAPI PFNGLFEEDBACKBUFFERPROC glad_glFeedbackBuffer; -#define glFeedbackBuffer glad_glFeedbackBuffer -typedef void (APIENTRYP PFNGLSELECTBUFFERPROC)(GLsizei size, GLuint *buffer); -GLAPI PFNGLSELECTBUFFERPROC glad_glSelectBuffer; -#define glSelectBuffer glad_glSelectBuffer -typedef GLint (APIENTRYP PFNGLRENDERMODEPROC)(GLenum mode); -GLAPI PFNGLRENDERMODEPROC glad_glRenderMode; -#define glRenderMode glad_glRenderMode -typedef void (APIENTRYP PFNGLINITNAMESPROC)(void); -GLAPI PFNGLINITNAMESPROC glad_glInitNames; -#define glInitNames glad_glInitNames -typedef void (APIENTRYP PFNGLLOADNAMEPROC)(GLuint name); -GLAPI PFNGLLOADNAMEPROC glad_glLoadName; -#define glLoadName glad_glLoadName -typedef void (APIENTRYP PFNGLPASSTHROUGHPROC)(GLfloat token); -GLAPI PFNGLPASSTHROUGHPROC glad_glPassThrough; -#define glPassThrough glad_glPassThrough -typedef void (APIENTRYP PFNGLPOPNAMEPROC)(void); -GLAPI PFNGLPOPNAMEPROC glad_glPopName; -#define glPopName glad_glPopName -typedef void (APIENTRYP PFNGLPUSHNAMEPROC)(GLuint name); -GLAPI PFNGLPUSHNAMEPROC glad_glPushName; -#define glPushName glad_glPushName -typedef void (APIENTRYP PFNGLCLEARACCUMPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -GLAPI PFNGLCLEARACCUMPROC glad_glClearAccum; -#define glClearAccum glad_glClearAccum -typedef void (APIENTRYP PFNGLCLEARINDEXPROC)(GLfloat c); -GLAPI PFNGLCLEARINDEXPROC glad_glClearIndex; -#define glClearIndex glad_glClearIndex -typedef void (APIENTRYP PFNGLINDEXMASKPROC)(GLuint mask); -GLAPI PFNGLINDEXMASKPROC glad_glIndexMask; -#define glIndexMask glad_glIndexMask -typedef void (APIENTRYP PFNGLACCUMPROC)(GLenum op, GLfloat value); -GLAPI PFNGLACCUMPROC glad_glAccum; -#define glAccum glad_glAccum -typedef void (APIENTRYP PFNGLPOPATTRIBPROC)(void); -GLAPI PFNGLPOPATTRIBPROC glad_glPopAttrib; -#define glPopAttrib glad_glPopAttrib -typedef void (APIENTRYP PFNGLPUSHATTRIBPROC)(GLbitfield mask); -GLAPI PFNGLPUSHATTRIBPROC glad_glPushAttrib; -#define glPushAttrib glad_glPushAttrib -typedef void (APIENTRYP PFNGLMAP1DPROC)(GLenum target, GLdouble u1, GLdouble u2, GLint stride, GLint order, const GLdouble *points); -GLAPI PFNGLMAP1DPROC glad_glMap1d; -#define glMap1d glad_glMap1d -typedef void (APIENTRYP PFNGLMAP1FPROC)(GLenum target, GLfloat u1, GLfloat u2, GLint stride, GLint order, const GLfloat *points); -GLAPI PFNGLMAP1FPROC glad_glMap1f; -#define glMap1f glad_glMap1f -typedef void (APIENTRYP PFNGLMAP2DPROC)(GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, const GLdouble *points); -GLAPI PFNGLMAP2DPROC glad_glMap2d; -#define glMap2d glad_glMap2d -typedef void (APIENTRYP PFNGLMAP2FPROC)(GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, const GLfloat *points); -GLAPI PFNGLMAP2FPROC glad_glMap2f; -#define glMap2f glad_glMap2f -typedef void (APIENTRYP PFNGLMAPGRID1DPROC)(GLint un, GLdouble u1, GLdouble u2); -GLAPI PFNGLMAPGRID1DPROC glad_glMapGrid1d; -#define glMapGrid1d glad_glMapGrid1d -typedef void (APIENTRYP PFNGLMAPGRID1FPROC)(GLint un, GLfloat u1, GLfloat u2); -GLAPI PFNGLMAPGRID1FPROC glad_glMapGrid1f; -#define glMapGrid1f glad_glMapGrid1f -typedef void (APIENTRYP PFNGLMAPGRID2DPROC)(GLint un, GLdouble u1, GLdouble u2, GLint vn, GLdouble v1, GLdouble v2); -GLAPI PFNGLMAPGRID2DPROC glad_glMapGrid2d; -#define glMapGrid2d glad_glMapGrid2d -typedef void (APIENTRYP PFNGLMAPGRID2FPROC)(GLint un, GLfloat u1, GLfloat u2, GLint vn, GLfloat v1, GLfloat v2); -GLAPI PFNGLMAPGRID2FPROC glad_glMapGrid2f; -#define glMapGrid2f glad_glMapGrid2f -typedef void (APIENTRYP PFNGLEVALCOORD1DPROC)(GLdouble u); -GLAPI PFNGLEVALCOORD1DPROC glad_glEvalCoord1d; -#define glEvalCoord1d glad_glEvalCoord1d -typedef void (APIENTRYP PFNGLEVALCOORD1DVPROC)(const GLdouble *u); -GLAPI PFNGLEVALCOORD1DVPROC glad_glEvalCoord1dv; -#define glEvalCoord1dv glad_glEvalCoord1dv -typedef void (APIENTRYP PFNGLEVALCOORD1FPROC)(GLfloat u); -GLAPI PFNGLEVALCOORD1FPROC glad_glEvalCoord1f; -#define glEvalCoord1f glad_glEvalCoord1f -typedef void (APIENTRYP PFNGLEVALCOORD1FVPROC)(const GLfloat *u); -GLAPI PFNGLEVALCOORD1FVPROC glad_glEvalCoord1fv; -#define glEvalCoord1fv glad_glEvalCoord1fv -typedef void (APIENTRYP PFNGLEVALCOORD2DPROC)(GLdouble u, GLdouble v); -GLAPI PFNGLEVALCOORD2DPROC glad_glEvalCoord2d; -#define glEvalCoord2d glad_glEvalCoord2d -typedef void (APIENTRYP PFNGLEVALCOORD2DVPROC)(const GLdouble *u); -GLAPI PFNGLEVALCOORD2DVPROC glad_glEvalCoord2dv; -#define glEvalCoord2dv glad_glEvalCoord2dv -typedef void (APIENTRYP PFNGLEVALCOORD2FPROC)(GLfloat u, GLfloat v); -GLAPI PFNGLEVALCOORD2FPROC glad_glEvalCoord2f; -#define glEvalCoord2f glad_glEvalCoord2f -typedef void (APIENTRYP PFNGLEVALCOORD2FVPROC)(const GLfloat *u); -GLAPI PFNGLEVALCOORD2FVPROC glad_glEvalCoord2fv; -#define glEvalCoord2fv glad_glEvalCoord2fv -typedef void (APIENTRYP PFNGLEVALMESH1PROC)(GLenum mode, GLint i1, GLint i2); -GLAPI PFNGLEVALMESH1PROC glad_glEvalMesh1; -#define glEvalMesh1 glad_glEvalMesh1 -typedef void (APIENTRYP PFNGLEVALPOINT1PROC)(GLint i); -GLAPI PFNGLEVALPOINT1PROC glad_glEvalPoint1; -#define glEvalPoint1 glad_glEvalPoint1 -typedef void (APIENTRYP PFNGLEVALMESH2PROC)(GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2); -GLAPI PFNGLEVALMESH2PROC glad_glEvalMesh2; -#define glEvalMesh2 glad_glEvalMesh2 -typedef void (APIENTRYP PFNGLEVALPOINT2PROC)(GLint i, GLint j); -GLAPI PFNGLEVALPOINT2PROC glad_glEvalPoint2; -#define glEvalPoint2 glad_glEvalPoint2 -typedef void (APIENTRYP PFNGLALPHAFUNCPROC)(GLenum func, GLfloat ref); -GLAPI PFNGLALPHAFUNCPROC glad_glAlphaFunc; -#define glAlphaFunc glad_glAlphaFunc -typedef void (APIENTRYP PFNGLPIXELZOOMPROC)(GLfloat xfactor, GLfloat yfactor); -GLAPI PFNGLPIXELZOOMPROC glad_glPixelZoom; -#define glPixelZoom glad_glPixelZoom -typedef void (APIENTRYP PFNGLPIXELTRANSFERFPROC)(GLenum pname, GLfloat param); -GLAPI PFNGLPIXELTRANSFERFPROC glad_glPixelTransferf; -#define glPixelTransferf glad_glPixelTransferf -typedef void (APIENTRYP PFNGLPIXELTRANSFERIPROC)(GLenum pname, GLint param); -GLAPI PFNGLPIXELTRANSFERIPROC glad_glPixelTransferi; -#define glPixelTransferi glad_glPixelTransferi -typedef void (APIENTRYP PFNGLPIXELMAPFVPROC)(GLenum map, GLsizei mapsize, const GLfloat *values); -GLAPI PFNGLPIXELMAPFVPROC glad_glPixelMapfv; -#define glPixelMapfv glad_glPixelMapfv -typedef void (APIENTRYP PFNGLPIXELMAPUIVPROC)(GLenum map, GLsizei mapsize, const GLuint *values); -GLAPI PFNGLPIXELMAPUIVPROC glad_glPixelMapuiv; -#define glPixelMapuiv glad_glPixelMapuiv -typedef void (APIENTRYP PFNGLPIXELMAPUSVPROC)(GLenum map, GLsizei mapsize, const GLushort *values); -GLAPI PFNGLPIXELMAPUSVPROC glad_glPixelMapusv; -#define glPixelMapusv glad_glPixelMapusv -typedef void (APIENTRYP PFNGLCOPYPIXELSPROC)(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type); -GLAPI PFNGLCOPYPIXELSPROC glad_glCopyPixels; -#define glCopyPixels glad_glCopyPixels -typedef void (APIENTRYP PFNGLDRAWPIXELSPROC)(GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLDRAWPIXELSPROC glad_glDrawPixels; -#define glDrawPixels glad_glDrawPixels -typedef void (APIENTRYP PFNGLGETCLIPPLANEPROC)(GLenum plane, GLdouble *equation); -GLAPI PFNGLGETCLIPPLANEPROC glad_glGetClipPlane; -#define glGetClipPlane glad_glGetClipPlane -typedef void (APIENTRYP PFNGLGETLIGHTFVPROC)(GLenum light, GLenum pname, GLfloat *params); -GLAPI PFNGLGETLIGHTFVPROC glad_glGetLightfv; -#define glGetLightfv glad_glGetLightfv -typedef void (APIENTRYP PFNGLGETLIGHTIVPROC)(GLenum light, GLenum pname, GLint *params); -GLAPI PFNGLGETLIGHTIVPROC glad_glGetLightiv; -#define glGetLightiv glad_glGetLightiv -typedef void (APIENTRYP PFNGLGETMAPDVPROC)(GLenum target, GLenum query, GLdouble *v); -GLAPI PFNGLGETMAPDVPROC glad_glGetMapdv; -#define glGetMapdv glad_glGetMapdv -typedef void (APIENTRYP PFNGLGETMAPFVPROC)(GLenum target, GLenum query, GLfloat *v); -GLAPI PFNGLGETMAPFVPROC glad_glGetMapfv; -#define glGetMapfv glad_glGetMapfv -typedef void (APIENTRYP PFNGLGETMAPIVPROC)(GLenum target, GLenum query, GLint *v); -GLAPI PFNGLGETMAPIVPROC glad_glGetMapiv; -#define glGetMapiv glad_glGetMapiv -typedef void (APIENTRYP PFNGLGETMATERIALFVPROC)(GLenum face, GLenum pname, GLfloat *params); -GLAPI PFNGLGETMATERIALFVPROC glad_glGetMaterialfv; -#define glGetMaterialfv glad_glGetMaterialfv -typedef void (APIENTRYP PFNGLGETMATERIALIVPROC)(GLenum face, GLenum pname, GLint *params); -GLAPI PFNGLGETMATERIALIVPROC glad_glGetMaterialiv; -#define glGetMaterialiv glad_glGetMaterialiv -typedef void (APIENTRYP PFNGLGETPIXELMAPFVPROC)(GLenum map, GLfloat *values); -GLAPI PFNGLGETPIXELMAPFVPROC glad_glGetPixelMapfv; -#define glGetPixelMapfv glad_glGetPixelMapfv -typedef void (APIENTRYP PFNGLGETPIXELMAPUIVPROC)(GLenum map, GLuint *values); -GLAPI PFNGLGETPIXELMAPUIVPROC glad_glGetPixelMapuiv; -#define glGetPixelMapuiv glad_glGetPixelMapuiv -typedef void (APIENTRYP PFNGLGETPIXELMAPUSVPROC)(GLenum map, GLushort *values); -GLAPI PFNGLGETPIXELMAPUSVPROC glad_glGetPixelMapusv; -#define glGetPixelMapusv glad_glGetPixelMapusv -typedef void (APIENTRYP PFNGLGETPOLYGONSTIPPLEPROC)(GLubyte *mask); -GLAPI PFNGLGETPOLYGONSTIPPLEPROC glad_glGetPolygonStipple; -#define glGetPolygonStipple glad_glGetPolygonStipple -typedef void (APIENTRYP PFNGLGETTEXENVFVPROC)(GLenum target, GLenum pname, GLfloat *params); -GLAPI PFNGLGETTEXENVFVPROC glad_glGetTexEnvfv; -#define glGetTexEnvfv glad_glGetTexEnvfv -typedef void (APIENTRYP PFNGLGETTEXENVIVPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETTEXENVIVPROC glad_glGetTexEnviv; -#define glGetTexEnviv glad_glGetTexEnviv -typedef void (APIENTRYP PFNGLGETTEXGENDVPROC)(GLenum coord, GLenum pname, GLdouble *params); -GLAPI PFNGLGETTEXGENDVPROC glad_glGetTexGendv; -#define glGetTexGendv glad_glGetTexGendv -typedef void (APIENTRYP PFNGLGETTEXGENFVPROC)(GLenum coord, GLenum pname, GLfloat *params); -GLAPI PFNGLGETTEXGENFVPROC glad_glGetTexGenfv; -#define glGetTexGenfv glad_glGetTexGenfv -typedef void (APIENTRYP PFNGLGETTEXGENIVPROC)(GLenum coord, GLenum pname, GLint *params); -GLAPI PFNGLGETTEXGENIVPROC glad_glGetTexGeniv; -#define glGetTexGeniv glad_glGetTexGeniv -typedef GLboolean (APIENTRYP PFNGLISLISTPROC)(GLuint list); -GLAPI PFNGLISLISTPROC glad_glIsList; -#define glIsList glad_glIsList -typedef void (APIENTRYP PFNGLFRUSTUMPROC)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLAPI PFNGLFRUSTUMPROC glad_glFrustum; -#define glFrustum glad_glFrustum -typedef void (APIENTRYP PFNGLLOADIDENTITYPROC)(void); -GLAPI PFNGLLOADIDENTITYPROC glad_glLoadIdentity; -#define glLoadIdentity glad_glLoadIdentity -typedef void (APIENTRYP PFNGLLOADMATRIXFPROC)(const GLfloat *m); -GLAPI PFNGLLOADMATRIXFPROC glad_glLoadMatrixf; -#define glLoadMatrixf glad_glLoadMatrixf -typedef void (APIENTRYP PFNGLLOADMATRIXDPROC)(const GLdouble *m); -GLAPI PFNGLLOADMATRIXDPROC glad_glLoadMatrixd; -#define glLoadMatrixd glad_glLoadMatrixd -typedef void (APIENTRYP PFNGLMATRIXMODEPROC)(GLenum mode); -GLAPI PFNGLMATRIXMODEPROC glad_glMatrixMode; -#define glMatrixMode glad_glMatrixMode -typedef void (APIENTRYP PFNGLMULTMATRIXFPROC)(const GLfloat *m); -GLAPI PFNGLMULTMATRIXFPROC glad_glMultMatrixf; -#define glMultMatrixf glad_glMultMatrixf -typedef void (APIENTRYP PFNGLMULTMATRIXDPROC)(const GLdouble *m); -GLAPI PFNGLMULTMATRIXDPROC glad_glMultMatrixd; -#define glMultMatrixd glad_glMultMatrixd -typedef void (APIENTRYP PFNGLORTHOPROC)(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); -GLAPI PFNGLORTHOPROC glad_glOrtho; -#define glOrtho glad_glOrtho -typedef void (APIENTRYP PFNGLPOPMATRIXPROC)(void); -GLAPI PFNGLPOPMATRIXPROC glad_glPopMatrix; -#define glPopMatrix glad_glPopMatrix -typedef void (APIENTRYP PFNGLPUSHMATRIXPROC)(void); -GLAPI PFNGLPUSHMATRIXPROC glad_glPushMatrix; -#define glPushMatrix glad_glPushMatrix -typedef void (APIENTRYP PFNGLROTATEDPROC)(GLdouble angle, GLdouble x, GLdouble y, GLdouble z); -GLAPI PFNGLROTATEDPROC glad_glRotated; -#define glRotated glad_glRotated -typedef void (APIENTRYP PFNGLROTATEFPROC)(GLfloat angle, GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLROTATEFPROC glad_glRotatef; -#define glRotatef glad_glRotatef -typedef void (APIENTRYP PFNGLSCALEDPROC)(GLdouble x, GLdouble y, GLdouble z); -GLAPI PFNGLSCALEDPROC glad_glScaled; -#define glScaled glad_glScaled -typedef void (APIENTRYP PFNGLSCALEFPROC)(GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLSCALEFPROC glad_glScalef; -#define glScalef glad_glScalef -typedef void (APIENTRYP PFNGLTRANSLATEDPROC)(GLdouble x, GLdouble y, GLdouble z); -GLAPI PFNGLTRANSLATEDPROC glad_glTranslated; -#define glTranslated glad_glTranslated -typedef void (APIENTRYP PFNGLTRANSLATEFPROC)(GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLTRANSLATEFPROC glad_glTranslatef; -#define glTranslatef glad_glTranslatef -#endif -#ifndef GL_VERSION_1_1 -#define GL_VERSION_1_1 1 -GLAPI int GLAD_GL_VERSION_1_1; -typedef void (APIENTRYP PFNGLDRAWARRAYSPROC)(GLenum mode, GLint first, GLsizei count); -GLAPI PFNGLDRAWARRAYSPROC glad_glDrawArrays; -#define glDrawArrays glad_glDrawArrays -typedef void (APIENTRYP PFNGLDRAWELEMENTSPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices); -GLAPI PFNGLDRAWELEMENTSPROC glad_glDrawElements; -#define glDrawElements glad_glDrawElements -typedef void (APIENTRYP PFNGLGETPOINTERVPROC)(GLenum pname, void **params); -GLAPI PFNGLGETPOINTERVPROC glad_glGetPointerv; -#define glGetPointerv glad_glGetPointerv -typedef void (APIENTRYP PFNGLPOLYGONOFFSETPROC)(GLfloat factor, GLfloat units); -GLAPI PFNGLPOLYGONOFFSETPROC glad_glPolygonOffset; -#define glPolygonOffset glad_glPolygonOffset -typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); -GLAPI PFNGLCOPYTEXIMAGE1DPROC glad_glCopyTexImage1D; -#define glCopyTexImage1D glad_glCopyTexImage1D -typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); -GLAPI PFNGLCOPYTEXIMAGE2DPROC glad_glCopyTexImage2D; -#define glCopyTexImage2D glad_glCopyTexImage2D -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); -GLAPI PFNGLCOPYTEXSUBIMAGE1DPROC glad_glCopyTexSubImage1D; -#define glCopyTexSubImage1D glad_glCopyTexSubImage1D -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI PFNGLCOPYTEXSUBIMAGE2DPROC glad_glCopyTexSubImage2D; -#define glCopyTexSubImage2D glad_glCopyTexSubImage2D -typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLTEXSUBIMAGE1DPROC glad_glTexSubImage1D; -#define glTexSubImage1D glad_glTexSubImage1D -typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLTEXSUBIMAGE2DPROC glad_glTexSubImage2D; -#define glTexSubImage2D glad_glTexSubImage2D -typedef void (APIENTRYP PFNGLBINDTEXTUREPROC)(GLenum target, GLuint texture); -GLAPI PFNGLBINDTEXTUREPROC glad_glBindTexture; -#define glBindTexture glad_glBindTexture -typedef void (APIENTRYP PFNGLDELETETEXTURESPROC)(GLsizei n, const GLuint *textures); -GLAPI PFNGLDELETETEXTURESPROC glad_glDeleteTextures; -#define glDeleteTextures glad_glDeleteTextures -typedef void (APIENTRYP PFNGLGENTEXTURESPROC)(GLsizei n, GLuint *textures); -GLAPI PFNGLGENTEXTURESPROC glad_glGenTextures; -#define glGenTextures glad_glGenTextures -typedef GLboolean (APIENTRYP PFNGLISTEXTUREPROC)(GLuint texture); -GLAPI PFNGLISTEXTUREPROC glad_glIsTexture; -#define glIsTexture glad_glIsTexture -typedef void (APIENTRYP PFNGLARRAYELEMENTPROC)(GLint i); -GLAPI PFNGLARRAYELEMENTPROC glad_glArrayElement; -#define glArrayElement glad_glArrayElement -typedef void (APIENTRYP PFNGLCOLORPOINTERPROC)(GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI PFNGLCOLORPOINTERPROC glad_glColorPointer; -#define glColorPointer glad_glColorPointer -typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEPROC)(GLenum array); -GLAPI PFNGLDISABLECLIENTSTATEPROC glad_glDisableClientState; -#define glDisableClientState glad_glDisableClientState -typedef void (APIENTRYP PFNGLEDGEFLAGPOINTERPROC)(GLsizei stride, const void *pointer); -GLAPI PFNGLEDGEFLAGPOINTERPROC glad_glEdgeFlagPointer; -#define glEdgeFlagPointer glad_glEdgeFlagPointer -typedef void (APIENTRYP PFNGLENABLECLIENTSTATEPROC)(GLenum array); -GLAPI PFNGLENABLECLIENTSTATEPROC glad_glEnableClientState; -#define glEnableClientState glad_glEnableClientState -typedef void (APIENTRYP PFNGLINDEXPOINTERPROC)(GLenum type, GLsizei stride, const void *pointer); -GLAPI PFNGLINDEXPOINTERPROC glad_glIndexPointer; -#define glIndexPointer glad_glIndexPointer -typedef void (APIENTRYP PFNGLINTERLEAVEDARRAYSPROC)(GLenum format, GLsizei stride, const void *pointer); -GLAPI PFNGLINTERLEAVEDARRAYSPROC glad_glInterleavedArrays; -#define glInterleavedArrays glad_glInterleavedArrays -typedef void (APIENTRYP PFNGLNORMALPOINTERPROC)(GLenum type, GLsizei stride, const void *pointer); -GLAPI PFNGLNORMALPOINTERPROC glad_glNormalPointer; -#define glNormalPointer glad_glNormalPointer -typedef void (APIENTRYP PFNGLTEXCOORDPOINTERPROC)(GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI PFNGLTEXCOORDPOINTERPROC glad_glTexCoordPointer; -#define glTexCoordPointer glad_glTexCoordPointer -typedef void (APIENTRYP PFNGLVERTEXPOINTERPROC)(GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI PFNGLVERTEXPOINTERPROC glad_glVertexPointer; -#define glVertexPointer glad_glVertexPointer -typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTPROC)(GLsizei n, const GLuint *textures, GLboolean *residences); -GLAPI PFNGLARETEXTURESRESIDENTPROC glad_glAreTexturesResident; -#define glAreTexturesResident glad_glAreTexturesResident -typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESPROC)(GLsizei n, const GLuint *textures, const GLfloat *priorities); -GLAPI PFNGLPRIORITIZETEXTURESPROC glad_glPrioritizeTextures; -#define glPrioritizeTextures glad_glPrioritizeTextures -typedef void (APIENTRYP PFNGLINDEXUBPROC)(GLubyte c); -GLAPI PFNGLINDEXUBPROC glad_glIndexub; -#define glIndexub glad_glIndexub -typedef void (APIENTRYP PFNGLINDEXUBVPROC)(const GLubyte *c); -GLAPI PFNGLINDEXUBVPROC glad_glIndexubv; -#define glIndexubv glad_glIndexubv -typedef void (APIENTRYP PFNGLPOPCLIENTATTRIBPROC)(void); -GLAPI PFNGLPOPCLIENTATTRIBPROC glad_glPopClientAttrib; -#define glPopClientAttrib glad_glPopClientAttrib -typedef void (APIENTRYP PFNGLPUSHCLIENTATTRIBPROC)(GLbitfield mask); -GLAPI PFNGLPUSHCLIENTATTRIBPROC glad_glPushClientAttrib; -#define glPushClientAttrib glad_glPushClientAttrib -#endif -#ifndef GL_VERSION_1_2 -#define GL_VERSION_1_2 1 -GLAPI int GLAD_GL_VERSION_1_2; -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); -GLAPI PFNGLDRAWRANGEELEMENTSPROC glad_glDrawRangeElements; -#define glDrawRangeElements glad_glDrawRangeElements -typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC)(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLTEXIMAGE3DPROC glad_glTexImage3D; -#define glTexImage3D glad_glTexImage3D -typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); -GLAPI PFNGLTEXSUBIMAGE3DPROC glad_glTexSubImage3D; -#define glTexSubImage3D glad_glTexSubImage3D -typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); -GLAPI PFNGLCOPYTEXSUBIMAGE3DPROC glad_glCopyTexSubImage3D; -#define glCopyTexSubImage3D glad_glCopyTexSubImage3D -#endif -#ifndef GL_VERSION_1_3 -#define GL_VERSION_1_3 1 -GLAPI int GLAD_GL_VERSION_1_3; -typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC)(GLenum texture); -GLAPI PFNGLACTIVETEXTUREPROC glad_glActiveTexture; -#define glActiveTexture glad_glActiveTexture -typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC)(GLfloat value, GLboolean invert); -GLAPI PFNGLSAMPLECOVERAGEPROC glad_glSampleCoverage; -#define glSampleCoverage glad_glSampleCoverage -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); -GLAPI PFNGLCOMPRESSEDTEXIMAGE3DPROC glad_glCompressedTexImage3D; -#define glCompressedTexImage3D glad_glCompressedTexImage3D -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); -GLAPI PFNGLCOMPRESSEDTEXIMAGE2DPROC glad_glCompressedTexImage2D; -#define glCompressedTexImage2D glad_glCompressedTexImage2D -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC)(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); -GLAPI PFNGLCOMPRESSEDTEXIMAGE1DPROC glad_glCompressedTexImage1D; -#define glCompressedTexImage1D glad_glCompressedTexImage1D -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); -GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC glad_glCompressedTexSubImage3D; -#define glCompressedTexSubImage3D glad_glCompressedTexSubImage3D -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC)(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); -GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC glad_glCompressedTexSubImage2D; -#define glCompressedTexSubImage2D glad_glCompressedTexSubImage2D -typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC)(GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); -GLAPI PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC glad_glCompressedTexSubImage1D; -#define glCompressedTexSubImage1D glad_glCompressedTexSubImage1D -typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC)(GLenum target, GLint level, void *img); -GLAPI PFNGLGETCOMPRESSEDTEXIMAGEPROC glad_glGetCompressedTexImage; -#define glGetCompressedTexImage glad_glGetCompressedTexImage -typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC)(GLenum texture); -GLAPI PFNGLCLIENTACTIVETEXTUREPROC glad_glClientActiveTexture; -#define glClientActiveTexture glad_glClientActiveTexture -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC)(GLenum target, GLdouble s); -GLAPI PFNGLMULTITEXCOORD1DPROC glad_glMultiTexCoord1d; -#define glMultiTexCoord1d glad_glMultiTexCoord1d -typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC)(GLenum target, const GLdouble *v); -GLAPI PFNGLMULTITEXCOORD1DVPROC glad_glMultiTexCoord1dv; -#define glMultiTexCoord1dv glad_glMultiTexCoord1dv -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FPROC)(GLenum target, GLfloat s); -GLAPI PFNGLMULTITEXCOORD1FPROC glad_glMultiTexCoord1f; -#define glMultiTexCoord1f glad_glMultiTexCoord1f -typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVPROC)(GLenum target, const GLfloat *v); -GLAPI PFNGLMULTITEXCOORD1FVPROC glad_glMultiTexCoord1fv; -#define glMultiTexCoord1fv glad_glMultiTexCoord1fv -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IPROC)(GLenum target, GLint s); -GLAPI PFNGLMULTITEXCOORD1IPROC glad_glMultiTexCoord1i; -#define glMultiTexCoord1i glad_glMultiTexCoord1i -typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVPROC)(GLenum target, const GLint *v); -GLAPI PFNGLMULTITEXCOORD1IVPROC glad_glMultiTexCoord1iv; -#define glMultiTexCoord1iv glad_glMultiTexCoord1iv -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SPROC)(GLenum target, GLshort s); -GLAPI PFNGLMULTITEXCOORD1SPROC glad_glMultiTexCoord1s; -#define glMultiTexCoord1s glad_glMultiTexCoord1s -typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVPROC)(GLenum target, const GLshort *v); -GLAPI PFNGLMULTITEXCOORD1SVPROC glad_glMultiTexCoord1sv; -#define glMultiTexCoord1sv glad_glMultiTexCoord1sv -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DPROC)(GLenum target, GLdouble s, GLdouble t); -GLAPI PFNGLMULTITEXCOORD2DPROC glad_glMultiTexCoord2d; -#define glMultiTexCoord2d glad_glMultiTexCoord2d -typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVPROC)(GLenum target, const GLdouble *v); -GLAPI PFNGLMULTITEXCOORD2DVPROC glad_glMultiTexCoord2dv; -#define glMultiTexCoord2dv glad_glMultiTexCoord2dv -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC)(GLenum target, GLfloat s, GLfloat t); -GLAPI PFNGLMULTITEXCOORD2FPROC glad_glMultiTexCoord2f; -#define glMultiTexCoord2f glad_glMultiTexCoord2f -typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC)(GLenum target, const GLfloat *v); -GLAPI PFNGLMULTITEXCOORD2FVPROC glad_glMultiTexCoord2fv; -#define glMultiTexCoord2fv glad_glMultiTexCoord2fv -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IPROC)(GLenum target, GLint s, GLint t); -GLAPI PFNGLMULTITEXCOORD2IPROC glad_glMultiTexCoord2i; -#define glMultiTexCoord2i glad_glMultiTexCoord2i -typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVPROC)(GLenum target, const GLint *v); -GLAPI PFNGLMULTITEXCOORD2IVPROC glad_glMultiTexCoord2iv; -#define glMultiTexCoord2iv glad_glMultiTexCoord2iv -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SPROC)(GLenum target, GLshort s, GLshort t); -GLAPI PFNGLMULTITEXCOORD2SPROC glad_glMultiTexCoord2s; -#define glMultiTexCoord2s glad_glMultiTexCoord2s -typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVPROC)(GLenum target, const GLshort *v); -GLAPI PFNGLMULTITEXCOORD2SVPROC glad_glMultiTexCoord2sv; -#define glMultiTexCoord2sv glad_glMultiTexCoord2sv -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DPROC)(GLenum target, GLdouble s, GLdouble t, GLdouble r); -GLAPI PFNGLMULTITEXCOORD3DPROC glad_glMultiTexCoord3d; -#define glMultiTexCoord3d glad_glMultiTexCoord3d -typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVPROC)(GLenum target, const GLdouble *v); -GLAPI PFNGLMULTITEXCOORD3DVPROC glad_glMultiTexCoord3dv; -#define glMultiTexCoord3dv glad_glMultiTexCoord3dv -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FPROC)(GLenum target, GLfloat s, GLfloat t, GLfloat r); -GLAPI PFNGLMULTITEXCOORD3FPROC glad_glMultiTexCoord3f; -#define glMultiTexCoord3f glad_glMultiTexCoord3f -typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVPROC)(GLenum target, const GLfloat *v); -GLAPI PFNGLMULTITEXCOORD3FVPROC glad_glMultiTexCoord3fv; -#define glMultiTexCoord3fv glad_glMultiTexCoord3fv -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IPROC)(GLenum target, GLint s, GLint t, GLint r); -GLAPI PFNGLMULTITEXCOORD3IPROC glad_glMultiTexCoord3i; -#define glMultiTexCoord3i glad_glMultiTexCoord3i -typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVPROC)(GLenum target, const GLint *v); -GLAPI PFNGLMULTITEXCOORD3IVPROC glad_glMultiTexCoord3iv; -#define glMultiTexCoord3iv glad_glMultiTexCoord3iv -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SPROC)(GLenum target, GLshort s, GLshort t, GLshort r); -GLAPI PFNGLMULTITEXCOORD3SPROC glad_glMultiTexCoord3s; -#define glMultiTexCoord3s glad_glMultiTexCoord3s -typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVPROC)(GLenum target, const GLshort *v); -GLAPI PFNGLMULTITEXCOORD3SVPROC glad_glMultiTexCoord3sv; -#define glMultiTexCoord3sv glad_glMultiTexCoord3sv -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DPROC)(GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q); -GLAPI PFNGLMULTITEXCOORD4DPROC glad_glMultiTexCoord4d; -#define glMultiTexCoord4d glad_glMultiTexCoord4d -typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVPROC)(GLenum target, const GLdouble *v); -GLAPI PFNGLMULTITEXCOORD4DVPROC glad_glMultiTexCoord4dv; -#define glMultiTexCoord4dv glad_glMultiTexCoord4dv -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC)(GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q); -GLAPI PFNGLMULTITEXCOORD4FPROC glad_glMultiTexCoord4f; -#define glMultiTexCoord4f glad_glMultiTexCoord4f -typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVPROC)(GLenum target, const GLfloat *v); -GLAPI PFNGLMULTITEXCOORD4FVPROC glad_glMultiTexCoord4fv; -#define glMultiTexCoord4fv glad_glMultiTexCoord4fv -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IPROC)(GLenum target, GLint s, GLint t, GLint r, GLint q); -GLAPI PFNGLMULTITEXCOORD4IPROC glad_glMultiTexCoord4i; -#define glMultiTexCoord4i glad_glMultiTexCoord4i -typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVPROC)(GLenum target, const GLint *v); -GLAPI PFNGLMULTITEXCOORD4IVPROC glad_glMultiTexCoord4iv; -#define glMultiTexCoord4iv glad_glMultiTexCoord4iv -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SPROC)(GLenum target, GLshort s, GLshort t, GLshort r, GLshort q); -GLAPI PFNGLMULTITEXCOORD4SPROC glad_glMultiTexCoord4s; -#define glMultiTexCoord4s glad_glMultiTexCoord4s -typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVPROC)(GLenum target, const GLshort *v); -GLAPI PFNGLMULTITEXCOORD4SVPROC glad_glMultiTexCoord4sv; -#define glMultiTexCoord4sv glad_glMultiTexCoord4sv -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC)(const GLfloat *m); -GLAPI PFNGLLOADTRANSPOSEMATRIXFPROC glad_glLoadTransposeMatrixf; -#define glLoadTransposeMatrixf glad_glLoadTransposeMatrixf -typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC)(const GLdouble *m); -GLAPI PFNGLLOADTRANSPOSEMATRIXDPROC glad_glLoadTransposeMatrixd; -#define glLoadTransposeMatrixd glad_glLoadTransposeMatrixd -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC)(const GLfloat *m); -GLAPI PFNGLMULTTRANSPOSEMATRIXFPROC glad_glMultTransposeMatrixf; -#define glMultTransposeMatrixf glad_glMultTransposeMatrixf -typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC)(const GLdouble *m); -GLAPI PFNGLMULTTRANSPOSEMATRIXDPROC glad_glMultTransposeMatrixd; -#define glMultTransposeMatrixd glad_glMultTransposeMatrixd -#endif -#ifndef GL_VERSION_1_4 -#define GL_VERSION_1_4 1 -GLAPI int GLAD_GL_VERSION_1_4; -typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC)(GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); -GLAPI PFNGLBLENDFUNCSEPARATEPROC glad_glBlendFuncSeparate; -#define glBlendFuncSeparate glad_glBlendFuncSeparate -typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC)(GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); -GLAPI PFNGLMULTIDRAWARRAYSPROC glad_glMultiDrawArrays; -#define glMultiDrawArrays glad_glMultiDrawArrays -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC)(GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount); -GLAPI PFNGLMULTIDRAWELEMENTSPROC glad_glMultiDrawElements; -#define glMultiDrawElements glad_glMultiDrawElements -typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC)(GLenum pname, GLfloat param); -GLAPI PFNGLPOINTPARAMETERFPROC glad_glPointParameterf; -#define glPointParameterf glad_glPointParameterf -typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC)(GLenum pname, const GLfloat *params); -GLAPI PFNGLPOINTPARAMETERFVPROC glad_glPointParameterfv; -#define glPointParameterfv glad_glPointParameterfv -typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC)(GLenum pname, GLint param); -GLAPI PFNGLPOINTPARAMETERIPROC glad_glPointParameteri; -#define glPointParameteri glad_glPointParameteri -typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC)(GLenum pname, const GLint *params); -GLAPI PFNGLPOINTPARAMETERIVPROC glad_glPointParameteriv; -#define glPointParameteriv glad_glPointParameteriv -typedef void (APIENTRYP PFNGLFOGCOORDFPROC)(GLfloat coord); -GLAPI PFNGLFOGCOORDFPROC glad_glFogCoordf; -#define glFogCoordf glad_glFogCoordf -typedef void (APIENTRYP PFNGLFOGCOORDFVPROC)(const GLfloat *coord); -GLAPI PFNGLFOGCOORDFVPROC glad_glFogCoordfv; -#define glFogCoordfv glad_glFogCoordfv -typedef void (APIENTRYP PFNGLFOGCOORDDPROC)(GLdouble coord); -GLAPI PFNGLFOGCOORDDPROC glad_glFogCoordd; -#define glFogCoordd glad_glFogCoordd -typedef void (APIENTRYP PFNGLFOGCOORDDVPROC)(const GLdouble *coord); -GLAPI PFNGLFOGCOORDDVPROC glad_glFogCoorddv; -#define glFogCoorddv glad_glFogCoorddv -typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC)(GLenum type, GLsizei stride, const void *pointer); -GLAPI PFNGLFOGCOORDPOINTERPROC glad_glFogCoordPointer; -#define glFogCoordPointer glad_glFogCoordPointer -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC)(GLbyte red, GLbyte green, GLbyte blue); -GLAPI PFNGLSECONDARYCOLOR3BPROC glad_glSecondaryColor3b; -#define glSecondaryColor3b glad_glSecondaryColor3b -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC)(const GLbyte *v); -GLAPI PFNGLSECONDARYCOLOR3BVPROC glad_glSecondaryColor3bv; -#define glSecondaryColor3bv glad_glSecondaryColor3bv -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC)(GLdouble red, GLdouble green, GLdouble blue); -GLAPI PFNGLSECONDARYCOLOR3DPROC glad_glSecondaryColor3d; -#define glSecondaryColor3d glad_glSecondaryColor3d -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVPROC)(const GLdouble *v); -GLAPI PFNGLSECONDARYCOLOR3DVPROC glad_glSecondaryColor3dv; -#define glSecondaryColor3dv glad_glSecondaryColor3dv -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FPROC)(GLfloat red, GLfloat green, GLfloat blue); -GLAPI PFNGLSECONDARYCOLOR3FPROC glad_glSecondaryColor3f; -#define glSecondaryColor3f glad_glSecondaryColor3f -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVPROC)(const GLfloat *v); -GLAPI PFNGLSECONDARYCOLOR3FVPROC glad_glSecondaryColor3fv; -#define glSecondaryColor3fv glad_glSecondaryColor3fv -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IPROC)(GLint red, GLint green, GLint blue); -GLAPI PFNGLSECONDARYCOLOR3IPROC glad_glSecondaryColor3i; -#define glSecondaryColor3i glad_glSecondaryColor3i -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVPROC)(const GLint *v); -GLAPI PFNGLSECONDARYCOLOR3IVPROC glad_glSecondaryColor3iv; -#define glSecondaryColor3iv glad_glSecondaryColor3iv -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SPROC)(GLshort red, GLshort green, GLshort blue); -GLAPI PFNGLSECONDARYCOLOR3SPROC glad_glSecondaryColor3s; -#define glSecondaryColor3s glad_glSecondaryColor3s -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVPROC)(const GLshort *v); -GLAPI PFNGLSECONDARYCOLOR3SVPROC glad_glSecondaryColor3sv; -#define glSecondaryColor3sv glad_glSecondaryColor3sv -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBPROC)(GLubyte red, GLubyte green, GLubyte blue); -GLAPI PFNGLSECONDARYCOLOR3UBPROC glad_glSecondaryColor3ub; -#define glSecondaryColor3ub glad_glSecondaryColor3ub -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVPROC)(const GLubyte *v); -GLAPI PFNGLSECONDARYCOLOR3UBVPROC glad_glSecondaryColor3ubv; -#define glSecondaryColor3ubv glad_glSecondaryColor3ubv -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIPROC)(GLuint red, GLuint green, GLuint blue); -GLAPI PFNGLSECONDARYCOLOR3UIPROC glad_glSecondaryColor3ui; -#define glSecondaryColor3ui glad_glSecondaryColor3ui -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVPROC)(const GLuint *v); -GLAPI PFNGLSECONDARYCOLOR3UIVPROC glad_glSecondaryColor3uiv; -#define glSecondaryColor3uiv glad_glSecondaryColor3uiv -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USPROC)(GLushort red, GLushort green, GLushort blue); -GLAPI PFNGLSECONDARYCOLOR3USPROC glad_glSecondaryColor3us; -#define glSecondaryColor3us glad_glSecondaryColor3us -typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVPROC)(const GLushort *v); -GLAPI PFNGLSECONDARYCOLOR3USVPROC glad_glSecondaryColor3usv; -#define glSecondaryColor3usv glad_glSecondaryColor3usv -typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERPROC)(GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI PFNGLSECONDARYCOLORPOINTERPROC glad_glSecondaryColorPointer; -#define glSecondaryColorPointer glad_glSecondaryColorPointer -typedef void (APIENTRYP PFNGLWINDOWPOS2DPROC)(GLdouble x, GLdouble y); -GLAPI PFNGLWINDOWPOS2DPROC glad_glWindowPos2d; -#define glWindowPos2d glad_glWindowPos2d -typedef void (APIENTRYP PFNGLWINDOWPOS2DVPROC)(const GLdouble *v); -GLAPI PFNGLWINDOWPOS2DVPROC glad_glWindowPos2dv; -#define glWindowPos2dv glad_glWindowPos2dv -typedef void (APIENTRYP PFNGLWINDOWPOS2FPROC)(GLfloat x, GLfloat y); -GLAPI PFNGLWINDOWPOS2FPROC glad_glWindowPos2f; -#define glWindowPos2f glad_glWindowPos2f -typedef void (APIENTRYP PFNGLWINDOWPOS2FVPROC)(const GLfloat *v); -GLAPI PFNGLWINDOWPOS2FVPROC glad_glWindowPos2fv; -#define glWindowPos2fv glad_glWindowPos2fv -typedef void (APIENTRYP PFNGLWINDOWPOS2IPROC)(GLint x, GLint y); -GLAPI PFNGLWINDOWPOS2IPROC glad_glWindowPos2i; -#define glWindowPos2i glad_glWindowPos2i -typedef void (APIENTRYP PFNGLWINDOWPOS2IVPROC)(const GLint *v); -GLAPI PFNGLWINDOWPOS2IVPROC glad_glWindowPos2iv; -#define glWindowPos2iv glad_glWindowPos2iv -typedef void (APIENTRYP PFNGLWINDOWPOS2SPROC)(GLshort x, GLshort y); -GLAPI PFNGLWINDOWPOS2SPROC glad_glWindowPos2s; -#define glWindowPos2s glad_glWindowPos2s -typedef void (APIENTRYP PFNGLWINDOWPOS2SVPROC)(const GLshort *v); -GLAPI PFNGLWINDOWPOS2SVPROC glad_glWindowPos2sv; -#define glWindowPos2sv glad_glWindowPos2sv -typedef void (APIENTRYP PFNGLWINDOWPOS3DPROC)(GLdouble x, GLdouble y, GLdouble z); -GLAPI PFNGLWINDOWPOS3DPROC glad_glWindowPos3d; -#define glWindowPos3d glad_glWindowPos3d -typedef void (APIENTRYP PFNGLWINDOWPOS3DVPROC)(const GLdouble *v); -GLAPI PFNGLWINDOWPOS3DVPROC glad_glWindowPos3dv; -#define glWindowPos3dv glad_glWindowPos3dv -typedef void (APIENTRYP PFNGLWINDOWPOS3FPROC)(GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLWINDOWPOS3FPROC glad_glWindowPos3f; -#define glWindowPos3f glad_glWindowPos3f -typedef void (APIENTRYP PFNGLWINDOWPOS3FVPROC)(const GLfloat *v); -GLAPI PFNGLWINDOWPOS3FVPROC glad_glWindowPos3fv; -#define glWindowPos3fv glad_glWindowPos3fv -typedef void (APIENTRYP PFNGLWINDOWPOS3IPROC)(GLint x, GLint y, GLint z); -GLAPI PFNGLWINDOWPOS3IPROC glad_glWindowPos3i; -#define glWindowPos3i glad_glWindowPos3i -typedef void (APIENTRYP PFNGLWINDOWPOS3IVPROC)(const GLint *v); -GLAPI PFNGLWINDOWPOS3IVPROC glad_glWindowPos3iv; -#define glWindowPos3iv glad_glWindowPos3iv -typedef void (APIENTRYP PFNGLWINDOWPOS3SPROC)(GLshort x, GLshort y, GLshort z); -GLAPI PFNGLWINDOWPOS3SPROC glad_glWindowPos3s; -#define glWindowPos3s glad_glWindowPos3s -typedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC)(const GLshort *v); -GLAPI PFNGLWINDOWPOS3SVPROC glad_glWindowPos3sv; -#define glWindowPos3sv glad_glWindowPos3sv -typedef void (APIENTRYP PFNGLBLENDCOLORPROC)(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); -GLAPI PFNGLBLENDCOLORPROC glad_glBlendColor; -#define glBlendColor glad_glBlendColor -typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC)(GLenum mode); -GLAPI PFNGLBLENDEQUATIONPROC glad_glBlendEquation; -#define glBlendEquation glad_glBlendEquation -#endif -#ifndef GL_VERSION_1_5 -#define GL_VERSION_1_5 1 -GLAPI int GLAD_GL_VERSION_1_5; -typedef void (APIENTRYP PFNGLGENQUERIESPROC)(GLsizei n, GLuint *ids); -GLAPI PFNGLGENQUERIESPROC glad_glGenQueries; -#define glGenQueries glad_glGenQueries -typedef void (APIENTRYP PFNGLDELETEQUERIESPROC)(GLsizei n, const GLuint *ids); -GLAPI PFNGLDELETEQUERIESPROC glad_glDeleteQueries; -#define glDeleteQueries glad_glDeleteQueries -typedef GLboolean (APIENTRYP PFNGLISQUERYPROC)(GLuint id); -GLAPI PFNGLISQUERYPROC glad_glIsQuery; -#define glIsQuery glad_glIsQuery -typedef void (APIENTRYP PFNGLBEGINQUERYPROC)(GLenum target, GLuint id); -GLAPI PFNGLBEGINQUERYPROC glad_glBeginQuery; -#define glBeginQuery glad_glBeginQuery -typedef void (APIENTRYP PFNGLENDQUERYPROC)(GLenum target); -GLAPI PFNGLENDQUERYPROC glad_glEndQuery; -#define glEndQuery glad_glEndQuery -typedef void (APIENTRYP PFNGLGETQUERYIVPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETQUERYIVPROC glad_glGetQueryiv; -#define glGetQueryiv glad_glGetQueryiv -typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC)(GLuint id, GLenum pname, GLint *params); -GLAPI PFNGLGETQUERYOBJECTIVPROC glad_glGetQueryObjectiv; -#define glGetQueryObjectiv glad_glGetQueryObjectiv -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC)(GLuint id, GLenum pname, GLuint *params); -GLAPI PFNGLGETQUERYOBJECTUIVPROC glad_glGetQueryObjectuiv; -#define glGetQueryObjectuiv glad_glGetQueryObjectuiv -typedef void (APIENTRYP PFNGLBINDBUFFERPROC)(GLenum target, GLuint buffer); -GLAPI PFNGLBINDBUFFERPROC glad_glBindBuffer; -#define glBindBuffer glad_glBindBuffer -typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC)(GLsizei n, const GLuint *buffers); -GLAPI PFNGLDELETEBUFFERSPROC glad_glDeleteBuffers; -#define glDeleteBuffers glad_glDeleteBuffers -typedef void (APIENTRYP PFNGLGENBUFFERSPROC)(GLsizei n, GLuint *buffers); -GLAPI PFNGLGENBUFFERSPROC glad_glGenBuffers; -#define glGenBuffers glad_glGenBuffers -typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC)(GLuint buffer); -GLAPI PFNGLISBUFFERPROC glad_glIsBuffer; -#define glIsBuffer glad_glIsBuffer -typedef void (APIENTRYP PFNGLBUFFERDATAPROC)(GLenum target, GLsizeiptr size, const void *data, GLenum usage); -GLAPI PFNGLBUFFERDATAPROC glad_glBufferData; -#define glBufferData glad_glBufferData -typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, const void *data); -GLAPI PFNGLBUFFERSUBDATAPROC glad_glBufferSubData; -#define glBufferSubData glad_glBufferSubData -typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC)(GLenum target, GLintptr offset, GLsizeiptr size, void *data); -GLAPI PFNGLGETBUFFERSUBDATAPROC glad_glGetBufferSubData; -#define glGetBufferSubData glad_glGetBufferSubData -typedef void * (APIENTRYP PFNGLMAPBUFFERPROC)(GLenum target, GLenum access); -GLAPI PFNGLMAPBUFFERPROC glad_glMapBuffer; -#define glMapBuffer glad_glMapBuffer -typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC)(GLenum target); -GLAPI PFNGLUNMAPBUFFERPROC glad_glUnmapBuffer; -#define glUnmapBuffer glad_glUnmapBuffer -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETBUFFERPARAMETERIVPROC glad_glGetBufferParameteriv; -#define glGetBufferParameteriv glad_glGetBufferParameteriv -typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC)(GLenum target, GLenum pname, void **params); -GLAPI PFNGLGETBUFFERPOINTERVPROC glad_glGetBufferPointerv; -#define glGetBufferPointerv glad_glGetBufferPointerv -#endif -#ifndef GL_VERSION_2_0 -#define GL_VERSION_2_0 1 -GLAPI int GLAD_GL_VERSION_2_0; -typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC)(GLenum modeRGB, GLenum modeAlpha); -GLAPI PFNGLBLENDEQUATIONSEPARATEPROC glad_glBlendEquationSeparate; -#define glBlendEquationSeparate glad_glBlendEquationSeparate -typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC)(GLsizei n, const GLenum *bufs); -GLAPI PFNGLDRAWBUFFERSPROC glad_glDrawBuffers; -#define glDrawBuffers glad_glDrawBuffers -typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC)(GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); -GLAPI PFNGLSTENCILOPSEPARATEPROC glad_glStencilOpSeparate; -#define glStencilOpSeparate glad_glStencilOpSeparate -typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC)(GLenum face, GLenum func, GLint ref, GLuint mask); -GLAPI PFNGLSTENCILFUNCSEPARATEPROC glad_glStencilFuncSeparate; -#define glStencilFuncSeparate glad_glStencilFuncSeparate -typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC)(GLenum face, GLuint mask); -GLAPI PFNGLSTENCILMASKSEPARATEPROC glad_glStencilMaskSeparate; -#define glStencilMaskSeparate glad_glStencilMaskSeparate -typedef void (APIENTRYP PFNGLATTACHSHADERPROC)(GLuint program, GLuint shader); -GLAPI PFNGLATTACHSHADERPROC glad_glAttachShader; -#define glAttachShader glad_glAttachShader -typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC)(GLuint program, GLuint index, const GLchar *name); -GLAPI PFNGLBINDATTRIBLOCATIONPROC glad_glBindAttribLocation; -#define glBindAttribLocation glad_glBindAttribLocation -typedef void (APIENTRYP PFNGLCOMPILESHADERPROC)(GLuint shader); -GLAPI PFNGLCOMPILESHADERPROC glad_glCompileShader; -#define glCompileShader glad_glCompileShader -typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC)(void); -GLAPI PFNGLCREATEPROGRAMPROC glad_glCreateProgram; -#define glCreateProgram glad_glCreateProgram -typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC)(GLenum type); -GLAPI PFNGLCREATESHADERPROC glad_glCreateShader; -#define glCreateShader glad_glCreateShader -typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC)(GLuint program); -GLAPI PFNGLDELETEPROGRAMPROC glad_glDeleteProgram; -#define glDeleteProgram glad_glDeleteProgram -typedef void (APIENTRYP PFNGLDELETESHADERPROC)(GLuint shader); -GLAPI PFNGLDELETESHADERPROC glad_glDeleteShader; -#define glDeleteShader glad_glDeleteShader -typedef void (APIENTRYP PFNGLDETACHSHADERPROC)(GLuint program, GLuint shader); -GLAPI PFNGLDETACHSHADERPROC glad_glDetachShader; -#define glDetachShader glad_glDetachShader -typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC)(GLuint index); -GLAPI PFNGLDISABLEVERTEXATTRIBARRAYPROC glad_glDisableVertexAttribArray; -#define glDisableVertexAttribArray glad_glDisableVertexAttribArray -typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC)(GLuint index); -GLAPI PFNGLENABLEVERTEXATTRIBARRAYPROC glad_glEnableVertexAttribArray; -#define glEnableVertexAttribArray glad_glEnableVertexAttribArray -typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -GLAPI PFNGLGETACTIVEATTRIBPROC glad_glGetActiveAttrib; -#define glGetActiveAttrib glad_glGetActiveAttrib -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); -GLAPI PFNGLGETACTIVEUNIFORMPROC glad_glGetActiveUniform; -#define glGetActiveUniform glad_glGetActiveUniform -typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC)(GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); -GLAPI PFNGLGETATTACHEDSHADERSPROC glad_glGetAttachedShaders; -#define glGetAttachedShaders glad_glGetAttachedShaders -typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC)(GLuint program, const GLchar *name); -GLAPI PFNGLGETATTRIBLOCATIONPROC glad_glGetAttribLocation; -#define glGetAttribLocation glad_glGetAttribLocation -typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC)(GLuint program, GLenum pname, GLint *params); -GLAPI PFNGLGETPROGRAMIVPROC glad_glGetProgramiv; -#define glGetProgramiv glad_glGetProgramiv -typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC)(GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -GLAPI PFNGLGETPROGRAMINFOLOGPROC glad_glGetProgramInfoLog; -#define glGetProgramInfoLog glad_glGetProgramInfoLog -typedef void (APIENTRYP PFNGLGETSHADERIVPROC)(GLuint shader, GLenum pname, GLint *params); -GLAPI PFNGLGETSHADERIVPROC glad_glGetShaderiv; -#define glGetShaderiv glad_glGetShaderiv -typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); -GLAPI PFNGLGETSHADERINFOLOGPROC glad_glGetShaderInfoLog; -#define glGetShaderInfoLog glad_glGetShaderInfoLog -typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC)(GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); -GLAPI PFNGLGETSHADERSOURCEPROC glad_glGetShaderSource; -#define glGetShaderSource glad_glGetShaderSource -typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC)(GLuint program, const GLchar *name); -GLAPI PFNGLGETUNIFORMLOCATIONPROC glad_glGetUniformLocation; -#define glGetUniformLocation glad_glGetUniformLocation -typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC)(GLuint program, GLint location, GLfloat *params); -GLAPI PFNGLGETUNIFORMFVPROC glad_glGetUniformfv; -#define glGetUniformfv glad_glGetUniformfv -typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC)(GLuint program, GLint location, GLint *params); -GLAPI PFNGLGETUNIFORMIVPROC glad_glGetUniformiv; -#define glGetUniformiv glad_glGetUniformiv -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC)(GLuint index, GLenum pname, GLdouble *params); -GLAPI PFNGLGETVERTEXATTRIBDVPROC glad_glGetVertexAttribdv; -#define glGetVertexAttribdv glad_glGetVertexAttribdv -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC)(GLuint index, GLenum pname, GLfloat *params); -GLAPI PFNGLGETVERTEXATTRIBFVPROC glad_glGetVertexAttribfv; -#define glGetVertexAttribfv glad_glGetVertexAttribfv -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC)(GLuint index, GLenum pname, GLint *params); -GLAPI PFNGLGETVERTEXATTRIBIVPROC glad_glGetVertexAttribiv; -#define glGetVertexAttribiv glad_glGetVertexAttribiv -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC)(GLuint index, GLenum pname, void **pointer); -GLAPI PFNGLGETVERTEXATTRIBPOINTERVPROC glad_glGetVertexAttribPointerv; -#define glGetVertexAttribPointerv glad_glGetVertexAttribPointerv -typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC)(GLuint program); -GLAPI PFNGLISPROGRAMPROC glad_glIsProgram; -#define glIsProgram glad_glIsProgram -typedef GLboolean (APIENTRYP PFNGLISSHADERPROC)(GLuint shader); -GLAPI PFNGLISSHADERPROC glad_glIsShader; -#define glIsShader glad_glIsShader -typedef void (APIENTRYP PFNGLLINKPROGRAMPROC)(GLuint program); -GLAPI PFNGLLINKPROGRAMPROC glad_glLinkProgram; -#define glLinkProgram glad_glLinkProgram -typedef void (APIENTRYP PFNGLSHADERSOURCEPROC)(GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); -GLAPI PFNGLSHADERSOURCEPROC glad_glShaderSource; -#define glShaderSource glad_glShaderSource -typedef void (APIENTRYP PFNGLUSEPROGRAMPROC)(GLuint program); -GLAPI PFNGLUSEPROGRAMPROC glad_glUseProgram; -#define glUseProgram glad_glUseProgram -typedef void (APIENTRYP PFNGLUNIFORM1FPROC)(GLint location, GLfloat v0); -GLAPI PFNGLUNIFORM1FPROC glad_glUniform1f; -#define glUniform1f glad_glUniform1f -typedef void (APIENTRYP PFNGLUNIFORM2FPROC)(GLint location, GLfloat v0, GLfloat v1); -GLAPI PFNGLUNIFORM2FPROC glad_glUniform2f; -#define glUniform2f glad_glUniform2f -typedef void (APIENTRYP PFNGLUNIFORM3FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2); -GLAPI PFNGLUNIFORM3FPROC glad_glUniform3f; -#define glUniform3f glad_glUniform3f -typedef void (APIENTRYP PFNGLUNIFORM4FPROC)(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); -GLAPI PFNGLUNIFORM4FPROC glad_glUniform4f; -#define glUniform4f glad_glUniform4f -typedef void (APIENTRYP PFNGLUNIFORM1IPROC)(GLint location, GLint v0); -GLAPI PFNGLUNIFORM1IPROC glad_glUniform1i; -#define glUniform1i glad_glUniform1i -typedef void (APIENTRYP PFNGLUNIFORM2IPROC)(GLint location, GLint v0, GLint v1); -GLAPI PFNGLUNIFORM2IPROC glad_glUniform2i; -#define glUniform2i glad_glUniform2i -typedef void (APIENTRYP PFNGLUNIFORM3IPROC)(GLint location, GLint v0, GLint v1, GLint v2); -GLAPI PFNGLUNIFORM3IPROC glad_glUniform3i; -#define glUniform3i glad_glUniform3i -typedef void (APIENTRYP PFNGLUNIFORM4IPROC)(GLint location, GLint v0, GLint v1, GLint v2, GLint v3); -GLAPI PFNGLUNIFORM4IPROC glad_glUniform4i; -#define glUniform4i glad_glUniform4i -typedef void (APIENTRYP PFNGLUNIFORM1FVPROC)(GLint location, GLsizei count, const GLfloat *value); -GLAPI PFNGLUNIFORM1FVPROC glad_glUniform1fv; -#define glUniform1fv glad_glUniform1fv -typedef void (APIENTRYP PFNGLUNIFORM2FVPROC)(GLint location, GLsizei count, const GLfloat *value); -GLAPI PFNGLUNIFORM2FVPROC glad_glUniform2fv; -#define glUniform2fv glad_glUniform2fv -typedef void (APIENTRYP PFNGLUNIFORM3FVPROC)(GLint location, GLsizei count, const GLfloat *value); -GLAPI PFNGLUNIFORM3FVPROC glad_glUniform3fv; -#define glUniform3fv glad_glUniform3fv -typedef void (APIENTRYP PFNGLUNIFORM4FVPROC)(GLint location, GLsizei count, const GLfloat *value); -GLAPI PFNGLUNIFORM4FVPROC glad_glUniform4fv; -#define glUniform4fv glad_glUniform4fv -typedef void (APIENTRYP PFNGLUNIFORM1IVPROC)(GLint location, GLsizei count, const GLint *value); -GLAPI PFNGLUNIFORM1IVPROC glad_glUniform1iv; -#define glUniform1iv glad_glUniform1iv -typedef void (APIENTRYP PFNGLUNIFORM2IVPROC)(GLint location, GLsizei count, const GLint *value); -GLAPI PFNGLUNIFORM2IVPROC glad_glUniform2iv; -#define glUniform2iv glad_glUniform2iv -typedef void (APIENTRYP PFNGLUNIFORM3IVPROC)(GLint location, GLsizei count, const GLint *value); -GLAPI PFNGLUNIFORM3IVPROC glad_glUniform3iv; -#define glUniform3iv glad_glUniform3iv -typedef void (APIENTRYP PFNGLUNIFORM4IVPROC)(GLint location, GLsizei count, const GLint *value); -GLAPI PFNGLUNIFORM4IVPROC glad_glUniform4iv; -#define glUniform4iv glad_glUniform4iv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLUNIFORMMATRIX2FVPROC glad_glUniformMatrix2fv; -#define glUniformMatrix2fv glad_glUniformMatrix2fv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLUNIFORMMATRIX3FVPROC glad_glUniformMatrix3fv; -#define glUniformMatrix3fv glad_glUniformMatrix3fv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLUNIFORMMATRIX4FVPROC glad_glUniformMatrix4fv; -#define glUniformMatrix4fv glad_glUniformMatrix4fv -typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC)(GLuint program); -GLAPI PFNGLVALIDATEPROGRAMPROC glad_glValidateProgram; -#define glValidateProgram glad_glValidateProgram -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC)(GLuint index, GLdouble x); -GLAPI PFNGLVERTEXATTRIB1DPROC glad_glVertexAttrib1d; -#define glVertexAttrib1d glad_glVertexAttrib1d -typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC)(GLuint index, const GLdouble *v); -GLAPI PFNGLVERTEXATTRIB1DVPROC glad_glVertexAttrib1dv; -#define glVertexAttrib1dv glad_glVertexAttrib1dv -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC)(GLuint index, GLfloat x); -GLAPI PFNGLVERTEXATTRIB1FPROC glad_glVertexAttrib1f; -#define glVertexAttrib1f glad_glVertexAttrib1f -typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC)(GLuint index, const GLfloat *v); -GLAPI PFNGLVERTEXATTRIB1FVPROC glad_glVertexAttrib1fv; -#define glVertexAttrib1fv glad_glVertexAttrib1fv -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC)(GLuint index, GLshort x); -GLAPI PFNGLVERTEXATTRIB1SPROC glad_glVertexAttrib1s; -#define glVertexAttrib1s glad_glVertexAttrib1s -typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC)(GLuint index, const GLshort *v); -GLAPI PFNGLVERTEXATTRIB1SVPROC glad_glVertexAttrib1sv; -#define glVertexAttrib1sv glad_glVertexAttrib1sv -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC)(GLuint index, GLdouble x, GLdouble y); -GLAPI PFNGLVERTEXATTRIB2DPROC glad_glVertexAttrib2d; -#define glVertexAttrib2d glad_glVertexAttrib2d -typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC)(GLuint index, const GLdouble *v); -GLAPI PFNGLVERTEXATTRIB2DVPROC glad_glVertexAttrib2dv; -#define glVertexAttrib2dv glad_glVertexAttrib2dv -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC)(GLuint index, GLfloat x, GLfloat y); -GLAPI PFNGLVERTEXATTRIB2FPROC glad_glVertexAttrib2f; -#define glVertexAttrib2f glad_glVertexAttrib2f -typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC)(GLuint index, const GLfloat *v); -GLAPI PFNGLVERTEXATTRIB2FVPROC glad_glVertexAttrib2fv; -#define glVertexAttrib2fv glad_glVertexAttrib2fv -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC)(GLuint index, GLshort x, GLshort y); -GLAPI PFNGLVERTEXATTRIB2SPROC glad_glVertexAttrib2s; -#define glVertexAttrib2s glad_glVertexAttrib2s -typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC)(GLuint index, const GLshort *v); -GLAPI PFNGLVERTEXATTRIB2SVPROC glad_glVertexAttrib2sv; -#define glVertexAttrib2sv glad_glVertexAttrib2sv -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z); -GLAPI PFNGLVERTEXATTRIB3DPROC glad_glVertexAttrib3d; -#define glVertexAttrib3d glad_glVertexAttrib3d -typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC)(GLuint index, const GLdouble *v); -GLAPI PFNGLVERTEXATTRIB3DVPROC glad_glVertexAttrib3dv; -#define glVertexAttrib3dv glad_glVertexAttrib3dv -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z); -GLAPI PFNGLVERTEXATTRIB3FPROC glad_glVertexAttrib3f; -#define glVertexAttrib3f glad_glVertexAttrib3f -typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC)(GLuint index, const GLfloat *v); -GLAPI PFNGLVERTEXATTRIB3FVPROC glad_glVertexAttrib3fv; -#define glVertexAttrib3fv glad_glVertexAttrib3fv -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC)(GLuint index, GLshort x, GLshort y, GLshort z); -GLAPI PFNGLVERTEXATTRIB3SPROC glad_glVertexAttrib3s; -#define glVertexAttrib3s glad_glVertexAttrib3s -typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC)(GLuint index, const GLshort *v); -GLAPI PFNGLVERTEXATTRIB3SVPROC glad_glVertexAttrib3sv; -#define glVertexAttrib3sv glad_glVertexAttrib3sv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC)(GLuint index, const GLbyte *v); -GLAPI PFNGLVERTEXATTRIB4NBVPROC glad_glVertexAttrib4Nbv; -#define glVertexAttrib4Nbv glad_glVertexAttrib4Nbv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC)(GLuint index, const GLint *v); -GLAPI PFNGLVERTEXATTRIB4NIVPROC glad_glVertexAttrib4Niv; -#define glVertexAttrib4Niv glad_glVertexAttrib4Niv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC)(GLuint index, const GLshort *v); -GLAPI PFNGLVERTEXATTRIB4NSVPROC glad_glVertexAttrib4Nsv; -#define glVertexAttrib4Nsv glad_glVertexAttrib4Nsv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC)(GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); -GLAPI PFNGLVERTEXATTRIB4NUBPROC glad_glVertexAttrib4Nub; -#define glVertexAttrib4Nub glad_glVertexAttrib4Nub -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC)(GLuint index, const GLubyte *v); -GLAPI PFNGLVERTEXATTRIB4NUBVPROC glad_glVertexAttrib4Nubv; -#define glVertexAttrib4Nubv glad_glVertexAttrib4Nubv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC)(GLuint index, const GLuint *v); -GLAPI PFNGLVERTEXATTRIB4NUIVPROC glad_glVertexAttrib4Nuiv; -#define glVertexAttrib4Nuiv glad_glVertexAttrib4Nuiv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC)(GLuint index, const GLushort *v); -GLAPI PFNGLVERTEXATTRIB4NUSVPROC glad_glVertexAttrib4Nusv; -#define glVertexAttrib4Nusv glad_glVertexAttrib4Nusv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC)(GLuint index, const GLbyte *v); -GLAPI PFNGLVERTEXATTRIB4BVPROC glad_glVertexAttrib4bv; -#define glVertexAttrib4bv glad_glVertexAttrib4bv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC)(GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); -GLAPI PFNGLVERTEXATTRIB4DPROC glad_glVertexAttrib4d; -#define glVertexAttrib4d glad_glVertexAttrib4d -typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC)(GLuint index, const GLdouble *v); -GLAPI PFNGLVERTEXATTRIB4DVPROC glad_glVertexAttrib4dv; -#define glVertexAttrib4dv glad_glVertexAttrib4dv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); -GLAPI PFNGLVERTEXATTRIB4FPROC glad_glVertexAttrib4f; -#define glVertexAttrib4f glad_glVertexAttrib4f -typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC)(GLuint index, const GLfloat *v); -GLAPI PFNGLVERTEXATTRIB4FVPROC glad_glVertexAttrib4fv; -#define glVertexAttrib4fv glad_glVertexAttrib4fv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC)(GLuint index, const GLint *v); -GLAPI PFNGLVERTEXATTRIB4IVPROC glad_glVertexAttrib4iv; -#define glVertexAttrib4iv glad_glVertexAttrib4iv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC)(GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); -GLAPI PFNGLVERTEXATTRIB4SPROC glad_glVertexAttrib4s; -#define glVertexAttrib4s glad_glVertexAttrib4s -typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC)(GLuint index, const GLshort *v); -GLAPI PFNGLVERTEXATTRIB4SVPROC glad_glVertexAttrib4sv; -#define glVertexAttrib4sv glad_glVertexAttrib4sv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC)(GLuint index, const GLubyte *v); -GLAPI PFNGLVERTEXATTRIB4UBVPROC glad_glVertexAttrib4ubv; -#define glVertexAttrib4ubv glad_glVertexAttrib4ubv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC)(GLuint index, const GLuint *v); -GLAPI PFNGLVERTEXATTRIB4UIVPROC glad_glVertexAttrib4uiv; -#define glVertexAttrib4uiv glad_glVertexAttrib4uiv -typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC)(GLuint index, const GLushort *v); -GLAPI PFNGLVERTEXATTRIB4USVPROC glad_glVertexAttrib4usv; -#define glVertexAttrib4usv glad_glVertexAttrib4usv -typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC)(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); -GLAPI PFNGLVERTEXATTRIBPOINTERPROC glad_glVertexAttribPointer; -#define glVertexAttribPointer glad_glVertexAttribPointer -#endif -#ifndef GL_VERSION_2_1 -#define GL_VERSION_2_1 1 -GLAPI int GLAD_GL_VERSION_2_1; -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLUNIFORMMATRIX2X3FVPROC glad_glUniformMatrix2x3fv; -#define glUniformMatrix2x3fv glad_glUniformMatrix2x3fv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLUNIFORMMATRIX3X2FVPROC glad_glUniformMatrix3x2fv; -#define glUniformMatrix3x2fv glad_glUniformMatrix3x2fv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLUNIFORMMATRIX2X4FVPROC glad_glUniformMatrix2x4fv; -#define glUniformMatrix2x4fv glad_glUniformMatrix2x4fv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLUNIFORMMATRIX4X2FVPROC glad_glUniformMatrix4x2fv; -#define glUniformMatrix4x2fv glad_glUniformMatrix4x2fv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLUNIFORMMATRIX3X4FVPROC glad_glUniformMatrix3x4fv; -#define glUniformMatrix3x4fv glad_glUniformMatrix3x4fv -typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC)(GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); -GLAPI PFNGLUNIFORMMATRIX4X3FVPROC glad_glUniformMatrix4x3fv; -#define glUniformMatrix4x3fv glad_glUniformMatrix4x3fv -#endif -#ifndef GL_VERSION_3_0 -#define GL_VERSION_3_0 1 -GLAPI int GLAD_GL_VERSION_3_0; -typedef void (APIENTRYP PFNGLCOLORMASKIPROC)(GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); -GLAPI PFNGLCOLORMASKIPROC glad_glColorMaski; -#define glColorMaski glad_glColorMaski -typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC)(GLenum target, GLuint index, GLboolean *data); -GLAPI PFNGLGETBOOLEANI_VPROC glad_glGetBooleani_v; -#define glGetBooleani_v glad_glGetBooleani_v -typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC)(GLenum target, GLuint index, GLint *data); -GLAPI PFNGLGETINTEGERI_VPROC glad_glGetIntegeri_v; -#define glGetIntegeri_v glad_glGetIntegeri_v -typedef void (APIENTRYP PFNGLENABLEIPROC)(GLenum target, GLuint index); -GLAPI PFNGLENABLEIPROC glad_glEnablei; -#define glEnablei glad_glEnablei -typedef void (APIENTRYP PFNGLDISABLEIPROC)(GLenum target, GLuint index); -GLAPI PFNGLDISABLEIPROC glad_glDisablei; -#define glDisablei glad_glDisablei -typedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC)(GLenum target, GLuint index); -GLAPI PFNGLISENABLEDIPROC glad_glIsEnabledi; -#define glIsEnabledi glad_glIsEnabledi -typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC)(GLenum primitiveMode); -GLAPI PFNGLBEGINTRANSFORMFEEDBACKPROC glad_glBeginTransformFeedback; -#define glBeginTransformFeedback glad_glBeginTransformFeedback -typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC)(void); -GLAPI PFNGLENDTRANSFORMFEEDBACKPROC glad_glEndTransformFeedback; -#define glEndTransformFeedback glad_glEndTransformFeedback -typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); -GLAPI PFNGLBINDBUFFERRANGEPROC glad_glBindBufferRange; -#define glBindBufferRange glad_glBindBufferRange -typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC)(GLenum target, GLuint index, GLuint buffer); -GLAPI PFNGLBINDBUFFERBASEPROC glad_glBindBufferBase; -#define glBindBufferBase glad_glBindBufferBase -typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC)(GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); -GLAPI PFNGLTRANSFORMFEEDBACKVARYINGSPROC glad_glTransformFeedbackVaryings; -#define glTransformFeedbackVaryings glad_glTransformFeedbackVaryings -typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC)(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); -GLAPI PFNGLGETTRANSFORMFEEDBACKVARYINGPROC glad_glGetTransformFeedbackVarying; -#define glGetTransformFeedbackVarying glad_glGetTransformFeedbackVarying -typedef void (APIENTRYP PFNGLCLAMPCOLORPROC)(GLenum target, GLenum clamp); -GLAPI PFNGLCLAMPCOLORPROC glad_glClampColor; -#define glClampColor glad_glClampColor -typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC)(GLuint id, GLenum mode); -GLAPI PFNGLBEGINCONDITIONALRENDERPROC glad_glBeginConditionalRender; -#define glBeginConditionalRender glad_glBeginConditionalRender -typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC)(void); -GLAPI PFNGLENDCONDITIONALRENDERPROC glad_glEndConditionalRender; -#define glEndConditionalRender glad_glEndConditionalRender -typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC)(GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); -GLAPI PFNGLVERTEXATTRIBIPOINTERPROC glad_glVertexAttribIPointer; -#define glVertexAttribIPointer glad_glVertexAttribIPointer -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC)(GLuint index, GLenum pname, GLint *params); -GLAPI PFNGLGETVERTEXATTRIBIIVPROC glad_glGetVertexAttribIiv; -#define glGetVertexAttribIiv glad_glGetVertexAttribIiv -typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC)(GLuint index, GLenum pname, GLuint *params); -GLAPI PFNGLGETVERTEXATTRIBIUIVPROC glad_glGetVertexAttribIuiv; -#define glGetVertexAttribIuiv glad_glGetVertexAttribIuiv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC)(GLuint index, GLint x); -GLAPI PFNGLVERTEXATTRIBI1IPROC glad_glVertexAttribI1i; -#define glVertexAttribI1i glad_glVertexAttribI1i -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC)(GLuint index, GLint x, GLint y); -GLAPI PFNGLVERTEXATTRIBI2IPROC glad_glVertexAttribI2i; -#define glVertexAttribI2i glad_glVertexAttribI2i -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC)(GLuint index, GLint x, GLint y, GLint z); -GLAPI PFNGLVERTEXATTRIBI3IPROC glad_glVertexAttribI3i; -#define glVertexAttribI3i glad_glVertexAttribI3i -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC)(GLuint index, GLint x, GLint y, GLint z, GLint w); -GLAPI PFNGLVERTEXATTRIBI4IPROC glad_glVertexAttribI4i; -#define glVertexAttribI4i glad_glVertexAttribI4i -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC)(GLuint index, GLuint x); -GLAPI PFNGLVERTEXATTRIBI1UIPROC glad_glVertexAttribI1ui; -#define glVertexAttribI1ui glad_glVertexAttribI1ui -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC)(GLuint index, GLuint x, GLuint y); -GLAPI PFNGLVERTEXATTRIBI2UIPROC glad_glVertexAttribI2ui; -#define glVertexAttribI2ui glad_glVertexAttribI2ui -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z); -GLAPI PFNGLVERTEXATTRIBI3UIPROC glad_glVertexAttribI3ui; -#define glVertexAttribI3ui glad_glVertexAttribI3ui -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); -GLAPI PFNGLVERTEXATTRIBI4UIPROC glad_glVertexAttribI4ui; -#define glVertexAttribI4ui glad_glVertexAttribI4ui -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC)(GLuint index, const GLint *v); -GLAPI PFNGLVERTEXATTRIBI1IVPROC glad_glVertexAttribI1iv; -#define glVertexAttribI1iv glad_glVertexAttribI1iv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC)(GLuint index, const GLint *v); -GLAPI PFNGLVERTEXATTRIBI2IVPROC glad_glVertexAttribI2iv; -#define glVertexAttribI2iv glad_glVertexAttribI2iv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC)(GLuint index, const GLint *v); -GLAPI PFNGLVERTEXATTRIBI3IVPROC glad_glVertexAttribI3iv; -#define glVertexAttribI3iv glad_glVertexAttribI3iv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC)(GLuint index, const GLint *v); -GLAPI PFNGLVERTEXATTRIBI4IVPROC glad_glVertexAttribI4iv; -#define glVertexAttribI4iv glad_glVertexAttribI4iv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC)(GLuint index, const GLuint *v); -GLAPI PFNGLVERTEXATTRIBI1UIVPROC glad_glVertexAttribI1uiv; -#define glVertexAttribI1uiv glad_glVertexAttribI1uiv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC)(GLuint index, const GLuint *v); -GLAPI PFNGLVERTEXATTRIBI2UIVPROC glad_glVertexAttribI2uiv; -#define glVertexAttribI2uiv glad_glVertexAttribI2uiv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC)(GLuint index, const GLuint *v); -GLAPI PFNGLVERTEXATTRIBI3UIVPROC glad_glVertexAttribI3uiv; -#define glVertexAttribI3uiv glad_glVertexAttribI3uiv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC)(GLuint index, const GLuint *v); -GLAPI PFNGLVERTEXATTRIBI4UIVPROC glad_glVertexAttribI4uiv; -#define glVertexAttribI4uiv glad_glVertexAttribI4uiv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC)(GLuint index, const GLbyte *v); -GLAPI PFNGLVERTEXATTRIBI4BVPROC glad_glVertexAttribI4bv; -#define glVertexAttribI4bv glad_glVertexAttribI4bv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC)(GLuint index, const GLshort *v); -GLAPI PFNGLVERTEXATTRIBI4SVPROC glad_glVertexAttribI4sv; -#define glVertexAttribI4sv glad_glVertexAttribI4sv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC)(GLuint index, const GLubyte *v); -GLAPI PFNGLVERTEXATTRIBI4UBVPROC glad_glVertexAttribI4ubv; -#define glVertexAttribI4ubv glad_glVertexAttribI4ubv -typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC)(GLuint index, const GLushort *v); -GLAPI PFNGLVERTEXATTRIBI4USVPROC glad_glVertexAttribI4usv; -#define glVertexAttribI4usv glad_glVertexAttribI4usv -typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC)(GLuint program, GLint location, GLuint *params); -GLAPI PFNGLGETUNIFORMUIVPROC glad_glGetUniformuiv; -#define glGetUniformuiv glad_glGetUniformuiv -typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC)(GLuint program, GLuint color, const GLchar *name); -GLAPI PFNGLBINDFRAGDATALOCATIONPROC glad_glBindFragDataLocation; -#define glBindFragDataLocation glad_glBindFragDataLocation -typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC)(GLuint program, const GLchar *name); -GLAPI PFNGLGETFRAGDATALOCATIONPROC glad_glGetFragDataLocation; -#define glGetFragDataLocation glad_glGetFragDataLocation -typedef void (APIENTRYP PFNGLUNIFORM1UIPROC)(GLint location, GLuint v0); -GLAPI PFNGLUNIFORM1UIPROC glad_glUniform1ui; -#define glUniform1ui glad_glUniform1ui -typedef void (APIENTRYP PFNGLUNIFORM2UIPROC)(GLint location, GLuint v0, GLuint v1); -GLAPI PFNGLUNIFORM2UIPROC glad_glUniform2ui; -#define glUniform2ui glad_glUniform2ui -typedef void (APIENTRYP PFNGLUNIFORM3UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2); -GLAPI PFNGLUNIFORM3UIPROC glad_glUniform3ui; -#define glUniform3ui glad_glUniform3ui -typedef void (APIENTRYP PFNGLUNIFORM4UIPROC)(GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); -GLAPI PFNGLUNIFORM4UIPROC glad_glUniform4ui; -#define glUniform4ui glad_glUniform4ui -typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC)(GLint location, GLsizei count, const GLuint *value); -GLAPI PFNGLUNIFORM1UIVPROC glad_glUniform1uiv; -#define glUniform1uiv glad_glUniform1uiv -typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC)(GLint location, GLsizei count, const GLuint *value); -GLAPI PFNGLUNIFORM2UIVPROC glad_glUniform2uiv; -#define glUniform2uiv glad_glUniform2uiv -typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC)(GLint location, GLsizei count, const GLuint *value); -GLAPI PFNGLUNIFORM3UIVPROC glad_glUniform3uiv; -#define glUniform3uiv glad_glUniform3uiv -typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC)(GLint location, GLsizei count, const GLuint *value); -GLAPI PFNGLUNIFORM4UIVPROC glad_glUniform4uiv; -#define glUniform4uiv glad_glUniform4uiv -typedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC)(GLenum target, GLenum pname, const GLint *params); -GLAPI PFNGLTEXPARAMETERIIVPROC glad_glTexParameterIiv; -#define glTexParameterIiv glad_glTexParameterIiv -typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC)(GLenum target, GLenum pname, const GLuint *params); -GLAPI PFNGLTEXPARAMETERIUIVPROC glad_glTexParameterIuiv; -#define glTexParameterIuiv glad_glTexParameterIuiv -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETTEXPARAMETERIIVPROC glad_glGetTexParameterIiv; -#define glGetTexParameterIiv glad_glGetTexParameterIiv -typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC)(GLenum target, GLenum pname, GLuint *params); -GLAPI PFNGLGETTEXPARAMETERIUIVPROC glad_glGetTexParameterIuiv; -#define glGetTexParameterIuiv glad_glGetTexParameterIuiv -typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC)(GLenum buffer, GLint drawbuffer, const GLint *value); -GLAPI PFNGLCLEARBUFFERIVPROC glad_glClearBufferiv; -#define glClearBufferiv glad_glClearBufferiv -typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC)(GLenum buffer, GLint drawbuffer, const GLuint *value); -GLAPI PFNGLCLEARBUFFERUIVPROC glad_glClearBufferuiv; -#define glClearBufferuiv glad_glClearBufferuiv -typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC)(GLenum buffer, GLint drawbuffer, const GLfloat *value); -GLAPI PFNGLCLEARBUFFERFVPROC glad_glClearBufferfv; -#define glClearBufferfv glad_glClearBufferfv -typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC)(GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); -GLAPI PFNGLCLEARBUFFERFIPROC glad_glClearBufferfi; -#define glClearBufferfi glad_glClearBufferfi -typedef const GLubyte * (APIENTRYP PFNGLGETSTRINGIPROC)(GLenum name, GLuint index); -GLAPI PFNGLGETSTRINGIPROC glad_glGetStringi; -#define glGetStringi glad_glGetStringi -typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC)(GLuint renderbuffer); -GLAPI PFNGLISRENDERBUFFERPROC glad_glIsRenderbuffer; -#define glIsRenderbuffer glad_glIsRenderbuffer -typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC)(GLenum target, GLuint renderbuffer); -GLAPI PFNGLBINDRENDERBUFFERPROC glad_glBindRenderbuffer; -#define glBindRenderbuffer glad_glBindRenderbuffer -typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC)(GLsizei n, const GLuint *renderbuffers); -GLAPI PFNGLDELETERENDERBUFFERSPROC glad_glDeleteRenderbuffers; -#define glDeleteRenderbuffers glad_glDeleteRenderbuffers -typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC)(GLsizei n, GLuint *renderbuffers); -GLAPI PFNGLGENRENDERBUFFERSPROC glad_glGenRenderbuffers; -#define glGenRenderbuffers glad_glGenRenderbuffers -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC)(GLenum target, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI PFNGLRENDERBUFFERSTORAGEPROC glad_glRenderbufferStorage; -#define glRenderbufferStorage glad_glRenderbufferStorage -typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC)(GLenum target, GLenum pname, GLint *params); -GLAPI PFNGLGETRENDERBUFFERPARAMETERIVPROC glad_glGetRenderbufferParameteriv; -#define glGetRenderbufferParameteriv glad_glGetRenderbufferParameteriv -typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC)(GLuint framebuffer); -GLAPI PFNGLISFRAMEBUFFERPROC glad_glIsFramebuffer; -#define glIsFramebuffer glad_glIsFramebuffer -typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC)(GLenum target, GLuint framebuffer); -GLAPI PFNGLBINDFRAMEBUFFERPROC glad_glBindFramebuffer; -#define glBindFramebuffer glad_glBindFramebuffer -typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC)(GLsizei n, const GLuint *framebuffers); -GLAPI PFNGLDELETEFRAMEBUFFERSPROC glad_glDeleteFramebuffers; -#define glDeleteFramebuffers glad_glDeleteFramebuffers -typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC)(GLsizei n, GLuint *framebuffers); -GLAPI PFNGLGENFRAMEBUFFERSPROC glad_glGenFramebuffers; -#define glGenFramebuffers glad_glGenFramebuffers -typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC)(GLenum target); -GLAPI PFNGLCHECKFRAMEBUFFERSTATUSPROC glad_glCheckFramebufferStatus; -#define glCheckFramebufferStatus glad_glCheckFramebufferStatus -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI PFNGLFRAMEBUFFERTEXTURE1DPROC glad_glFramebufferTexture1D; -#define glFramebufferTexture1D glad_glFramebufferTexture1D -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); -GLAPI PFNGLFRAMEBUFFERTEXTURE2DPROC glad_glFramebufferTexture2D; -#define glFramebufferTexture2D glad_glFramebufferTexture2D -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); -GLAPI PFNGLFRAMEBUFFERTEXTURE3DPROC glad_glFramebufferTexture3D; -#define glFramebufferTexture3D glad_glFramebufferTexture3D -typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC)(GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); -GLAPI PFNGLFRAMEBUFFERRENDERBUFFERPROC glad_glFramebufferRenderbuffer; -#define glFramebufferRenderbuffer glad_glFramebufferRenderbuffer -typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC)(GLenum target, GLenum attachment, GLenum pname, GLint *params); -GLAPI PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC glad_glGetFramebufferAttachmentParameteriv; -#define glGetFramebufferAttachmentParameteriv glad_glGetFramebufferAttachmentParameteriv -typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC)(GLenum target); -GLAPI PFNGLGENERATEMIPMAPPROC glad_glGenerateMipmap; -#define glGenerateMipmap glad_glGenerateMipmap -typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC)(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); -GLAPI PFNGLBLITFRAMEBUFFERPROC glad_glBlitFramebuffer; -#define glBlitFramebuffer glad_glBlitFramebuffer -typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); -GLAPI PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC glad_glRenderbufferStorageMultisample; -#define glRenderbufferStorageMultisample glad_glRenderbufferStorageMultisample -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); -GLAPI PFNGLFRAMEBUFFERTEXTURELAYERPROC glad_glFramebufferTextureLayer; -#define glFramebufferTextureLayer glad_glFramebufferTextureLayer -typedef void * (APIENTRYP PFNGLMAPBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); -GLAPI PFNGLMAPBUFFERRANGEPROC glad_glMapBufferRange; -#define glMapBufferRange glad_glMapBufferRange -typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC)(GLenum target, GLintptr offset, GLsizeiptr length); -GLAPI PFNGLFLUSHMAPPEDBUFFERRANGEPROC glad_glFlushMappedBufferRange; -#define glFlushMappedBufferRange glad_glFlushMappedBufferRange -typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC)(GLuint array); -GLAPI PFNGLBINDVERTEXARRAYPROC glad_glBindVertexArray; -#define glBindVertexArray glad_glBindVertexArray -typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC)(GLsizei n, const GLuint *arrays); -GLAPI PFNGLDELETEVERTEXARRAYSPROC glad_glDeleteVertexArrays; -#define glDeleteVertexArrays glad_glDeleteVertexArrays -typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC)(GLsizei n, GLuint *arrays); -GLAPI PFNGLGENVERTEXARRAYSPROC glad_glGenVertexArrays; -#define glGenVertexArrays glad_glGenVertexArrays -typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC)(GLuint array); -GLAPI PFNGLISVERTEXARRAYPROC glad_glIsVertexArray; -#define glIsVertexArray glad_glIsVertexArray -#endif -#ifndef GL_VERSION_3_1 -#define GL_VERSION_3_1 1 -GLAPI int GLAD_GL_VERSION_3_1; -typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC)(GLenum mode, GLint first, GLsizei count, GLsizei instancecount); -GLAPI PFNGLDRAWARRAYSINSTANCEDPROC glad_glDrawArraysInstanced; -#define glDrawArraysInstanced glad_glDrawArraysInstanced -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); -GLAPI PFNGLDRAWELEMENTSINSTANCEDPROC glad_glDrawElementsInstanced; -#define glDrawElementsInstanced glad_glDrawElementsInstanced -typedef void (APIENTRYP PFNGLTEXBUFFERPROC)(GLenum target, GLenum internalformat, GLuint buffer); -GLAPI PFNGLTEXBUFFERPROC glad_glTexBuffer; -#define glTexBuffer glad_glTexBuffer -typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC)(GLuint index); -GLAPI PFNGLPRIMITIVERESTARTINDEXPROC glad_glPrimitiveRestartIndex; -#define glPrimitiveRestartIndex glad_glPrimitiveRestartIndex -typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC)(GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); -GLAPI PFNGLCOPYBUFFERSUBDATAPROC glad_glCopyBufferSubData; -#define glCopyBufferSubData glad_glCopyBufferSubData -typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC)(GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); -GLAPI PFNGLGETUNIFORMINDICESPROC glad_glGetUniformIndices; -#define glGetUniformIndices glad_glGetUniformIndices -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC)(GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); -GLAPI PFNGLGETACTIVEUNIFORMSIVPROC glad_glGetActiveUniformsiv; -#define glGetActiveUniformsiv glad_glGetActiveUniformsiv -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC)(GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); -GLAPI PFNGLGETACTIVEUNIFORMNAMEPROC glad_glGetActiveUniformName; -#define glGetActiveUniformName glad_glGetActiveUniformName -typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC)(GLuint program, const GLchar *uniformBlockName); -GLAPI PFNGLGETUNIFORMBLOCKINDEXPROC glad_glGetUniformBlockIndex; -#define glGetUniformBlockIndex glad_glGetUniformBlockIndex -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC)(GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); -GLAPI PFNGLGETACTIVEUNIFORMBLOCKIVPROC glad_glGetActiveUniformBlockiv; -#define glGetActiveUniformBlockiv glad_glGetActiveUniformBlockiv -typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC)(GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); -GLAPI PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC glad_glGetActiveUniformBlockName; -#define glGetActiveUniformBlockName glad_glGetActiveUniformBlockName -typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC)(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); -GLAPI PFNGLUNIFORMBLOCKBINDINGPROC glad_glUniformBlockBinding; -#define glUniformBlockBinding glad_glUniformBlockBinding -#endif -#ifndef GL_VERSION_3_2 -#define GL_VERSION_3_2 1 -GLAPI int GLAD_GL_VERSION_3_2; -typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); -GLAPI PFNGLDRAWELEMENTSBASEVERTEXPROC glad_glDrawElementsBaseVertex; -#define glDrawElementsBaseVertex glad_glDrawElementsBaseVertex -typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC)(GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); -GLAPI PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC glad_glDrawRangeElementsBaseVertex; -#define glDrawRangeElementsBaseVertex glad_glDrawRangeElementsBaseVertex -typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC)(GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); -GLAPI PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC glad_glDrawElementsInstancedBaseVertex; -#define glDrawElementsInstancedBaseVertex glad_glDrawElementsInstancedBaseVertex -typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC)(GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); -GLAPI PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC glad_glMultiDrawElementsBaseVertex; -#define glMultiDrawElementsBaseVertex glad_glMultiDrawElementsBaseVertex -typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC)(GLenum mode); -GLAPI PFNGLPROVOKINGVERTEXPROC glad_glProvokingVertex; -#define glProvokingVertex glad_glProvokingVertex -typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC)(GLenum condition, GLbitfield flags); -GLAPI PFNGLFENCESYNCPROC glad_glFenceSync; -#define glFenceSync glad_glFenceSync -typedef GLboolean (APIENTRYP PFNGLISSYNCPROC)(GLsync sync); -GLAPI PFNGLISSYNCPROC glad_glIsSync; -#define glIsSync glad_glIsSync -typedef void (APIENTRYP PFNGLDELETESYNCPROC)(GLsync sync); -GLAPI PFNGLDELETESYNCPROC glad_glDeleteSync; -#define glDeleteSync glad_glDeleteSync -typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); -GLAPI PFNGLCLIENTWAITSYNCPROC glad_glClientWaitSync; -#define glClientWaitSync glad_glClientWaitSync -typedef void (APIENTRYP PFNGLWAITSYNCPROC)(GLsync sync, GLbitfield flags, GLuint64 timeout); -GLAPI PFNGLWAITSYNCPROC glad_glWaitSync; -#define glWaitSync glad_glWaitSync -typedef void (APIENTRYP PFNGLGETINTEGER64VPROC)(GLenum pname, GLint64 *data); -GLAPI PFNGLGETINTEGER64VPROC glad_glGetInteger64v; -#define glGetInteger64v glad_glGetInteger64v -typedef void (APIENTRYP PFNGLGETSYNCIVPROC)(GLsync sync, GLenum pname, GLsizei count, GLsizei *length, GLint *values); -GLAPI PFNGLGETSYNCIVPROC glad_glGetSynciv; -#define glGetSynciv glad_glGetSynciv -typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC)(GLenum target, GLuint index, GLint64 *data); -GLAPI PFNGLGETINTEGER64I_VPROC glad_glGetInteger64i_v; -#define glGetInteger64i_v glad_glGetInteger64i_v -typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC)(GLenum target, GLenum pname, GLint64 *params); -GLAPI PFNGLGETBUFFERPARAMETERI64VPROC glad_glGetBufferParameteri64v; -#define glGetBufferParameteri64v glad_glGetBufferParameteri64v -typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level); -GLAPI PFNGLFRAMEBUFFERTEXTUREPROC glad_glFramebufferTexture; -#define glFramebufferTexture glad_glFramebufferTexture -typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); -GLAPI PFNGLTEXIMAGE2DMULTISAMPLEPROC glad_glTexImage2DMultisample; -#define glTexImage2DMultisample glad_glTexImage2DMultisample -typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); -GLAPI PFNGLTEXIMAGE3DMULTISAMPLEPROC glad_glTexImage3DMultisample; -#define glTexImage3DMultisample glad_glTexImage3DMultisample -typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC)(GLenum pname, GLuint index, GLfloat *val); -GLAPI PFNGLGETMULTISAMPLEFVPROC glad_glGetMultisamplefv; -#define glGetMultisamplefv glad_glGetMultisamplefv -typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC)(GLuint maskNumber, GLbitfield mask); -GLAPI PFNGLSAMPLEMASKIPROC glad_glSampleMaski; -#define glSampleMaski glad_glSampleMaski -#endif -#ifndef GL_VERSION_3_3 -#define GL_VERSION_3_3 1 -GLAPI int GLAD_GL_VERSION_3_3; -typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC)(GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); -GLAPI PFNGLBINDFRAGDATALOCATIONINDEXEDPROC glad_glBindFragDataLocationIndexed; -#define glBindFragDataLocationIndexed glad_glBindFragDataLocationIndexed -typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC)(GLuint program, const GLchar *name); -GLAPI PFNGLGETFRAGDATAINDEXPROC glad_glGetFragDataIndex; -#define glGetFragDataIndex glad_glGetFragDataIndex -typedef void (APIENTRYP PFNGLGENSAMPLERSPROC)(GLsizei count, GLuint *samplers); -GLAPI PFNGLGENSAMPLERSPROC glad_glGenSamplers; -#define glGenSamplers glad_glGenSamplers -typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC)(GLsizei count, const GLuint *samplers); -GLAPI PFNGLDELETESAMPLERSPROC glad_glDeleteSamplers; -#define glDeleteSamplers glad_glDeleteSamplers -typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC)(GLuint sampler); -GLAPI PFNGLISSAMPLERPROC glad_glIsSampler; -#define glIsSampler glad_glIsSampler -typedef void (APIENTRYP PFNGLBINDSAMPLERPROC)(GLuint unit, GLuint sampler); -GLAPI PFNGLBINDSAMPLERPROC glad_glBindSampler; -#define glBindSampler glad_glBindSampler -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC)(GLuint sampler, GLenum pname, GLint param); -GLAPI PFNGLSAMPLERPARAMETERIPROC glad_glSamplerParameteri; -#define glSamplerParameteri glad_glSamplerParameteri -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, const GLint *param); -GLAPI PFNGLSAMPLERPARAMETERIVPROC glad_glSamplerParameteriv; -#define glSamplerParameteriv glad_glSamplerParameteriv -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC)(GLuint sampler, GLenum pname, GLfloat param); -GLAPI PFNGLSAMPLERPARAMETERFPROC glad_glSamplerParameterf; -#define glSamplerParameterf glad_glSamplerParameterf -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, const GLfloat *param); -GLAPI PFNGLSAMPLERPARAMETERFVPROC glad_glSamplerParameterfv; -#define glSamplerParameterfv glad_glSamplerParameterfv -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC)(GLuint sampler, GLenum pname, const GLint *param); -GLAPI PFNGLSAMPLERPARAMETERIIVPROC glad_glSamplerParameterIiv; -#define glSamplerParameterIiv glad_glSamplerParameterIiv -typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC)(GLuint sampler, GLenum pname, const GLuint *param); -GLAPI PFNGLSAMPLERPARAMETERIUIVPROC glad_glSamplerParameterIuiv; -#define glSamplerParameterIuiv glad_glSamplerParameterIuiv -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC)(GLuint sampler, GLenum pname, GLint *params); -GLAPI PFNGLGETSAMPLERPARAMETERIVPROC glad_glGetSamplerParameteriv; -#define glGetSamplerParameteriv glad_glGetSamplerParameteriv -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC)(GLuint sampler, GLenum pname, GLint *params); -GLAPI PFNGLGETSAMPLERPARAMETERIIVPROC glad_glGetSamplerParameterIiv; -#define glGetSamplerParameterIiv glad_glGetSamplerParameterIiv -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC)(GLuint sampler, GLenum pname, GLfloat *params); -GLAPI PFNGLGETSAMPLERPARAMETERFVPROC glad_glGetSamplerParameterfv; -#define glGetSamplerParameterfv glad_glGetSamplerParameterfv -typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC)(GLuint sampler, GLenum pname, GLuint *params); -GLAPI PFNGLGETSAMPLERPARAMETERIUIVPROC glad_glGetSamplerParameterIuiv; -#define glGetSamplerParameterIuiv glad_glGetSamplerParameterIuiv -typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC)(GLuint id, GLenum target); -GLAPI PFNGLQUERYCOUNTERPROC glad_glQueryCounter; -#define glQueryCounter glad_glQueryCounter -typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC)(GLuint id, GLenum pname, GLint64 *params); -GLAPI PFNGLGETQUERYOBJECTI64VPROC glad_glGetQueryObjecti64v; -#define glGetQueryObjecti64v glad_glGetQueryObjecti64v -typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC)(GLuint id, GLenum pname, GLuint64 *params); -GLAPI PFNGLGETQUERYOBJECTUI64VPROC glad_glGetQueryObjectui64v; -#define glGetQueryObjectui64v glad_glGetQueryObjectui64v -typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC)(GLuint index, GLuint divisor); -GLAPI PFNGLVERTEXATTRIBDIVISORPROC glad_glVertexAttribDivisor; -#define glVertexAttribDivisor glad_glVertexAttribDivisor -typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI PFNGLVERTEXATTRIBP1UIPROC glad_glVertexAttribP1ui; -#define glVertexAttribP1ui glad_glVertexAttribP1ui -typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -GLAPI PFNGLVERTEXATTRIBP1UIVPROC glad_glVertexAttribP1uiv; -#define glVertexAttribP1uiv glad_glVertexAttribP1uiv -typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI PFNGLVERTEXATTRIBP2UIPROC glad_glVertexAttribP2ui; -#define glVertexAttribP2ui glad_glVertexAttribP2ui -typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -GLAPI PFNGLVERTEXATTRIBP2UIVPROC glad_glVertexAttribP2uiv; -#define glVertexAttribP2uiv glad_glVertexAttribP2uiv -typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI PFNGLVERTEXATTRIBP3UIPROC glad_glVertexAttribP3ui; -#define glVertexAttribP3ui glad_glVertexAttribP3ui -typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -GLAPI PFNGLVERTEXATTRIBP3UIVPROC glad_glVertexAttribP3uiv; -#define glVertexAttribP3uiv glad_glVertexAttribP3uiv -typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC)(GLuint index, GLenum type, GLboolean normalized, GLuint value); -GLAPI PFNGLVERTEXATTRIBP4UIPROC glad_glVertexAttribP4ui; -#define glVertexAttribP4ui glad_glVertexAttribP4ui -typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC)(GLuint index, GLenum type, GLboolean normalized, const GLuint *value); -GLAPI PFNGLVERTEXATTRIBP4UIVPROC glad_glVertexAttribP4uiv; -#define glVertexAttribP4uiv glad_glVertexAttribP4uiv -typedef void (APIENTRYP PFNGLVERTEXP2UIPROC)(GLenum type, GLuint value); -GLAPI PFNGLVERTEXP2UIPROC glad_glVertexP2ui; -#define glVertexP2ui glad_glVertexP2ui -typedef void (APIENTRYP PFNGLVERTEXP2UIVPROC)(GLenum type, const GLuint *value); -GLAPI PFNGLVERTEXP2UIVPROC glad_glVertexP2uiv; -#define glVertexP2uiv glad_glVertexP2uiv -typedef void (APIENTRYP PFNGLVERTEXP3UIPROC)(GLenum type, GLuint value); -GLAPI PFNGLVERTEXP3UIPROC glad_glVertexP3ui; -#define glVertexP3ui glad_glVertexP3ui -typedef void (APIENTRYP PFNGLVERTEXP3UIVPROC)(GLenum type, const GLuint *value); -GLAPI PFNGLVERTEXP3UIVPROC glad_glVertexP3uiv; -#define glVertexP3uiv glad_glVertexP3uiv -typedef void (APIENTRYP PFNGLVERTEXP4UIPROC)(GLenum type, GLuint value); -GLAPI PFNGLVERTEXP4UIPROC glad_glVertexP4ui; -#define glVertexP4ui glad_glVertexP4ui -typedef void (APIENTRYP PFNGLVERTEXP4UIVPROC)(GLenum type, const GLuint *value); -GLAPI PFNGLVERTEXP4UIVPROC glad_glVertexP4uiv; -#define glVertexP4uiv glad_glVertexP4uiv -typedef void (APIENTRYP PFNGLTEXCOORDP1UIPROC)(GLenum type, GLuint coords); -GLAPI PFNGLTEXCOORDP1UIPROC glad_glTexCoordP1ui; -#define glTexCoordP1ui glad_glTexCoordP1ui -typedef void (APIENTRYP PFNGLTEXCOORDP1UIVPROC)(GLenum type, const GLuint *coords); -GLAPI PFNGLTEXCOORDP1UIVPROC glad_glTexCoordP1uiv; -#define glTexCoordP1uiv glad_glTexCoordP1uiv -typedef void (APIENTRYP PFNGLTEXCOORDP2UIPROC)(GLenum type, GLuint coords); -GLAPI PFNGLTEXCOORDP2UIPROC glad_glTexCoordP2ui; -#define glTexCoordP2ui glad_glTexCoordP2ui -typedef void (APIENTRYP PFNGLTEXCOORDP2UIVPROC)(GLenum type, const GLuint *coords); -GLAPI PFNGLTEXCOORDP2UIVPROC glad_glTexCoordP2uiv; -#define glTexCoordP2uiv glad_glTexCoordP2uiv -typedef void (APIENTRYP PFNGLTEXCOORDP3UIPROC)(GLenum type, GLuint coords); -GLAPI PFNGLTEXCOORDP3UIPROC glad_glTexCoordP3ui; -#define glTexCoordP3ui glad_glTexCoordP3ui -typedef void (APIENTRYP PFNGLTEXCOORDP3UIVPROC)(GLenum type, const GLuint *coords); -GLAPI PFNGLTEXCOORDP3UIVPROC glad_glTexCoordP3uiv; -#define glTexCoordP3uiv glad_glTexCoordP3uiv -typedef void (APIENTRYP PFNGLTEXCOORDP4UIPROC)(GLenum type, GLuint coords); -GLAPI PFNGLTEXCOORDP4UIPROC glad_glTexCoordP4ui; -#define glTexCoordP4ui glad_glTexCoordP4ui -typedef void (APIENTRYP PFNGLTEXCOORDP4UIVPROC)(GLenum type, const GLuint *coords); -GLAPI PFNGLTEXCOORDP4UIVPROC glad_glTexCoordP4uiv; -#define glTexCoordP4uiv glad_glTexCoordP4uiv -typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIPROC)(GLenum texture, GLenum type, GLuint coords); -GLAPI PFNGLMULTITEXCOORDP1UIPROC glad_glMultiTexCoordP1ui; -#define glMultiTexCoordP1ui glad_glMultiTexCoordP1ui -typedef void (APIENTRYP PFNGLMULTITEXCOORDP1UIVPROC)(GLenum texture, GLenum type, const GLuint *coords); -GLAPI PFNGLMULTITEXCOORDP1UIVPROC glad_glMultiTexCoordP1uiv; -#define glMultiTexCoordP1uiv glad_glMultiTexCoordP1uiv -typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIPROC)(GLenum texture, GLenum type, GLuint coords); -GLAPI PFNGLMULTITEXCOORDP2UIPROC glad_glMultiTexCoordP2ui; -#define glMultiTexCoordP2ui glad_glMultiTexCoordP2ui -typedef void (APIENTRYP PFNGLMULTITEXCOORDP2UIVPROC)(GLenum texture, GLenum type, const GLuint *coords); -GLAPI PFNGLMULTITEXCOORDP2UIVPROC glad_glMultiTexCoordP2uiv; -#define glMultiTexCoordP2uiv glad_glMultiTexCoordP2uiv -typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIPROC)(GLenum texture, GLenum type, GLuint coords); -GLAPI PFNGLMULTITEXCOORDP3UIPROC glad_glMultiTexCoordP3ui; -#define glMultiTexCoordP3ui glad_glMultiTexCoordP3ui -typedef void (APIENTRYP PFNGLMULTITEXCOORDP3UIVPROC)(GLenum texture, GLenum type, const GLuint *coords); -GLAPI PFNGLMULTITEXCOORDP3UIVPROC glad_glMultiTexCoordP3uiv; -#define glMultiTexCoordP3uiv glad_glMultiTexCoordP3uiv -typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIPROC)(GLenum texture, GLenum type, GLuint coords); -GLAPI PFNGLMULTITEXCOORDP4UIPROC glad_glMultiTexCoordP4ui; -#define glMultiTexCoordP4ui glad_glMultiTexCoordP4ui -typedef void (APIENTRYP PFNGLMULTITEXCOORDP4UIVPROC)(GLenum texture, GLenum type, const GLuint *coords); -GLAPI PFNGLMULTITEXCOORDP4UIVPROC glad_glMultiTexCoordP4uiv; -#define glMultiTexCoordP4uiv glad_glMultiTexCoordP4uiv -typedef void (APIENTRYP PFNGLNORMALP3UIPROC)(GLenum type, GLuint coords); -GLAPI PFNGLNORMALP3UIPROC glad_glNormalP3ui; -#define glNormalP3ui glad_glNormalP3ui -typedef void (APIENTRYP PFNGLNORMALP3UIVPROC)(GLenum type, const GLuint *coords); -GLAPI PFNGLNORMALP3UIVPROC glad_glNormalP3uiv; -#define glNormalP3uiv glad_glNormalP3uiv -typedef void (APIENTRYP PFNGLCOLORP3UIPROC)(GLenum type, GLuint color); -GLAPI PFNGLCOLORP3UIPROC glad_glColorP3ui; -#define glColorP3ui glad_glColorP3ui -typedef void (APIENTRYP PFNGLCOLORP3UIVPROC)(GLenum type, const GLuint *color); -GLAPI PFNGLCOLORP3UIVPROC glad_glColorP3uiv; -#define glColorP3uiv glad_glColorP3uiv -typedef void (APIENTRYP PFNGLCOLORP4UIPROC)(GLenum type, GLuint color); -GLAPI PFNGLCOLORP4UIPROC glad_glColorP4ui; -#define glColorP4ui glad_glColorP4ui -typedef void (APIENTRYP PFNGLCOLORP4UIVPROC)(GLenum type, const GLuint *color); -GLAPI PFNGLCOLORP4UIVPROC glad_glColorP4uiv; -#define glColorP4uiv glad_glColorP4uiv -typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIPROC)(GLenum type, GLuint color); -GLAPI PFNGLSECONDARYCOLORP3UIPROC glad_glSecondaryColorP3ui; -#define glSecondaryColorP3ui glad_glSecondaryColorP3ui -typedef void (APIENTRYP PFNGLSECONDARYCOLORP3UIVPROC)(GLenum type, const GLuint *color); -GLAPI PFNGLSECONDARYCOLORP3UIVPROC glad_glSecondaryColorP3uiv; -#define glSecondaryColorP3uiv glad_glSecondaryColorP3uiv -#endif - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/vendor/glm/common.hpp b/src/vendor/glm/common.hpp deleted file mode 100755 index 0328dc9..0000000 --- a/src/vendor/glm/common.hpp +++ /dev/null @@ -1,539 +0,0 @@ -/// @ref core -/// @file glm/common.hpp -/// -/// @see GLSL 4.20.8 specification, section 8.3 Common Functions -/// -/// @defgroup core_func_common Common functions -/// @ingroup core -/// -/// Provides GLSL common functions -/// -/// These all operate component-wise. The description is per component. -/// -/// Include to use these core features. - -#pragma once - -#include "detail/qualifier.hpp" -#include "detail/_fixes.hpp" - -namespace glm -{ - /// @addtogroup core_func_common - /// @{ - - /// Returns x if x >= 0; otherwise, it returns -x. - /// - /// @tparam genType floating-point or signed integer; scalar or vector types. - /// - /// @see GLSL abs man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR genType abs(genType x); - - /// Returns x if x >= 0; otherwise, it returns -x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or signed integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL abs man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec abs(vec const& x); - - /// Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL sign man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec sign(vec const& x); - - /// Returns a value equal to the nearest integer that is less then or equal to x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL floor man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec floor(vec const& x); - - /// Returns a value equal to the nearest integer to x - /// whose absolute value is not larger than the absolute value of x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL trunc man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec trunc(vec const& x); - - /// Returns a value equal to the nearest integer to x. - /// The fraction 0.5 will round in a direction chosen by the - /// implementation, presumably the direction that is fastest. - /// This includes the possibility that round(x) returns the - /// same value as roundEven(x) for all values of x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL round man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec round(vec const& x); - - /// Returns a value equal to the nearest integer to x. - /// A fractional part of 0.5 will round toward the nearest even - /// integer. (Both 3.5 and 4.5 for x will return 4.0.) - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL roundEven man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - /// @see New round to even technique - template - GLM_FUNC_DECL vec roundEven(vec const& x); - - /// Returns a value equal to the nearest integer - /// that is greater than or equal to x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL ceil man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec ceil(vec const& x); - - /// Return x - floor(x). - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL fract man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL genType fract(genType x); - - /// Return x - floor(x). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL fract man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec fract(vec const& x); - - template - GLM_FUNC_DECL genType mod(genType x, genType y); - - template - GLM_FUNC_DECL vec mod(vec const& x, T y); - - /// Modulus. Returns x - y * floor(x / y) - /// for each component in x using the floating point value y. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types, include glm/gtc/integer for integer scalar types support - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL mod man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec mod(vec const& x, vec const& y); - - /// Returns the fractional part of x and sets i to the integer - /// part (as a whole number floating point value). Both the - /// return value and the output parameter will have the same - /// sign as x. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL modf man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL genType modf(genType x, genType& i); - - /// Returns y if y < x; otherwise, it returns x. - /// - /// @tparam genType Floating-point or integer; scalar or vector types. - /// - /// @see GLSL min man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR genType min(genType x, genType y); - - /// Returns y if y < x; otherwise, it returns x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL min man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec min(vec const& x, T y); - - /// Returns y if y < x; otherwise, it returns x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL min man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec min(vec const& x, vec const& y); - - /// Returns y if x < y; otherwise, it returns x. - /// - /// @tparam genType Floating-point or integer; scalar or vector types. - /// - /// @see GLSL max man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR genType max(genType x, genType y); - - /// Returns y if x < y; otherwise, it returns x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL max man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec max(vec const& x, T y); - - /// Returns y if x < y; otherwise, it returns x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL max man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec max(vec const& x, vec const& y); - - /// Returns min(max(x, minVal), maxVal) for each component in x - /// using the floating-point values minVal and maxVal. - /// - /// @tparam genType Floating-point or integer; scalar or vector types. - /// - /// @see GLSL clamp man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR genType clamp(genType x, genType minVal, genType maxVal); - - /// Returns min(max(x, minVal), maxVal) for each component in x - /// using the floating-point values minVal and maxVal. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL clamp man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec clamp(vec const& x, T minVal, T maxVal); - - /// Returns min(max(x, minVal), maxVal) for each component in x - /// using the floating-point values minVal and maxVal. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL clamp man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec clamp(vec const& x, vec const& minVal, vec const& maxVal); - - /// If genTypeU is a floating scalar or vector: - /// Returns x * (1.0 - a) + y * a, i.e., the linear blend of - /// x and y using the floating-point value a. - /// The value for a is not restricted to the range [0, 1]. - /// - /// If genTypeU is a boolean scalar or vector: - /// Selects which vector each returned component comes - /// from. For a component of 'a' that is false, the - /// corresponding component of 'x' is returned. For a - /// component of 'a' that is true, the corresponding - /// component of 'y' is returned. Components of 'x' and 'y' that - /// are not selected are allowed to be invalid floating point - /// values and will have no effect on the results. Thus, this - /// provides different functionality than - /// genType mix(genType x, genType y, genType(a)) - /// where a is a Boolean vector. - /// - /// @see GLSL mix man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - /// - /// @param[in] x Value to interpolate. - /// @param[in] y Value to interpolate. - /// @param[in] a Interpolant. - /// - /// @tparam genTypeT Floating point scalar or vector. - /// @tparam genTypeU Floating point or boolean scalar or vector. It can't be a vector if it is the length of genTypeT. - /// - /// @code - /// #include - /// ... - /// float a; - /// bool b; - /// glm::dvec3 e; - /// glm::dvec3 f; - /// glm::vec4 g; - /// glm::vec4 h; - /// ... - /// glm::vec4 r = glm::mix(g, h, a); // Interpolate with a floating-point scalar two vectors. - /// glm::vec4 s = glm::mix(g, h, b); // Returns g or h; - /// glm::dvec3 t = glm::mix(e, f, a); // Types of the third parameter is not required to match with the first and the second. - /// glm::vec4 u = glm::mix(g, h, r); // Interpolations can be perform per component with a vector for the last parameter. - /// @endcode - template - GLM_FUNC_DECL genTypeT mix(genTypeT x, genTypeT y, genTypeU a); - - template - GLM_FUNC_DECL vec mix(vec const& x, vec const& y, vec const& a); - - template - GLM_FUNC_DECL vec mix(vec const& x, vec const& y, U a); - - /// Returns 0.0 if x < edge, otherwise it returns 1.0 for each component of a genType. - /// - /// @see GLSL step man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL genType step(genType edge, genType x); - - /// Returns 0.0 if x < edge, otherwise it returns 1.0. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL step man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec step(T edge, vec const& x); - - /// Returns 0.0 if x < edge, otherwise it returns 1.0. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL step man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec step(vec const& edge, vec const& x); - - /// Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and - /// performs smooth Hermite interpolation between 0 and 1 - /// when edge0 < x < edge1. This is useful in cases where - /// you would want a threshold function with a smooth - /// transition. This is equivalent to: - /// genType t; - /// t = clamp ((x - edge0) / (edge1 - edge0), 0, 1); - /// return t * t * (3 - 2 * t); - /// Results are undefined if edge0 >= edge1. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL smoothstep man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL genType smoothstep(genType edge0, genType edge1, genType x); - - template - GLM_FUNC_DECL vec smoothstep(T edge0, T edge1, vec const& x); - - template - GLM_FUNC_DECL vec smoothstep(vec const& edge0, vec const& edge1, vec const& x); - - /// Returns true if x holds a NaN (not a number) - /// representation in the underlying implementation's set of - /// floating point representations. Returns false otherwise, - /// including for implementations with no NaN - /// representations. - /// - /// /!\ When using compiler fast math, this function may fail. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL isnan man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec isnan(vec const& x); - - /// Returns true if x holds a positive infinity or negative - /// infinity representation in the underlying implementation's - /// set of floating point representations. Returns false - /// otherwise, including for implementations with no infinity - /// representations. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL isinf man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec isinf(vec const& x); - - /// Returns a signed integer value representing - /// the encoding of a floating-point value. The floating-point - /// value's bit-level representation is preserved. - /// - /// @see GLSL floatBitsToInt man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - GLM_FUNC_DECL int floatBitsToInt(float const& v); - - /// Returns a signed integer value representing - /// the encoding of a floating-point value. The floatingpoint - /// value's bit-level representation is preserved. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL floatBitsToInt man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec floatBitsToInt(vec const& v); - - /// Returns a unsigned integer value representing - /// the encoding of a floating-point value. The floatingpoint - /// value's bit-level representation is preserved. - /// - /// @see GLSL floatBitsToUint man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - GLM_FUNC_DECL uint floatBitsToUint(float const& v); - - /// Returns a unsigned integer value representing - /// the encoding of a floating-point value. The floatingpoint - /// value's bit-level representation is preserved. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL floatBitsToUint man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec floatBitsToUint(vec const& v); - - /// Returns a floating-point value corresponding to a signed - /// integer encoding of a floating-point value. - /// If an inf or NaN is passed in, it will not signal, and the - /// resulting floating point value is unspecified. Otherwise, - /// the bit-level representation is preserved. - /// - /// @see GLSL intBitsToFloat man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - GLM_FUNC_DECL float intBitsToFloat(int const& v); - - /// Returns a floating-point value corresponding to a signed - /// integer encoding of a floating-point value. - /// If an inf or NaN is passed in, it will not signal, and the - /// resulting floating point value is unspecified. Otherwise, - /// the bit-level representation is preserved. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL intBitsToFloat man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec intBitsToFloat(vec const& v); - - /// Returns a floating-point value corresponding to a - /// unsigned integer encoding of a floating-point value. - /// If an inf or NaN is passed in, it will not signal, and the - /// resulting floating point value is unspecified. Otherwise, - /// the bit-level representation is preserved. - /// - /// @see GLSL uintBitsToFloat man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - GLM_FUNC_DECL float uintBitsToFloat(uint const& v); - - /// Returns a floating-point value corresponding to a - /// unsigned integer encoding of a floating-point value. - /// If an inf or NaN is passed in, it will not signal, and the - /// resulting floating point value is unspecified. Otherwise, - /// the bit-level representation is preserved. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL uintBitsToFloat man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec uintBitsToFloat(vec const& v); - - /// Computes and returns a * b + c. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL fma man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL genType fma(genType const& a, genType const& b, genType const& c); - - /// Splits x into a floating-point significand in the range - /// [0.5, 1.0) and an integral exponent of two, such that: - /// x = significand * exp(2, exponent) - /// - /// The significand is returned by the function and the - /// exponent is returned in the parameter exp. For a - /// floating-point value of zero, the significant and exponent - /// are both zero. For a floating-point value that is an - /// infinity or is not a number, the results are undefined. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL frexp man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL genType frexp(genType x, int& exp); - - template - GLM_FUNC_DECL vec frexp(vec const& v, vec& exp); - - /// Builds a floating-point number from x and the - /// corresponding integral exponent of two in exp, returning: - /// significand * exp(2, exponent) - /// - /// If this product is too large to be represented in the - /// floating-point type, the result is undefined. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL ldexp man page; - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL genType ldexp(genType const& x, int const& exp); - - template - GLM_FUNC_DECL vec ldexp(vec const& v, vec const& exp); - - /// @} -}//namespace glm - -#include "detail/func_common.inl" - diff --git a/src/vendor/glm/detail/_features.hpp b/src/vendor/glm/detail/_features.hpp deleted file mode 100755 index b0cbe9f..0000000 --- a/src/vendor/glm/detail/_features.hpp +++ /dev/null @@ -1,394 +0,0 @@ -#pragma once - -// #define GLM_CXX98_EXCEPTIONS -// #define GLM_CXX98_RTTI - -// #define GLM_CXX11_RVALUE_REFERENCES -// Rvalue references - GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html - -// GLM_CXX11_TRAILING_RETURN -// Rvalue references for *this - GCC not supported -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm - -// GLM_CXX11_NONSTATIC_MEMBER_INIT -// Initialization of class objects by rvalues - GCC any -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1610.html - -// GLM_CXX11_NONSTATIC_MEMBER_INIT -// Non-static data member initializers - GCC 4.7 -// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm - -// #define GLM_CXX11_VARIADIC_TEMPLATE -// Variadic templates - GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf - -// -// Extending variadic template template parameters - GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf - -// #define GLM_CXX11_GENERALIZED_INITIALIZERS -// Initializer lists - GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm - -// #define GLM_CXX11_STATIC_ASSERT -// Static assertions - GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html - -// #define GLM_CXX11_AUTO_TYPE -// auto-typed variables - GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf - -// #define GLM_CXX11_AUTO_TYPE -// Multi-declarator auto - GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1737.pdf - -// #define GLM_CXX11_AUTO_TYPE -// Removal of auto as a storage-class specifier - GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2546.htm - -// #define GLM_CXX11_AUTO_TYPE -// New function declarator syntax - GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm - -// #define GLM_CXX11_LAMBDAS -// New wording for C++0x lambdas - GCC 4.5 -// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2927.pdf - -// #define GLM_CXX11_DECLTYPE -// Declared type of an expression - GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf - -// -// Right angle brackets - GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html - -// -// Default template arguments for function templates DR226 GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226 - -// -// Solving the SFINAE problem for expressions DR339 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html - -// #define GLM_CXX11_ALIAS_TEMPLATE -// Template aliases N2258 GCC 4.7 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf - -// -// Extern templates N1987 Yes -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm - -// #define GLM_CXX11_NULLPTR -// Null pointer constant N2431 GCC 4.6 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf - -// #define GLM_CXX11_STRONG_ENUMS -// Strongly-typed enums N2347 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf - -// -// Forward declarations for enums N2764 GCC 4.6 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf - -// -// Generalized attributes N2761 GCC 4.8 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf - -// -// Generalized constant expressions N2235 GCC 4.6 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf - -// -// Alignment support N2341 GCC 4.8 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf - -// #define GLM_CXX11_DELEGATING_CONSTRUCTORS -// Delegating constructors N1986 GCC 4.7 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf - -// -// Inheriting constructors N2540 GCC 4.8 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm - -// #define GLM_CXX11_EXPLICIT_CONVERSIONS -// Explicit conversion operators N2437 GCC 4.5 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf - -// -// New character types N2249 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html - -// -// Unicode string literals N2442 GCC 4.5 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm - -// -// Raw string literals N2442 GCC 4.5 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm - -// -// Universal character name literals N2170 GCC 4.5 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2170.html - -// #define GLM_CXX11_USER_LITERALS -// User-defined literals N2765 GCC 4.7 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf - -// -// Standard Layout Types N2342 GCC 4.5 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.htm - -// #define GLM_CXX11_DEFAULTED_FUNCTIONS -// #define GLM_CXX11_DELETED_FUNCTIONS -// Defaulted and deleted functions N2346 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm - -// -// Extended friend declarations N1791 GCC 4.7 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf - -// -// Extending sizeof N2253 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html - -// #define GLM_CXX11_INLINE_NAMESPACES -// Inline namespaces N2535 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm - -// #define GLM_CXX11_UNRESTRICTED_UNIONS -// Unrestricted unions N2544 GCC 4.6 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf - -// #define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS -// Local and unnamed types as template arguments N2657 GCC 4.5 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm - -// #define GLM_CXX11_RANGE_FOR -// Range-based for N2930 GCC 4.6 -// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html - -// #define GLM_CXX11_OVERRIDE_CONTROL -// Explicit virtual overrides N2928 N3206 N3272 GCC 4.7 -// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm - -// -// Minimal support for garbage collection and reachability-based leak detection N2670 No -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm - -// #define GLM_CXX11_NOEXCEPT -// Allowing move constructors to throw [noexcept] N3050 GCC 4.6 (core language only) -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html - -// -// Defining move special member functions N3053 GCC 4.6 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html - -// -// Sequence points N2239 Yes -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html - -// -// Atomic operations N2427 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html - -// -// Strong Compare and Exchange N2748 GCC 4.5 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html - -// -// Bidirectional Fences N2752 GCC 4.8 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2752.htm - -// -// Memory model N2429 GCC 4.8 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm - -// -// Data-dependency ordering: atomics and memory model N2664 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2664.htm - -// -// Propagating exceptions N2179 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html - -// -// Abandoning a process and at_quick_exit N2440 GCC 4.8 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2440.htm - -// -// Allow atomics use in signal handlers N2547 Yes -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2547.htm - -// -// Thread-local storage N2659 GCC 4.8 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm - -// -// Dynamic initialization and destruction with concurrency N2660 GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm - -// -// __func__ predefined identifier N2340 GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2340.htm - -// -// C99 preprocessor N1653 GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm - -// -// long long N1811 GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf - -// -// Extended integral types N1988 Yes -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1988.pdf - -#if(GLM_COMPILER & GLM_COMPILER_GCC) - -# define GLM_CXX11_STATIC_ASSERT - -#elif(GLM_COMPILER & GLM_COMPILER_CLANG) -# if(__has_feature(cxx_exceptions)) -# define GLM_CXX98_EXCEPTIONS -# endif - -# if(__has_feature(cxx_rtti)) -# define GLM_CXX98_RTTI -# endif - -# if(__has_feature(cxx_access_control_sfinae)) -# define GLM_CXX11_ACCESS_CONTROL_SFINAE -# endif - -# if(__has_feature(cxx_alias_templates)) -# define GLM_CXX11_ALIAS_TEMPLATE -# endif - -# if(__has_feature(cxx_alignas)) -# define GLM_CXX11_ALIGNAS -# endif - -# if(__has_feature(cxx_attributes)) -# define GLM_CXX11_ATTRIBUTES -# endif - -# if(__has_feature(cxx_constexpr)) -# define GLM_CXX11_CONSTEXPR -# endif - -# if(__has_feature(cxx_decltype)) -# define GLM_CXX11_DECLTYPE -# endif - -# if(__has_feature(cxx_default_function_template_args)) -# define GLM_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS -# endif - -# if(__has_feature(cxx_defaulted_functions)) -# define GLM_CXX11_DEFAULTED_FUNCTIONS -# endif - -# if(__has_feature(cxx_delegating_constructors)) -# define GLM_CXX11_DELEGATING_CONSTRUCTORS -# endif - -# if(__has_feature(cxx_deleted_functions)) -# define GLM_CXX11_DELETED_FUNCTIONS -# endif - -# if(__has_feature(cxx_explicit_conversions)) -# define GLM_CXX11_EXPLICIT_CONVERSIONS -# endif - -# if(__has_feature(cxx_generalized_initializers)) -# define GLM_CXX11_GENERALIZED_INITIALIZERS -# endif - -# if(__has_feature(cxx_implicit_moves)) -# define GLM_CXX11_IMPLICIT_MOVES -# endif - -# if(__has_feature(cxx_inheriting_constructors)) -# define GLM_CXX11_INHERITING_CONSTRUCTORS -# endif - -# if(__has_feature(cxx_inline_namespaces)) -# define GLM_CXX11_INLINE_NAMESPACES -# endif - -# if(__has_feature(cxx_lambdas)) -# define GLM_CXX11_LAMBDAS -# endif - -# if(__has_feature(cxx_local_type_template_args)) -# define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS -# endif - -# if(__has_feature(cxx_noexcept)) -# define GLM_CXX11_NOEXCEPT -# endif - -# if(__has_feature(cxx_nonstatic_member_init)) -# define GLM_CXX11_NONSTATIC_MEMBER_INIT -# endif - -# if(__has_feature(cxx_nullptr)) -# define GLM_CXX11_NULLPTR -# endif - -# if(__has_feature(cxx_override_control)) -# define GLM_CXX11_OVERRIDE_CONTROL -# endif - -# if(__has_feature(cxx_reference_qualified_functions)) -# define GLM_CXX11_REFERENCE_QUALIFIED_FUNCTIONS -# endif - -# if(__has_feature(cxx_range_for)) -# define GLM_CXX11_RANGE_FOR -# endif - -# if(__has_feature(cxx_raw_string_literals)) -# define GLM_CXX11_RAW_STRING_LITERALS -# endif - -# if(__has_feature(cxx_rvalue_references)) -# define GLM_CXX11_RVALUE_REFERENCES -# endif - -# if(__has_feature(cxx_static_assert)) -# define GLM_CXX11_STATIC_ASSERT -# endif - -# if(__has_feature(cxx_auto_type)) -# define GLM_CXX11_AUTO_TYPE -# endif - -# if(__has_feature(cxx_strong_enums)) -# define GLM_CXX11_STRONG_ENUMS -# endif - -# if(__has_feature(cxx_trailing_return)) -# define GLM_CXX11_TRAILING_RETURN -# endif - -# if(__has_feature(cxx_unicode_literals)) -# define GLM_CXX11_UNICODE_LITERALS -# endif - -# if(__has_feature(cxx_unrestricted_unions)) -# define GLM_CXX11_UNRESTRICTED_UNIONS -# endif - -# if(__has_feature(cxx_user_literals)) -# define GLM_CXX11_USER_LITERALS -# endif - -# if(__has_feature(cxx_variadic_templates)) -# define GLM_CXX11_VARIADIC_TEMPLATES -# endif - -#endif//(GLM_COMPILER & GLM_COMPILER_CLANG) diff --git a/src/vendor/glm/detail/_fixes.hpp b/src/vendor/glm/detail/_fixes.hpp deleted file mode 100755 index a503c7c..0000000 --- a/src/vendor/glm/detail/_fixes.hpp +++ /dev/null @@ -1,27 +0,0 @@ -#include - -//! Workaround for compatibility with other libraries -#ifdef max -#undef max -#endif - -//! Workaround for compatibility with other libraries -#ifdef min -#undef min -#endif - -//! Workaround for Android -#ifdef isnan -#undef isnan -#endif - -//! Workaround for Android -#ifdef isinf -#undef isinf -#endif - -//! Workaround for Chrone Native Client -#ifdef log2 -#undef log2 -#endif - diff --git a/src/vendor/glm/detail/_noise.hpp b/src/vendor/glm/detail/_noise.hpp deleted file mode 100755 index 5a874a0..0000000 --- a/src/vendor/glm/detail/_noise.hpp +++ /dev/null @@ -1,81 +0,0 @@ -#pragma once - -#include "../common.hpp" - -namespace glm{ -namespace detail -{ - template - GLM_FUNC_QUALIFIER T mod289(T const& x) - { - return x - floor(x * (static_cast(1.0) / static_cast(289.0))) * static_cast(289.0); - } - - template - GLM_FUNC_QUALIFIER T permute(T const& x) - { - return mod289(((x * static_cast(34)) + static_cast(1)) * x); - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> permute(vec<2, T, Q> const& x) - { - return mod289(((x * static_cast(34)) + static_cast(1)) * x); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> permute(vec<3, T, Q> const& x) - { - return mod289(((x * static_cast(34)) + static_cast(1)) * x); - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> permute(vec<4, T, Q> const& x) - { - return mod289(((x * static_cast(34)) + static_cast(1)) * x); - } - - template - GLM_FUNC_QUALIFIER T taylorInvSqrt(T const& r) - { - return static_cast(1.79284291400159) - static_cast(0.85373472095314) * r; - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> taylorInvSqrt(vec<2, T, Q> const& r) - { - return static_cast(1.79284291400159) - static_cast(0.85373472095314) * r; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> taylorInvSqrt(vec<3, T, Q> const& r) - { - return static_cast(1.79284291400159) - static_cast(0.85373472095314) * r; - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> taylorInvSqrt(vec<4, T, Q> const& r) - { - return static_cast(1.79284291400159) - static_cast(0.85373472095314) * r; - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> fade(vec<2, T, Q> const& t) - { - return (t * t * t) * (t * (t * static_cast(6) - static_cast(15)) + static_cast(10)); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> fade(vec<3, T, Q> const& t) - { - return (t * t * t) * (t * (t * static_cast(6) - static_cast(15)) + static_cast(10)); - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> fade(vec<4, T, Q> const& t) - { - return (t * t * t) * (t * (t * static_cast(6) - static_cast(15)) + static_cast(10)); - } -}//namespace detail -}//namespace glm - diff --git a/src/vendor/glm/detail/_swizzle.hpp b/src/vendor/glm/detail/_swizzle.hpp deleted file mode 100755 index 87896ef..0000000 --- a/src/vendor/glm/detail/_swizzle.hpp +++ /dev/null @@ -1,804 +0,0 @@ -#pragma once - -namespace glm{ -namespace detail -{ - // Internal class for implementing swizzle operators - template - struct _swizzle_base0 - { - protected: - GLM_FUNC_QUALIFIER T& elem(size_t i){ return (reinterpret_cast(_buffer))[i]; } - GLM_FUNC_QUALIFIER T const& elem(size_t i) const{ return (reinterpret_cast(_buffer))[i]; } - - // Use an opaque buffer to *ensure* the compiler doesn't call a constructor. - // The size 1 buffer is assumed to aligned to the actual members so that the - // elem() - char _buffer[1]; - }; - - template - struct _swizzle_base1 : public _swizzle_base0 - { - }; - - template - struct _swizzle_base1<2, T, Q, E0,E1,-1,-2, Aligned> : public _swizzle_base0 - { - GLM_FUNC_QUALIFIER vec<2, T, Q> operator ()() const { return vec<2, T, Q>(this->elem(E0), this->elem(E1)); } - }; - - template - struct _swizzle_base1<3, T, Q, E0,E1,E2,-1, Aligned> : public _swizzle_base0 - { - GLM_FUNC_QUALIFIER vec<3, T, Q> operator ()() const { return vec<3, T, Q>(this->elem(E0), this->elem(E1), this->elem(E2)); } - }; - - template - struct _swizzle_base1<4, T, Q, E0,E1,E2,E3, Aligned> : public _swizzle_base0 - { - GLM_FUNC_QUALIFIER vec<4, T, Q> operator ()() const { return vec<4, T, Q>(this->elem(E0), this->elem(E1), this->elem(E2), this->elem(E3)); } - }; - - // Internal class for implementing swizzle operators - /* - Template parameters: - - T = type of scalar values (e.g. float, double) - N = number of components in the vector (e.g. 3) - E0...3 = what index the n-th element of this swizzle refers to in the unswizzled vec - - DUPLICATE_ELEMENTS = 1 if there is a repeated element, 0 otherwise (used to specialize swizzles - containing duplicate elements so that they cannot be used as r-values). - */ - template - struct _swizzle_base2 : public _swizzle_base1::value> - { - struct op_equal - { - GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e = t; } - }; - - struct op_minus - { - GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e -= t; } - }; - - struct op_plus - { - GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e += t; } - }; - - struct op_mul - { - GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e *= t; } - }; - - struct op_div - { - GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e /= t; } - }; - - public: - GLM_FUNC_QUALIFIER _swizzle_base2& operator= (const T& t) - { - for (int i = 0; i < N; ++i) - (*this)[i] = t; - return *this; - } - - GLM_FUNC_QUALIFIER _swizzle_base2& operator= (vec const& that) - { - _apply_op(that, op_equal()); - return *this; - } - - GLM_FUNC_QUALIFIER void operator -= (vec const& that) - { - _apply_op(that, op_minus()); - } - - GLM_FUNC_QUALIFIER void operator += (vec const& that) - { - _apply_op(that, op_plus()); - } - - GLM_FUNC_QUALIFIER void operator *= (vec const& that) - { - _apply_op(that, op_mul()); - } - - GLM_FUNC_QUALIFIER void operator /= (vec const& that) - { - _apply_op(that, op_div()); - } - - GLM_FUNC_QUALIFIER T& operator[](size_t i) - { - const int offset_dst[4] = { E0, E1, E2, E3 }; - return this->elem(offset_dst[i]); - } - GLM_FUNC_QUALIFIER T operator[](size_t i) const - { - const int offset_dst[4] = { E0, E1, E2, E3 }; - return this->elem(offset_dst[i]); - } - - protected: - template - GLM_FUNC_QUALIFIER void _apply_op(vec const& that, const U& op) - { - // Make a copy of the data in this == &that. - // The copier should optimize out the copy in cases where the function is - // properly inlined and the copy is not necessary. - T t[N]; - for (int i = 0; i < N; ++i) - t[i] = that[i]; - for (int i = 0; i < N; ++i) - op( (*this)[i], t[i] ); - } - }; - - // Specialization for swizzles containing duplicate elements. These cannot be modified. - template - struct _swizzle_base2 : public _swizzle_base1::value> - { - struct Stub {}; - - GLM_FUNC_QUALIFIER _swizzle_base2& operator= (Stub const&) { return *this; } - - GLM_FUNC_QUALIFIER T operator[] (size_t i) const - { - const int offset_dst[4] = { E0, E1, E2, E3 }; - return this->elem(offset_dst[i]); - } - }; - - template - struct _swizzle : public _swizzle_base2 - { - typedef _swizzle_base2 base_type; - - using base_type::operator=; - - GLM_FUNC_QUALIFIER operator vec () const { return (*this)(); } - }; - -// -// To prevent the C++ syntax from getting entirely overwhelming, define some alias macros -// -#define GLM_SWIZZLE_TEMPLATE1 template -#define GLM_SWIZZLE_TEMPLATE2 template -#define GLM_SWIZZLE_TYPE1 _swizzle -#define GLM_SWIZZLE_TYPE2 _swizzle - -// -// Wrapper for a binary operator (e.g. u.yy + v.zy) -// -#define GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \ - GLM_SWIZZLE_TEMPLATE2 \ - GLM_FUNC_QUALIFIER vec operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b) \ - { \ - return a() OPERAND b(); \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER vec operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const vec& b) \ - { \ - return a() OPERAND b; \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER vec operator OPERAND ( const vec& a, const GLM_SWIZZLE_TYPE1& b) \ - { \ - return a OPERAND b(); \ - } - -// -// Wrapper for a operand between a swizzle and a binary (e.g. 1.0f - u.xyz) -// -#define GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER vec operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const T& b) \ - { \ - return a() OPERAND b; \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER vec operator OPERAND ( const T& a, const GLM_SWIZZLE_TYPE1& b) \ - { \ - return a OPERAND b(); \ - } - -// -// Macro for wrapping a function taking one argument (e.g. abs()) -// -#define GLM_SWIZZLE_FUNCTION_1_ARGS(RETURN_TYPE,FUNCTION) \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a) \ - { \ - return FUNCTION(a()); \ - } - -// -// Macro for wrapping a function taking two vector arguments (e.g. dot()). -// -#define GLM_SWIZZLE_FUNCTION_2_ARGS(RETURN_TYPE,FUNCTION) \ - GLM_SWIZZLE_TEMPLATE2 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b) \ - { \ - return FUNCTION(a(), b()); \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE1& b) \ - { \ - return FUNCTION(a(), b()); \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const typename V& b) \ - { \ - return FUNCTION(a(), b); \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const V& a, const GLM_SWIZZLE_TYPE1& b) \ - { \ - return FUNCTION(a, b()); \ - } - -// -// Macro for wrapping a function take 2 vec arguments followed by a scalar (e.g. mix()). -// -#define GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(RETURN_TYPE,FUNCTION) \ - GLM_SWIZZLE_TEMPLATE2 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b, const T& c) \ - { \ - return FUNCTION(a(), b(), c); \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE1& b, const T& c) \ - { \ - return FUNCTION(a(), b(), c); \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const typename S0::vec_type& b, const T& c)\ - { \ - return FUNCTION(a(), b, c); \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const typename V& a, const GLM_SWIZZLE_TYPE1& b, const T& c) \ - { \ - return FUNCTION(a, b(), c); \ - } - -}//namespace detail -}//namespace glm - -namespace glm -{ - namespace detail - { - GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(-) - GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(*) - GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(+) - GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(-) - GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(*) - GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(/) - } - - // - // Swizzles are distinct types from the unswizzled type. The below macros will - // provide template specializations for the swizzle types for the given functions - // so that the compiler does not have any ambiguity to choosing how to handle - // the function. - // - // The alternative is to use the operator()() when calling the function in order - // to explicitly convert the swizzled type to the unswizzled type. - // - - //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, abs); - //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acos); - //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acosh); - //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, all); - //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, any); - - //GLM_SWIZZLE_FUNCTION_2_ARGS(value_type, dot); - //GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, cross); - //GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, step); - //GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(vec_type, mix); -} - -#define GLM_SWIZZLE2_2_MEMBERS(T, Q, E0,E1) \ - struct { detail::_swizzle<2, T, Q, 0,0,-1,-2> E0 ## E0; }; \ - struct { detail::_swizzle<2, T, Q, 0,1,-1,-2> E0 ## E1; }; \ - struct { detail::_swizzle<2, T, Q, 1,0,-1,-2> E1 ## E0; }; \ - struct { detail::_swizzle<2, T, Q, 1,1,-1,-2> E1 ## E1; }; - -#define GLM_SWIZZLE2_3_MEMBERS(T, Q, E0,E1) \ - struct { detail::_swizzle<3,T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<3,T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<3,T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<3,T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<3,T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<3,T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<3,T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<3,T, Q, 1,1,1,-1> E1 ## E1 ## E1; }; - -#define GLM_SWIZZLE2_4_MEMBERS(T, Q, E0,E1) \ - struct { detail::_swizzle<4,T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; - -#define GLM_SWIZZLE3_2_MEMBERS(T, Q, E0,E1,E2) \ - struct { detail::_swizzle<2,T, Q, 0,0,-1,-2> E0 ## E0; }; \ - struct { detail::_swizzle<2,T, Q, 0,1,-1,-2> E0 ## E1; }; \ - struct { detail::_swizzle<2,T, Q, 0,2,-1,-2> E0 ## E2; }; \ - struct { detail::_swizzle<2,T, Q, 1,0,-1,-2> E1 ## E0; }; \ - struct { detail::_swizzle<2,T, Q, 1,1,-1,-2> E1 ## E1; }; \ - struct { detail::_swizzle<2,T, Q, 1,2,-1,-2> E1 ## E2; }; \ - struct { detail::_swizzle<2,T, Q, 2,0,-1,-2> E2 ## E0; }; \ - struct { detail::_swizzle<2,T, Q, 2,1,-1,-2> E2 ## E1; }; \ - struct { detail::_swizzle<2,T, Q, 2,2,-1,-2> E2 ## E2; }; - -#define GLM_SWIZZLE3_3_MEMBERS(T, Q ,E0,E1,E2) \ - struct { detail::_swizzle<3, T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 0,0,2,-1> E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 0,1,2,-1> E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 0,2,0,-1> E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 0,2,1,-1> E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 0,2,2,-1> E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 1,0,2,-1> E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 1,1,1,-1> E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 1,1,2,-1> E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 1,2,0,-1> E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 1,2,1,-1> E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 1,2,2,-1> E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 2,0,0,-1> E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 2,0,1,-1> E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 2,0,2,-1> E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 2,1,0,-1> E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 2,1,1,-1> E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 2,1,2,-1> E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 2,2,0,-1> E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 2,2,1,-1> E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 2,2,2,-1> E2 ## E2 ## E2; }; - -#define GLM_SWIZZLE3_4_MEMBERS(T, Q, E0,E1,E2) \ - struct { detail::_swizzle<4,T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,2,2> E2 ## E2 ## E2 ## E2; }; - -#define GLM_SWIZZLE4_2_MEMBERS(T, Q, E0,E1,E2,E3) \ - struct { detail::_swizzle<2,T, Q, 0,0,-1,-2> E0 ## E0; }; \ - struct { detail::_swizzle<2,T, Q, 0,1,-1,-2> E0 ## E1; }; \ - struct { detail::_swizzle<2,T, Q, 0,2,-1,-2> E0 ## E2; }; \ - struct { detail::_swizzle<2,T, Q, 0,3,-1,-2> E0 ## E3; }; \ - struct { detail::_swizzle<2,T, Q, 1,0,-1,-2> E1 ## E0; }; \ - struct { detail::_swizzle<2,T, Q, 1,1,-1,-2> E1 ## E1; }; \ - struct { detail::_swizzle<2,T, Q, 1,2,-1,-2> E1 ## E2; }; \ - struct { detail::_swizzle<2,T, Q, 1,3,-1,-2> E1 ## E3; }; \ - struct { detail::_swizzle<2,T, Q, 2,0,-1,-2> E2 ## E0; }; \ - struct { detail::_swizzle<2,T, Q, 2,1,-1,-2> E2 ## E1; }; \ - struct { detail::_swizzle<2,T, Q, 2,2,-1,-2> E2 ## E2; }; \ - struct { detail::_swizzle<2,T, Q, 2,3,-1,-2> E2 ## E3; }; \ - struct { detail::_swizzle<2,T, Q, 3,0,-1,-2> E3 ## E0; }; \ - struct { detail::_swizzle<2,T, Q, 3,1,-1,-2> E3 ## E1; }; \ - struct { detail::_swizzle<2,T, Q, 3,2,-1,-2> E3 ## E2; }; \ - struct { detail::_swizzle<2,T, Q, 3,3,-1,-2> E3 ## E3; }; - -#define GLM_SWIZZLE4_3_MEMBERS(T, Q, E0,E1,E2,E3) \ - struct { detail::_swizzle<3, T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 0,0,2,-1> E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 0,0,3,-1> E0 ## E0 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 0,1,2,-1> E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 0,1,3,-1> E0 ## E1 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 0,2,0,-1> E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 0,2,1,-1> E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 0,2,2,-1> E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 0,2,3,-1> E0 ## E2 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 0,3,0,-1> E0 ## E3 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 0,3,1,-1> E0 ## E3 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 0,3,2,-1> E0 ## E3 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 0,3,3,-1> E0 ## E3 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 1,0,2,-1> E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 1,0,3,-1> E1 ## E0 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 1,1,1,-1> E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 1,1,2,-1> E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 1,1,3,-1> E1 ## E1 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 1,2,0,-1> E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 1,2,1,-1> E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 1,2,2,-1> E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 1,2,3,-1> E1 ## E2 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 1,3,0,-1> E1 ## E3 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 1,3,1,-1> E1 ## E3 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 1,3,2,-1> E1 ## E3 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 1,3,3,-1> E1 ## E3 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 2,0,0,-1> E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 2,0,1,-1> E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 2,0,2,-1> E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 2,0,3,-1> E2 ## E0 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 2,1,0,-1> E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 2,1,1,-1> E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 2,1,2,-1> E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 2,1,3,-1> E2 ## E1 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 2,2,0,-1> E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 2,2,1,-1> E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 2,2,2,-1> E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 2,2,3,-1> E2 ## E2 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 2,3,0,-1> E2 ## E3 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 2,3,1,-1> E2 ## E3 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 2,3,2,-1> E2 ## E3 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 2,3,3,-1> E2 ## E3 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 3,0,0,-1> E3 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 3,0,1,-1> E3 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 3,0,2,-1> E3 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 3,0,3,-1> E3 ## E0 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 3,1,0,-1> E3 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 3,1,1,-1> E3 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 3,1,2,-1> E3 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 3,1,3,-1> E3 ## E1 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 3,2,0,-1> E3 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 3,2,1,-1> E3 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 3,2,2,-1> E3 ## E2 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 3,2,3,-1> E3 ## E2 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 3,3,0,-1> E3 ## E3 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 3,3,1,-1> E3 ## E3 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 3,3,2,-1> E3 ## E3 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 3,3,3,-1> E3 ## E3 ## E3; }; - -#define GLM_SWIZZLE4_4_MEMBERS(T, Q, E0,E1,E2,E3) \ - struct { detail::_swizzle<4, T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,0,3> E0 ## E0 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,1,3> E0 ## E0 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,2,3> E0 ## E0 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,3,0> E0 ## E0 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,3,1> E0 ## E0 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,3,2> E0 ## E0 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,3,3> E0 ## E0 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,0,3> E0 ## E1 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,1,3> E0 ## E1 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,2,3> E0 ## E1 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,3,0> E0 ## E1 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,3,1> E0 ## E1 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,3,2> E0 ## E1 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,3,3> E0 ## E1 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,0,3> E0 ## E2 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,1,3> E0 ## E2 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,2,3> E0 ## E2 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,3,0> E0 ## E2 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,3,1> E0 ## E2 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,3,2> E0 ## E2 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,3,3> E0 ## E2 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,0,0> E0 ## E3 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,0,1> E0 ## E3 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,0,2> E0 ## E3 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,0,3> E0 ## E3 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,1,0> E0 ## E3 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,1,1> E0 ## E3 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,1,2> E0 ## E3 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,1,3> E0 ## E3 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,2,0> E0 ## E3 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,2,1> E0 ## E3 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,2,2> E0 ## E3 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,2,3> E0 ## E3 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,3,0> E0 ## E3 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,3,1> E0 ## E3 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,3,2> E0 ## E3 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,3,3> E0 ## E3 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,0,3> E1 ## E0 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,1,3> E1 ## E0 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,2,3> E1 ## E0 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,3,0> E1 ## E0 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,3,1> E1 ## E0 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,3,2> E1 ## E0 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,3,3> E1 ## E0 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,0,3> E1 ## E1 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,1,3> E1 ## E1 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,2,3> E1 ## E1 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,3,0> E1 ## E1 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,3,1> E1 ## E1 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,3,2> E1 ## E1 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,3,3> E1 ## E1 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,0,3> E1 ## E2 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,1,3> E1 ## E2 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,2,3> E1 ## E2 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,3,0> E1 ## E2 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,3,1> E1 ## E2 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,3,2> E1 ## E2 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,3,3> E1 ## E2 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,0,0> E1 ## E3 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,0,1> E1 ## E3 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,0,2> E1 ## E3 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,0,3> E1 ## E3 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,1,0> E1 ## E3 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,1,1> E1 ## E3 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,1,2> E1 ## E3 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,1,3> E1 ## E3 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,2,0> E1 ## E3 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,2,1> E1 ## E3 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,2,2> E1 ## E3 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,2,3> E1 ## E3 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,3,0> E1 ## E3 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,3,1> E1 ## E3 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,3,2> E1 ## E3 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,3,3> E1 ## E3 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,0,3> E2 ## E0 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,1,3> E2 ## E0 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,2,3> E2 ## E0 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,3,0> E2 ## E0 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,3,1> E2 ## E0 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,3,2> E2 ## E0 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,3,3> E2 ## E0 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,0,3> E2 ## E1 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,1,3> E2 ## E1 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,2,3> E2 ## E1 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,3,0> E2 ## E1 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,3,1> E2 ## E1 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,3,2> E2 ## E1 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,3,3> E2 ## E1 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,0,3> E2 ## E2 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,1,3> E2 ## E2 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,2,2> E2 ## E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,2,3> E2 ## E2 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,3,0> E2 ## E2 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,3,1> E2 ## E2 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,3,2> E2 ## E2 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,3,3> E2 ## E2 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,0,0> E2 ## E3 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,0,1> E2 ## E3 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,0,2> E2 ## E3 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,0,3> E2 ## E3 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,1,0> E2 ## E3 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,1,1> E2 ## E3 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,1,2> E2 ## E3 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,1,3> E2 ## E3 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,2,0> E2 ## E3 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,2,1> E2 ## E3 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,2,2> E2 ## E3 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,2,3> E2 ## E3 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,3,0> E2 ## E3 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,3,1> E2 ## E3 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,3,2> E2 ## E3 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,3,3> E2 ## E3 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,0,0> E3 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,0,1> E3 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,0,2> E3 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,0,3> E3 ## E0 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,1,0> E3 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,1,1> E3 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,1,2> E3 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,1,3> E3 ## E0 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,2,0> E3 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,2,1> E3 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,2,2> E3 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,2,3> E3 ## E0 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,3,0> E3 ## E0 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,3,1> E3 ## E0 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,3,2> E3 ## E0 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,3,3> E3 ## E0 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,0,0> E3 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,0,1> E3 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,0,2> E3 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,0,3> E3 ## E1 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,1,0> E3 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,1,1> E3 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,1,2> E3 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,1,3> E3 ## E1 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,2,0> E3 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,2,1> E3 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,2,2> E3 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,2,3> E3 ## E1 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,3,0> E3 ## E1 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,3,1> E3 ## E1 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,3,2> E3 ## E1 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,3,3> E3 ## E1 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,0,0> E3 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,0,1> E3 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,0,2> E3 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,0,3> E3 ## E2 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,1,0> E3 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,1,1> E3 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,1,2> E3 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,1,3> E3 ## E2 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,2,0> E3 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,2,1> E3 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,2,2> E3 ## E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,2,3> E3 ## E2 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,3,0> E3 ## E2 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,3,1> E3 ## E2 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,3,2> E3 ## E2 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,3,3> E3 ## E2 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,0,0> E3 ## E3 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,0,1> E3 ## E3 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,0,2> E3 ## E3 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,0,3> E3 ## E3 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,1,0> E3 ## E3 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,1,1> E3 ## E3 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,1,2> E3 ## E3 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,1,3> E3 ## E3 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,2,0> E3 ## E3 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,2,1> E3 ## E3 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,2,2> E3 ## E3 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,2,3> E3 ## E3 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,3,0> E3 ## E3 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,3,1> E3 ## E3 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,3,2> E3 ## E3 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,3,3> E3 ## E3 ## E3 ## E3; }; diff --git a/src/vendor/glm/detail/_swizzle_func.hpp b/src/vendor/glm/detail/_swizzle_func.hpp deleted file mode 100755 index d93c6af..0000000 --- a/src/vendor/glm/detail/_swizzle_func.hpp +++ /dev/null @@ -1,682 +0,0 @@ -#pragma once - -#define GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, CONST, A, B) \ - vec<2, T, Q> A ## B() CONST \ - { \ - return vec<2, T, Q>(this->A, this->B); \ - } - -#define GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, CONST, A, B, C) \ - vec<3, T, Q> A ## B ## C() CONST \ - { \ - return vec<3, T, Q>(this->A, this->B, this->C); \ - } - -#define GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, CONST, A, B, C, D) \ - vec<4, T, Q> A ## B ## C ## D() CONST \ - { \ - return vec<4, T, Q>(this->A, this->B, this->C, this->D); \ - } - -#define GLM_SWIZZLE_GEN_VEC2_ENTRY_DEF(T, P, L, CONST, A, B) \ - template \ - vec vec::A ## B() CONST \ - { \ - return vec<2, T, Q>(this->A, this->B); \ - } - -#define GLM_SWIZZLE_GEN_VEC3_ENTRY_DEF(T, P, L, CONST, A, B, C) \ - template \ - vec<3, T, Q> vec::A ## B ## C() CONST \ - { \ - return vec<3, T, Q>(this->A, this->B, this->C); \ - } - -#define GLM_SWIZZLE_GEN_VEC4_ENTRY_DEF(T, P, L, CONST, A, B, C, D) \ - template \ - vec<4, T, Q> vec::A ## B ## C ## D() CONST \ - { \ - return vec<4, T, Q>(this->A, this->B, this->C, this->D); \ - } - -#define GLM_MUTABLE - -#define GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, 2, GLM_MUTABLE, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, 2, GLM_MUTABLE, B, A) - -#define GLM_SWIZZLE_GEN_REF_FROM_VEC2(T, P) \ - GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, x, y) \ - GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, r, g) \ - GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, s, t) - -#define GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, B) - -#define GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, A, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, B, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, B, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, C, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, C, B, A) - -#define GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(T, P, A, B, C) - -#define GLM_SWIZZLE_GEN_REF_FROM_VEC3(T, P) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, x, y, z) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, r, g, b) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, s, t, p) - -#define GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, C) - -#define GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, C, B) - -#define GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, C, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, C, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, B, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, C, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, C, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, A, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, A, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, B, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, B, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, A, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, A, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, B, C, A) - -#define GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) - -#define GLM_SWIZZLE_GEN_REF_FROM_VEC4(T, P) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, x, y, z, w) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, r, g, b, a) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, s, t, p, q) - -#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(T, P, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) - -#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(T, P, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) - -#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(T, P, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, A, B) \ - GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(T, P, A, B) \ - GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(T, P, A, B) \ - GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(T, P, A, B) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, P) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, x, y) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, r, g) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, s, t) - -#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, C) - -#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, C) - -#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, C) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(T, P, A, B, C) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, P) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, x, y, z) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, r, g, b) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, s, t, p) - -#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, D) - -#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, D) - -#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, D) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, P) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, x, y, z, w) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, r, g, b, a) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, s, t, p, q) - diff --git a/src/vendor/glm/detail/_vectorize.hpp b/src/vendor/glm/detail/_vectorize.hpp deleted file mode 100755 index 1fcaec3..0000000 --- a/src/vendor/glm/detail/_vectorize.hpp +++ /dev/null @@ -1,162 +0,0 @@ -#pragma once - -namespace glm{ -namespace detail -{ - template class vec, length_t L, typename R, typename T, qualifier Q> - struct functor1{}; - - template class vec, typename R, typename T, qualifier Q> - struct functor1 - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<1, R, Q> call(R (*Func) (T x), vec<1, T, Q> const& v) - { - return vec<1, R, Q>(Func(v.x)); - } - }; - - template class vec, typename R, typename T, qualifier Q> - struct functor1 - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<2, R, Q> call(R (*Func) (T x), vec<2, T, Q> const& v) - { - return vec<2, R, Q>(Func(v.x), Func(v.y)); - } - }; - - template class vec, typename R, typename T, qualifier Q> - struct functor1 - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<3, R, Q> call(R (*Func) (T x), vec<3, T, Q> const& v) - { - return vec<3, R, Q>(Func(v.x), Func(v.y), Func(v.z)); - } - }; - - template class vec, typename R, typename T, qualifier Q> - struct functor1 - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, R, Q> call(R (*Func) (T x), vec<4, T, Q> const& v) - { - return vec<4, R, Q>(Func(v.x), Func(v.y), Func(v.z), Func(v.w)); - } - }; - - template class vec, length_t L, typename T, qualifier Q> - struct functor2{}; - - template class vec, typename T, qualifier Q> - struct functor2 - { - GLM_FUNC_QUALIFIER static vec<1, T, Q> call(T (*Func) (T x, T y), vec<1, T, Q> const& a, vec<1, T, Q> const& b) - { - return vec<1, T, Q>(Func(a.x, b.x)); - } - }; - - template class vec, typename T, qualifier Q> - struct functor2 - { - GLM_FUNC_QUALIFIER static vec<2, T, Q> call(T (*Func) (T x, T y), vec<2, T, Q> const& a, vec<2, T, Q> const& b) - { - return vec<2, T, Q>(Func(a.x, b.x), Func(a.y, b.y)); - } - }; - - template class vec, typename T, qualifier Q> - struct functor2 - { - GLM_FUNC_QUALIFIER static vec<3, T, Q> call(T (*Func) (T x, T y), vec<3, T, Q> const& a, vec<3, T, Q> const& b) - { - return vec<3, T, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z)); - } - }; - - template class vec, typename T, qualifier Q> - struct functor2 - { - GLM_FUNC_QUALIFIER static vec<4, T, Q> call(T (*Func) (T x, T y), vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w)); - } - }; - - template class vec, length_t L, typename T, qualifier Q> - struct functor2_vec_sca{}; - - template class vec, typename T, qualifier Q> - struct functor2_vec_sca - { - GLM_FUNC_QUALIFIER static vec<1, T, Q> call(T (*Func) (T x, T y), vec<1, T, Q> const& a, T b) - { - return vec<1, T, Q>(Func(a.x, b)); - } - }; - - template class vec, typename T, qualifier Q> - struct functor2_vec_sca - { - GLM_FUNC_QUALIFIER static vec<2, T, Q> call(T (*Func) (T x, T y), vec<2, T, Q> const& a, T b) - { - return vec<2, T, Q>(Func(a.x, b), Func(a.y, b)); - } - }; - - template class vec, typename T, qualifier Q> - struct functor2_vec_sca - { - GLM_FUNC_QUALIFIER static vec<3, T, Q> call(T (*Func) (T x, T y), vec<3, T, Q> const& a, T b) - { - return vec<3, T, Q>(Func(a.x, b), Func(a.y, b), Func(a.z, b)); - } - }; - - template class vec, typename T, qualifier Q> - struct functor2_vec_sca - { - GLM_FUNC_QUALIFIER static vec<4, T, Q> call(T (*Func) (T x, T y), vec<4, T, Q> const& a, T b) - { - return vec<4, T, Q>(Func(a.x, b), Func(a.y, b), Func(a.z, b), Func(a.w, b)); - } - }; - - template - struct functor2_vec_int {}; - - template - struct functor2_vec_int<1, T, Q> - { - GLM_FUNC_QUALIFIER static vec<1, int, Q> call(int (*Func) (T x, int y), vec<1, T, Q> const& a, vec<1, int, Q> const& b) - { - return vec<1, int, Q>(Func(a.x, b.x)); - } - }; - - template - struct functor2_vec_int<2, T, Q> - { - GLM_FUNC_QUALIFIER static vec<2, int, Q> call(int (*Func) (T x, int y), vec<2, T, Q> const& a, vec<2, int, Q> const& b) - { - return vec<2, int, Q>(Func(a.x, b.x), Func(a.y, b.y)); - } - }; - - template - struct functor2_vec_int<3, T, Q> - { - GLM_FUNC_QUALIFIER static vec<3, int, Q> call(int (*Func) (T x, int y), vec<3, T, Q> const& a, vec<3, int, Q> const& b) - { - return vec<3, int, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z)); - } - }; - - template - struct functor2_vec_int<4, T, Q> - { - GLM_FUNC_QUALIFIER static vec<4, int, Q> call(int (*Func) (T x, int y), vec<4, T, Q> const& a, vec<4, int, Q> const& b) - { - return vec<4, int, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w)); - } - }; -}//namespace detail -}//namespace glm diff --git a/src/vendor/glm/detail/compute_common.hpp b/src/vendor/glm/detail/compute_common.hpp deleted file mode 100755 index 7267a49..0000000 --- a/src/vendor/glm/detail/compute_common.hpp +++ /dev/null @@ -1,50 +0,0 @@ -#pragma once - -#include "setup.hpp" -#include - -namespace glm{ -namespace detail -{ - template - struct compute_abs - {}; - - template - struct compute_abs - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static genFIType call(genFIType x) - { - GLM_STATIC_ASSERT( - std::numeric_limits::is_iec559 || std::numeric_limits::is_signed, - "'abs' only accept floating-point and integer scalar or vector inputs"); - - return x >= genFIType(0) ? x : -x; - // TODO, perf comp with: *(((int *) &x) + 1) &= 0x7fffffff; - } - }; - -#if (GLM_COMPILER & GLM_COMPILER_CUDA) || (GLM_COMPILER & GLM_COMPILER_HIP) - template<> - struct compute_abs - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static float call(float x) - { - return fabsf(x); - } - }; -#endif - - template - struct compute_abs - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static genFIType call(genFIType x) - { - GLM_STATIC_ASSERT( - (!std::numeric_limits::is_signed && std::numeric_limits::is_integer), - "'abs' only accept floating-point and integer scalar or vector inputs"); - return x; - } - }; -}//namespace detail -}//namespace glm diff --git a/src/vendor/glm/detail/compute_vector_relational.hpp b/src/vendor/glm/detail/compute_vector_relational.hpp deleted file mode 100755 index 167b634..0000000 --- a/src/vendor/glm/detail/compute_vector_relational.hpp +++ /dev/null @@ -1,30 +0,0 @@ -#pragma once - -//#include "compute_common.hpp" -#include "setup.hpp" -#include - -namespace glm{ -namespace detail -{ - template - struct compute_equal - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(T a, T b) - { - return a == b; - } - }; -/* - template - struct compute_equal - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(T a, T b) - { - return detail::compute_abs::is_signed>::call(b - a) <= static_cast(0); - //return std::memcmp(&a, &b, sizeof(T)) == 0; - } - }; -*/ -}//namespace detail -}//namespace glm diff --git a/src/vendor/glm/detail/func_common.inl b/src/vendor/glm/detail/func_common.inl deleted file mode 100755 index 86560be..0000000 --- a/src/vendor/glm/detail/func_common.inl +++ /dev/null @@ -1,792 +0,0 @@ -/// @ref core -/// @file glm/detail/func_common.inl - -#include "../vector_relational.hpp" -#include "compute_common.hpp" -#include "type_vec1.hpp" -#include "type_vec2.hpp" -#include "type_vec3.hpp" -#include "type_vec4.hpp" -#include "_vectorize.hpp" -#include - -namespace glm -{ - // min - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType min(genType x, genType y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'min' only accept floating-point or integer inputs"); - return (y < x) ? y : x; - } - - // max - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType max(genType x, genType y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'max' only accept floating-point or integer inputs"); - - return (x < y) ? y : x; - } - - // abs - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR int abs(int x) - { - int const y = x >> (sizeof(int) * 8 - 1); - return (x ^ y) - y; - } - - // round -# if GLM_HAS_CXX11_STL - using ::std::round; -# else - template - GLM_FUNC_QUALIFIER genType round(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'round' only accept floating-point inputs"); - - return x < static_cast(0) ? static_cast(int(x - static_cast(0.5))) : static_cast(int(x + static_cast(0.5))); - } -# endif - - // trunc -# if GLM_HAS_CXX11_STL - using ::std::trunc; -# else - template - GLM_FUNC_QUALIFIER genType trunc(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'trunc' only accept floating-point inputs"); - - return x < static_cast(0) ? -std::floor(-x) : std::floor(x); - } -# endif - -}//namespace glm - -namespace glm{ -namespace detail -{ - template - struct compute_abs_vector - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec call(vec const& x) - { - return detail::functor1::call(abs, x); - } - }; - - template - struct compute_mix_vector - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& y, vec const& a) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'mix' only accept floating-point inputs for the interpolator a"); - - return vec(vec(x) * (static_cast(1) - a) + vec(y) * a); - } - }; - - template - struct compute_mix_vector - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& y, vec const& a) - { - vec Result; - for(length_t i = 0; i < x.length(); ++i) - Result[i] = a[i] ? y[i] : x[i]; - return Result; - } - }; - - template - struct compute_mix_scalar - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& y, U const& a) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'mix' only accept floating-point inputs for the interpolator a"); - - return vec(vec(x) * (static_cast(1) - a) + vec(y) * a); - } - }; - - template - struct compute_mix_scalar - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& y, bool const& a) - { - return a ? y : x; - } - }; - - template - struct compute_mix - { - GLM_FUNC_QUALIFIER static T call(T const& x, T const& y, U const& a) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'mix' only accept floating-point inputs for the interpolator a"); - - return static_cast(static_cast(x) * (static_cast(1) - a) + static_cast(y) * a); - } - }; - - template - struct compute_mix - { - GLM_FUNC_QUALIFIER static T call(T const& x, T const& y, bool const& a) - { - return a ? y : x; - } - }; - - template - struct compute_sign - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return vec(glm::lessThan(vec(0), x)) - vec(glm::lessThan(x, vec(0))); - } - }; - -# if GLM_ARCH == GLM_ARCH_X86 - template - struct compute_sign - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - T const Shift(static_cast(sizeof(T) * 8 - 1)); - vec const y(vec::type, Q>(-x) >> typename detail::make_unsigned::type(Shift)); - - return (x >> Shift) | y; - } - }; -# endif - - template - struct compute_floor - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return detail::functor1::call(std::floor, x); - } - }; - - template - struct compute_ceil - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return detail::functor1::call(std::ceil, x); - } - }; - - template - struct compute_fract - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return x - floor(x); - } - }; - - template - struct compute_trunc - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return detail::functor1::call(trunc, x); - } - }; - - template - struct compute_round - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return detail::functor1::call(round, x); - } - }; - - template - struct compute_mod - { - GLM_FUNC_QUALIFIER static vec call(vec const& a, vec const& b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'mod' only accept floating-point inputs. Include for integer inputs."); - return a - b * floor(a / b); - } - }; - - template - struct compute_min_vector - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& y) - { - return detail::functor2::call(min, x, y); - } - }; - - template - struct compute_max_vector - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& y) - { - return detail::functor2::call(max, x, y); - } - }; - - template - struct compute_clamp_vector - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& minVal, vec const& maxVal) - { - return min(max(x, minVal), maxVal); - } - }; - - template - struct compute_step_vector - { - GLM_FUNC_QUALIFIER static vec call(vec const& edge, vec const& x) - { - return mix(vec(1), vec(0), glm::lessThan(x, edge)); - } - }; - - template - struct compute_smoothstep_vector - { - GLM_FUNC_QUALIFIER static vec call(vec const& edge0, vec const& edge1, vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'smoothstep' only accept floating-point inputs"); - vec const tmp(clamp((x - edge0) / (edge1 - edge0), static_cast(0), static_cast(1))); - return tmp * tmp * (static_cast(3) - static_cast(2) * tmp); - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genFIType abs(genFIType x) - { - return detail::compute_abs::is_signed>::call(x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec abs(vec const& x) - { - return detail::compute_abs_vector::value>::call(x); - } - - // sign - // fast and works for any type - template - GLM_FUNC_QUALIFIER genFIType sign(genFIType x) - { - GLM_STATIC_ASSERT( - std::numeric_limits::is_iec559 || (std::numeric_limits::is_signed && std::numeric_limits::is_integer), - "'sign' only accept signed inputs"); - - return detail::compute_sign<1, genFIType, defaultp, - std::numeric_limits::is_iec559, detail::is_aligned::value>::call(vec<1, genFIType>(x)).x; - } - - template - GLM_FUNC_QUALIFIER vec sign(vec const& x) - { - GLM_STATIC_ASSERT( - std::numeric_limits::is_iec559 || (std::numeric_limits::is_signed && std::numeric_limits::is_integer), - "'sign' only accept signed inputs"); - - return detail::compute_sign::is_iec559, detail::is_aligned::value>::call(x); - } - - // floor - using ::std::floor; - template - GLM_FUNC_QUALIFIER vec floor(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'floor' only accept floating-point inputs."); - return detail::compute_floor::value>::call(x); - } - - template - GLM_FUNC_QUALIFIER vec trunc(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'trunc' only accept floating-point inputs"); - return detail::compute_trunc::value>::call(x); - } - - template - GLM_FUNC_QUALIFIER vec round(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'round' only accept floating-point inputs"); - return detail::compute_round::value>::call(x); - } - -/* - // roundEven - template - GLM_FUNC_QUALIFIER genType roundEven(genType const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'roundEven' only accept floating-point inputs"); - - return genType(int(x + genType(int(x) % 2))); - } -*/ - - // roundEven - template - GLM_FUNC_QUALIFIER genType roundEven(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'roundEven' only accept floating-point inputs"); - - int Integer = static_cast(x); - genType IntegerPart = static_cast(Integer); - genType FractionalPart = fract(x); - - if(FractionalPart > static_cast(0.5) || FractionalPart < static_cast(0.5)) - { - return round(x); - } - else if((Integer % 2) == 0) - { - return IntegerPart; - } - else if(x <= static_cast(0)) // Work around... - { - return IntegerPart - static_cast(1); - } - else - { - return IntegerPart + static_cast(1); - } - //else // Bug on MinGW 4.5.2 - //{ - // return mix(IntegerPart + genType(-1), IntegerPart + genType(1), x <= genType(0)); - //} - } - - template - GLM_FUNC_QUALIFIER vec roundEven(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'roundEven' only accept floating-point inputs"); - return detail::functor1::call(roundEven, x); - } - - // ceil - using ::std::ceil; - template - GLM_FUNC_QUALIFIER vec ceil(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'ceil' only accept floating-point inputs"); - return detail::compute_ceil::value>::call(x); - } - - // fract - template - GLM_FUNC_QUALIFIER genType fract(genType x) - { - return fract(vec<1, genType>(x)).x; - } - - template - GLM_FUNC_QUALIFIER vec fract(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fract' only accept floating-point inputs"); - return detail::compute_fract::value>::call(x); - } - - // mod - template - GLM_FUNC_QUALIFIER genType mod(genType x, genType y) - { -# if (GLM_COMPILER & GLM_COMPILER_CUDA) || (GLM_COMPILER & GLM_COMPILER_HIP) - // Another Cuda compiler bug https://github.com/g-truc/glm/issues/530 - vec<1, genType, defaultp> Result(mod(vec<1, genType, defaultp>(x), y)); - return Result.x; -# else - return mod(vec<1, genType, defaultp>(x), y).x; -# endif - } - - template - GLM_FUNC_QUALIFIER vec mod(vec const& x, T y) - { - return detail::compute_mod::value>::call(x, vec(y)); - } - - template - GLM_FUNC_QUALIFIER vec mod(vec const& x, vec const& y) - { - return detail::compute_mod::value>::call(x, y); - } - - // modf - template - GLM_FUNC_QUALIFIER genType modf(genType x, genType & i) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'modf' only accept floating-point inputs"); - return std::modf(x, &i); - } - - template - GLM_FUNC_QUALIFIER vec<1, T, Q> modf(vec<1, T, Q> const& x, vec<1, T, Q> & i) - { - return vec<1, T, Q>( - modf(x.x, i.x)); - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> modf(vec<2, T, Q> const& x, vec<2, T, Q> & i) - { - return vec<2, T, Q>( - modf(x.x, i.x), - modf(x.y, i.y)); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> modf(vec<3, T, Q> const& x, vec<3, T, Q> & i) - { - return vec<3, T, Q>( - modf(x.x, i.x), - modf(x.y, i.y), - modf(x.z, i.z)); - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> modf(vec<4, T, Q> const& x, vec<4, T, Q> & i) - { - return vec<4, T, Q>( - modf(x.x, i.x), - modf(x.y, i.y), - modf(x.z, i.z), - modf(x.w, i.w)); - } - - //// Only valid if (INT_MIN <= x-y <= INT_MAX) - //// min(x,y) - //r = y + ((x - y) & ((x - y) >> (sizeof(int) * - //CHAR_BIT - 1))); - //// max(x,y) - //r = x - ((x - y) & ((x - y) >> (sizeof(int) * - //CHAR_BIT - 1))); - - // min - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec min(vec const& a, T b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'min' only accept floating-point or integer inputs"); - return detail::compute_min_vector::value>::call(a, vec(b)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec min(vec const& a, vec const& b) - { - return detail::compute_min_vector::value>::call(a, b); - } - - // max - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec max(vec const& a, T b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'max' only accept floating-point or integer inputs"); - return detail::compute_max_vector::value>::call(a, vec(b)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec max(vec const& a, vec const& b) - { - return detail::compute_max_vector::value>::call(a, b); - } - - // clamp - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType clamp(genType x, genType minVal, genType maxVal) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'clamp' only accept floating-point or integer inputs"); - return min(max(x, minVal), maxVal); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec clamp(vec const& x, T minVal, T maxVal) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'clamp' only accept floating-point or integer inputs"); - return detail::compute_clamp_vector::value>::call(x, vec(minVal), vec(maxVal)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec clamp(vec const& x, vec const& minVal, vec const& maxVal) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'clamp' only accept floating-point or integer inputs"); - return detail::compute_clamp_vector::value>::call(x, minVal, maxVal); - } - - template - GLM_FUNC_QUALIFIER genTypeT mix(genTypeT x, genTypeT y, genTypeU a) - { - return detail::compute_mix::call(x, y, a); - } - - template - GLM_FUNC_QUALIFIER vec mix(vec const& x, vec const& y, U a) - { - return detail::compute_mix_scalar::value>::call(x, y, a); - } - - template - GLM_FUNC_QUALIFIER vec mix(vec const& x, vec const& y, vec const& a) - { - return detail::compute_mix_vector::value>::call(x, y, a); - } - - // step - template - GLM_FUNC_QUALIFIER genType step(genType edge, genType x) - { - return mix(static_cast(1), static_cast(0), x < edge); - } - - template - GLM_FUNC_QUALIFIER vec step(T edge, vec const& x) - { - return detail::compute_step_vector::value>::call(vec(edge), x); - } - - template - GLM_FUNC_QUALIFIER vec step(vec const& edge, vec const& x) - { - return detail::compute_step_vector::value>::call(edge, x); - } - - // smoothstep - template - GLM_FUNC_QUALIFIER genType smoothstep(genType edge0, genType edge1, genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'smoothstep' only accept floating-point inputs"); - - genType const tmp(clamp((x - edge0) / (edge1 - edge0), genType(0), genType(1))); - return tmp * tmp * (genType(3) - genType(2) * tmp); - } - - template - GLM_FUNC_QUALIFIER vec smoothstep(T edge0, T edge1, vec const& x) - { - return detail::compute_smoothstep_vector::value>::call(vec(edge0), vec(edge1), x); - } - - template - GLM_FUNC_QUALIFIER vec smoothstep(vec const& edge0, vec const& edge1, vec const& x) - { - return detail::compute_smoothstep_vector::value>::call(edge0, edge1, x); - } - -# if GLM_HAS_CXX11_STL - using std::isnan; -# else - template - GLM_FUNC_QUALIFIER bool isnan(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isnan' only accept floating-point inputs"); - -# if GLM_HAS_CXX11_STL - return std::isnan(x); -# elif GLM_COMPILER & GLM_COMPILER_VC - return _isnan(x) != 0; -# elif GLM_COMPILER & GLM_COMPILER_INTEL -# if GLM_PLATFORM & GLM_PLATFORM_WINDOWS - return _isnan(x) != 0; -# else - return ::isnan(x) != 0; -# endif -# elif (GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)) && (GLM_PLATFORM & GLM_PLATFORM_ANDROID) && __cplusplus < 201103L - return _isnan(x) != 0; -# elif (GLM_COMPILER & GLM_COMPILER_CUDA) || (GLM_COMPILER & GLM_COMPILER_HIP) - return ::isnan(x) != 0; -# else - return std::isnan(x); -# endif - } -# endif - - template - GLM_FUNC_QUALIFIER vec isnan(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isnan' only accept floating-point inputs"); - - vec Result; - for (length_t l = 0; l < v.length(); ++l) - Result[l] = glm::isnan(v[l]); - return Result; - } - -# if GLM_HAS_CXX11_STL - using std::isinf; -# else - template - GLM_FUNC_QUALIFIER bool isinf(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isinf' only accept floating-point inputs"); - -# if GLM_HAS_CXX11_STL - return std::isinf(x); -# elif GLM_COMPILER & (GLM_COMPILER_INTEL | GLM_COMPILER_VC) -# if(GLM_PLATFORM & GLM_PLATFORM_WINDOWS) - return _fpclass(x) == _FPCLASS_NINF || _fpclass(x) == _FPCLASS_PINF; -# else - return ::isinf(x); -# endif -# elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG) -# if(GLM_PLATFORM & GLM_PLATFORM_ANDROID && __cplusplus < 201103L) - return _isinf(x) != 0; -# else - return std::isinf(x); -# endif -# elif (GLM_COMPILER & GLM_COMPILER_CUDA) || (GLM_COMPILER & GLM_COMPILER_HIP) - // http://developer.download.nvidia.com/compute/cuda/4_2/rel/toolkit/docs/online/group__CUDA__MATH__DOUBLE_g13431dd2b40b51f9139cbb7f50c18fab.html#g13431dd2b40b51f9139cbb7f50c18fab - return ::isinf(double(x)) != 0; -# else - return std::isinf(x); -# endif - } -# endif - - template - GLM_FUNC_QUALIFIER vec isinf(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isinf' only accept floating-point inputs"); - - vec Result; - for (length_t l = 0; l < v.length(); ++l) - Result[l] = glm::isinf(v[l]); - return Result; - } - - GLM_FUNC_QUALIFIER int floatBitsToInt(float const& v) - { - union - { - float in; - int out; - } u; - - u.in = v; - - return u.out; - } - - template - GLM_FUNC_QUALIFIER vec floatBitsToInt(vec const& v) - { - return reinterpret_cast&>(const_cast&>(v)); - } - - GLM_FUNC_QUALIFIER uint floatBitsToUint(float const& v) - { - union - { - float in; - uint out; - } u; - - u.in = v; - - return u.out; - } - - template - GLM_FUNC_QUALIFIER vec floatBitsToUint(vec const& v) - { - return reinterpret_cast&>(const_cast&>(v)); - } - - GLM_FUNC_QUALIFIER float intBitsToFloat(int const& v) - { - union - { - int in; - float out; - } u; - - u.in = v; - - return u.out; - } - - template - GLM_FUNC_QUALIFIER vec intBitsToFloat(vec const& v) - { - return reinterpret_cast&>(const_cast&>(v)); - } - - GLM_FUNC_QUALIFIER float uintBitsToFloat(uint const& v) - { - union - { - uint in; - float out; - } u; - - u.in = v; - - return u.out; - } - - template - GLM_FUNC_QUALIFIER vec uintBitsToFloat(vec const& v) - { - return reinterpret_cast&>(const_cast&>(v)); - } - -# if GLM_HAS_CXX11_STL - using std::fma; -# else - template - GLM_FUNC_QUALIFIER genType fma(genType const& a, genType const& b, genType const& c) - { - return a * b + c; - } -# endif - - template - GLM_FUNC_QUALIFIER genType frexp(genType x, int& exp) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'frexp' only accept floating-point inputs"); - - return std::frexp(x, &exp); - } - - template - GLM_FUNC_QUALIFIER vec frexp(vec const& v, vec& exp) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'frexp' only accept floating-point inputs"); - - vec Result; - for (length_t l = 0; l < v.length(); ++l) - Result[l] = std::frexp(v[l], &exp[l]); - return Result; - } - - template - GLM_FUNC_QUALIFIER genType ldexp(genType const& x, int const& exp) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'ldexp' only accept floating-point inputs"); - - return std::ldexp(x, exp); - } - - template - GLM_FUNC_QUALIFIER vec ldexp(vec const& v, vec const& exp) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'ldexp' only accept floating-point inputs"); - - vec Result; - for (length_t l = 0; l < v.length(); ++l) - Result[l] = std::ldexp(v[l], exp[l]); - return Result; - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "func_common_simd.inl" -#endif diff --git a/src/vendor/glm/detail/func_common_simd.inl b/src/vendor/glm/detail/func_common_simd.inl deleted file mode 100755 index ce0032d..0000000 --- a/src/vendor/glm/detail/func_common_simd.inl +++ /dev/null @@ -1,231 +0,0 @@ -/// @ref core -/// @file glm/detail/func_common_simd.inl - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -#include "../simd/common.h" - -#include - -namespace glm{ -namespace detail -{ - template - struct compute_abs_vector<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) - { - vec<4, float, Q> result; - result.data = glm_vec4_abs(v.data); - return result; - } - }; - - template - struct compute_abs_vector<4, int, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& v) - { - vec<4, int, Q> result; - result.data = glm_ivec4_abs(v.data); - return result; - } - }; - - template - struct compute_floor<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) - { - vec<4, float, Q> result; - result.data = glm_vec4_floor(v.data); - return result; - } - }; - - template - struct compute_ceil<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) - { - vec<4, float, Q> result; - result.data = glm_vec4_ceil(v.data); - return result; - } - }; - - template - struct compute_fract<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) - { - vec<4, float, Q> result; - result.data = glm_vec4_fract(v.data); - return result; - } - }; - - template - struct compute_round<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) - { - vec<4, float, Q> result; - result.data = glm_vec4_round(v.data); - return result; - } - }; - - template - struct compute_mod<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& x, vec<4, float, Q> const& y) - { - vec<4, float, Q> result; - result.data = glm_vec4_mod(x.data, y.data); - return result; - } - }; - - template - struct compute_min_vector<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) - { - vec<4, float, Q> result; - result.data = _mm_min_ps(v1.data, v2.data); - return result; - } - }; - - template - struct compute_min_vector<4, int, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2) - { - vec<4, int, Q> result; - result.data = _mm_min_epi32(v1.data, v2.data); - return result; - } - }; - - template - struct compute_min_vector<4, uint, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& v1, vec<4, uint, Q> const& v2) - { - vec<4, uint, Q> result; - result.data = _mm_min_epu32(v1.data, v2.data); - return result; - } - }; - - template - struct compute_max_vector<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) - { - vec<4, float, Q> result; - result.data = _mm_max_ps(v1.data, v2.data); - return result; - } - }; - - template - struct compute_max_vector<4, int, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2) - { - vec<4, int, Q> result; - result.data = _mm_max_epi32(v1.data, v2.data); - return result; - } - }; - - template - struct compute_max_vector<4, uint, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& v1, vec<4, uint, Q> const& v2) - { - vec<4, uint, Q> result; - result.data = _mm_max_epu32(v1.data, v2.data); - return result; - } - }; - - template - struct compute_clamp_vector<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& x, vec<4, float, Q> const& minVal, vec<4, float, Q> const& maxVal) - { - vec<4, float, Q> result; - result.data = _mm_min_ps(_mm_max_ps(x.data, minVal.data), maxVal.data); - return result; - } - }; - - template - struct compute_clamp_vector<4, int, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& x, vec<4, int, Q> const& minVal, vec<4, int, Q> const& maxVal) - { - vec<4, int, Q> result; - result.data = _mm_min_epi32(_mm_max_epi32(x.data, minVal.data), maxVal.data); - return result; - } - }; - - template - struct compute_clamp_vector<4, uint, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& x, vec<4, uint, Q> const& minVal, vec<4, uint, Q> const& maxVal) - { - vec<4, uint, Q> result; - result.data = _mm_min_epu32(_mm_max_epu32(x.data, minVal.data), maxVal.data); - return result; - } - }; - - template - struct compute_mix_vector<4, float, bool, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& x, vec<4, float, Q> const& y, vec<4, bool, Q> const& a) - { - __m128i const Load = _mm_set_epi32(-static_cast(a.w), -static_cast(a.z), -static_cast(a.y), -static_cast(a.x)); - __m128 const Mask = _mm_castsi128_ps(Load); - - vec<4, float, Q> Result; -# if 0 && GLM_ARCH & GLM_ARCH_AVX - Result.data = _mm_blendv_ps(x.data, y.data, Mask); -# else - Result.data = _mm_or_ps(_mm_and_ps(Mask, y.data), _mm_andnot_ps(Mask, x.data)); -# endif - return Result; - } - }; -/* FIXME - template - struct compute_step_vector - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& edge, vec<4, float, Q> const& x) - { - vec<4, float, Q> Result; - result.data = glm_vec4_step(edge.data, x.data); - return result; - } - }; -*/ - template - struct compute_smoothstep_vector<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& edge0, vec<4, float, Q> const& edge1, vec<4, float, Q> const& x) - { - vec<4, float, Q> Result; - Result.data = glm_vec4_smoothstep(edge0.data, edge1.data, x.data); - return Result; - } - }; -}//namespace detail -}//namespace glm - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/src/vendor/glm/detail/func_exponential.inl b/src/vendor/glm/detail/func_exponential.inl deleted file mode 100755 index 2040d41..0000000 --- a/src/vendor/glm/detail/func_exponential.inl +++ /dev/null @@ -1,152 +0,0 @@ -/// @ref core -/// @file glm/detail/func_exponential.inl - -#include "../vector_relational.hpp" -#include "_vectorize.hpp" -#include -#include -#include - -namespace glm{ -namespace detail -{ -# if GLM_HAS_CXX11_STL - using std::log2; -# else - template - genType log2(genType Value) - { - return std::log(Value) * static_cast(1.4426950408889634073599246810019); - } -# endif - - template - struct compute_log2 - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'log2' only accept floating-point inputs. Include for integer inputs."); - - return detail::functor1::call(log2, v); - } - }; - - template - struct compute_sqrt - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return detail::functor1::call(std::sqrt, x); - } - }; - - template - struct compute_inversesqrt - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return static_cast(1) / sqrt(x); - } - }; - - template - struct compute_inversesqrt - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - vec tmp(x); - vec xhalf(tmp * 0.5f); - vec* p = reinterpret_cast*>(const_cast*>(&x)); - vec i = vec(0x5f375a86) - (*p >> vec(1)); - vec* ptmp = reinterpret_cast*>(&i); - tmp = *ptmp; - tmp = tmp * (1.5f - xhalf * tmp * tmp); - return tmp; - } - }; -}//namespace detail - - // pow - using std::pow; - template - GLM_FUNC_QUALIFIER vec pow(vec const& base, vec const& exponent) - { - return detail::functor2::call(pow, base, exponent); - } - - // exp - using std::exp; - template - GLM_FUNC_QUALIFIER vec exp(vec const& x) - { - return detail::functor1::call(exp, x); - } - - // log - using std::log; - template - GLM_FUNC_QUALIFIER vec log(vec const& x) - { - return detail::functor1::call(log, x); - } - -# if GLM_HAS_CXX11_STL - using std::exp2; -# else - //exp2, ln2 = 0.69314718055994530941723212145818f - template - GLM_FUNC_QUALIFIER genType exp2(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'exp2' only accept floating-point inputs"); - - return std::exp(static_cast(0.69314718055994530941723212145818) * x); - } -# endif - - template - GLM_FUNC_QUALIFIER vec exp2(vec const& x) - { - return detail::functor1::call(exp2, x); - } - - // log2, ln2 = 0.69314718055994530941723212145818f - template - GLM_FUNC_QUALIFIER genType log2(genType x) - { - return log2(vec<1, genType>(x)).x; - } - - template - GLM_FUNC_QUALIFIER vec log2(vec const& x) - { - return detail::compute_log2::is_iec559, detail::is_aligned::value>::call(x); - } - - // sqrt - using std::sqrt; - template - GLM_FUNC_QUALIFIER vec sqrt(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'sqrt' only accept floating-point inputs"); - return detail::compute_sqrt::value>::call(x); - } - - // inversesqrt - template - GLM_FUNC_QUALIFIER genType inversesqrt(genType x) - { - return static_cast(1) / sqrt(x); - } - - template - GLM_FUNC_QUALIFIER vec inversesqrt(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'inversesqrt' only accept floating-point inputs"); - return detail::compute_inversesqrt::value>::call(x); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "func_exponential_simd.inl" -#endif - diff --git a/src/vendor/glm/detail/func_exponential_simd.inl b/src/vendor/glm/detail/func_exponential_simd.inl deleted file mode 100755 index fb78951..0000000 --- a/src/vendor/glm/detail/func_exponential_simd.inl +++ /dev/null @@ -1,37 +0,0 @@ -/// @ref core -/// @file glm/detail/func_exponential_simd.inl - -#include "../simd/exponential.h" - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -namespace glm{ -namespace detail -{ - template - struct compute_sqrt<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) - { - vec<4, float, Q> Result; - Result.data = _mm_sqrt_ps(v.data); - return Result; - } - }; - -# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE - template<> - struct compute_sqrt<4, float, aligned_lowp, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, aligned_lowp> call(vec<4, float, aligned_lowp> const& v) - { - vec<4, float, aligned_lowp> Result; - Result.data = glm_vec4_sqrt_lowp(v.data); - return Result; - } - }; -# endif -}//namespace detail -}//namespace glm - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/src/vendor/glm/detail/func_geometric.inl b/src/vendor/glm/detail/func_geometric.inl deleted file mode 100755 index 404c990..0000000 --- a/src/vendor/glm/detail/func_geometric.inl +++ /dev/null @@ -1,243 +0,0 @@ -#include "../exponential.hpp" -#include "../common.hpp" - -namespace glm{ -namespace detail -{ - template - struct compute_length - { - GLM_FUNC_QUALIFIER static T call(vec const& v) - { - return sqrt(dot(v, v)); - } - }; - - template - struct compute_distance - { - GLM_FUNC_QUALIFIER static T call(vec const& p0, vec const& p1) - { - return length(p1 - p0); - } - }; - - template - struct compute_dot{}; - - template - struct compute_dot, T, Aligned> - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static T call(vec<1, T, Q> const& a, vec<1, T, Q> const& b) - { - return a.x * b.x; - } - }; - - template - struct compute_dot, T, Aligned> - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static T call(vec<2, T, Q> const& a, vec<2, T, Q> const& b) - { - vec<2, T, Q> tmp(a * b); - return tmp.x + tmp.y; - } - }; - - template - struct compute_dot, T, Aligned> - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static T call(vec<3, T, Q> const& a, vec<3, T, Q> const& b) - { - vec<3, T, Q> tmp(a * b); - return tmp.x + tmp.y + tmp.z; - } - }; - - template - struct compute_dot, T, Aligned> - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static T call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> tmp(a * b); - return (tmp.x + tmp.y) + (tmp.z + tmp.w); - } - }; - - template - struct compute_cross - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<3, T, Q> call(vec<3, T, Q> const& x, vec<3, T, Q> const& y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'cross' accepts only floating-point inputs"); - - return vec<3, T, Q>( - x.y * y.z - y.y * x.z, - x.z * y.x - y.z * x.x, - x.x * y.y - y.x * x.y); - } - }; - - template - struct compute_normalize - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'normalize' accepts only floating-point inputs"); - - return v * inversesqrt(dot(v, v)); - } - }; - - template - struct compute_faceforward - { - GLM_FUNC_QUALIFIER static vec call(vec const& N, vec const& I, vec const& Nref) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'normalize' accepts only floating-point inputs"); - - return dot(Nref, I) < static_cast(0) ? N : -N; - } - }; - - template - struct compute_reflect - { - GLM_FUNC_QUALIFIER static vec call(vec const& I, vec const& N) - { - return I - N * dot(N, I) * static_cast(2); - } - }; - - template - struct compute_refract - { - GLM_FUNC_QUALIFIER static vec call(vec const& I, vec const& N, T eta) - { - T const dotValue(dot(N, I)); - T const k(static_cast(1) - eta * eta * (static_cast(1) - dotValue * dotValue)); - vec const Result = - (k >= static_cast(0)) ? (eta * I - (eta * dotValue + std::sqrt(k)) * N) : vec(0); - return Result; - } - }; -}//namespace detail - - // length - template - GLM_FUNC_QUALIFIER genType length(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'length' accepts only floating-point inputs"); - - return abs(x); - } - - template - GLM_FUNC_QUALIFIER T length(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'length' accepts only floating-point inputs"); - - return detail::compute_length::value>::call(v); - } - - // distance - template - GLM_FUNC_QUALIFIER genType distance(genType const& p0, genType const& p1) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'distance' accepts only floating-point inputs"); - - return length(p1 - p0); - } - - template - GLM_FUNC_QUALIFIER T distance(vec const& p0, vec const& p1) - { - return detail::compute_distance::value>::call(p0, p1); - } - - // dot - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T dot(T x, T y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'dot' accepts only floating-point inputs"); - return x * y; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T dot(vec const& x, vec const& y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'dot' accepts only floating-point inputs"); - return detail::compute_dot, T, detail::is_aligned::value>::call(x, y); - } - - // cross - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> cross(vec<3, T, Q> const& x, vec<3, T, Q> const& y) - { - return detail::compute_cross::value>::call(x, y); - } -/* - // normalize - template - GLM_FUNC_QUALIFIER genType normalize(genType const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'normalize' accepts only floating-point inputs"); - - return x < genType(0) ? genType(-1) : genType(1); - } -*/ - template - GLM_FUNC_QUALIFIER vec normalize(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'normalize' accepts only floating-point inputs"); - - return detail::compute_normalize::value>::call(x); - } - - // faceforward - template - GLM_FUNC_QUALIFIER genType faceforward(genType const& N, genType const& I, genType const& Nref) - { - return dot(Nref, I) < static_cast(0) ? N : -N; - } - - template - GLM_FUNC_QUALIFIER vec faceforward(vec const& N, vec const& I, vec const& Nref) - { - return detail::compute_faceforward::value>::call(N, I, Nref); - } - - // reflect - template - GLM_FUNC_QUALIFIER genType reflect(genType const& I, genType const& N) - { - return I - N * dot(N, I) * genType(2); - } - - template - GLM_FUNC_QUALIFIER vec reflect(vec const& I, vec const& N) - { - return detail::compute_reflect::value>::call(I, N); - } - - // refract - template - GLM_FUNC_QUALIFIER genType refract(genType const& I, genType const& N, genType eta) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'refract' accepts only floating-point inputs"); - genType const dotValue(dot(N, I)); - genType const k(static_cast(1) - eta * eta * (static_cast(1) - dotValue * dotValue)); - return (eta * I - (eta * dotValue + sqrt(k)) * N) * static_cast(k >= static_cast(0)); - } - - template - GLM_FUNC_QUALIFIER vec refract(vec const& I, vec const& N, T eta) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'refract' accepts only floating-point inputs"); - return detail::compute_refract::value>::call(I, N, eta); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "func_geometric_simd.inl" -#endif diff --git a/src/vendor/glm/detail/func_geometric_simd.inl b/src/vendor/glm/detail/func_geometric_simd.inl deleted file mode 100755 index 2076dae..0000000 --- a/src/vendor/glm/detail/func_geometric_simd.inl +++ /dev/null @@ -1,163 +0,0 @@ -/// @ref core -/// @file glm/detail/func_geometric_simd.inl - -#include "../simd/geometric.h" - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -namespace glm{ -namespace detail -{ - template - struct compute_length<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& v) - { - return _mm_cvtss_f32(glm_vec4_length(v.data)); - } - }; - - template - struct compute_distance<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& p0, vec<4, float, Q> const& p1) - { - return _mm_cvtss_f32(glm_vec4_distance(p0.data, p1.data)); - } - }; - - template - struct compute_dot, float, true> - { - GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& x, vec<4, float, Q> const& y) - { - return _mm_cvtss_f32(glm_vec1_dot(x.data, y.data)); - } - }; - - template - struct compute_cross - { - GLM_FUNC_QUALIFIER static vec<3, float, Q> call(vec<3, float, Q> const& a, vec<3, float, Q> const& b) - { - __m128 const set0 = _mm_set_ps(0.0f, a.z, a.y, a.x); - __m128 const set1 = _mm_set_ps(0.0f, b.z, b.y, b.x); - __m128 const xpd0 = glm_vec4_cross(set0, set1); - - vec<4, float, Q> Result; - Result.data = xpd0; - return vec<3, float, Q>(Result); - } - }; - - template - struct compute_normalize<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) - { - vec<4, float, Q> Result; - Result.data = glm_vec4_normalize(v.data); - return Result; - } - }; - - template - struct compute_faceforward<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& N, vec<4, float, Q> const& I, vec<4, float, Q> const& Nref) - { - vec<4, float, Q> Result; - Result.data = glm_vec4_faceforward(N.data, I.data, Nref.data); - return Result; - } - }; - - template - struct compute_reflect<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& I, vec<4, float, Q> const& N) - { - vec<4, float, Q> Result; - Result.data = glm_vec4_reflect(I.data, N.data); - return Result; - } - }; - - template - struct compute_refract<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& I, vec<4, float, Q> const& N, float eta) - { - vec<4, float, Q> Result; - Result.data = glm_vec4_refract(I.data, N.data, _mm_set1_ps(eta)); - return Result; - } - }; -}//namespace detail -}//namespace glm - -#elif GLM_ARCH & GLM_ARCH_NEON_BIT -namespace glm{ -namespace detail -{ - template - struct compute_length<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& v) - { - return sqrt(compute_dot, float, true>::call(v, v)); - } - }; - - template - struct compute_distance<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& p0, vec<4, float, Q> const& p1) - { - return compute_length<4, float, Q, true>::call(p1 - p0); - } - }; - - - template - struct compute_dot, float, true> - { - GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& x, vec<4, float, Q> const& y) - { -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - float32x4_t v = vmulq_f32(x.data, y.data); - return vaddvq_f32(v); -#else // Armv7a with Neon - float32x4_t p = vmulq_f32(x.data, y.data); - float32x2_t v = vpadd_f32(vget_low_f32(p), vget_high_f32(p)); - v = vpadd_f32(v, v); - return vget_lane_f32(v, 0); -#endif - } - }; - - template - struct compute_normalize<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) - { - float32x4_t p = vmulq_f32(v.data, v.data); -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - p = vpaddq_f32(p, p); - p = vpaddq_f32(p, p); -#else - float32x2_t t = vpadd_f32(vget_low_f32(p), vget_high_f32(p)); - t = vpadd_f32(t, t); - p = vcombine_f32(t, t); -#endif - - float32x4_t vd = vrsqrteq_f32(p); - vec<4, float, Q> Result; - Result.data = vmulq_f32(v.data, vd); - return Result; - } - }; -}//namespace detail -}//namespace glm - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/src/vendor/glm/detail/func_integer.inl b/src/vendor/glm/detail/func_integer.inl deleted file mode 100755 index 091e1e0..0000000 --- a/src/vendor/glm/detail/func_integer.inl +++ /dev/null @@ -1,372 +0,0 @@ -/// @ref core - -#include "_vectorize.hpp" -#if(GLM_ARCH & GLM_ARCH_X86 && GLM_COMPILER & GLM_COMPILER_VC) -# include -# pragma intrinsic(_BitScanReverse) -#endif//(GLM_ARCH & GLM_ARCH_X86 && GLM_COMPILER & GLM_COMPILER_VC) -#include - -#if !GLM_HAS_EXTENDED_INTEGER_TYPE -# if GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic ignored "-Wlong-long" -# endif -# if (GLM_COMPILER & GLM_COMPILER_CLANG) -# pragma clang diagnostic ignored "-Wc++11-long-long" -# endif -#endif - -namespace glm{ -namespace detail -{ - template - GLM_FUNC_QUALIFIER T mask(T Bits) - { - return Bits >= static_cast(sizeof(T) * 8) ? ~static_cast(0) : (static_cast(1) << Bits) - static_cast(1); - } - - template - struct compute_bitfieldReverseStep - { - GLM_FUNC_QUALIFIER static vec call(vec const& v, T, T) - { - return v; - } - }; - - template - struct compute_bitfieldReverseStep - { - GLM_FUNC_QUALIFIER static vec call(vec const& v, T Mask, T Shift) - { - return (v & Mask) << Shift | (v & (~Mask)) >> Shift; - } - }; - - template - struct compute_bitfieldBitCountStep - { - GLM_FUNC_QUALIFIER static vec call(vec const& v, T, T) - { - return v; - } - }; - - template - struct compute_bitfieldBitCountStep - { - GLM_FUNC_QUALIFIER static vec call(vec const& v, T Mask, T Shift) - { - return (v & Mask) + ((v >> Shift) & Mask); - } - }; - - template - struct compute_findLSB - { - GLM_FUNC_QUALIFIER static int call(genIUType Value) - { - if(Value == 0) - return -1; - - return glm::bitCount(~Value & (Value - static_cast(1))); - } - }; - -# if GLM_HAS_BITSCAN_WINDOWS - template - struct compute_findLSB - { - GLM_FUNC_QUALIFIER static int call(genIUType Value) - { - unsigned long Result(0); - unsigned char IsNotNull = _BitScanForward(&Result, *reinterpret_cast(&Value)); - return IsNotNull ? int(Result) : -1; - } - }; - -# if !((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_MODEL == GLM_MODEL_32)) - template - struct compute_findLSB - { - GLM_FUNC_QUALIFIER static int call(genIUType Value) - { - unsigned long Result(0); - unsigned char IsNotNull = _BitScanForward64(&Result, *reinterpret_cast(&Value)); - return IsNotNull ? int(Result) : -1; - } - }; -# endif -# endif//GLM_HAS_BITSCAN_WINDOWS - - template - struct compute_findMSB_step_vec - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, T Shift) - { - return x | (x >> Shift); - } - }; - - template - struct compute_findMSB_step_vec - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, T) - { - return x; - } - }; - - template - struct compute_findMSB_vec - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - vec x(v); - x = compute_findMSB_step_vec= 8>::call(x, static_cast( 1)); - x = compute_findMSB_step_vec= 8>::call(x, static_cast( 2)); - x = compute_findMSB_step_vec= 8>::call(x, static_cast( 4)); - x = compute_findMSB_step_vec= 16>::call(x, static_cast( 8)); - x = compute_findMSB_step_vec= 32>::call(x, static_cast(16)); - x = compute_findMSB_step_vec= 64>::call(x, static_cast(32)); - return vec(sizeof(T) * 8 - 1) - glm::bitCount(~x); - } - }; - -# if GLM_HAS_BITSCAN_WINDOWS - template - GLM_FUNC_QUALIFIER int compute_findMSB_32(genIUType Value) - { - unsigned long Result(0); - unsigned char IsNotNull = _BitScanReverse(&Result, *reinterpret_cast(&Value)); - return IsNotNull ? int(Result) : -1; - } - - template - struct compute_findMSB_vec - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return detail::functor1::call(compute_findMSB_32, x); - } - }; - -# if !((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_MODEL == GLM_MODEL_32)) - template - GLM_FUNC_QUALIFIER int compute_findMSB_64(genIUType Value) - { - unsigned long Result(0); - unsigned char IsNotNull = _BitScanReverse64(&Result, *reinterpret_cast(&Value)); - return IsNotNull ? int(Result) : -1; - } - - template - struct compute_findMSB_vec - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return detail::functor1::call(compute_findMSB_64, x); - } - }; -# endif -# endif//GLM_HAS_BITSCAN_WINDOWS -}//namespace detail - - // uaddCarry - GLM_FUNC_QUALIFIER uint uaddCarry(uint const& x, uint const& y, uint & Carry) - { - detail::uint64 const Value64(static_cast(x) + static_cast(y)); - detail::uint64 const Max32((static_cast(1) << static_cast(32)) - static_cast(1)); - Carry = Value64 > Max32 ? 1u : 0u; - return static_cast(Value64 % (Max32 + static_cast(1))); - } - - template - GLM_FUNC_QUALIFIER vec uaddCarry(vec const& x, vec const& y, vec& Carry) - { - vec Value64(vec(x) + vec(y)); - vec Max32((static_cast(1) << static_cast(32)) - static_cast(1)); - Carry = mix(vec(0), vec(1), greaterThan(Value64, Max32)); - return vec(Value64 % (Max32 + static_cast(1))); - } - - // usubBorrow - GLM_FUNC_QUALIFIER uint usubBorrow(uint const& x, uint const& y, uint & Borrow) - { - Borrow = x >= y ? static_cast(0) : static_cast(1); - if(y >= x) - return y - x; - else - return static_cast((static_cast(1) << static_cast(32)) + (static_cast(y) - static_cast(x))); - } - - template - GLM_FUNC_QUALIFIER vec usubBorrow(vec const& x, vec const& y, vec& Borrow) - { - Borrow = mix(vec(1), vec(0), greaterThanEqual(x, y)); - vec const YgeX(y - x); - vec const XgeY(vec((static_cast(1) << static_cast(32)) + (vec(y) - vec(x)))); - return mix(XgeY, YgeX, greaterThanEqual(y, x)); - } - - // umulExtended - GLM_FUNC_QUALIFIER void umulExtended(uint const& x, uint const& y, uint & msb, uint & lsb) - { - detail::uint64 Value64 = static_cast(x) * static_cast(y); - msb = static_cast(Value64 >> static_cast(32)); - lsb = static_cast(Value64); - } - - template - GLM_FUNC_QUALIFIER void umulExtended(vec const& x, vec const& y, vec& msb, vec& lsb) - { - vec Value64(vec(x) * vec(y)); - msb = vec(Value64 >> static_cast(32)); - lsb = vec(Value64); - } - - // imulExtended - GLM_FUNC_QUALIFIER void imulExtended(int x, int y, int& msb, int& lsb) - { - detail::int64 Value64 = static_cast(x) * static_cast(y); - msb = static_cast(Value64 >> static_cast(32)); - lsb = static_cast(Value64); - } - - template - GLM_FUNC_QUALIFIER void imulExtended(vec const& x, vec const& y, vec& msb, vec& lsb) - { - vec Value64(vec(x) * vec(y)); - lsb = vec(Value64 & static_cast(0xFFFFFFFF)); - msb = vec((Value64 >> static_cast(32)) & static_cast(0xFFFFFFFF)); - } - - // bitfieldExtract - template - GLM_FUNC_QUALIFIER genIUType bitfieldExtract(genIUType Value, int Offset, int Bits) - { - return bitfieldExtract(vec<1, genIUType>(Value), Offset, Bits).x; - } - - template - GLM_FUNC_QUALIFIER vec bitfieldExtract(vec const& Value, int Offset, int Bits) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldExtract' only accept integer inputs"); - - return (Value >> static_cast(Offset)) & static_cast(detail::mask(Bits)); - } - - // bitfieldInsert - template - GLM_FUNC_QUALIFIER genIUType bitfieldInsert(genIUType const& Base, genIUType const& Insert, int Offset, int Bits) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldInsert' only accept integer values"); - - return bitfieldInsert(vec<1, genIUType>(Base), vec<1, genIUType>(Insert), Offset, Bits).x; - } - - template - GLM_FUNC_QUALIFIER vec bitfieldInsert(vec const& Base, vec const& Insert, int Offset, int Bits) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldInsert' only accept integer values"); - - T const Mask = static_cast(detail::mask(Bits) << Offset); - return (Base & ~Mask) | ((Insert << static_cast(Offset)) & Mask); - } - - // bitfieldReverse - template - GLM_FUNC_QUALIFIER genIUType bitfieldReverse(genIUType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldReverse' only accept integer values"); - - return bitfieldReverse(glm::vec<1, genIUType, glm::defaultp>(x)).x; - } - - template - GLM_FUNC_QUALIFIER vec bitfieldReverse(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldReverse' only accept integer values"); - - vec x(v); - x = detail::compute_bitfieldReverseStep::value, sizeof(T) * 8>= 2>::call(x, static_cast(0x5555555555555555ull), static_cast( 1)); - x = detail::compute_bitfieldReverseStep::value, sizeof(T) * 8>= 4>::call(x, static_cast(0x3333333333333333ull), static_cast( 2)); - x = detail::compute_bitfieldReverseStep::value, sizeof(T) * 8>= 8>::call(x, static_cast(0x0F0F0F0F0F0F0F0Full), static_cast( 4)); - x = detail::compute_bitfieldReverseStep::value, sizeof(T) * 8>= 16>::call(x, static_cast(0x00FF00FF00FF00FFull), static_cast( 8)); - x = detail::compute_bitfieldReverseStep::value, sizeof(T) * 8>= 32>::call(x, static_cast(0x0000FFFF0000FFFFull), static_cast(16)); - x = detail::compute_bitfieldReverseStep::value, sizeof(T) * 8>= 64>::call(x, static_cast(0x00000000FFFFFFFFull), static_cast(32)); - return x; - } - - // bitCount - template - GLM_FUNC_QUALIFIER int bitCount(genIUType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitCount' only accept integer values"); - - return bitCount(glm::vec<1, genIUType, glm::defaultp>(x)).x; - } - - template - GLM_FUNC_QUALIFIER vec bitCount(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitCount' only accept integer values"); - -# if GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(push) -# pragma warning(disable : 4310) //cast truncates constant value -# endif - - vec::type, Q> x(*reinterpret_cast::type, Q> const *>(&v)); - x = detail::compute_bitfieldBitCountStep::type, Q, detail::is_aligned::value, sizeof(T) * 8>= 2>::call(x, typename detail::make_unsigned::type(0x5555555555555555ull), typename detail::make_unsigned::type( 1)); - x = detail::compute_bitfieldBitCountStep::type, Q, detail::is_aligned::value, sizeof(T) * 8>= 4>::call(x, typename detail::make_unsigned::type(0x3333333333333333ull), typename detail::make_unsigned::type( 2)); - x = detail::compute_bitfieldBitCountStep::type, Q, detail::is_aligned::value, sizeof(T) * 8>= 8>::call(x, typename detail::make_unsigned::type(0x0F0F0F0F0F0F0F0Full), typename detail::make_unsigned::type( 4)); - x = detail::compute_bitfieldBitCountStep::type, Q, detail::is_aligned::value, sizeof(T) * 8>= 16>::call(x, typename detail::make_unsigned::type(0x00FF00FF00FF00FFull), typename detail::make_unsigned::type( 8)); - x = detail::compute_bitfieldBitCountStep::type, Q, detail::is_aligned::value, sizeof(T) * 8>= 32>::call(x, typename detail::make_unsigned::type(0x0000FFFF0000FFFFull), typename detail::make_unsigned::type(16)); - x = detail::compute_bitfieldBitCountStep::type, Q, detail::is_aligned::value, sizeof(T) * 8>= 64>::call(x, typename detail::make_unsigned::type(0x00000000FFFFFFFFull), typename detail::make_unsigned::type(32)); - return vec(x); - -# if GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(pop) -# endif - } - - // findLSB - template - GLM_FUNC_QUALIFIER int findLSB(genIUType Value) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findLSB' only accept integer values"); - - return detail::compute_findLSB::call(Value); - } - - template - GLM_FUNC_QUALIFIER vec findLSB(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findLSB' only accept integer values"); - - return detail::functor1::call(findLSB, x); - } - - // findMSB - template - GLM_FUNC_QUALIFIER int findMSB(genIUType v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findMSB' only accept integer values"); - - return findMSB(vec<1, genIUType>(v)).x; - } - - template - GLM_FUNC_QUALIFIER vec findMSB(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findMSB' only accept integer values"); - - return detail::compute_findMSB_vec::call(v); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "func_integer_simd.inl" -#endif - diff --git a/src/vendor/glm/detail/func_integer_simd.inl b/src/vendor/glm/detail/func_integer_simd.inl deleted file mode 100755 index 8be6c9c..0000000 --- a/src/vendor/glm/detail/func_integer_simd.inl +++ /dev/null @@ -1,65 +0,0 @@ -#include "../simd/integer.h" - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -namespace glm{ -namespace detail -{ - template - struct compute_bitfieldReverseStep<4, uint, Q, true, true> - { - GLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& v, uint Mask, uint Shift) - { - __m128i const set0 = v.data; - - __m128i const set1 = _mm_set1_epi32(static_cast(Mask)); - __m128i const and1 = _mm_and_si128(set0, set1); - __m128i const sft1 = _mm_slli_epi32(and1, Shift); - - __m128i const set2 = _mm_andnot_si128(set0, _mm_set1_epi32(-1)); - __m128i const and2 = _mm_and_si128(set0, set2); - __m128i const sft2 = _mm_srai_epi32(and2, Shift); - - __m128i const or0 = _mm_or_si128(sft1, sft2); - - return or0; - } - }; - - template - struct compute_bitfieldBitCountStep<4, uint, Q, true, true> - { - GLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& v, uint Mask, uint Shift) - { - __m128i const set0 = v.data; - - __m128i const set1 = _mm_set1_epi32(static_cast(Mask)); - __m128i const and0 = _mm_and_si128(set0, set1); - __m128i const sft0 = _mm_slli_epi32(set0, Shift); - __m128i const and1 = _mm_and_si128(sft0, set1); - __m128i const add0 = _mm_add_epi32(and0, and1); - - return add0; - } - }; -}//namespace detail - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template<> - GLM_FUNC_QUALIFIER int bitCount(uint x) - { - return _mm_popcnt_u32(x); - } - -# if(GLM_MODEL == GLM_MODEL_64) - template<> - GLM_FUNC_QUALIFIER int bitCount(detail::uint64 x) - { - return static_cast(_mm_popcnt_u64(x)); - } -# endif//GLM_MODEL -# endif//GLM_ARCH - -}//namespace glm - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/src/vendor/glm/detail/func_matrix.inl b/src/vendor/glm/detail/func_matrix.inl deleted file mode 100755 index c2d568f..0000000 --- a/src/vendor/glm/detail/func_matrix.inl +++ /dev/null @@ -1,443 +0,0 @@ -#include "../geometric.hpp" -#include - -namespace glm{ -namespace detail -{ - template - struct compute_matrixCompMult - { - GLM_FUNC_QUALIFIER static mat call(mat const& x, mat const& y) - { - mat Result; - for(length_t i = 0; i < Result.length(); ++i) - Result[i] = x[i] * y[i]; - return Result; - } - }; - - template - struct compute_matrixCompMult_type { - GLM_FUNC_QUALIFIER static mat call(mat const& x, mat const& y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, - "'matrixCompMult' only accept floating-point inputs, include to discard this restriction."); - return detail::compute_matrixCompMult::value>::call(x, y); - } - }; - - template - struct compute_outerProduct { - GLM_FUNC_QUALIFIER static typename detail::outerProduct_trait::type call(vec const& c, vec const& r) - { - typename detail::outerProduct_trait::type m; - for(length_t i = 0; i < m.length(); ++i) - m[i] = c * r[i]; - return m; - } - }; - - template - struct compute_outerProduct_type { - GLM_FUNC_QUALIFIER static typename detail::outerProduct_trait::type call(vec const& c, vec const& r) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, - "'outerProduct' only accept floating-point inputs, include to discard this restriction."); - - return detail::compute_outerProduct::call(c, r); - } - }; - - template - struct compute_transpose{}; - - template - struct compute_transpose<2, 2, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<2, 2, T, Q> call(mat<2, 2, T, Q> const& m) - { - mat<2, 2, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - return Result; - } - }; - - template - struct compute_transpose<2, 3, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<3, 2, T, Q> call(mat<2, 3, T, Q> const& m) - { - mat<3,2, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[2][0] = m[0][2]; - Result[2][1] = m[1][2]; - return Result; - } - }; - - template - struct compute_transpose<2, 4, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<4, 2, T, Q> call(mat<2, 4, T, Q> const& m) - { - mat<4, 2, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[2][0] = m[0][2]; - Result[2][1] = m[1][2]; - Result[3][0] = m[0][3]; - Result[3][1] = m[1][3]; - return Result; - } - }; - - template - struct compute_transpose<3, 2, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<2, 3, T, Q> call(mat<3, 2, T, Q> const& m) - { - mat<2, 3, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[0][2] = m[2][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[1][2] = m[2][1]; - return Result; - } - }; - - template - struct compute_transpose<3, 3, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<3, 3, T, Q> call(mat<3, 3, T, Q> const& m) - { - mat<3, 3, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[0][2] = m[2][0]; - - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[1][2] = m[2][1]; - - Result[2][0] = m[0][2]; - Result[2][1] = m[1][2]; - Result[2][2] = m[2][2]; - return Result; - } - }; - - template - struct compute_transpose<3, 4, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<4, 3, T, Q> call(mat<3, 4, T, Q> const& m) - { - mat<4, 3, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[0][2] = m[2][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[1][2] = m[2][1]; - Result[2][0] = m[0][2]; - Result[2][1] = m[1][2]; - Result[2][2] = m[2][2]; - Result[3][0] = m[0][3]; - Result[3][1] = m[1][3]; - Result[3][2] = m[2][3]; - return Result; - } - }; - - template - struct compute_transpose<4, 2, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<2, 4, T, Q> call(mat<4, 2, T, Q> const& m) - { - mat<2, 4, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[0][2] = m[2][0]; - Result[0][3] = m[3][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[1][2] = m[2][1]; - Result[1][3] = m[3][1]; - return Result; - } - }; - - template - struct compute_transpose<4, 3, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<3, 4, T, Q> call(mat<4, 3, T, Q> const& m) - { - mat<3, 4, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[0][2] = m[2][0]; - Result[0][3] = m[3][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[1][2] = m[2][1]; - Result[1][3] = m[3][1]; - Result[2][0] = m[0][2]; - Result[2][1] = m[1][2]; - Result[2][2] = m[2][2]; - Result[2][3] = m[3][2]; - return Result; - } - }; - - template - struct compute_transpose<4, 4, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<4, 4, T, Q> call(mat<4, 4, T, Q> const& m) - { - mat<4, 4, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[0][2] = m[2][0]; - Result[0][3] = m[3][0]; - - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[1][2] = m[2][1]; - Result[1][3] = m[3][1]; - - Result[2][0] = m[0][2]; - Result[2][1] = m[1][2]; - Result[2][2] = m[2][2]; - Result[2][3] = m[3][2]; - - Result[3][0] = m[0][3]; - Result[3][1] = m[1][3]; - Result[3][2] = m[2][3]; - Result[3][3] = m[3][3]; - return Result; - } - }; - - template - struct compute_transpose_type { - GLM_FUNC_QUALIFIER static mat call(mat const& m) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, - "'transpose' only accept floating-point inputs, include to discard this restriction."); - return detail::compute_transpose::value>::call(m); - } - }; - - template - struct compute_determinant{}; - - template - struct compute_determinant<2, 2, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static T call(mat<2, 2, T, Q> const& m) - { - return m[0][0] * m[1][1] - m[1][0] * m[0][1]; - } - }; - - template - struct compute_determinant<3, 3, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static T call(mat<3, 3, T, Q> const& m) - { - return - + m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2]) - - m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2]) - + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]); - } - }; - - template - struct compute_determinant<4, 4, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static T call(mat<4, 4, T, Q> const& m) - { - T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - - vec<4, T, Q> DetCof( - + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02), - - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04), - + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05), - - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05)); - - return - m[0][0] * DetCof[0] + m[0][1] * DetCof[1] + - m[0][2] * DetCof[2] + m[0][3] * DetCof[3]; - } - }; - - template - struct compute_determinant_type{ - - GLM_FUNC_QUALIFIER static T call(mat const& m) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, - "'determinant' only accept floating-point inputs, include to discard this restriction."); - return detail::compute_determinant::value>::call(m); - } - }; - - template - struct compute_inverse{}; - - template - struct compute_inverse<2, 2, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<2, 2, T, Q> call(mat<2, 2, T, Q> const& m) - { - T OneOverDeterminant = static_cast(1) / ( - + m[0][0] * m[1][1] - - m[1][0] * m[0][1]); - - mat<2, 2, T, Q> Inverse( - + m[1][1] * OneOverDeterminant, - - m[0][1] * OneOverDeterminant, - - m[1][0] * OneOverDeterminant, - + m[0][0] * OneOverDeterminant); - - return Inverse; - } - }; - - template - struct compute_inverse<3, 3, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<3, 3, T, Q> call(mat<3, 3, T, Q> const& m) - { - T OneOverDeterminant = static_cast(1) / ( - + m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2]) - - m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2]) - + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2])); - - mat<3, 3, T, Q> Inverse; - Inverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]) * OneOverDeterminant; - Inverse[1][0] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]) * OneOverDeterminant; - Inverse[2][0] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]) * OneOverDeterminant; - Inverse[0][1] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]) * OneOverDeterminant; - Inverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]) * OneOverDeterminant; - Inverse[2][1] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]) * OneOverDeterminant; - Inverse[0][2] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]) * OneOverDeterminant; - Inverse[1][2] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]) * OneOverDeterminant; - Inverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]) * OneOverDeterminant; - - return Inverse; - } - }; - - template - struct compute_inverse<4, 4, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<4, 4, T, Q> call(mat<4, 4, T, Q> const& m) - { - T Coef00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - T Coef02 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; - T Coef03 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; - - T Coef04 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - T Coef06 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; - T Coef07 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; - - T Coef08 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - T Coef10 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; - T Coef11 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; - - T Coef12 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - T Coef14 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; - T Coef15 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; - - T Coef16 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - T Coef18 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; - T Coef19 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; - - T Coef20 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - T Coef22 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; - T Coef23 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; - - vec<4, T, Q> Fac0(Coef00, Coef00, Coef02, Coef03); - vec<4, T, Q> Fac1(Coef04, Coef04, Coef06, Coef07); - vec<4, T, Q> Fac2(Coef08, Coef08, Coef10, Coef11); - vec<4, T, Q> Fac3(Coef12, Coef12, Coef14, Coef15); - vec<4, T, Q> Fac4(Coef16, Coef16, Coef18, Coef19); - vec<4, T, Q> Fac5(Coef20, Coef20, Coef22, Coef23); - - vec<4, T, Q> Vec0(m[1][0], m[0][0], m[0][0], m[0][0]); - vec<4, T, Q> Vec1(m[1][1], m[0][1], m[0][1], m[0][1]); - vec<4, T, Q> Vec2(m[1][2], m[0][2], m[0][2], m[0][2]); - vec<4, T, Q> Vec3(m[1][3], m[0][3], m[0][3], m[0][3]); - - vec<4, T, Q> Inv0(Vec1 * Fac0 - Vec2 * Fac1 + Vec3 * Fac2); - vec<4, T, Q> Inv1(Vec0 * Fac0 - Vec2 * Fac3 + Vec3 * Fac4); - vec<4, T, Q> Inv2(Vec0 * Fac1 - Vec1 * Fac3 + Vec3 * Fac5); - vec<4, T, Q> Inv3(Vec0 * Fac2 - Vec1 * Fac4 + Vec2 * Fac5); - - vec<4, T, Q> SignA(+1, -1, +1, -1); - vec<4, T, Q> SignB(-1, +1, -1, +1); - mat<4, 4, T, Q> Inverse(Inv0 * SignA, Inv1 * SignB, Inv2 * SignA, Inv3 * SignB); - - vec<4, T, Q> Row0(Inverse[0][0], Inverse[1][0], Inverse[2][0], Inverse[3][0]); - - vec<4, T, Q> Dot0(m[0] * Row0); - T Dot1 = (Dot0.x + Dot0.y) + (Dot0.z + Dot0.w); - - T OneOverDeterminant = static_cast(1) / Dot1; - - return Inverse * OneOverDeterminant; - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER mat matrixCompMult(mat const& x, mat const& y) - { - return detail::compute_matrixCompMult_type::is_iec559, detail::is_aligned::value>::call(x, y); - } - - template - GLM_FUNC_QUALIFIER typename detail::outerProduct_trait::type outerProduct(vec const& c, vec const& r) - { - return detail::compute_outerProduct_type::is_iec559>::call(c, r); - } - - template - GLM_FUNC_QUALIFIER typename mat::transpose_type transpose(mat const& m) - { - return detail::compute_transpose_type::is_iec559, detail::is_aligned::value>::call(m); - } - - template - GLM_FUNC_QUALIFIER T determinant(mat const& m) - { - return detail::compute_determinant_type::is_iec559, detail::is_aligned::value>::call(m); - } - - template - GLM_FUNC_QUALIFIER mat inverse(mat const& m) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'inverse' only accept floating-point inputs"); - return detail::compute_inverse::value>::call(m); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "func_matrix_simd.inl" -#endif - diff --git a/src/vendor/glm/detail/func_matrix_simd.inl b/src/vendor/glm/detail/func_matrix_simd.inl deleted file mode 100755 index f67ac66..0000000 --- a/src/vendor/glm/detail/func_matrix_simd.inl +++ /dev/null @@ -1,249 +0,0 @@ -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -#include "type_mat4x4.hpp" -#include "../geometric.hpp" -#include "../simd/matrix.h" -#include - -namespace glm{ -namespace detail -{ -# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE - template - struct compute_matrixCompMult<4, 4, float, Q, true> - { - GLM_STATIC_ASSERT(detail::is_aligned::value, "Specialization requires aligned"); - - GLM_FUNC_QUALIFIER static mat<4, 4, float, Q> call(mat<4, 4, float, Q> const& x, mat<4, 4, float, Q> const& y) - { - mat<4, 4, float, Q> Result; - glm_mat4_matrixCompMult( - *static_cast(&x[0].data), - *static_cast(&y[0].data), - *static_cast(&Result[0].data)); - return Result; - } - }; -# endif - - template - struct compute_transpose<4, 4, float, Q, true> - { - GLM_FUNC_QUALIFIER static mat<4, 4, float, Q> call(mat<4, 4, float, Q> const& m) - { - mat<4, 4, float, Q> Result; - glm_mat4_transpose(&m[0].data, &Result[0].data); - return Result; - } - }; - - template - struct compute_determinant<4, 4, float, Q, true> - { - GLM_FUNC_QUALIFIER static float call(mat<4, 4, float, Q> const& m) - { - return _mm_cvtss_f32(glm_mat4_determinant(&m[0].data)); - } - }; - - template - struct compute_inverse<4, 4, float, Q, true> - { - GLM_FUNC_QUALIFIER static mat<4, 4, float, Q> call(mat<4, 4, float, Q> const& m) - { - mat<4, 4, float, Q> Result; - glm_mat4_inverse(&m[0].data, &Result[0].data); - return Result; - } - }; -}//namespace detail - -# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE - template<> - GLM_FUNC_QUALIFIER mat<4, 4, float, aligned_lowp> outerProduct<4, 4, float, aligned_lowp>(vec<4, float, aligned_lowp> const& c, vec<4, float, aligned_lowp> const& r) - { - __m128 NativeResult[4]; - glm_mat4_outerProduct(c.data, r.data, NativeResult); - mat<4, 4, float, aligned_lowp> Result; - std::memcpy(&Result[0], &NativeResult[0], sizeof(Result)); - return Result; - } - - template<> - GLM_FUNC_QUALIFIER mat<4, 4, float, aligned_mediump> outerProduct<4, 4, float, aligned_mediump>(vec<4, float, aligned_mediump> const& c, vec<4, float, aligned_mediump> const& r) - { - __m128 NativeResult[4]; - glm_mat4_outerProduct(c.data, r.data, NativeResult); - mat<4, 4, float, aligned_mediump> Result; - std::memcpy(&Result[0], &NativeResult[0], sizeof(Result)); - return Result; - } - - template<> - GLM_FUNC_QUALIFIER mat<4, 4, float, aligned_highp> outerProduct<4, 4, float, aligned_highp>(vec<4, float, aligned_highp> const& c, vec<4, float, aligned_highp> const& r) - { - __m128 NativeResult[4]; - glm_mat4_outerProduct(c.data, r.data, NativeResult); - mat<4, 4, float, aligned_highp> Result; - std::memcpy(&Result[0], &NativeResult[0], sizeof(Result)); - return Result; - } -# endif -}//namespace glm - -#elif GLM_ARCH & GLM_ARCH_NEON_BIT - -namespace glm { -#if GLM_LANG & GLM_LANG_CXX11_FLAG - template - GLM_FUNC_QUALIFIER - typename std::enable_if::value, mat<4, 4, float, Q>>::type - operator*(mat<4, 4, float, Q> const & m1, mat<4, 4, float, Q> const & m2) - { - auto MulRow = [&](int l) { - float32x4_t const SrcA = m2[l].data; - - float32x4_t r = neon::mul_lane(m1[0].data, SrcA, 0); - r = neon::madd_lane(r, m1[1].data, SrcA, 1); - r = neon::madd_lane(r, m1[2].data, SrcA, 2); - r = neon::madd_lane(r, m1[3].data, SrcA, 3); - - return r; - }; - - mat<4, 4, float, aligned_highp> Result; - Result[0].data = MulRow(0); - Result[1].data = MulRow(1); - Result[2].data = MulRow(2); - Result[3].data = MulRow(3); - - return Result; - } -#endif // CXX11 - - template - struct detail::compute_inverse<4, 4, float, Q, true> - { - GLM_FUNC_QUALIFIER static mat<4, 4, float, Q> call(mat<4, 4, float, Q> const& m) - { - float32x4_t const& m0 = m[0].data; - float32x4_t const& m1 = m[1].data; - float32x4_t const& m2 = m[2].data; - float32x4_t const& m3 = m[3].data; - - // m[2][2] * m[3][3] - m[3][2] * m[2][3]; - // m[2][2] * m[3][3] - m[3][2] * m[2][3]; - // m[1][2] * m[3][3] - m[3][2] * m[1][3]; - // m[1][2] * m[2][3] - m[2][2] * m[1][3]; - - float32x4_t Fac0; - { - float32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 2), neon::dup_lane(m1, 2)); - float32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 3), 3, m2, 3); - float32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 2), 3, m2, 2); - float32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 3), neon::dup_lane(m1, 3)); - Fac0 = w0 * w1 - w2 * w3; - } - - // m[2][1] * m[3][3] - m[3][1] * m[2][3]; - // m[2][1] * m[3][3] - m[3][1] * m[2][3]; - // m[1][1] * m[3][3] - m[3][1] * m[1][3]; - // m[1][1] * m[2][3] - m[2][1] * m[1][3]; - - float32x4_t Fac1; - { - float32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 1), neon::dup_lane(m1, 1)); - float32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 3), 3, m2, 3); - float32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 1), 3, m2, 1); - float32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 3), neon::dup_lane(m1, 3)); - Fac1 = w0 * w1 - w2 * w3; - } - - // m[2][1] * m[3][2] - m[3][1] * m[2][2]; - // m[2][1] * m[3][2] - m[3][1] * m[2][2]; - // m[1][1] * m[3][2] - m[3][1] * m[1][2]; - // m[1][1] * m[2][2] - m[2][1] * m[1][2]; - - float32x4_t Fac2; - { - float32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 1), neon::dup_lane(m1, 1)); - float32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 2), 3, m2, 2); - float32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 1), 3, m2, 1); - float32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 2), neon::dup_lane(m1, 2)); - Fac2 = w0 * w1 - w2 * w3; - } - - // m[2][0] * m[3][3] - m[3][0] * m[2][3]; - // m[2][0] * m[3][3] - m[3][0] * m[2][3]; - // m[1][0] * m[3][3] - m[3][0] * m[1][3]; - // m[1][0] * m[2][3] - m[2][0] * m[1][3]; - - float32x4_t Fac3; - { - float32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 0), neon::dup_lane(m1, 0)); - float32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 3), 3, m2, 3); - float32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 0), 3, m2, 0); - float32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 3), neon::dup_lane(m1, 3)); - Fac3 = w0 * w1 - w2 * w3; - } - - // m[2][0] * m[3][2] - m[3][0] * m[2][2]; - // m[2][0] * m[3][2] - m[3][0] * m[2][2]; - // m[1][0] * m[3][2] - m[3][0] * m[1][2]; - // m[1][0] * m[2][2] - m[2][0] * m[1][2]; - - float32x4_t Fac4; - { - float32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 0), neon::dup_lane(m1, 0)); - float32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 2), 3, m2, 2); - float32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 0), 3, m2, 0); - float32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 2), neon::dup_lane(m1, 2)); - Fac4 = w0 * w1 - w2 * w3; - } - - // m[2][0] * m[3][1] - m[3][0] * m[2][1]; - // m[2][0] * m[3][1] - m[3][0] * m[2][1]; - // m[1][0] * m[3][1] - m[3][0] * m[1][1]; - // m[1][0] * m[2][1] - m[2][0] * m[1][1]; - - float32x4_t Fac5; - { - float32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 0), neon::dup_lane(m1, 0)); - float32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 1), 3, m2, 1); - float32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 0), 3, m2, 0); - float32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 1), neon::dup_lane(m1, 1)); - Fac5 = w0 * w1 - w2 * w3; - } - - float32x4_t Vec0 = neon::copy_lane(neon::dupq_lane(m0, 0), 0, m1, 0); // (m[1][0], m[0][0], m[0][0], m[0][0]); - float32x4_t Vec1 = neon::copy_lane(neon::dupq_lane(m0, 1), 0, m1, 1); // (m[1][1], m[0][1], m[0][1], m[0][1]); - float32x4_t Vec2 = neon::copy_lane(neon::dupq_lane(m0, 2), 0, m1, 2); // (m[1][2], m[0][2], m[0][2], m[0][2]); - float32x4_t Vec3 = neon::copy_lane(neon::dupq_lane(m0, 3), 0, m1, 3); // (m[1][3], m[0][3], m[0][3], m[0][3]); - - float32x4_t Inv0 = Vec1 * Fac0 - Vec2 * Fac1 + Vec3 * Fac2; - float32x4_t Inv1 = Vec0 * Fac0 - Vec2 * Fac3 + Vec3 * Fac4; - float32x4_t Inv2 = Vec0 * Fac1 - Vec1 * Fac3 + Vec3 * Fac5; - float32x4_t Inv3 = Vec0 * Fac2 - Vec1 * Fac4 + Vec2 * Fac5; - - float32x4_t r0 = float32x4_t{-1, +1, -1, +1} * Inv0; - float32x4_t r1 = float32x4_t{+1, -1, +1, -1} * Inv1; - float32x4_t r2 = float32x4_t{-1, +1, -1, +1} * Inv2; - float32x4_t r3 = float32x4_t{+1, -1, +1, -1} * Inv3; - - float32x4_t det = neon::mul_lane(r0, m0, 0); - det = neon::madd_lane(det, r1, m0, 1); - det = neon::madd_lane(det, r2, m0, 2); - det = neon::madd_lane(det, r3, m0, 3); - - float32x4_t rdet = vdupq_n_f32(1 / vgetq_lane_f32(det, 0)); - - mat<4, 4, float, Q> r; - r[0].data = vmulq_f32(r0, rdet); - r[1].data = vmulq_f32(r1, rdet); - r[2].data = vmulq_f32(r2, rdet); - r[3].data = vmulq_f32(r3, rdet); - return r; - } - }; -}//namespace glm -#endif diff --git a/src/vendor/glm/detail/func_packing.inl b/src/vendor/glm/detail/func_packing.inl deleted file mode 100755 index 234b093..0000000 --- a/src/vendor/glm/detail/func_packing.inl +++ /dev/null @@ -1,189 +0,0 @@ -/// @ref core -/// @file glm/detail/func_packing.inl - -#include "../common.hpp" -#include "type_half.hpp" - -namespace glm -{ - GLM_FUNC_QUALIFIER uint packUnorm2x16(vec2 const& v) - { - union - { - unsigned short in[2]; - uint out; - } u; - - vec<2, unsigned short, defaultp> result(round(clamp(v, 0.0f, 1.0f) * 65535.0f)); - - u.in[0] = result[0]; - u.in[1] = result[1]; - - return u.out; - } - - GLM_FUNC_QUALIFIER vec2 unpackUnorm2x16(uint p) - { - union - { - uint in; - unsigned short out[2]; - } u; - - u.in = p; - - return vec2(u.out[0], u.out[1]) * 1.5259021896696421759365224689097e-5f; - } - - GLM_FUNC_QUALIFIER uint packSnorm2x16(vec2 const& v) - { - union - { - signed short in[2]; - uint out; - } u; - - vec<2, short, defaultp> result(round(clamp(v, -1.0f, 1.0f) * 32767.0f)); - - u.in[0] = result[0]; - u.in[1] = result[1]; - - return u.out; - } - - GLM_FUNC_QUALIFIER vec2 unpackSnorm2x16(uint p) - { - union - { - uint in; - signed short out[2]; - } u; - - u.in = p; - - return clamp(vec2(u.out[0], u.out[1]) * 3.0518509475997192297128208258309e-5f, -1.0f, 1.0f); - } - - GLM_FUNC_QUALIFIER uint packUnorm4x8(vec4 const& v) - { - union - { - unsigned char in[4]; - uint out; - } u; - - vec<4, unsigned char, defaultp> result(round(clamp(v, 0.0f, 1.0f) * 255.0f)); - - u.in[0] = result[0]; - u.in[1] = result[1]; - u.in[2] = result[2]; - u.in[3] = result[3]; - - return u.out; - } - - GLM_FUNC_QUALIFIER vec4 unpackUnorm4x8(uint p) - { - union - { - uint in; - unsigned char out[4]; - } u; - - u.in = p; - - return vec4(u.out[0], u.out[1], u.out[2], u.out[3]) * 0.0039215686274509803921568627451f; - } - - GLM_FUNC_QUALIFIER uint packSnorm4x8(vec4 const& v) - { - union - { - signed char in[4]; - uint out; - } u; - - vec<4, signed char, defaultp> result(round(clamp(v, -1.0f, 1.0f) * 127.0f)); - - u.in[0] = result[0]; - u.in[1] = result[1]; - u.in[2] = result[2]; - u.in[3] = result[3]; - - return u.out; - } - - GLM_FUNC_QUALIFIER glm::vec4 unpackSnorm4x8(uint p) - { - union - { - uint in; - signed char out[4]; - } u; - - u.in = p; - - return clamp(vec4(u.out[0], u.out[1], u.out[2], u.out[3]) * 0.0078740157480315f, -1.0f, 1.0f); - } - - GLM_FUNC_QUALIFIER double packDouble2x32(uvec2 const& v) - { - union - { - uint in[2]; - double out; - } u; - - u.in[0] = v[0]; - u.in[1] = v[1]; - - return u.out; - } - - GLM_FUNC_QUALIFIER uvec2 unpackDouble2x32(double v) - { - union - { - double in; - uint out[2]; - } u; - - u.in = v; - - return uvec2(u.out[0], u.out[1]); - } - - GLM_FUNC_QUALIFIER uint packHalf2x16(vec2 const& v) - { - union - { - signed short in[2]; - uint out; - } u; - - u.in[0] = detail::toFloat16(v.x); - u.in[1] = detail::toFloat16(v.y); - - return u.out; - } - - GLM_FUNC_QUALIFIER vec2 unpackHalf2x16(uint v) - { - union - { - uint in; - signed short out[2]; - } u; - - u.in = v; - - return vec2( - detail::toFloat32(u.out[0]), - detail::toFloat32(u.out[1])); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "func_packing_simd.inl" -#endif - diff --git a/src/vendor/glm/detail/func_packing_simd.inl b/src/vendor/glm/detail/func_packing_simd.inl deleted file mode 100755 index fd0fe8b..0000000 --- a/src/vendor/glm/detail/func_packing_simd.inl +++ /dev/null @@ -1,6 +0,0 @@ -namespace glm{ -namespace detail -{ - -}//namespace detail -}//namespace glm diff --git a/src/vendor/glm/detail/func_trigonometric.inl b/src/vendor/glm/detail/func_trigonometric.inl deleted file mode 100755 index e129dce..0000000 --- a/src/vendor/glm/detail/func_trigonometric.inl +++ /dev/null @@ -1,197 +0,0 @@ -#include "_vectorize.hpp" -#include -#include - -namespace glm -{ - // radians - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType radians(genType degrees) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'radians' only accept floating-point input"); - - return degrees * static_cast(0.01745329251994329576923690768489); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec radians(vec const& v) - { - return detail::functor1::call(radians, v); - } - - // degrees - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType degrees(genType radians) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'degrees' only accept floating-point input"); - - return radians * static_cast(57.295779513082320876798154814105); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec degrees(vec const& v) - { - return detail::functor1::call(degrees, v); - } - - // sin - using ::std::sin; - - template - GLM_FUNC_QUALIFIER vec sin(vec const& v) - { - return detail::functor1::call(sin, v); - } - - // cos - using std::cos; - - template - GLM_FUNC_QUALIFIER vec cos(vec const& v) - { - return detail::functor1::call(cos, v); - } - - // tan - using std::tan; - - template - GLM_FUNC_QUALIFIER vec tan(vec const& v) - { - return detail::functor1::call(tan, v); - } - - // asin - using std::asin; - - template - GLM_FUNC_QUALIFIER vec asin(vec const& v) - { - return detail::functor1::call(asin, v); - } - - // acos - using std::acos; - - template - GLM_FUNC_QUALIFIER vec acos(vec const& v) - { - return detail::functor1::call(acos, v); - } - - // atan - template - GLM_FUNC_QUALIFIER genType atan(genType y, genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'atan' only accept floating-point input"); - - return ::std::atan2(y, x); - } - - template - GLM_FUNC_QUALIFIER vec atan(vec const& a, vec const& b) - { - return detail::functor2::call(::std::atan2, a, b); - } - - using std::atan; - - template - GLM_FUNC_QUALIFIER vec atan(vec const& v) - { - return detail::functor1::call(atan, v); - } - - // sinh - using std::sinh; - - template - GLM_FUNC_QUALIFIER vec sinh(vec const& v) - { - return detail::functor1::call(sinh, v); - } - - // cosh - using std::cosh; - - template - GLM_FUNC_QUALIFIER vec cosh(vec const& v) - { - return detail::functor1::call(cosh, v); - } - - // tanh - using std::tanh; - - template - GLM_FUNC_QUALIFIER vec tanh(vec const& v) - { - return detail::functor1::call(tanh, v); - } - - // asinh -# if GLM_HAS_CXX11_STL - using std::asinh; -# else - template - GLM_FUNC_QUALIFIER genType asinh(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'asinh' only accept floating-point input"); - - return (x < static_cast(0) ? static_cast(-1) : (x > static_cast(0) ? static_cast(1) : static_cast(0))) * log(std::abs(x) + sqrt(static_cast(1) + x * x)); - } -# endif - - template - GLM_FUNC_QUALIFIER vec asinh(vec const& v) - { - return detail::functor1::call(asinh, v); - } - - // acosh -# if GLM_HAS_CXX11_STL - using std::acosh; -# else - template - GLM_FUNC_QUALIFIER genType acosh(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acosh' only accept floating-point input"); - - if(x < static_cast(1)) - return static_cast(0); - return log(x + sqrt(x * x - static_cast(1))); - } -# endif - - template - GLM_FUNC_QUALIFIER vec acosh(vec const& v) - { - return detail::functor1::call(acosh, v); - } - - // atanh -# if GLM_HAS_CXX11_STL - using std::atanh; -# else - template - GLM_FUNC_QUALIFIER genType atanh(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'atanh' only accept floating-point input"); - - if(std::abs(x) >= static_cast(1)) - return 0; - return static_cast(0.5) * log((static_cast(1) + x) / (static_cast(1) - x)); - } -# endif - - template - GLM_FUNC_QUALIFIER vec atanh(vec const& v) - { - return detail::functor1::call(atanh, v); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "func_trigonometric_simd.inl" -#endif - diff --git a/src/vendor/glm/detail/func_trigonometric_simd.inl b/src/vendor/glm/detail/func_trigonometric_simd.inl deleted file mode 100755 index e69de29..0000000 diff --git a/src/vendor/glm/detail/func_vector_relational.inl b/src/vendor/glm/detail/func_vector_relational.inl deleted file mode 100755 index 80c9e87..0000000 --- a/src/vendor/glm/detail/func_vector_relational.inl +++ /dev/null @@ -1,87 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec lessThan(vec const& x, vec const& y) - { - vec Result(true); - for(length_t i = 0; i < L; ++i) - Result[i] = x[i] < y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec lessThanEqual(vec const& x, vec const& y) - { - vec Result(true); - for(length_t i = 0; i < L; ++i) - Result[i] = x[i] <= y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec greaterThan(vec const& x, vec const& y) - { - vec Result(true); - for(length_t i = 0; i < L; ++i) - Result[i] = x[i] > y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec greaterThanEqual(vec const& x, vec const& y) - { - vec Result(true); - for(length_t i = 0; i < L; ++i) - Result[i] = x[i] >= y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(vec const& x, vec const& y) - { - vec Result(true); - for(length_t i = 0; i < L; ++i) - Result[i] = x[i] == y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y) - { - vec Result(true); - for(length_t i = 0; i < L; ++i) - Result[i] = x[i] != y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool any(vec const& v) - { - bool Result = false; - for(length_t i = 0; i < L; ++i) - Result = Result || v[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool all(vec const& v) - { - bool Result = true; - for(length_t i = 0; i < L; ++i) - Result = Result && v[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec not_(vec const& v) - { - vec Result(true); - for(length_t i = 0; i < L; ++i) - Result[i] = !v[i]; - return Result; - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "func_vector_relational_simd.inl" -#endif diff --git a/src/vendor/glm/detail/func_vector_relational_simd.inl b/src/vendor/glm/detail/func_vector_relational_simd.inl deleted file mode 100755 index fd0fe8b..0000000 --- a/src/vendor/glm/detail/func_vector_relational_simd.inl +++ /dev/null @@ -1,6 +0,0 @@ -namespace glm{ -namespace detail -{ - -}//namespace detail -}//namespace glm diff --git a/src/vendor/glm/detail/glm.cpp b/src/vendor/glm/detail/glm.cpp deleted file mode 100755 index e0755bd..0000000 --- a/src/vendor/glm/detail/glm.cpp +++ /dev/null @@ -1,263 +0,0 @@ -/// @ref core -/// @file glm/glm.cpp - -#ifndef GLM_ENABLE_EXPERIMENTAL -#define GLM_ENABLE_EXPERIMENTAL -#endif -#include -#include -#include -#include -#include -#include - -namespace glm -{ -// tvec1 type explicit instantiation -template struct vec<1, uint8, lowp>; -template struct vec<1, uint16, lowp>; -template struct vec<1, uint32, lowp>; -template struct vec<1, uint64, lowp>; -template struct vec<1, int8, lowp>; -template struct vec<1, int16, lowp>; -template struct vec<1, int32, lowp>; -template struct vec<1, int64, lowp>; -template struct vec<1, float32, lowp>; -template struct vec<1, float64, lowp>; - -template struct vec<1, uint8, mediump>; -template struct vec<1, uint16, mediump>; -template struct vec<1, uint32, mediump>; -template struct vec<1, uint64, mediump>; -template struct vec<1, int8, mediump>; -template struct vec<1, int16, mediump>; -template struct vec<1, int32, mediump>; -template struct vec<1, int64, mediump>; -template struct vec<1, float32, mediump>; -template struct vec<1, float64, mediump>; - -template struct vec<1, uint8, highp>; -template struct vec<1, uint16, highp>; -template struct vec<1, uint32, highp>; -template struct vec<1, uint64, highp>; -template struct vec<1, int8, highp>; -template struct vec<1, int16, highp>; -template struct vec<1, int32, highp>; -template struct vec<1, int64, highp>; -template struct vec<1, float32, highp>; -template struct vec<1, float64, highp>; - -// tvec2 type explicit instantiation -template struct vec<2, uint8, lowp>; -template struct vec<2, uint16, lowp>; -template struct vec<2, uint32, lowp>; -template struct vec<2, uint64, lowp>; -template struct vec<2, int8, lowp>; -template struct vec<2, int16, lowp>; -template struct vec<2, int32, lowp>; -template struct vec<2, int64, lowp>; -template struct vec<2, float32, lowp>; -template struct vec<2, float64, lowp>; - -template struct vec<2, uint8, mediump>; -template struct vec<2, uint16, mediump>; -template struct vec<2, uint32, mediump>; -template struct vec<2, uint64, mediump>; -template struct vec<2, int8, mediump>; -template struct vec<2, int16, mediump>; -template struct vec<2, int32, mediump>; -template struct vec<2, int64, mediump>; -template struct vec<2, float32, mediump>; -template struct vec<2, float64, mediump>; - -template struct vec<2, uint8, highp>; -template struct vec<2, uint16, highp>; -template struct vec<2, uint32, highp>; -template struct vec<2, uint64, highp>; -template struct vec<2, int8, highp>; -template struct vec<2, int16, highp>; -template struct vec<2, int32, highp>; -template struct vec<2, int64, highp>; -template struct vec<2, float32, highp>; -template struct vec<2, float64, highp>; - -// tvec3 type explicit instantiation -template struct vec<3, uint8, lowp>; -template struct vec<3, uint16, lowp>; -template struct vec<3, uint32, lowp>; -template struct vec<3, uint64, lowp>; -template struct vec<3, int8, lowp>; -template struct vec<3, int16, lowp>; -template struct vec<3, int32, lowp>; -template struct vec<3, int64, lowp>; -template struct vec<3, float32, lowp>; -template struct vec<3, float64, lowp>; - -template struct vec<3, uint8, mediump>; -template struct vec<3, uint16, mediump>; -template struct vec<3, uint32, mediump>; -template struct vec<3, uint64, mediump>; -template struct vec<3, int8, mediump>; -template struct vec<3, int16, mediump>; -template struct vec<3, int32, mediump>; -template struct vec<3, int64, mediump>; -template struct vec<3, float32, mediump>; -template struct vec<3, float64, mediump>; - -template struct vec<3, uint8, highp>; -template struct vec<3, uint16, highp>; -template struct vec<3, uint32, highp>; -template struct vec<3, uint64, highp>; -template struct vec<3, int8, highp>; -template struct vec<3, int16, highp>; -template struct vec<3, int32, highp>; -template struct vec<3, int64, highp>; -template struct vec<3, float32, highp>; -template struct vec<3, float64, highp>; - -// tvec4 type explicit instantiation -template struct vec<4, uint8, lowp>; -template struct vec<4, uint16, lowp>; -template struct vec<4, uint32, lowp>; -template struct vec<4, uint64, lowp>; -template struct vec<4, int8, lowp>; -template struct vec<4, int16, lowp>; -template struct vec<4, int32, lowp>; -template struct vec<4, int64, lowp>; -template struct vec<4, float32, lowp>; -template struct vec<4, float64, lowp>; - -template struct vec<4, uint8, mediump>; -template struct vec<4, uint16, mediump>; -template struct vec<4, uint32, mediump>; -template struct vec<4, uint64, mediump>; -template struct vec<4, int8, mediump>; -template struct vec<4, int16, mediump>; -template struct vec<4, int32, mediump>; -template struct vec<4, int64, mediump>; -template struct vec<4, float32, mediump>; -template struct vec<4, float64, mediump>; - -template struct vec<4, uint8, highp>; -template struct vec<4, uint16, highp>; -template struct vec<4, uint32, highp>; -template struct vec<4, uint64, highp>; -template struct vec<4, int8, highp>; -template struct vec<4, int16, highp>; -template struct vec<4, int32, highp>; -template struct vec<4, int64, highp>; -template struct vec<4, float32, highp>; -template struct vec<4, float64, highp>; - -// tmat2x2 type explicit instantiation -template struct mat<2, 2, float32, lowp>; -template struct mat<2, 2, float64, lowp>; - -template struct mat<2, 2, float32, mediump>; -template struct mat<2, 2, float64, mediump>; - -template struct mat<2, 2, float32, highp>; -template struct mat<2, 2, float64, highp>; - -// tmat2x3 type explicit instantiation -template struct mat<2, 3, float32, lowp>; -template struct mat<2, 3, float64, lowp>; - -template struct mat<2, 3, float32, mediump>; -template struct mat<2, 3, float64, mediump>; - -template struct mat<2, 3, float32, highp>; -template struct mat<2, 3, float64, highp>; - -// tmat2x4 type explicit instantiation -template struct mat<2, 4, float32, lowp>; -template struct mat<2, 4, float64, lowp>; - -template struct mat<2, 4, float32, mediump>; -template struct mat<2, 4, float64, mediump>; - -template struct mat<2, 4, float32, highp>; -template struct mat<2, 4, float64, highp>; - -// tmat3x2 type explicit instantiation -template struct mat<3, 2, float32, lowp>; -template struct mat<3, 2, float64, lowp>; - -template struct mat<3, 2, float32, mediump>; -template struct mat<3, 2, float64, mediump>; - -template struct mat<3, 2, float32, highp>; -template struct mat<3, 2, float64, highp>; - -// tmat3x3 type explicit instantiation -template struct mat<3, 3, float32, lowp>; -template struct mat<3, 3, float64, lowp>; - -template struct mat<3, 3, float32, mediump>; -template struct mat<3, 3, float64, mediump>; - -template struct mat<3, 3, float32, highp>; -template struct mat<3, 3, float64, highp>; - -// tmat3x4 type explicit instantiation -template struct mat<3, 4, float32, lowp>; -template struct mat<3, 4, float64, lowp>; - -template struct mat<3, 4, float32, mediump>; -template struct mat<3, 4, float64, mediump>; - -template struct mat<3, 4, float32, highp>; -template struct mat<3, 4, float64, highp>; - -// tmat4x2 type explicit instantiation -template struct mat<4, 2, float32, lowp>; -template struct mat<4, 2, float64, lowp>; - -template struct mat<4, 2, float32, mediump>; -template struct mat<4, 2, float64, mediump>; - -template struct mat<4, 2, float32, highp>; -template struct mat<4, 2, float64, highp>; - -// tmat4x3 type explicit instantiation -template struct mat<4, 3, float32, lowp>; -template struct mat<4, 3, float64, lowp>; - -template struct mat<4, 3, float32, mediump>; -template struct mat<4, 3, float64, mediump>; - -template struct mat<4, 3, float32, highp>; -template struct mat<4, 3, float64, highp>; - -// tmat4x4 type explicit instantiation -template struct mat<4, 4, float32, lowp>; -template struct mat<4, 4, float64, lowp>; - -template struct mat<4, 4, float32, mediump>; -template struct mat<4, 4, float64, mediump>; - -template struct mat<4, 4, float32, highp>; -template struct mat<4, 4, float64, highp>; - -// tquat type explicit instantiation -template struct qua; -template struct qua; - -template struct qua; -template struct qua; - -template struct qua; -template struct qua; - -//tdualquat type explicit instantiation -template struct tdualquat; -template struct tdualquat; - -template struct tdualquat; -template struct tdualquat; - -template struct tdualquat; -template struct tdualquat; - -}//namespace glm - diff --git a/src/vendor/glm/detail/qualifier.hpp b/src/vendor/glm/detail/qualifier.hpp deleted file mode 100755 index b6c9df0..0000000 --- a/src/vendor/glm/detail/qualifier.hpp +++ /dev/null @@ -1,230 +0,0 @@ -#pragma once - -#include "setup.hpp" - -namespace glm -{ - /// Qualify GLM types in term of alignment (packed, aligned) and precision in term of ULPs (lowp, mediump, highp) - enum qualifier - { - packed_highp, ///< Typed data is tightly packed in memory and operations are executed with high precision in term of ULPs - packed_mediump, ///< Typed data is tightly packed in memory and operations are executed with medium precision in term of ULPs for higher performance - packed_lowp, ///< Typed data is tightly packed in memory and operations are executed with low precision in term of ULPs to maximize performance - -# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE - aligned_highp, ///< Typed data is aligned in memory allowing SIMD optimizations and operations are executed with high precision in term of ULPs - aligned_mediump, ///< Typed data is aligned in memory allowing SIMD optimizations and operations are executed with high precision in term of ULPs for higher performance - aligned_lowp, // ///< Typed data is aligned in memory allowing SIMD optimizations and operations are executed with high precision in term of ULPs to maximize performance - aligned = aligned_highp, ///< By default aligned qualifier is also high precision -# endif - - highp = packed_highp, ///< By default highp qualifier is also packed - mediump = packed_mediump, ///< By default mediump qualifier is also packed - lowp = packed_lowp, ///< By default lowp qualifier is also packed - packed = packed_highp, ///< By default packed qualifier is also high precision - -# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE && defined(GLM_FORCE_DEFAULT_ALIGNED_GENTYPES) - defaultp = aligned_highp -# else - defaultp = highp -# endif - }; - - typedef qualifier precision; - - template struct vec; - template struct mat; - template struct qua; - -# if GLM_HAS_TEMPLATE_ALIASES - template using tvec1 = vec<1, T, Q>; - template using tvec2 = vec<2, T, Q>; - template using tvec3 = vec<3, T, Q>; - template using tvec4 = vec<4, T, Q>; - template using tmat2x2 = mat<2, 2, T, Q>; - template using tmat2x3 = mat<2, 3, T, Q>; - template using tmat2x4 = mat<2, 4, T, Q>; - template using tmat3x2 = mat<3, 2, T, Q>; - template using tmat3x3 = mat<3, 3, T, Q>; - template using tmat3x4 = mat<3, 4, T, Q>; - template using tmat4x2 = mat<4, 2, T, Q>; - template using tmat4x3 = mat<4, 3, T, Q>; - template using tmat4x4 = mat<4, 4, T, Q>; - template using tquat = qua; -# endif - -namespace detail -{ - template - struct is_aligned - { - static const bool value = false; - }; - -# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE - template<> - struct is_aligned - { - static const bool value = true; - }; - - template<> - struct is_aligned - { - static const bool value = true; - }; - - template<> - struct is_aligned - { - static const bool value = true; - }; -# endif - - template - struct storage - { - typedef struct type { - T data[L]; - } type; - }; - -# if GLM_HAS_ALIGNOF - template - struct storage - { - typedef struct alignas(L * sizeof(T)) type { - T data[L]; - } type; - }; - - template - struct storage<3, T, true> - { - typedef struct alignas(4 * sizeof(T)) type { - T data[4]; - } type; - }; -# endif - -# if GLM_ARCH & GLM_ARCH_SSE2_BIT - template<> - struct storage<4, float, true> - { - typedef glm_f32vec4 type; - }; - - template<> - struct storage<4, int, true> - { - typedef glm_i32vec4 type; - }; - - template<> - struct storage<4, unsigned int, true> - { - typedef glm_u32vec4 type; - }; - - template<> - struct storage<2, double, true> - { - typedef glm_f64vec2 type; - }; - - template<> - struct storage<2, detail::int64, true> - { - typedef glm_i64vec2 type; - }; - - template<> - struct storage<2, detail::uint64, true> - { - typedef glm_u64vec2 type; - }; -# endif - -# if (GLM_ARCH & GLM_ARCH_AVX_BIT) - template<> - struct storage<4, double, true> - { - typedef glm_f64vec4 type; - }; -# endif - -# if (GLM_ARCH & GLM_ARCH_AVX2_BIT) - template<> - struct storage<4, detail::int64, true> - { - typedef glm_i64vec4 type; - }; - - template<> - struct storage<4, detail::uint64, true> - { - typedef glm_u64vec4 type; - }; -# endif - -# if GLM_ARCH & GLM_ARCH_NEON_BIT - template<> - struct storage<4, float, true> - { - typedef glm_f32vec4 type; - }; - - template<> - struct storage<4, int, true> - { - typedef glm_i32vec4 type; - }; - - template<> - struct storage<4, unsigned int, true> - { - typedef glm_u32vec4 type; - }; -# endif - - enum genTypeEnum - { - GENTYPE_VEC, - GENTYPE_MAT, - GENTYPE_QUAT - }; - - template - struct genTypeTrait - {}; - - template - struct genTypeTrait > - { - static const genTypeEnum GENTYPE = GENTYPE_MAT; - }; - - template - struct init_gentype - { - }; - - template - struct init_gentype - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static genType identity() - { - return genType(1, 0, 0, 0); - } - }; - - template - struct init_gentype - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static genType identity() - { - return genType(1); - } - }; -}//namespace detail -}//namespace glm diff --git a/src/vendor/glm/detail/setup.hpp b/src/vendor/glm/detail/setup.hpp deleted file mode 100755 index 51a6f49..0000000 --- a/src/vendor/glm/detail/setup.hpp +++ /dev/null @@ -1,1156 +0,0 @@ -#ifndef GLM_SETUP_INCLUDED - -#include -#include - -#define GLM_VERSION_MAJOR 0 -#define GLM_VERSION_MINOR 9 -#define GLM_VERSION_PATCH 9 -#define GLM_VERSION_REVISION 9 -#define GLM_VERSION 999 -#define GLM_VERSION_MESSAGE "GLM: version 0.9.9.9" - -#define GLM_SETUP_INCLUDED GLM_VERSION - -/////////////////////////////////////////////////////////////////////////////////// -// Active states - -#define GLM_DISABLE 0 -#define GLM_ENABLE 1 - -/////////////////////////////////////////////////////////////////////////////////// -// Messages - -#if defined(GLM_FORCE_MESSAGES) -# define GLM_MESSAGES GLM_ENABLE -#else -# define GLM_MESSAGES GLM_DISABLE -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Detect the platform - -#include "../simd/platform.h" - -/////////////////////////////////////////////////////////////////////////////////// -// Build model - -#if defined(_M_ARM64) || defined(__LP64__) || defined(_M_X64) || defined(__ppc64__) || defined(__x86_64__) -# define GLM_MODEL GLM_MODEL_64 -#elif defined(__i386__) || defined(__ppc__) || defined(__ILP32__) || defined(_M_ARM) -# define GLM_MODEL GLM_MODEL_32 -#else -# define GLM_MODEL GLM_MODEL_32 -#endif// - -#if !defined(GLM_MODEL) && GLM_COMPILER != 0 -# error "GLM_MODEL undefined, your compiler may not be supported by GLM. Add #define GLM_MODEL 0 to ignore this message." -#endif//GLM_MODEL - -/////////////////////////////////////////////////////////////////////////////////// -// C++ Version - -// User defines: GLM_FORCE_CXX98, GLM_FORCE_CXX03, GLM_FORCE_CXX11, GLM_FORCE_CXX14, GLM_FORCE_CXX17, GLM_FORCE_CXX2A - -#define GLM_LANG_CXX98_FLAG (1 << 1) -#define GLM_LANG_CXX03_FLAG (1 << 2) -#define GLM_LANG_CXX0X_FLAG (1 << 3) -#define GLM_LANG_CXX11_FLAG (1 << 4) -#define GLM_LANG_CXX14_FLAG (1 << 5) -#define GLM_LANG_CXX17_FLAG (1 << 6) -#define GLM_LANG_CXX2A_FLAG (1 << 7) -#define GLM_LANG_CXXMS_FLAG (1 << 8) -#define GLM_LANG_CXXGNU_FLAG (1 << 9) - -#define GLM_LANG_CXX98 GLM_LANG_CXX98_FLAG -#define GLM_LANG_CXX03 (GLM_LANG_CXX98 | GLM_LANG_CXX03_FLAG) -#define GLM_LANG_CXX0X (GLM_LANG_CXX03 | GLM_LANG_CXX0X_FLAG) -#define GLM_LANG_CXX11 (GLM_LANG_CXX0X | GLM_LANG_CXX11_FLAG) -#define GLM_LANG_CXX14 (GLM_LANG_CXX11 | GLM_LANG_CXX14_FLAG) -#define GLM_LANG_CXX17 (GLM_LANG_CXX14 | GLM_LANG_CXX17_FLAG) -#define GLM_LANG_CXX2A (GLM_LANG_CXX17 | GLM_LANG_CXX2A_FLAG) -#define GLM_LANG_CXXMS GLM_LANG_CXXMS_FLAG -#define GLM_LANG_CXXGNU GLM_LANG_CXXGNU_FLAG - -#if (defined(_MSC_EXTENSIONS)) -# define GLM_LANG_EXT GLM_LANG_CXXMS_FLAG -#elif ((GLM_COMPILER & (GLM_COMPILER_CLANG | GLM_COMPILER_GCC)) && (GLM_ARCH & GLM_ARCH_SIMD_BIT)) -# define GLM_LANG_EXT GLM_LANG_CXXMS_FLAG -#else -# define GLM_LANG_EXT 0 -#endif - -#if (defined(GLM_FORCE_CXX_UNKNOWN)) -# define GLM_LANG 0 -#elif defined(GLM_FORCE_CXX2A) -# define GLM_LANG (GLM_LANG_CXX2A | GLM_LANG_EXT) -# define GLM_LANG_STL11_FORCED -#elif defined(GLM_FORCE_CXX17) -# define GLM_LANG (GLM_LANG_CXX17 | GLM_LANG_EXT) -# define GLM_LANG_STL11_FORCED -#elif defined(GLM_FORCE_CXX14) -# define GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_EXT) -# define GLM_LANG_STL11_FORCED -#elif defined(GLM_FORCE_CXX11) -# define GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_EXT) -# define GLM_LANG_STL11_FORCED -#elif defined(GLM_FORCE_CXX03) -# define GLM_LANG (GLM_LANG_CXX03 | GLM_LANG_EXT) -#elif defined(GLM_FORCE_CXX98) -# define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_EXT) -#else -# if GLM_COMPILER & GLM_COMPILER_VC && defined(_MSVC_LANG) -# if GLM_COMPILER >= GLM_COMPILER_VC15_7 -# define GLM_LANG_PLATFORM _MSVC_LANG -# elif GLM_COMPILER >= GLM_COMPILER_VC15 -# if _MSVC_LANG > 201402L -# define GLM_LANG_PLATFORM 201402L -# else -# define GLM_LANG_PLATFORM _MSVC_LANG -# endif -# else -# define GLM_LANG_PLATFORM 0 -# endif -# else -# define GLM_LANG_PLATFORM 0 -# endif - -# if __cplusplus > 201703L || GLM_LANG_PLATFORM > 201703L -# define GLM_LANG (GLM_LANG_CXX2A | GLM_LANG_EXT) -# elif __cplusplus == 201703L || GLM_LANG_PLATFORM == 201703L -# define GLM_LANG (GLM_LANG_CXX17 | GLM_LANG_EXT) -# elif __cplusplus == 201402L || __cplusplus == 201406L || __cplusplus == 201500L || GLM_LANG_PLATFORM == 201402L -# define GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_EXT) -# elif __cplusplus == 201103L || GLM_LANG_PLATFORM == 201103L -# define GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_EXT) -# elif defined(__INTEL_CXX11_MODE__) || defined(_MSC_VER) || defined(__GXX_EXPERIMENTAL_CXX0X__) -# define GLM_LANG (GLM_LANG_CXX0X | GLM_LANG_EXT) -# elif __cplusplus == 199711L -# define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_EXT) -# else -# define GLM_LANG (0 | GLM_LANG_EXT) -# endif -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Has of C++ features - -// http://clang.llvm.org/cxx_status.html -// http://gcc.gnu.org/projects/cxx0x.html -// http://msdn.microsoft.com/en-us/library/vstudio/hh567368(v=vs.120).aspx - -// Android has multiple STLs but C++11 STL detection doesn't always work #284 #564 -#if GLM_PLATFORM == GLM_PLATFORM_ANDROID && !defined(GLM_LANG_STL11_FORCED) -# define GLM_HAS_CXX11_STL 0 -#elif (GLM_COMPILER & GLM_COMPILER_CUDA_RTC) == GLM_COMPILER_CUDA_RTC -# define GLM_HAS_CXX11_STL 0 -#elif (GLM_COMPILER & GLM_COMPILER_HIP) -# define GLM_HAS_CXX11_STL 0 -#elif GLM_COMPILER & GLM_COMPILER_CLANG -# if (defined(_LIBCPP_VERSION) || (GLM_LANG & GLM_LANG_CXX11_FLAG) || defined(GLM_LANG_STL11_FORCED)) -# define GLM_HAS_CXX11_STL 1 -# else -# define GLM_HAS_CXX11_STL 0 -# endif -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_CXX11_STL 1 -#else -# define GLM_HAS_CXX11_STL ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC48)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ - ((GLM_PLATFORM != GLM_PLATFORM_WINDOWS) && (GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL15)))) -#endif - -// N1720 -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_STATIC_ASSERT __has_feature(cxx_static_assert) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_STATIC_ASSERT 1 -#else -# define GLM_HAS_STATIC_ASSERT ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_CUDA)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC)) || \ - ((GLM_COMPILER & GLM_COMPILER_HIP)))) -#endif - -// N1988 -#if GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_EXTENDED_INTEGER_TYPE 1 -#else -# define GLM_HAS_EXTENDED_INTEGER_TYPE (\ - ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_VC)) || \ - ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_CUDA)) || \ - ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_CLANG)) || \ - ((GLM_COMPILER & GLM_COMPILER_HIP))) -#endif - -// N2672 Initializer lists http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_INITIALIZER_LISTS __has_feature(cxx_generalized_initializers) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_INITIALIZER_LISTS 1 -#else -# define GLM_HAS_INITIALIZER_LISTS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15)) || \ - ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL14)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA)) || \ - ((GLM_COMPILER & GLM_COMPILER_HIP)))) -#endif - -// N2544 Unrestricted unions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_UNRESTRICTED_UNIONS __has_feature(cxx_unrestricted_unions) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_UNRESTRICTED_UNIONS 1 -#else -# define GLM_HAS_UNRESTRICTED_UNIONS (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - (GLM_COMPILER & GLM_COMPILER_VC) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA)) || \ - ((GLM_COMPILER & GLM_COMPILER_HIP))) -#endif - -// N2346 -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_DEFAULTED_FUNCTIONS __has_feature(cxx_defaulted_functions) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_DEFAULTED_FUNCTIONS 1 -#else -# define GLM_HAS_DEFAULTED_FUNCTIONS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ - ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \ - (GLM_COMPILER & GLM_COMPILER_CUDA)) || \ - ((GLM_COMPILER & GLM_COMPILER_HIP))) -#endif - -// N2118 -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_RVALUE_REFERENCES __has_feature(cxx_rvalue_references) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_RVALUE_REFERENCES 1 -#else -# define GLM_HAS_RVALUE_REFERENCES ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_VC)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA)) || \ - ((GLM_COMPILER & GLM_COMPILER_HIP)))) -#endif - -// N2437 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS __has_feature(cxx_explicit_conversions) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS 1 -#else -# define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL14)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA)) || \ - ((GLM_COMPILER & GLM_COMPILER_HIP)))) -#endif - -// N2258 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_TEMPLATE_ALIASES __has_feature(cxx_alias_templates) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_TEMPLATE_ALIASES 1 -#else -# define GLM_HAS_TEMPLATE_ALIASES ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA)) || \ - ((GLM_COMPILER & GLM_COMPILER_HIP)))) -#endif - -// N2930 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2930.html -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_RANGE_FOR __has_feature(cxx_range_for) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_RANGE_FOR 1 -#else -# define GLM_HAS_RANGE_FOR ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA)) || \ - ((GLM_COMPILER & GLM_COMPILER_HIP)))) -#endif - -// N2341 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_ALIGNOF __has_feature(cxx_alignas) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_ALIGNOF 1 -#else -# define GLM_HAS_ALIGNOF ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL15)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC14)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA)) || \ - ((GLM_COMPILER & GLM_COMPILER_HIP)))) -#endif - -// N2235 Generalized Constant Expressions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf -// N3652 Extended Constant Expressions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3652.html -#if (GLM_ARCH & GLM_ARCH_SIMD_BIT) // Compiler SIMD intrinsics don't support constexpr... -# define GLM_HAS_CONSTEXPR 0 -#elif (GLM_COMPILER & GLM_COMPILER_CLANG) -# define GLM_HAS_CONSTEXPR __has_feature(cxx_relaxed_constexpr) -#elif (GLM_LANG & GLM_LANG_CXX14_FLAG) -# define GLM_HAS_CONSTEXPR 1 -#else -# define GLM_HAS_CONSTEXPR ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && GLM_HAS_INITIALIZER_LISTS && (\ - ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL17)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15)))) -#endif - -#if GLM_HAS_CONSTEXPR -# define GLM_CONSTEXPR constexpr -#else -# define GLM_CONSTEXPR -#endif - -// -#if GLM_HAS_CONSTEXPR -# if (GLM_COMPILER & GLM_COMPILER_CLANG) -# if __has_feature(cxx_if_constexpr) -# define GLM_HAS_IF_CONSTEXPR 1 -# else -# define GLM_HAS_IF_CONSTEXPR 0 -# endif -# elif (GLM_LANG & GLM_LANG_CXX17_FLAG) -# define GLM_HAS_IF_CONSTEXPR 1 -# else -# define GLM_HAS_IF_CONSTEXPR 0 -# endif -#else -# define GLM_HAS_IF_CONSTEXPR 0 -#endif - -#if GLM_HAS_IF_CONSTEXPR -# define GLM_IF_CONSTEXPR if constexpr -#else -# define GLM_IF_CONSTEXPR if -#endif - -// -#if GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_ASSIGNABLE 1 -#else -# define GLM_HAS_ASSIGNABLE ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15)) || \ - ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC49)))) -#endif - -// -#define GLM_HAS_TRIVIAL_QUERIES 0 - -// -#if GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_MAKE_SIGNED 1 -#else -# define GLM_HAS_MAKE_SIGNED ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA)) || \ - ((GLM_COMPILER & GLM_COMPILER_HIP)))) -#endif - -// -#if defined(GLM_FORCE_INTRINSICS) -# define GLM_HAS_BITSCAN_WINDOWS ((GLM_PLATFORM & GLM_PLATFORM_WINDOWS) && (\ - ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC14) && (GLM_ARCH & GLM_ARCH_X86_BIT)))) -#else -# define GLM_HAS_BITSCAN_WINDOWS 0 -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// OpenMP -#ifdef _OPENMP -# if GLM_COMPILER & GLM_COMPILER_GCC -# if GLM_COMPILER >= GLM_COMPILER_GCC61 -# define GLM_HAS_OPENMP 45 -# elif GLM_COMPILER >= GLM_COMPILER_GCC49 -# define GLM_HAS_OPENMP 40 -# elif GLM_COMPILER >= GLM_COMPILER_GCC47 -# define GLM_HAS_OPENMP 31 -# else -# define GLM_HAS_OPENMP 0 -# endif -# elif GLM_COMPILER & GLM_COMPILER_CLANG -# if GLM_COMPILER >= GLM_COMPILER_CLANG38 -# define GLM_HAS_OPENMP 31 -# else -# define GLM_HAS_OPENMP 0 -# endif -# elif GLM_COMPILER & GLM_COMPILER_VC -# define GLM_HAS_OPENMP 20 -# elif GLM_COMPILER & GLM_COMPILER_INTEL -# if GLM_COMPILER >= GLM_COMPILER_INTEL16 -# define GLM_HAS_OPENMP 40 -# else -# define GLM_HAS_OPENMP 0 -# endif -# else -# define GLM_HAS_OPENMP 0 -# endif -#else -# define GLM_HAS_OPENMP 0 -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// nullptr - -#if GLM_LANG & GLM_LANG_CXX0X_FLAG -# define GLM_CONFIG_NULLPTR GLM_ENABLE -#else -# define GLM_CONFIG_NULLPTR GLM_DISABLE -#endif - -#if GLM_CONFIG_NULLPTR == GLM_ENABLE -# define GLM_NULLPTR nullptr -#else -# define GLM_NULLPTR 0 -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Static assert - -#if GLM_HAS_STATIC_ASSERT -# define GLM_STATIC_ASSERT(x, message) static_assert(x, message) -#elif GLM_COMPILER & GLM_COMPILER_VC -# define GLM_STATIC_ASSERT(x, message) typedef char __CASSERT__##__LINE__[(x) ? 1 : -1] -#else -# define GLM_STATIC_ASSERT(x, message) assert(x) -#endif//GLM_LANG - -/////////////////////////////////////////////////////////////////////////////////// -// Qualifiers - -#if (GLM_COMPILER & GLM_COMPILER_CUDA) || (GLM_COMPILER & GLM_COMPILER_HIP) -# define GLM_CUDA_FUNC_DEF __device__ __host__ -# define GLM_CUDA_FUNC_DECL __device__ __host__ -#else -# define GLM_CUDA_FUNC_DEF -# define GLM_CUDA_FUNC_DECL -#endif - -#if defined(GLM_FORCE_INLINE) -# if GLM_COMPILER & GLM_COMPILER_VC -# define GLM_INLINE __forceinline -# define GLM_NEVER_INLINE __declspec((noinline)) -# elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG) -# define GLM_INLINE inline __attribute__((__always_inline__)) -# define GLM_NEVER_INLINE __attribute__((__noinline__)) -# elif (GLM_COMPILER & GLM_COMPILER_CUDA) || (GLM_COMPILER & GLM_COMPILER_HIP) -# define GLM_INLINE __forceinline__ -# define GLM_NEVER_INLINE __noinline__ -# else -# define GLM_INLINE inline -# define GLM_NEVER_INLINE -# endif//GLM_COMPILER -#else -# define GLM_INLINE inline -# define GLM_NEVER_INLINE -#endif//defined(GLM_FORCE_INLINE) - -#define GLM_FUNC_DECL GLM_CUDA_FUNC_DECL -#define GLM_FUNC_QUALIFIER GLM_CUDA_FUNC_DEF GLM_INLINE - -/////////////////////////////////////////////////////////////////////////////////// -// Swizzle operators - -// User defines: GLM_FORCE_SWIZZLE - -#define GLM_SWIZZLE_DISABLED 0 -#define GLM_SWIZZLE_OPERATOR 1 -#define GLM_SWIZZLE_FUNCTION 2 - -#if defined(GLM_SWIZZLE) -# pragma message("GLM: GLM_SWIZZLE is deprecated, use GLM_FORCE_SWIZZLE instead.") -# define GLM_FORCE_SWIZZLE -#endif - -#if defined(GLM_FORCE_SWIZZLE) && (GLM_LANG & GLM_LANG_CXXMS_FLAG) && !defined(GLM_FORCE_XYZW_ONLY) -# define GLM_CONFIG_SWIZZLE GLM_SWIZZLE_OPERATOR -#elif defined(GLM_FORCE_SWIZZLE) -# define GLM_CONFIG_SWIZZLE GLM_SWIZZLE_FUNCTION -#else -# define GLM_CONFIG_SWIZZLE GLM_SWIZZLE_DISABLED -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Allows using not basic types as genType - -// #define GLM_FORCE_UNRESTRICTED_GENTYPE - -#ifdef GLM_FORCE_UNRESTRICTED_GENTYPE -# define GLM_CONFIG_UNRESTRICTED_GENTYPE GLM_ENABLE -#else -# define GLM_CONFIG_UNRESTRICTED_GENTYPE GLM_DISABLE -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Clip control, define GLM_FORCE_DEPTH_ZERO_TO_ONE before including GLM -// to use a clip space between 0 to 1. -// Coordinate system, define GLM_FORCE_LEFT_HANDED before including GLM -// to use left handed coordinate system by default. - -#define GLM_CLIP_CONTROL_ZO_BIT (1 << 0) // ZERO_TO_ONE -#define GLM_CLIP_CONTROL_NO_BIT (1 << 1) // NEGATIVE_ONE_TO_ONE -#define GLM_CLIP_CONTROL_LH_BIT (1 << 2) // LEFT_HANDED, For DirectX, Metal, Vulkan -#define GLM_CLIP_CONTROL_RH_BIT (1 << 3) // RIGHT_HANDED, For OpenGL, default in GLM - -#define GLM_CLIP_CONTROL_LH_ZO (GLM_CLIP_CONTROL_LH_BIT | GLM_CLIP_CONTROL_ZO_BIT) -#define GLM_CLIP_CONTROL_LH_NO (GLM_CLIP_CONTROL_LH_BIT | GLM_CLIP_CONTROL_NO_BIT) -#define GLM_CLIP_CONTROL_RH_ZO (GLM_CLIP_CONTROL_RH_BIT | GLM_CLIP_CONTROL_ZO_BIT) -#define GLM_CLIP_CONTROL_RH_NO (GLM_CLIP_CONTROL_RH_BIT | GLM_CLIP_CONTROL_NO_BIT) - -#ifdef GLM_FORCE_DEPTH_ZERO_TO_ONE -# ifdef GLM_FORCE_LEFT_HANDED -# define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_LH_ZO -# else -# define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_RH_ZO -# endif -#else -# ifdef GLM_FORCE_LEFT_HANDED -# define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_LH_NO -# else -# define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_RH_NO -# endif -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Qualifiers - -#if (GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)) -# define GLM_DEPRECATED __declspec(deprecated) -# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef __declspec(align(alignment)) type name -#elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG | GLM_COMPILER_INTEL) -# define GLM_DEPRECATED __attribute__((__deprecated__)) -# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __attribute__((aligned(alignment))) -#elif (GLM_COMPILER & GLM_COMPILER_CUDA) || (GLM_COMPILER & GLM_COMPILER_HIP) -# define GLM_DEPRECATED -# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __align__(x) -#else -# define GLM_DEPRECATED -# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name -#endif - -/////////////////////////////////////////////////////////////////////////////////// - -#ifdef GLM_FORCE_EXPLICIT_CTOR -# define GLM_EXPLICIT explicit -#else -# define GLM_EXPLICIT -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// SYCL - -#if GLM_COMPILER==GLM_COMPILER_SYCL - -#include -#include - -namespace glm { -namespace std { - // Import SYCL's functions into the namespace glm::std to force their usages. - // It's important to use the math built-in function (sin, exp, ...) - // of SYCL instead the std ones. - using namespace cl::sycl; - - /////////////////////////////////////////////////////////////////////////////// - // Import some "harmless" std's stuffs used by glm into - // the new glm::std namespace. - template - using numeric_limits = ::std::numeric_limits; - - using ::std::size_t; - - using ::std::uint8_t; - using ::std::uint16_t; - using ::std::uint32_t; - using ::std::uint64_t; - - using ::std::int8_t; - using ::std::int16_t; - using ::std::int32_t; - using ::std::int64_t; - - using ::std::make_unsigned; - /////////////////////////////////////////////////////////////////////////////// -} //namespace std -} //namespace glm - -#endif - -/////////////////////////////////////////////////////////////////////////////////// - -/////////////////////////////////////////////////////////////////////////////////// -// Length type: all length functions returns a length_t type. -// When GLM_FORCE_SIZE_T_LENGTH is defined, length_t is a typedef of size_t otherwise -// length_t is a typedef of int like GLSL defines it. - -#define GLM_LENGTH_INT 1 -#define GLM_LENGTH_SIZE_T 2 - -#ifdef GLM_FORCE_SIZE_T_LENGTH -# define GLM_CONFIG_LENGTH_TYPE GLM_LENGTH_SIZE_T -#else -# define GLM_CONFIG_LENGTH_TYPE GLM_LENGTH_INT -#endif - -namespace glm -{ - using std::size_t; -# if GLM_CONFIG_LENGTH_TYPE == GLM_LENGTH_SIZE_T - typedef size_t length_t; -# else - typedef int length_t; -# endif -}//namespace glm - -/////////////////////////////////////////////////////////////////////////////////// -// constexpr - -#if GLM_HAS_CONSTEXPR -# define GLM_CONFIG_CONSTEXP GLM_ENABLE - - namespace glm - { - template - constexpr std::size_t countof(T const (&)[N]) - { - return N; - } - }//namespace glm -# define GLM_COUNTOF(arr) glm::countof(arr) -#elif defined(_MSC_VER) -# define GLM_CONFIG_CONSTEXP GLM_DISABLE - -# define GLM_COUNTOF(arr) _countof(arr) -#else -# define GLM_CONFIG_CONSTEXP GLM_DISABLE - -# define GLM_COUNTOF(arr) sizeof(arr) / sizeof(arr[0]) -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// uint - -namespace glm{ -namespace detail -{ - template - struct is_int - { - enum test {value = 0}; - }; - - template<> - struct is_int - { - enum test {value = ~0}; - }; - - template<> - struct is_int - { - enum test {value = ~0}; - }; -}//namespace detail - - typedef unsigned int uint; -}//namespace glm - -/////////////////////////////////////////////////////////////////////////////////// -// 64-bit int - -#if GLM_HAS_EXTENDED_INTEGER_TYPE -# include -#endif - -namespace glm{ -namespace detail -{ -# if GLM_HAS_EXTENDED_INTEGER_TYPE - typedef std::uint64_t uint64; - typedef std::int64_t int64; -# elif (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) // C99 detected, 64 bit types available - typedef uint64_t uint64; - typedef int64_t int64; -# elif GLM_COMPILER & GLM_COMPILER_VC - typedef unsigned __int64 uint64; - typedef signed __int64 int64; -# elif GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic ignored "-Wlong-long" - __extension__ typedef unsigned long long uint64; - __extension__ typedef signed long long int64; -# elif (GLM_COMPILER & GLM_COMPILER_CLANG) -# pragma clang diagnostic ignored "-Wc++11-long-long" - typedef unsigned long long uint64; - typedef signed long long int64; -# else//unknown compiler - typedef unsigned long long uint64; - typedef signed long long int64; -# endif -}//namespace detail -}//namespace glm - -/////////////////////////////////////////////////////////////////////////////////// -// make_unsigned - -#if GLM_HAS_MAKE_SIGNED -# include - -namespace glm{ -namespace detail -{ - using std::make_unsigned; -}//namespace detail -}//namespace glm - -#else - -namespace glm{ -namespace detail -{ - template - struct make_unsigned - {}; - - template<> - struct make_unsigned - { - typedef unsigned char type; - }; - - template<> - struct make_unsigned - { - typedef unsigned char type; - }; - - template<> - struct make_unsigned - { - typedef unsigned short type; - }; - - template<> - struct make_unsigned - { - typedef unsigned int type; - }; - - template<> - struct make_unsigned - { - typedef unsigned long type; - }; - - template<> - struct make_unsigned - { - typedef uint64 type; - }; - - template<> - struct make_unsigned - { - typedef unsigned char type; - }; - - template<> - struct make_unsigned - { - typedef unsigned short type; - }; - - template<> - struct make_unsigned - { - typedef unsigned int type; - }; - - template<> - struct make_unsigned - { - typedef unsigned long type; - }; - - template<> - struct make_unsigned - { - typedef uint64 type; - }; -}//namespace detail -}//namespace glm -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Only use x, y, z, w as vector type components - -#ifdef GLM_FORCE_XYZW_ONLY -# define GLM_CONFIG_XYZW_ONLY GLM_ENABLE -#else -# define GLM_CONFIG_XYZW_ONLY GLM_DISABLE -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Configure the use of defaulted initialized types - -#define GLM_CTOR_INIT_DISABLE 0 -#define GLM_CTOR_INITIALIZER_LIST 1 -#define GLM_CTOR_INITIALISATION 2 - -#if defined(GLM_FORCE_CTOR_INIT) && GLM_HAS_INITIALIZER_LISTS -# define GLM_CONFIG_CTOR_INIT GLM_CTOR_INITIALIZER_LIST -#elif defined(GLM_FORCE_CTOR_INIT) && !GLM_HAS_INITIALIZER_LISTS -# define GLM_CONFIG_CTOR_INIT GLM_CTOR_INITIALISATION -#else -# define GLM_CONFIG_CTOR_INIT GLM_CTOR_INIT_DISABLE -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Use SIMD instruction sets - -#if GLM_HAS_ALIGNOF && (GLM_LANG & GLM_LANG_CXXMS_FLAG) && (GLM_ARCH & GLM_ARCH_SIMD_BIT) -# define GLM_CONFIG_SIMD GLM_ENABLE -#else -# define GLM_CONFIG_SIMD GLM_DISABLE -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Configure the use of defaulted function - -#if GLM_HAS_DEFAULTED_FUNCTIONS -# define GLM_CONFIG_DEFAULTED_FUNCTIONS GLM_ENABLE -# define GLM_DEFAULT = default -#else -# define GLM_CONFIG_DEFAULTED_FUNCTIONS GLM_DISABLE -# define GLM_DEFAULT -#endif - -#if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INIT_DISABLE && GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_ENABLE -# define GLM_CONFIG_DEFAULTED_DEFAULT_CTOR GLM_ENABLE -# define GLM_DEFAULT_CTOR GLM_DEFAULT -#else -# define GLM_CONFIG_DEFAULTED_DEFAULT_CTOR GLM_DISABLE -# define GLM_DEFAULT_CTOR -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Configure the use of aligned gentypes - -#ifdef GLM_FORCE_ALIGNED // Legacy define -# define GLM_FORCE_DEFAULT_ALIGNED_GENTYPES -#endif - -#ifdef GLM_FORCE_DEFAULT_ALIGNED_GENTYPES -# define GLM_FORCE_ALIGNED_GENTYPES -#endif - -#if GLM_HAS_ALIGNOF && (GLM_LANG & GLM_LANG_CXXMS_FLAG) && (defined(GLM_FORCE_ALIGNED_GENTYPES) || (GLM_CONFIG_SIMD == GLM_ENABLE)) -# define GLM_CONFIG_ALIGNED_GENTYPES GLM_ENABLE -#else -# define GLM_CONFIG_ALIGNED_GENTYPES GLM_DISABLE -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Configure the use of anonymous structure as implementation detail - -#if ((GLM_CONFIG_SIMD == GLM_ENABLE) || (GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR) || (GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE)) -# define GLM_CONFIG_ANONYMOUS_STRUCT GLM_ENABLE -#else -# define GLM_CONFIG_ANONYMOUS_STRUCT GLM_DISABLE -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Silent warnings - -#ifdef GLM_FORCE_SILENT_WARNINGS -# define GLM_SILENT_WARNINGS GLM_ENABLE -#else -# define GLM_SILENT_WARNINGS GLM_DISABLE -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Precision - -#define GLM_HIGHP 1 -#define GLM_MEDIUMP 2 -#define GLM_LOWP 3 - -#if defined(GLM_FORCE_PRECISION_HIGHP_BOOL) || defined(GLM_PRECISION_HIGHP_BOOL) -# define GLM_CONFIG_PRECISION_BOOL GLM_HIGHP -#elif defined(GLM_FORCE_PRECISION_MEDIUMP_BOOL) || defined(GLM_PRECISION_MEDIUMP_BOOL) -# define GLM_CONFIG_PRECISION_BOOL GLM_MEDIUMP -#elif defined(GLM_FORCE_PRECISION_LOWP_BOOL) || defined(GLM_PRECISION_LOWP_BOOL) -# define GLM_CONFIG_PRECISION_BOOL GLM_LOWP -#else -# define GLM_CONFIG_PRECISION_BOOL GLM_HIGHP -#endif - -#if defined(GLM_FORCE_PRECISION_HIGHP_INT) || defined(GLM_PRECISION_HIGHP_INT) -# define GLM_CONFIG_PRECISION_INT GLM_HIGHP -#elif defined(GLM_FORCE_PRECISION_MEDIUMP_INT) || defined(GLM_PRECISION_MEDIUMP_INT) -# define GLM_CONFIG_PRECISION_INT GLM_MEDIUMP -#elif defined(GLM_FORCE_PRECISION_LOWP_INT) || defined(GLM_PRECISION_LOWP_INT) -# define GLM_CONFIG_PRECISION_INT GLM_LOWP -#else -# define GLM_CONFIG_PRECISION_INT GLM_HIGHP -#endif - -#if defined(GLM_FORCE_PRECISION_HIGHP_UINT) || defined(GLM_PRECISION_HIGHP_UINT) -# define GLM_CONFIG_PRECISION_UINT GLM_HIGHP -#elif defined(GLM_FORCE_PRECISION_MEDIUMP_UINT) || defined(GLM_PRECISION_MEDIUMP_UINT) -# define GLM_CONFIG_PRECISION_UINT GLM_MEDIUMP -#elif defined(GLM_FORCE_PRECISION_LOWP_UINT) || defined(GLM_PRECISION_LOWP_UINT) -# define GLM_CONFIG_PRECISION_UINT GLM_LOWP -#else -# define GLM_CONFIG_PRECISION_UINT GLM_HIGHP -#endif - -#if defined(GLM_FORCE_PRECISION_HIGHP_FLOAT) || defined(GLM_PRECISION_HIGHP_FLOAT) -# define GLM_CONFIG_PRECISION_FLOAT GLM_HIGHP -#elif defined(GLM_FORCE_PRECISION_MEDIUMP_FLOAT) || defined(GLM_PRECISION_MEDIUMP_FLOAT) -# define GLM_CONFIG_PRECISION_FLOAT GLM_MEDIUMP -#elif defined(GLM_FORCE_PRECISION_LOWP_FLOAT) || defined(GLM_PRECISION_LOWP_FLOAT) -# define GLM_CONFIG_PRECISION_FLOAT GLM_LOWP -#else -# define GLM_CONFIG_PRECISION_FLOAT GLM_HIGHP -#endif - -#if defined(GLM_FORCE_PRECISION_HIGHP_DOUBLE) || defined(GLM_PRECISION_HIGHP_DOUBLE) -# define GLM_CONFIG_PRECISION_DOUBLE GLM_HIGHP -#elif defined(GLM_FORCE_PRECISION_MEDIUMP_DOUBLE) || defined(GLM_PRECISION_MEDIUMP_DOUBLE) -# define GLM_CONFIG_PRECISION_DOUBLE GLM_MEDIUMP -#elif defined(GLM_FORCE_PRECISION_LOWP_DOUBLE) || defined(GLM_PRECISION_LOWP_DOUBLE) -# define GLM_CONFIG_PRECISION_DOUBLE GLM_LOWP -#else -# define GLM_CONFIG_PRECISION_DOUBLE GLM_HIGHP -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Check inclusions of different versions of GLM - -#elif ((GLM_SETUP_INCLUDED != GLM_VERSION) && !defined(GLM_FORCE_IGNORE_VERSION)) -# error "GLM error: A different version of GLM is already included. Define GLM_FORCE_IGNORE_VERSION before including GLM headers to ignore this error." -#elif GLM_SETUP_INCLUDED == GLM_VERSION - -/////////////////////////////////////////////////////////////////////////////////// -// Messages - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_MESSAGE_DISPLAYED) -# define GLM_MESSAGE_DISPLAYED -# define GLM_STR_HELPER(x) #x -# define GLM_STR(x) GLM_STR_HELPER(x) - - // Report GLM version -# pragma message (GLM_STR(GLM_VERSION_MESSAGE)) - - // Report C++ language -# if (GLM_LANG & GLM_LANG_CXX2A_FLAG) && (GLM_LANG & GLM_LANG_EXT) -# pragma message("GLM: C++ 2A with extensions") -# elif (GLM_LANG & GLM_LANG_CXX2A_FLAG) -# pragma message("GLM: C++ 2A") -# elif (GLM_LANG & GLM_LANG_CXX17_FLAG) && (GLM_LANG & GLM_LANG_EXT) -# pragma message("GLM: C++ 17 with extensions") -# elif (GLM_LANG & GLM_LANG_CXX17_FLAG) -# pragma message("GLM: C++ 17") -# elif (GLM_LANG & GLM_LANG_CXX14_FLAG) && (GLM_LANG & GLM_LANG_EXT) -# pragma message("GLM: C++ 14 with extensions") -# elif (GLM_LANG & GLM_LANG_CXX14_FLAG) -# pragma message("GLM: C++ 14") -# elif (GLM_LANG & GLM_LANG_CXX11_FLAG) && (GLM_LANG & GLM_LANG_EXT) -# pragma message("GLM: C++ 11 with extensions") -# elif (GLM_LANG & GLM_LANG_CXX11_FLAG) -# pragma message("GLM: C++ 11") -# elif (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_LANG & GLM_LANG_EXT) -# pragma message("GLM: C++ 0x with extensions") -# elif (GLM_LANG & GLM_LANG_CXX0X_FLAG) -# pragma message("GLM: C++ 0x") -# elif (GLM_LANG & GLM_LANG_CXX03_FLAG) && (GLM_LANG & GLM_LANG_EXT) -# pragma message("GLM: C++ 03 with extensions") -# elif (GLM_LANG & GLM_LANG_CXX03_FLAG) -# pragma message("GLM: C++ 03") -# elif (GLM_LANG & GLM_LANG_CXX98_FLAG) && (GLM_LANG & GLM_LANG_EXT) -# pragma message("GLM: C++ 98 with extensions") -# elif (GLM_LANG & GLM_LANG_CXX98_FLAG) -# pragma message("GLM: C++ 98") -# else -# pragma message("GLM: C++ language undetected") -# endif//GLM_LANG - - // Report compiler detection -# if GLM_COMPILER & GLM_COMPILER_CUDA -# pragma message("GLM: CUDA compiler detected") -# elif GLM_COMPILER & GLM_COMPILER_HIP -# pragma message("GLM: HIP compiler detected") -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma message("GLM: Visual C++ compiler detected") -# elif GLM_COMPILER & GLM_COMPILER_CLANG -# pragma message("GLM: Clang compiler detected") -# elif GLM_COMPILER & GLM_COMPILER_INTEL -# pragma message("GLM: Intel Compiler detected") -# elif GLM_COMPILER & GLM_COMPILER_GCC -# pragma message("GLM: GCC compiler detected") -# else -# pragma message("GLM: Compiler not detected") -# endif - - // Report build target -# if (GLM_ARCH & GLM_ARCH_AVX2_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: x86 64 bits with AVX2 instruction set build target") -# elif (GLM_ARCH & GLM_ARCH_AVX2_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: x86 32 bits with AVX2 instruction set build target") - -# elif (GLM_ARCH & GLM_ARCH_AVX_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: x86 64 bits with AVX instruction set build target") -# elif (GLM_ARCH & GLM_ARCH_AVX_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: x86 32 bits with AVX instruction set build target") - -# elif (GLM_ARCH & GLM_ARCH_SSE42_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: x86 64 bits with SSE4.2 instruction set build target") -# elif (GLM_ARCH & GLM_ARCH_SSE42_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: x86 32 bits with SSE4.2 instruction set build target") - -# elif (GLM_ARCH & GLM_ARCH_SSE41_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: x86 64 bits with SSE4.1 instruction set build target") -# elif (GLM_ARCH & GLM_ARCH_SSE41_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: x86 32 bits with SSE4.1 instruction set build target") - -# elif (GLM_ARCH & GLM_ARCH_SSSE3_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: x86 64 bits with SSSE3 instruction set build target") -# elif (GLM_ARCH & GLM_ARCH_SSSE3_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: x86 32 bits with SSSE3 instruction set build target") - -# elif (GLM_ARCH & GLM_ARCH_SSE3_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: x86 64 bits with SSE3 instruction set build target") -# elif (GLM_ARCH & GLM_ARCH_SSE3_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: x86 32 bits with SSE3 instruction set build target") - -# elif (GLM_ARCH & GLM_ARCH_SSE2_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: x86 64 bits with SSE2 instruction set build target") -# elif (GLM_ARCH & GLM_ARCH_SSE2_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: x86 32 bits with SSE2 instruction set build target") - -# elif (GLM_ARCH & GLM_ARCH_X86_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: x86 64 bits build target") -# elif (GLM_ARCH & GLM_ARCH_X86_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: x86 32 bits build target") - -# elif (GLM_ARCH & GLM_ARCH_NEON_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: ARM 64 bits with Neon instruction set build target") -# elif (GLM_ARCH & GLM_ARCH_NEON_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: ARM 32 bits with Neon instruction set build target") - -# elif (GLM_ARCH & GLM_ARCH_ARM_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: ARM 64 bits build target") -# elif (GLM_ARCH & GLM_ARCH_ARM_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: ARM 32 bits build target") - -# elif (GLM_ARCH & GLM_ARCH_MIPS_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: MIPS 64 bits build target") -# elif (GLM_ARCH & GLM_ARCH_MIPS_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: MIPS 32 bits build target") - -# elif (GLM_ARCH & GLM_ARCH_PPC_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: PowerPC 64 bits build target") -# elif (GLM_ARCH & GLM_ARCH_PPC_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: PowerPC 32 bits build target") -# else -# pragma message("GLM: Unknown build target") -# endif//GLM_ARCH - - // Report platform name -# if(GLM_PLATFORM & GLM_PLATFORM_QNXNTO) -# pragma message("GLM: QNX platform detected") -//# elif(GLM_PLATFORM & GLM_PLATFORM_IOS) -//# pragma message("GLM: iOS platform detected") -# elif(GLM_PLATFORM & GLM_PLATFORM_APPLE) -# pragma message("GLM: Apple platform detected") -# elif(GLM_PLATFORM & GLM_PLATFORM_WINCE) -# pragma message("GLM: WinCE platform detected") -# elif(GLM_PLATFORM & GLM_PLATFORM_WINDOWS) -# pragma message("GLM: Windows platform detected") -# elif(GLM_PLATFORM & GLM_PLATFORM_CHROME_NACL) -# pragma message("GLM: Native Client detected") -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) -# pragma message("GLM: Android platform detected") -# elif(GLM_PLATFORM & GLM_PLATFORM_LINUX) -# pragma message("GLM: Linux platform detected") -# elif(GLM_PLATFORM & GLM_PLATFORM_UNIX) -# pragma message("GLM: UNIX platform detected") -# elif(GLM_PLATFORM & GLM_PLATFORM_UNKNOWN) -# pragma message("GLM: platform unknown") -# else -# pragma message("GLM: platform not detected") -# endif - - // Report whether only xyzw component are used -# if defined GLM_FORCE_XYZW_ONLY -# pragma message("GLM: GLM_FORCE_XYZW_ONLY is defined. Only x, y, z and w component are available in vector type. This define disables swizzle operators and SIMD instruction sets.") -# endif - - // Report swizzle operator support -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR -# pragma message("GLM: GLM_FORCE_SWIZZLE is defined, swizzling operators enabled.") -# elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION -# pragma message("GLM: GLM_FORCE_SWIZZLE is defined, swizzling functions enabled. Enable compiler C++ language extensions to enable swizzle operators.") -# else -# pragma message("GLM: GLM_FORCE_SWIZZLE is undefined. swizzling functions or operators are disabled.") -# endif - - // Report .length() type -# if GLM_CONFIG_LENGTH_TYPE == GLM_LENGTH_SIZE_T -# pragma message("GLM: GLM_FORCE_SIZE_T_LENGTH is defined. .length() returns a glm::length_t, a typedef of std::size_t.") -# else -# pragma message("GLM: GLM_FORCE_SIZE_T_LENGTH is undefined. .length() returns a glm::length_t, a typedef of int following GLSL.") -# endif - -# if GLM_CONFIG_UNRESTRICTED_GENTYPE == GLM_ENABLE -# pragma message("GLM: GLM_FORCE_UNRESTRICTED_GENTYPE is defined. Removes GLSL restrictions on valid function genTypes.") -# else -# pragma message("GLM: GLM_FORCE_UNRESTRICTED_GENTYPE is undefined. Follows strictly GLSL on valid function genTypes.") -# endif - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# pragma message("GLM: GLM_FORCE_SILENT_WARNINGS is defined. Ignores C++ warnings from using C++ language extensions.") -# else -# pragma message("GLM: GLM_FORCE_SILENT_WARNINGS is undefined. Shows C++ warnings from using C++ language extensions.") -# endif - -# ifdef GLM_FORCE_SINGLE_ONLY -# pragma message("GLM: GLM_FORCE_SINGLE_ONLY is defined. Using only single precision floating-point types.") -# endif - -# if defined(GLM_FORCE_ALIGNED_GENTYPES) && (GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE) -# undef GLM_FORCE_ALIGNED_GENTYPES -# pragma message("GLM: GLM_FORCE_ALIGNED_GENTYPES is defined, allowing aligned types. This prevents the use of C++ constexpr.") -# elif defined(GLM_FORCE_ALIGNED_GENTYPES) && (GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE) -# undef GLM_FORCE_ALIGNED_GENTYPES -# pragma message("GLM: GLM_FORCE_ALIGNED_GENTYPES is defined but is disabled. It requires C++11 and language extensions.") -# endif - -# if defined(GLM_FORCE_DEFAULT_ALIGNED_GENTYPES) -# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE -# undef GLM_FORCE_DEFAULT_ALIGNED_GENTYPES -# pragma message("GLM: GLM_FORCE_DEFAULT_ALIGNED_GENTYPES is defined but is disabled. It requires C++11 and language extensions.") -# elif GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE -# pragma message("GLM: GLM_FORCE_DEFAULT_ALIGNED_GENTYPES is defined. All gentypes (e.g. vec3) will be aligned and padded by default.") -# endif -# endif - -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT -# pragma message("GLM: GLM_FORCE_DEPTH_ZERO_TO_ONE is defined. Using zero to one depth clip space.") -# else -# pragma message("GLM: GLM_FORCE_DEPTH_ZERO_TO_ONE is undefined. Using negative one to one depth clip space.") -# endif - -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT -# pragma message("GLM: GLM_FORCE_LEFT_HANDED is defined. Using left handed coordinate system.") -# else -# pragma message("GLM: GLM_FORCE_LEFT_HANDED is undefined. Using right handed coordinate system.") -# endif -#endif//GLM_MESSAGES - -#endif//GLM_SETUP_INCLUDED diff --git a/src/vendor/glm/detail/type_float.hpp b/src/vendor/glm/detail/type_float.hpp deleted file mode 100755 index c8037eb..0000000 --- a/src/vendor/glm/detail/type_float.hpp +++ /dev/null @@ -1,68 +0,0 @@ -#pragma once - -#include "setup.hpp" - -#if GLM_COMPILER == GLM_COMPILER_VC12 -# pragma warning(push) -# pragma warning(disable: 4512) // assignment operator could not be generated -#endif - -namespace glm{ -namespace detail -{ - template - union float_t - {}; - - // https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/ - template <> - union float_t - { - typedef int int_type; - typedef float float_type; - - GLM_CONSTEXPR float_t(float_type Num = 0.0f) : f(Num) {} - - GLM_CONSTEXPR float_t& operator=(float_t const& x) - { - f = x.f; - return *this; - } - - // Portable extraction of components. - GLM_CONSTEXPR bool negative() const { return i < 0; } - GLM_CONSTEXPR int_type mantissa() const { return i & ((1 << 23) - 1); } - GLM_CONSTEXPR int_type exponent() const { return (i >> 23) & ((1 << 8) - 1); } - - int_type i; - float_type f; - }; - - template <> - union float_t - { - typedef detail::int64 int_type; - typedef double float_type; - - GLM_CONSTEXPR float_t(float_type Num = static_cast(0)) : f(Num) {} - - GLM_CONSTEXPR float_t& operator=(float_t const& x) - { - f = x.f; - return *this; - } - - // Portable extraction of components. - GLM_CONSTEXPR bool negative() const { return i < 0; } - GLM_CONSTEXPR int_type mantissa() const { return i & ((int_type(1) << 52) - 1); } - GLM_CONSTEXPR int_type exponent() const { return (i >> 52) & ((int_type(1) << 11) - 1); } - - int_type i; - float_type f; - }; -}//namespace detail -}//namespace glm - -#if GLM_COMPILER == GLM_COMPILER_VC12 -# pragma warning(pop) -#endif diff --git a/src/vendor/glm/detail/type_half.hpp b/src/vendor/glm/detail/type_half.hpp deleted file mode 100755 index 40b8bec..0000000 --- a/src/vendor/glm/detail/type_half.hpp +++ /dev/null @@ -1,16 +0,0 @@ -#pragma once - -#include "setup.hpp" - -namespace glm{ -namespace detail -{ - typedef short hdata; - - GLM_FUNC_DECL float toFloat32(hdata value); - GLM_FUNC_DECL hdata toFloat16(float const& value); - -}//namespace detail -}//namespace glm - -#include "type_half.inl" diff --git a/src/vendor/glm/detail/type_half.inl b/src/vendor/glm/detail/type_half.inl deleted file mode 100755 index 5d239cf..0000000 --- a/src/vendor/glm/detail/type_half.inl +++ /dev/null @@ -1,241 +0,0 @@ -namespace glm{ -namespace detail -{ - GLM_FUNC_QUALIFIER float overflow() - { - volatile float f = 1e10; - - for(int i = 0; i < 10; ++i) - f = f * f; // this will overflow before the for loop terminates - return f; - } - - union uif32 - { - GLM_FUNC_QUALIFIER uif32() : - i(0) - {} - - GLM_FUNC_QUALIFIER uif32(float f_) : - f(f_) - {} - - GLM_FUNC_QUALIFIER uif32(unsigned int i_) : - i(i_) - {} - - float f; - unsigned int i; - }; - - GLM_FUNC_QUALIFIER float toFloat32(hdata value) - { - int s = (value >> 15) & 0x00000001; - int e = (value >> 10) & 0x0000001f; - int m = value & 0x000003ff; - - if(e == 0) - { - if(m == 0) - { - // - // Plus or minus zero - // - - detail::uif32 result; - result.i = static_cast(s << 31); - return result.f; - } - else - { - // - // Denormalized number -- renormalize it - // - - while(!(m & 0x00000400)) - { - m <<= 1; - e -= 1; - } - - e += 1; - m &= ~0x00000400; - } - } - else if(e == 31) - { - if(m == 0) - { - // - // Positive or negative infinity - // - - uif32 result; - result.i = static_cast((s << 31) | 0x7f800000); - return result.f; - } - else - { - // - // Nan -- preserve sign and significand bits - // - - uif32 result; - result.i = static_cast((s << 31) | 0x7f800000 | (m << 13)); - return result.f; - } - } - - // - // Normalized number - // - - e = e + (127 - 15); - m = m << 13; - - // - // Assemble s, e and m. - // - - uif32 Result; - Result.i = static_cast((s << 31) | (e << 23) | m); - return Result.f; - } - - GLM_FUNC_QUALIFIER hdata toFloat16(float const& f) - { - uif32 Entry; - Entry.f = f; - int i = static_cast(Entry.i); - - // - // Our floating point number, f, is represented by the bit - // pattern in integer i. Disassemble that bit pattern into - // the sign, s, the exponent, e, and the significand, m. - // Shift s into the position where it will go in the - // resulting half number. - // Adjust e, accounting for the different exponent bias - // of float and half (127 versus 15). - // - - int s = (i >> 16) & 0x00008000; - int e = ((i >> 23) & 0x000000ff) - (127 - 15); - int m = i & 0x007fffff; - - // - // Now reassemble s, e and m into a half: - // - - if(e <= 0) - { - if(e < -10) - { - // - // E is less than -10. The absolute value of f is - // less than half_MIN (f may be a small normalized - // float, a denormalized float or a zero). - // - // We convert f to a half zero. - // - - return hdata(s); - } - - // - // E is between -10 and 0. F is a normalized float, - // whose magnitude is less than __half_NRM_MIN. - // - // We convert f to a denormalized half. - // - - m = (m | 0x00800000) >> (1 - e); - - // - // Round to nearest, round "0.5" up. - // - // Rounding may cause the significand to overflow and make - // our number normalized. Because of the way a half's bits - // are laid out, we don't have to treat this case separately; - // the code below will handle it correctly. - // - - if(m & 0x00001000) - m += 0x00002000; - - // - // Assemble the half from s, e (zero) and m. - // - - return hdata(s | (m >> 13)); - } - else if(e == 0xff - (127 - 15)) - { - if(m == 0) - { - // - // F is an infinity; convert f to a half - // infinity with the same sign as f. - // - - return hdata(s | 0x7c00); - } - else - { - // - // F is a NAN; we produce a half NAN that preserves - // the sign bit and the 10 leftmost bits of the - // significand of f, with one exception: If the 10 - // leftmost bits are all zero, the NAN would turn - // into an infinity, so we have to set at least one - // bit in the significand. - // - - m >>= 13; - - return hdata(s | 0x7c00 | m | (m == 0)); - } - } - else - { - // - // E is greater than zero. F is a normalized float. - // We try to convert f to a normalized half. - // - - // - // Round to nearest, round "0.5" up - // - - if(m & 0x00001000) - { - m += 0x00002000; - - if(m & 0x00800000) - { - m = 0; // overflow in significand, - e += 1; // adjust exponent - } - } - - // - // Handle exponent overflow - // - - if (e > 30) - { - overflow(); // Cause a hardware floating point overflow; - - return hdata(s | 0x7c00); - // if this returns, the half becomes an - } // infinity with the same sign as f. - - // - // Assemble the half from s, e and m. - // - - return hdata(s | (e << 10) | (m >> 13)); - } - } - -}//namespace detail -}//namespace glm diff --git a/src/vendor/glm/detail/type_mat2x2.hpp b/src/vendor/glm/detail/type_mat2x2.hpp deleted file mode 100755 index 827022d..0000000 --- a/src/vendor/glm/detail/type_mat2x2.hpp +++ /dev/null @@ -1,177 +0,0 @@ -/// @ref core -/// @file glm/detail/type_mat2x2.hpp - -#pragma once - -#include "type_vec2.hpp" -#include -#include - -namespace glm -{ - template - struct mat<2, 2, T, Q> - { - typedef vec<2, T, Q> col_type; - typedef vec<2, T, Q> row_type; - typedef mat<2, 2, T, Q> type; - typedef mat<2, 2, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[2]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 2; } - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT_CTOR; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<2, 2, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T const& x1, T const& y1, - T const& x2, T const& y2); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v1, - col_type const& v2); - - // -- Conversions -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - U const& x1, V const& y1, - M const& x2, N const& y2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<2, U, Q> const& v1, - vec<2, V, Q> const& v2); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator=(mat<2, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator+=(mat<2, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator-=(mat<2, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator*=(mat<2, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator/=(U s); - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator/=(mat<2, 2, U, Q> const& m); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<2, 2, T, Q> & operator++ (); - GLM_FUNC_DECL mat<2, 2, T, Q> & operator-- (); - GLM_FUNC_DECL mat<2, 2, T, Q> operator++(int); - GLM_FUNC_DECL mat<2, 2, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator+(T scalar, mat<2, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator-(T scalar, mat<2, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator*(T scalar, mat<2, 2, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<2, 2, T, Q>::col_type operator*(mat<2, 2, T, Q> const& m, typename mat<2, 2, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<2, 2, T, Q>::row_type operator*(typename mat<2, 2, T, Q>::col_type const& v, mat<2, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator/(T scalar, mat<2, 2, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<2, 2, T, Q>::col_type operator/(mat<2, 2, T, Q> const& m, typename mat<2, 2, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<2, 2, T, Q>::row_type operator/(typename mat<2, 2, T, Q>::col_type const& v, mat<2, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); -} //namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat2x2.inl" -#endif diff --git a/src/vendor/glm/detail/type_mat2x2.inl b/src/vendor/glm/detail/type_mat2x2.inl deleted file mode 100755 index 33159a6..0000000 --- a/src/vendor/glm/detail/type_mat2x2.inl +++ /dev/null @@ -1,536 +0,0 @@ -#include "../matrix.hpp" - -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0), col_type(0, 1)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0); - this->value[1] = col_type(0, 1); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 2, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{m[0], m[1]} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(T scalar) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(scalar, 0), col_type(0, scalar)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(scalar, 0); - this->value[1] = col_type(0, scalar); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat - ( - T const& x0, T const& y0, - T const& x1, T const& y1 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0), col_type(x1, y1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0); - this->value[1] = col_type(x1, y1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(col_type const& v0, col_type const& v1) -# if GLM_HAS_INITIALIZER_LISTS - : value{v0, v1} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = v0; - this->value[1] = v1; -# endif - } - - // -- Conversion constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat - ( - X1 const& x1, Y1 const& y1, - X2 const& x2, Y2 const& y2 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(static_cast(x1), value_type(y1)), col_type(static_cast(x2), value_type(y2)) } -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(static_cast(x1), value_type(y1)); - this->value[1] = col_type(static_cast(x2), value_type(y2)); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(vec<2, V1, Q> const& v1, vec<2, V2, Q> const& v2) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v1), col_type(v2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v1); - this->value[1] = col_type(v2); -# endif - } - - // -- mat2x2 matrix conversions -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 2, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<3, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<4, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<3, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<4, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<3, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<4, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::col_type& mat<2, 2, T, Q>::operator[](typename mat<2, 2, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<2, 2, T, Q>::col_type const& mat<2, 2, T, Q>::operator[](typename mat<2, 2, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary updatable operators -- - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator=(mat<2, 2, U, Q> const& m) - { - this->value[0] = m[0]; - this->value[1] = m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator+=(U scalar) - { - this->value[0] += scalar; - this->value[1] += scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator+=(mat<2, 2, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator-=(U scalar) - { - this->value[0] -= scalar; - this->value[1] -= scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator-=(mat<2, 2, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator*=(U scalar) - { - this->value[0] *= scalar; - this->value[1] *= scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator*=(mat<2, 2, U, Q> const& m) - { - return (*this = *this * m); - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator/=(U scalar) - { - this->value[0] /= scalar; - this->value[1] /= scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator/=(mat<2, 2, U, Q> const& m) - { - return *this *= inverse(m); - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> mat<2, 2, T, Q>::operator++(int) - { - mat<2, 2, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> mat<2, 2, T, Q>::operator--(int) - { - mat<2, 2, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m) - { - return mat<2, 2, T, Q>( - -m[0], - -m[1]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m, T scalar) - { - return mat<2, 2, T, Q>( - m[0] + scalar, - m[1] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(T scalar, mat<2, 2, T, Q> const& m) - { - return mat<2, 2, T, Q>( - m[0] + scalar, - m[1] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) - { - return mat<2, 2, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m, T scalar) - { - return mat<2, 2, T, Q>( - m[0] - scalar, - m[1] - scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(T scalar, mat<2, 2, T, Q> const& m) - { - return mat<2, 2, T, Q>( - scalar - m[0], - scalar - m[1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) - { - return mat<2, 2, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m, T scalar) - { - return mat<2, 2, T, Q>( - m[0] * scalar, - m[1] * scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(T scalar, mat<2, 2, T, Q> const& m) - { - return mat<2, 2, T, Q>( - m[0] * scalar, - m[1] * scalar); - } - - template - GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::col_type operator* - ( - mat<2, 2, T, Q> const& m, - typename mat<2, 2, T, Q>::row_type const& v - ) - { - return vec<2, T, Q>( - m[0][0] * v.x + m[1][0] * v.y, - m[0][1] * v.x + m[1][1] * v.y); - } - - template - GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::row_type operator* - ( - typename mat<2, 2, T, Q>::col_type const& v, - mat<2, 2, T, Q> const& m - ) - { - return vec<2, T, Q>( - v.x * m[0][0] + v.y * m[0][1], - v.x * m[1][0] + v.y * m[1][1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) - { - return mat<2, 2, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) - { - return mat<3, 2, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) - { - return mat<4, 2, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1], - m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1], - m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m, T scalar) - { - return mat<2, 2, T, Q>( - m[0] / scalar, - m[1] / scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator/(T scalar, mat<2, 2, T, Q> const& m) - { - return mat<2, 2, T, Q>( - scalar / m[0], - scalar / m[1]); - } - - template - GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::col_type operator/(mat<2, 2, T, Q> const& m, typename mat<2, 2, T, Q>::row_type const& v) - { - return inverse(m) * v; - } - - template - GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::row_type operator/(typename mat<2, 2, T, Q>::col_type const& v, mat<2, 2, T, Q> const& m) - { - return v * inverse(m); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) - { - mat<2, 2, T, Q> m1_copy(m1); - return m1_copy /= m2; - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]); - } -} //namespace glm diff --git a/src/vendor/glm/detail/type_mat2x3.hpp b/src/vendor/glm/detail/type_mat2x3.hpp deleted file mode 100755 index c9303cb..0000000 --- a/src/vendor/glm/detail/type_mat2x3.hpp +++ /dev/null @@ -1,159 +0,0 @@ -/// @ref core -/// @file glm/detail/type_mat2x3.hpp - -#pragma once - -#include "type_vec2.hpp" -#include "type_vec3.hpp" -#include -#include - -namespace glm -{ - template - struct mat<2, 3, T, Q> - { - typedef vec<3, T, Q> col_type; - typedef vec<2, T, Q> row_type; - typedef mat<2, 3, T, Q> type; - typedef mat<3, 2, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[2]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 2; } - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT_CTOR; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<2, 3, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T x0, T y0, T z0, - T x1, T y1, T z1); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v0, - col_type const& v1); - - // -- Conversions -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - X1 x1, Y1 y1, Z1 z1, - X2 x2, Y2 y2, Z2 z2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<3, U, Q> const& v1, - vec<3, V, Q> const& v2); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<2, 3, T, Q> & operator=(mat<2, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 3, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<2, 3, T, Q> & operator+=(mat<2, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 3, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<2, 3, T, Q> & operator-=(mat<2, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 3, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<2, 3, T, Q> & operator/=(U s); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<2, 3, T, Q> & operator++ (); - GLM_FUNC_DECL mat<2, 3, T, Q> & operator-- (); - GLM_FUNC_DECL mat<2, 3, T, Q> operator++(int); - GLM_FUNC_DECL mat<2, 3, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator*(T scalar, mat<2, 3, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<2, 3, T, Q>::col_type operator*(mat<2, 3, T, Q> const& m, typename mat<2, 3, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<2, 3, T, Q>::row_type operator*(typename mat<2, 3, T, Q>::col_type const& v, mat<2, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<4, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator/(mat<2, 3, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator/(T scalar, mat<2, 3, T, Q> const& m); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat2x3.inl" -#endif diff --git a/src/vendor/glm/detail/type_mat2x3.inl b/src/vendor/glm/detail/type_mat2x3.inl deleted file mode 100755 index c158a5d..0000000 --- a/src/vendor/glm/detail/type_mat2x3.inl +++ /dev/null @@ -1,510 +0,0 @@ -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0, 0), col_type(0, 1, 0)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0, 0); - this->value[1] = col_type(0, 1, 0); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<2, 3, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{m.value[0], m.value[1]} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m.value[0]; - this->value[1] = m.value[1]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(T scalar) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(scalar, 0, 0), col_type(0, scalar, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(scalar, 0, 0); - this->value[1] = col_type(0, scalar, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat - ( - T x0, T y0, T z0, - T x1, T y1, T z1 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0, z0), col_type(x1, y1, z1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0, z0); - this->value[1] = col_type(x1, y1, z1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(col_type const& v0, col_type const& v1) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v0); - this->value[1] = col_type(v1); -# endif - } - - // -- Conversion constructors -- - - template - template< - typename X1, typename Y1, typename Z1, - typename X2, typename Y2, typename Z2> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat - ( - X1 x1, Y1 y1, Z1 z1, - X2 x2, Y2 y2, Z2 z2 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x1, y1, z1), col_type(x2, y2, z2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x1, y1, z1); - this->value[1] = col_type(x2, y2, z2); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(vec<3, V1, Q> const& v1, vec<3, V2, Q> const& v2) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v1), col_type(v2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v1); - this->value[1] = col_type(v2); -# endif - } - - // -- Matrix conversions -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<2, 3, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<2, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<3, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<4, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<2, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<3, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<3, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<4, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<4, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<2, 3, T, Q>::col_type & mat<2, 3, T, Q>::operator[](typename mat<2, 3, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<2, 3, T, Q>::col_type const& mat<2, 3, T, Q>::operator[](typename mat<2, 3, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary updatable operators -- - - template - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator=(mat<2, 3, U, Q> const& m) - { - this->value[0] = m[0]; - this->value[1] = m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator+=(U s) - { - this->value[0] += s; - this->value[1] += s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator+=(mat<2, 3, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator-=(U s) - { - this->value[0] -= s; - this->value[1] -= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator-=(mat<2, 3, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator*=(U s) - { - this->value[0] *= s; - this->value[1] *= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator/=(U s) - { - this->value[0] /= s; - this->value[1] /= s; - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> mat<2, 3, T, Q>::operator++(int) - { - mat<2, 3, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> mat<2, 3, T, Q>::operator--(int) - { - mat<2, 3, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m) - { - return mat<2, 3, T, Q>( - -m[0], - -m[1]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m, T scalar) - { - return mat<2, 3, T, Q>( - m[0] + scalar, - m[1] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) - { - return mat<2, 3, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m, T scalar) - { - return mat<2, 3, T, Q>( - m[0] - scalar, - m[1] - scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) - { - return mat<2, 3, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m, T scalar) - { - return mat<2, 3, T, Q>( - m[0] * scalar, - m[1] * scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(T scalar, mat<2, 3, T, Q> const& m) - { - return mat<2, 3, T, Q>( - m[0] * scalar, - m[1] * scalar); - } - - template - GLM_FUNC_QUALIFIER typename mat<2, 3, T, Q>::col_type operator* - ( - mat<2, 3, T, Q> const& m, - typename mat<2, 3, T, Q>::row_type const& v) - { - return typename mat<2, 3, T, Q>::col_type( - m[0][0] * v.x + m[1][0] * v.y, - m[0][1] * v.x + m[1][1] * v.y, - m[0][2] * v.x + m[1][2] * v.y); - } - - template - GLM_FUNC_QUALIFIER typename mat<2, 3, T, Q>::row_type operator* - ( - typename mat<2, 3, T, Q>::col_type const& v, - mat<2, 3, T, Q> const& m) - { - return typename mat<2, 3, T, Q>::row_type( - v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2], - v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<2, 2, T, Q> const& m2) - { - return mat<2, 3, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<3, 2, T, Q> const& m2) - { - T SrcA00 = m1[0][0]; - T SrcA01 = m1[0][1]; - T SrcA02 = m1[0][2]; - T SrcA10 = m1[1][0]; - T SrcA11 = m1[1][1]; - T SrcA12 = m1[1][2]; - - T SrcB00 = m2[0][0]; - T SrcB01 = m2[0][1]; - T SrcB10 = m2[1][0]; - T SrcB11 = m2[1][1]; - T SrcB20 = m2[2][0]; - T SrcB21 = m2[2][1]; - - mat<3, 3, T, Q> Result; - Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01; - Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01; - Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01; - Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11; - Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11; - Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11; - Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21; - Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21; - Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<4, 2, T, Q> const& m2) - { - return mat<4, 3, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1], - m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1], - m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1], - m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1], - m1[0][2] * m2[3][0] + m1[1][2] * m2[3][1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator/(mat<2, 3, T, Q> const& m, T scalar) - { - return mat<2, 3, T, Q>( - m[0] / scalar, - m[1] / scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator/(T scalar, mat<2, 3, T, Q> const& m) - { - return mat<2, 3, T, Q>( - scalar / m[0], - scalar / m[1]); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]); - } -} //namespace glm diff --git a/src/vendor/glm/detail/type_mat2x4.hpp b/src/vendor/glm/detail/type_mat2x4.hpp deleted file mode 100755 index f769796..0000000 --- a/src/vendor/glm/detail/type_mat2x4.hpp +++ /dev/null @@ -1,161 +0,0 @@ -/// @ref core -/// @file glm/detail/type_mat2x4.hpp - -#pragma once - -#include "type_vec2.hpp" -#include "type_vec4.hpp" -#include -#include - -namespace glm -{ - template - struct mat<2, 4, T, Q> - { - typedef vec<4, T, Q> col_type; - typedef vec<2, T, Q> row_type; - typedef mat<2, 4, T, Q> type; - typedef mat<4, 2, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[2]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 2; } - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT_CTOR; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<2, 4, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T x0, T y0, T z0, T w0, - T x1, T y1, T z1, T w1); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v0, - col_type const& v1); - - // -- Conversions -- - - template< - typename X1, typename Y1, typename Z1, typename W1, - typename X2, typename Y2, typename Z2, typename W2> - GLM_FUNC_DECL GLM_CONSTEXPR mat( - X1 x1, Y1 y1, Z1 z1, W1 w1, - X2 x2, Y2 y2, Z2 z2, W2 w2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<4, U, Q> const& v1, - vec<4, V, Q> const& v2); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<2, 4, T, Q> & operator=(mat<2, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 4, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<2, 4, T, Q> & operator+=(mat<2, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 4, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<2, 4, T, Q> & operator-=(mat<2, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 4, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<2, 4, T, Q> & operator/=(U s); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<2, 4, T, Q> & operator++ (); - GLM_FUNC_DECL mat<2, 4, T, Q> & operator-- (); - GLM_FUNC_DECL mat<2, 4, T, Q> operator++(int); - GLM_FUNC_DECL mat<2, 4, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator*(T scalar, mat<2, 4, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<2, 4, T, Q>::col_type operator*(mat<2, 4, T, Q> const& m, typename mat<2, 4, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<2, 4, T, Q>::row_type operator*(typename mat<2, 4, T, Q>::col_type const& v, mat<2, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<4, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator/(mat<2, 4, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator/(T scalar, mat<2, 4, T, Q> const& m); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat2x4.inl" -#endif diff --git a/src/vendor/glm/detail/type_mat2x4.inl b/src/vendor/glm/detail/type_mat2x4.inl deleted file mode 100755 index 2a96d3d..0000000 --- a/src/vendor/glm/detail/type_mat2x4.inl +++ /dev/null @@ -1,520 +0,0 @@ -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0, 0, 0), col_type(0, 1, 0, 0)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0, 0, 0); - this->value[1] = col_type(0, 1, 0, 0); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 4, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{m[0], m[1]} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(T s) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(s, 0, 0, 0), col_type(0, s, 0, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(s, 0, 0, 0); - this->value[1] = col_type(0, s, 0, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat - ( - T x0, T y0, T z0, T w0, - T x1, T y1, T z1, T w1 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0, z0, w0), col_type(x1, y1, z1, w1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0, z0, w0); - this->value[1] = col_type(x1, y1, z1, w1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(col_type const& v0, col_type const& v1) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = v0; - this->value[1] = v1; -# endif - } - - // -- Conversion constructors -- - - template - template< - typename X1, typename Y1, typename Z1, typename W1, - typename X2, typename Y2, typename Z2, typename W2> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat - ( - X1 x1, Y1 y1, Z1 z1, W1 w1, - X2 x2, Y2 y2, Z2 z2, W2 w2 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{ - col_type(x1, y1, z1, w1), - col_type(x2, y2, z2, w2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x1, y1, z1, w1); - this->value[1] = col_type(x2, y2, z2, w2); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(vec<4, V1, Q> const& v1, vec<4, V2, Q> const& v2) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v1), col_type(v2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v1); - this->value[1] = col_type(v2); -# endif - } - - // -- Matrix conversions -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 4, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<3, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<4, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<3, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<3, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<4, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<4, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<2, 4, T, Q>::col_type & mat<2, 4, T, Q>::operator[](typename mat<2, 4, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<2, 4, T, Q>::col_type const& mat<2, 4, T, Q>::operator[](typename mat<2, 4, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary updatable operators -- - - template - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator=(mat<2, 4, U, Q> const& m) - { - this->value[0] = m[0]; - this->value[1] = m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator+=(U s) - { - this->value[0] += s; - this->value[1] += s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator+=(mat<2, 4, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator-=(U s) - { - this->value[0] -= s; - this->value[1] -= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator-=(mat<2, 4, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator*=(U s) - { - this->value[0] *= s; - this->value[1] *= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> & mat<2, 4, T, Q>::operator/=(U s) - { - this->value[0] /= s; - this->value[1] /= s; - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> mat<2, 4, T, Q>::operator++(int) - { - mat<2, 4, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> mat<2, 4, T, Q>::operator--(int) - { - mat<2, 4, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m) - { - return mat<2, 4, T, Q>( - -m[0], - -m[1]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m, T scalar) - { - return mat<2, 4, T, Q>( - m[0] + scalar, - m[1] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) - { - return mat<2, 4, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m, T scalar) - { - return mat<2, 4, T, Q>( - m[0] - scalar, - m[1] - scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) - { - return mat<2, 4, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m, T scalar) - { - return mat<2, 4, T, Q>( - m[0] * scalar, - m[1] * scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(T scalar, mat<2, 4, T, Q> const& m) - { - return mat<2, 4, T, Q>( - m[0] * scalar, - m[1] * scalar); - } - - template - GLM_FUNC_QUALIFIER typename mat<2, 4, T, Q>::col_type operator*(mat<2, 4, T, Q> const& m, typename mat<2, 4, T, Q>::row_type const& v) - { - return typename mat<2, 4, T, Q>::col_type( - m[0][0] * v.x + m[1][0] * v.y, - m[0][1] * v.x + m[1][1] * v.y, - m[0][2] * v.x + m[1][2] * v.y, - m[0][3] * v.x + m[1][3] * v.y); - } - - template - GLM_FUNC_QUALIFIER typename mat<2, 4, T, Q>::row_type operator*(typename mat<2, 4, T, Q>::col_type const& v, mat<2, 4, T, Q> const& m) - { - return typename mat<2, 4, T, Q>::row_type( - v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2] + v.w * m[0][3], - v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2] + v.w * m[1][3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<4, 2, T, Q> const& m2) - { - T SrcA00 = m1[0][0]; - T SrcA01 = m1[0][1]; - T SrcA02 = m1[0][2]; - T SrcA03 = m1[0][3]; - T SrcA10 = m1[1][0]; - T SrcA11 = m1[1][1]; - T SrcA12 = m1[1][2]; - T SrcA13 = m1[1][3]; - - T SrcB00 = m2[0][0]; - T SrcB01 = m2[0][1]; - T SrcB10 = m2[1][0]; - T SrcB11 = m2[1][1]; - T SrcB20 = m2[2][0]; - T SrcB21 = m2[2][1]; - T SrcB30 = m2[3][0]; - T SrcB31 = m2[3][1]; - - mat<4, 4, T, Q> Result; - Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01; - Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01; - Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01; - Result[0][3] = SrcA03 * SrcB00 + SrcA13 * SrcB01; - Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11; - Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11; - Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11; - Result[1][3] = SrcA03 * SrcB10 + SrcA13 * SrcB11; - Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21; - Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21; - Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21; - Result[2][3] = SrcA03 * SrcB20 + SrcA13 * SrcB21; - Result[3][0] = SrcA00 * SrcB30 + SrcA10 * SrcB31; - Result[3][1] = SrcA01 * SrcB30 + SrcA11 * SrcB31; - Result[3][2] = SrcA02 * SrcB30 + SrcA12 * SrcB31; - Result[3][3] = SrcA03 * SrcB30 + SrcA13 * SrcB31; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<2, 2, T, Q> const& m2) - { - return mat<2, 4, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1], - m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1], - m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<3, 2, T, Q> const& m2) - { - return mat<3, 4, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1], - m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1], - m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1], - m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1], - m1[0][3] * m2[2][0] + m1[1][3] * m2[2][1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator/(mat<2, 4, T, Q> const& m, T scalar) - { - return mat<2, 4, T, Q>( - m[0] / scalar, - m[1] / scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator/(T scalar, mat<2, 4, T, Q> const& m) - { - return mat<2, 4, T, Q>( - scalar / m[0], - scalar / m[1]); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]); - } -} //namespace glm diff --git a/src/vendor/glm/detail/type_mat3x2.hpp b/src/vendor/glm/detail/type_mat3x2.hpp deleted file mode 100755 index d528af0..0000000 --- a/src/vendor/glm/detail/type_mat3x2.hpp +++ /dev/null @@ -1,167 +0,0 @@ -/// @ref core -/// @file glm/detail/type_mat3x2.hpp - -#pragma once - -#include "type_vec2.hpp" -#include "type_vec3.hpp" -#include -#include - -namespace glm -{ - template - struct mat<3, 2, T, Q> - { - typedef vec<2, T, Q> col_type; - typedef vec<3, T, Q> row_type; - typedef mat<3, 2, T, Q> type; - typedef mat<2, 3, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[3]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 3; } - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT_CTOR; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<3, 2, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T x0, T y0, - T x1, T y1, - T x2, T y2); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v0, - col_type const& v1, - col_type const& v2); - - // -- Conversions -- - - template< - typename X1, typename Y1, - typename X2, typename Y2, - typename X3, typename Y3> - GLM_FUNC_DECL GLM_CONSTEXPR mat( - X1 x1, Y1 y1, - X2 x2, Y2 y2, - X3 x3, Y3 y3); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<2, V1, Q> const& v1, - vec<2, V2, Q> const& v2, - vec<2, V3, Q> const& v3); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<3, 2, T, Q> & operator=(mat<3, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 2, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<3, 2, T, Q> & operator+=(mat<3, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 2, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<3, 2, T, Q> & operator-=(mat<3, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 2, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<3, 2, T, Q> & operator/=(U s); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<3, 2, T, Q> & operator++ (); - GLM_FUNC_DECL mat<3, 2, T, Q> & operator-- (); - GLM_FUNC_DECL mat<3, 2, T, Q> operator++(int); - GLM_FUNC_DECL mat<3, 2, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator*(T scalar, mat<3, 2, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<3, 2, T, Q>::col_type operator*(mat<3, 2, T, Q> const& m, typename mat<3, 2, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<3, 2, T, Q>::row_type operator*(typename mat<3, 2, T, Q>::col_type const& v, mat<3, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<2, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<4, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator/(mat<3, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator/(T scalar, mat<3, 2, T, Q> const& m); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat3x2.inl" -#endif diff --git a/src/vendor/glm/detail/type_mat3x2.inl b/src/vendor/glm/detail/type_mat3x2.inl deleted file mode 100755 index 8cf8ed3..0000000 --- a/src/vendor/glm/detail/type_mat3x2.inl +++ /dev/null @@ -1,532 +0,0 @@ -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0), col_type(0, 1), col_type(0, 0)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0); - this->value[1] = col_type(0, 1); - this->value[2] = col_type(0, 0); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<3, 2, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(T s) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(s, 0), col_type(0, s), col_type(0, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(s, 0); - this->value[1] = col_type(0, s); - this->value[2] = col_type(0, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat - ( - T x0, T y0, - T x1, T y1, - T x2, T y2 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0); - this->value[1] = col_type(x1, y1); - this->value[2] = col_type(x2, y2); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = v0; - this->value[1] = v1; - this->value[2] = v2; -# endif - } - - // -- Conversion constructors -- - - template - template< - typename X0, typename Y0, - typename X1, typename Y1, - typename X2, typename Y2> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat - ( - X0 x0, Y0 y0, - X1 x1, Y1 y1, - X2 x2, Y2 y2 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0); - this->value[1] = col_type(x1, y1); - this->value[2] = col_type(x2, y2); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(vec<2, V0, Q> const& v0, vec<2, V1, Q> const& v1, vec<2, V2, Q> const& v2) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v0); - this->value[1] = col_type(v1); - this->value[2] = col_type(v2); -# endif - } - - // -- Matrix conversions -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<3, 2, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<2, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<3, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<4, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<2, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<2, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<3, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<4, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<4, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<3, 2, T, Q>::col_type & mat<3, 2, T, Q>::operator[](typename mat<3, 2, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<3, 2, T, Q>::col_type const& mat<3, 2, T, Q>::operator[](typename mat<3, 2, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary updatable operators -- - - template - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator=(mat<3, 2, U, Q> const& m) - { - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator+=(U s) - { - this->value[0] += s; - this->value[1] += s; - this->value[2] += s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator+=(mat<3, 2, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - this->value[2] += m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator-=(U s) - { - this->value[0] -= s; - this->value[1] -= s; - this->value[2] -= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator-=(mat<3, 2, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - this->value[2] -= m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator*=(U s) - { - this->value[0] *= s; - this->value[1] *= s; - this->value[2] *= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> & mat<3, 2, T, Q>::operator/=(U s) - { - this->value[0] /= s; - this->value[1] /= s; - this->value[2] /= s; - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - ++this->value[2]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - --this->value[2]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> mat<3, 2, T, Q>::operator++(int) - { - mat<3, 2, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> mat<3, 2, T, Q>::operator--(int) - { - mat<3, 2, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m) - { - return mat<3, 2, T, Q>( - -m[0], - -m[1], - -m[2]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m, T scalar) - { - return mat<3, 2, T, Q>( - m[0] + scalar, - m[1] + scalar, - m[2] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) - { - return mat<3, 2, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1], - m1[2] + m2[2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m, T scalar) - { - return mat<3, 2, T, Q>( - m[0] - scalar, - m[1] - scalar, - m[2] - scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) - { - return mat<3, 2, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1], - m1[2] - m2[2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m, T scalar) - { - return mat<3, 2, T, Q>( - m[0] * scalar, - m[1] * scalar, - m[2] * scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(T scalar, mat<3, 2, T, Q> const& m) - { - return mat<3, 2, T, Q>( - m[0] * scalar, - m[1] * scalar, - m[2] * scalar); - } - - template - GLM_FUNC_QUALIFIER typename mat<3, 2, T, Q>::col_type operator*(mat<3, 2, T, Q> const& m, typename mat<3, 2, T, Q>::row_type const& v) - { - return typename mat<3, 2, T, Q>::col_type( - m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z, - m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z); - } - - template - GLM_FUNC_QUALIFIER typename mat<3, 2, T, Q>::row_type operator*(typename mat<3, 2, T, Q>::col_type const& v, mat<3, 2, T, Q> const& m) - { - return typename mat<3, 2, T, Q>::row_type( - v.x * m[0][0] + v.y * m[0][1], - v.x * m[1][0] + v.y * m[1][1], - v.x * m[2][0] + v.y * m[2][1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<2, 3, T, Q> const& m2) - { - const T SrcA00 = m1[0][0]; - const T SrcA01 = m1[0][1]; - const T SrcA10 = m1[1][0]; - const T SrcA11 = m1[1][1]; - const T SrcA20 = m1[2][0]; - const T SrcA21 = m1[2][1]; - - const T SrcB00 = m2[0][0]; - const T SrcB01 = m2[0][1]; - const T SrcB02 = m2[0][2]; - const T SrcB10 = m2[1][0]; - const T SrcB11 = m2[1][1]; - const T SrcB12 = m2[1][2]; - - mat<2, 2, T, Q> Result; - Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02; - Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02; - Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12; - Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<3, 3, T, Q> const& m2) - { - return mat<3, 2, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<4, 3, T, Q> const& m2) - { - return mat<4, 2, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2], - m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2], - m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator/(mat<3, 2, T, Q> const& m, T scalar) - { - return mat<3, 2, T, Q>( - m[0] / scalar, - m[1] / scalar, - m[2] / scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator/(T scalar, mat<3, 2, T, Q> const& m) - { - return mat<3, 2, T, Q>( - scalar / m[0], - scalar / m[1], - scalar / m[2]); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]); - } -} //namespace glm diff --git a/src/vendor/glm/detail/type_mat3x3.hpp b/src/vendor/glm/detail/type_mat3x3.hpp deleted file mode 100755 index 9b435ae..0000000 --- a/src/vendor/glm/detail/type_mat3x3.hpp +++ /dev/null @@ -1,184 +0,0 @@ -/// @ref core -/// @file glm/detail/type_mat3x3.hpp - -#pragma once - -#include "type_vec3.hpp" -#include -#include - -namespace glm -{ - template - struct mat<3, 3, T, Q> - { - typedef vec<3, T, Q> col_type; - typedef vec<3, T, Q> row_type; - typedef mat<3, 3, T, Q> type; - typedef mat<3, 3, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[3]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 3; } - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT_CTOR; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<3, 3, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T x0, T y0, T z0, - T x1, T y1, T z1, - T x2, T y2, T z2); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v0, - col_type const& v1, - col_type const& v2); - - // -- Conversions -- - - template< - typename X1, typename Y1, typename Z1, - typename X2, typename Y2, typename Z2, - typename X3, typename Y3, typename Z3> - GLM_FUNC_DECL GLM_CONSTEXPR mat( - X1 x1, Y1 y1, Z1 z1, - X2 x2, Y2 y2, Z2 z2, - X3 x3, Y3 y3, Z3 z3); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<3, V1, Q> const& v1, - vec<3, V2, Q> const& v2, - vec<3, V3, Q> const& v3); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator=(mat<3, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator+=(mat<3, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator-=(mat<3, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator*=(mat<3, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator/=(U s); - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator/=(mat<3, 3, U, Q> const& m); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<3, 3, T, Q> & operator++(); - GLM_FUNC_DECL mat<3, 3, T, Q> & operator--(); - GLM_FUNC_DECL mat<3, 3, T, Q> operator++(int); - GLM_FUNC_DECL mat<3, 3, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator+(T scalar, mat<3, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator-(T scalar, mat<3, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator*(T scalar, mat<3, 3, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<3, 3, T, Q>::col_type operator*(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<3, 3, T, Q>::row_type operator*(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator/(T scalar, mat<3, 3, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<3, 3, T, Q>::col_type operator/(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<3, 3, T, Q>::row_type operator/(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat3x3.inl" -#endif diff --git a/src/vendor/glm/detail/type_mat3x3.inl b/src/vendor/glm/detail/type_mat3x3.inl deleted file mode 100755 index 4362d84..0000000 --- a/src/vendor/glm/detail/type_mat3x3.inl +++ /dev/null @@ -1,601 +0,0 @@ -#include "../matrix.hpp" - -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0, 0), col_type(0, 1, 0), col_type(0, 0, 1)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0, 0); - this->value[1] = col_type(0, 1, 0); - this->value[2] = col_type(0, 0, 1); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<3, 3, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(T s) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(s, 0, 0), col_type(0, s, 0), col_type(0, 0, s)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(s, 0, 0); - this->value[1] = col_type(0, s, 0); - this->value[2] = col_type(0, 0, s); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat - ( - T x0, T y0, T z0, - T x1, T y1, T z1, - T x2, T y2, T z2 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0, z0), col_type(x1, y1, z1), col_type(x2, y2, z2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0, z0); - this->value[1] = col_type(x1, y1, z1); - this->value[2] = col_type(x2, y2, z2); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v0); - this->value[1] = col_type(v1); - this->value[2] = col_type(v2); -# endif - } - - // -- Conversion constructors -- - - template - template< - typename X1, typename Y1, typename Z1, - typename X2, typename Y2, typename Z2, - typename X3, typename Y3, typename Z3> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat - ( - X1 x1, Y1 y1, Z1 z1, - X2 x2, Y2 y2, Z2 z2, - X3 x3, Y3 y3, Z3 z3 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x1, y1, z1), col_type(x2, y2, z2), col_type(x3, y3, z3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x1, y1, z1); - this->value[1] = col_type(x2, y2, z2); - this->value[2] = col_type(x3, y3, z3); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(vec<3, V1, Q> const& v1, vec<3, V2, Q> const& v2, vec<3, V3, Q> const& v3) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v1), col_type(v2), col_type(v3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v1); - this->value[1] = col_type(v2); - this->value[2] = col_type(v3); -# endif - } - - // -- Matrix conversions -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<3, 3, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<2, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<4, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<2, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<3, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(m[2], 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<2, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<4, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(m[2], 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<3, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<4, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::col_type & mat<3, 3, T, Q>::operator[](typename mat<3, 3, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<3, 3, T, Q>::col_type const& mat<3, 3, T, Q>::operator[](typename mat<3, 3, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary updatable operators -- - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator=(mat<3, 3, U, Q> const& m) - { - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator+=(U s) - { - this->value[0] += s; - this->value[1] += s; - this->value[2] += s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator+=(mat<3, 3, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - this->value[2] += m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator-=(U s) - { - this->value[0] -= s; - this->value[1] -= s; - this->value[2] -= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator-=(mat<3, 3, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - this->value[2] -= m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator*=(U s) - { - this->value[0] *= s; - this->value[1] *= s; - this->value[2] *= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator*=(mat<3, 3, U, Q> const& m) - { - return (*this = *this * m); - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator/=(U s) - { - this->value[0] /= s; - this->value[1] /= s; - this->value[2] /= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator/=(mat<3, 3, U, Q> const& m) - { - return *this *= inverse(m); - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - ++this->value[2]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - --this->value[2]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> mat<3, 3, T, Q>::operator++(int) - { - mat<3, 3, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> mat<3, 3, T, Q>::operator--(int) - { - mat<3, 3, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m) - { - return mat<3, 3, T, Q>( - -m[0], - -m[1], - -m[2]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m, T scalar) - { - return mat<3, 3, T, Q>( - m[0] + scalar, - m[1] + scalar, - m[2] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(T scalar, mat<3, 3, T, Q> const& m) - { - return mat<3, 3, T, Q>( - m[0] + scalar, - m[1] + scalar, - m[2] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) - { - return mat<3, 3, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1], - m1[2] + m2[2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m, T scalar) - { - return mat<3, 3, T, Q>( - m[0] - scalar, - m[1] - scalar, - m[2] - scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(T scalar, mat<3, 3, T, Q> const& m) - { - return mat<3, 3, T, Q>( - scalar - m[0], - scalar - m[1], - scalar - m[2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) - { - return mat<3, 3, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1], - m1[2] - m2[2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m, T scalar) - { - return mat<3, 3, T, Q>( - m[0] * scalar, - m[1] * scalar, - m[2] * scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(T scalar, mat<3, 3, T, Q> const& m) - { - return mat<3, 3, T, Q>( - m[0] * scalar, - m[1] * scalar, - m[2] * scalar); - } - - template - GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::col_type operator*(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v) - { - return typename mat<3, 3, T, Q>::col_type( - m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z, - m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z, - m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z); - } - - template - GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::row_type operator*(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m) - { - return typename mat<3, 3, T, Q>::row_type( - m[0][0] * v.x + m[0][1] * v.y + m[0][2] * v.z, - m[1][0] * v.x + m[1][1] * v.y + m[1][2] * v.z, - m[2][0] * v.x + m[2][1] * v.y + m[2][2] * v.z); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) - { - T const SrcA00 = m1[0][0]; - T const SrcA01 = m1[0][1]; - T const SrcA02 = m1[0][2]; - T const SrcA10 = m1[1][0]; - T const SrcA11 = m1[1][1]; - T const SrcA12 = m1[1][2]; - T const SrcA20 = m1[2][0]; - T const SrcA21 = m1[2][1]; - T const SrcA22 = m1[2][2]; - - T const SrcB00 = m2[0][0]; - T const SrcB01 = m2[0][1]; - T const SrcB02 = m2[0][2]; - T const SrcB10 = m2[1][0]; - T const SrcB11 = m2[1][1]; - T const SrcB12 = m2[1][2]; - T const SrcB20 = m2[2][0]; - T const SrcB21 = m2[2][1]; - T const SrcB22 = m2[2][2]; - - mat<3, 3, T, Q> Result; - Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02; - Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02; - Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02; - Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12; - Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12; - Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11 + SrcA22 * SrcB12; - Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21 + SrcA20 * SrcB22; - Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21 + SrcA21 * SrcB22; - Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21 + SrcA22 * SrcB22; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) - { - return mat<2, 3, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) - { - return mat<4, 3, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2], - m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2], - m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2], - m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2], - m1[0][2] * m2[3][0] + m1[1][2] * m2[3][1] + m1[2][2] * m2[3][2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m, T scalar) - { - return mat<3, 3, T, Q>( - m[0] / scalar, - m[1] / scalar, - m[2] / scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator/(T scalar, mat<3, 3, T, Q> const& m) - { - return mat<3, 3, T, Q>( - scalar / m[0], - scalar / m[1], - scalar / m[2]); - } - - template - GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::col_type operator/(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v) - { - return inverse(m) * v; - } - - template - GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::row_type operator/(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m) - { - return v * inverse(m); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) - { - mat<3, 3, T, Q> m1_copy(m1); - return m1_copy /= m2; - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]); - } -} //namespace glm diff --git a/src/vendor/glm/detail/type_mat3x4.hpp b/src/vendor/glm/detail/type_mat3x4.hpp deleted file mode 100755 index 27bc425..0000000 --- a/src/vendor/glm/detail/type_mat3x4.hpp +++ /dev/null @@ -1,166 +0,0 @@ -/// @ref core -/// @file glm/detail/type_mat3x4.hpp - -#pragma once - -#include "type_vec3.hpp" -#include "type_vec4.hpp" -#include -#include - -namespace glm -{ - template - struct mat<3, 4, T, Q> - { - typedef vec<4, T, Q> col_type; - typedef vec<3, T, Q> row_type; - typedef mat<3, 4, T, Q> type; - typedef mat<4, 3, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[3]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 3; } - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT_CTOR; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<3, 4, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T x0, T y0, T z0, T w0, - T x1, T y1, T z1, T w1, - T x2, T y2, T z2, T w2); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v0, - col_type const& v1, - col_type const& v2); - - // -- Conversions -- - - template< - typename X1, typename Y1, typename Z1, typename W1, - typename X2, typename Y2, typename Z2, typename W2, - typename X3, typename Y3, typename Z3, typename W3> - GLM_FUNC_DECL GLM_CONSTEXPR mat( - X1 x1, Y1 y1, Z1 z1, W1 w1, - X2 x2, Y2 y2, Z2 z2, W2 w2, - X3 x3, Y3 y3, Z3 z3, W3 w3); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<4, V1, Q> const& v1, - vec<4, V2, Q> const& v2, - vec<4, V3, Q> const& v3); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<3, 4, T, Q> & operator=(mat<3, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 4, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<3, 4, T, Q> & operator+=(mat<3, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 4, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<3, 4, T, Q> & operator-=(mat<3, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 4, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<3, 4, T, Q> & operator/=(U s); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<3, 4, T, Q> & operator++(); - GLM_FUNC_DECL mat<3, 4, T, Q> & operator--(); - GLM_FUNC_DECL mat<3, 4, T, Q> operator++(int); - GLM_FUNC_DECL mat<3, 4, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator*(T scalar, mat<3, 4, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<3, 4, T, Q>::col_type operator*(mat<3, 4, T, Q> const& m, typename mat<3, 4, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<3, 4, T, Q>::row_type operator*(typename mat<3, 4, T, Q>::col_type const& v, mat<3, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<4, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<2, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator/(mat<3, 4, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator/(T scalar, mat<3, 4, T, Q> const& m); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat3x4.inl" -#endif diff --git a/src/vendor/glm/detail/type_mat3x4.inl b/src/vendor/glm/detail/type_mat3x4.inl deleted file mode 100755 index c1a0fa6..0000000 --- a/src/vendor/glm/detail/type_mat3x4.inl +++ /dev/null @@ -1,578 +0,0 @@ -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0, 0, 0), col_type(0, 1, 0, 0), col_type(0, 0, 1, 0)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0, 0, 0); - this->value[1] = col_type(0, 1, 0, 0); - this->value[2] = col_type(0, 0, 1, 0); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<3, 4, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(T s) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(s, 0, 0, 0), col_type(0, s, 0, 0), col_type(0, 0, s, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(s, 0, 0, 0); - this->value[1] = col_type(0, s, 0, 0); - this->value[2] = col_type(0, 0, s, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat - ( - T x0, T y0, T z0, T w0, - T x1, T y1, T z1, T w1, - T x2, T y2, T z2, T w2 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{ - col_type(x0, y0, z0, w0), - col_type(x1, y1, z1, w1), - col_type(x2, y2, z2, w2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0, z0, w0); - this->value[1] = col_type(x1, y1, z1, w1); - this->value[2] = col_type(x2, y2, z2, w2); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = v0; - this->value[1] = v1; - this->value[2] = v2; -# endif - } - - // -- Conversion constructors -- - - template - template< - typename X0, typename Y0, typename Z0, typename W0, - typename X1, typename Y1, typename Z1, typename W1, - typename X2, typename Y2, typename Z2, typename W2> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat - ( - X0 x0, Y0 y0, Z0 z0, W0 w0, - X1 x1, Y1 y1, Z1 z1, W1 w1, - X2 x2, Y2 y2, Z2 z2, W2 w2 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{ - col_type(x0, y0, z0, w0), - col_type(x1, y1, z1, w1), - col_type(x2, y2, z2, w2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0, z0, w0); - this->value[1] = col_type(x1, y1, z1, w1); - this->value[2] = col_type(x2, y2, z2, w2); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(vec<4, V1, Q> const& v0, vec<4, V2, Q> const& v1, vec<4, V3, Q> const& v2) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v0); - this->value[1] = col_type(v1); - this->value[2] = col_type(v2); -# endif - } - - // -- Matrix conversions -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<3, 4, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<2, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(0, 0, 1, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); - this->value[2] = col_type(0, 0, 1, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<3, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(m[2], 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<4, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<2, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(0, 0, 1, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(0, 0, 1, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<3, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(m[2], 1, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); - this->value[2] = col_type(m[2], 1, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<2, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0, 0, 1, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<4, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(m[2], 1, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); - this->value[2] = col_type(m[2], 1, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<4, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(m[2], 0); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<3, 4, T, Q>::col_type & mat<3, 4, T, Q>::operator[](typename mat<3, 4, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<3, 4, T, Q>::col_type const& mat<3, 4, T, Q>::operator[](typename mat<3, 4, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary updatable operators -- - - template - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator=(mat<3, 4, U, Q> const& m) - { - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator+=(U s) - { - this->value[0] += s; - this->value[1] += s; - this->value[2] += s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator+=(mat<3, 4, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - this->value[2] += m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator-=(U s) - { - this->value[0] -= s; - this->value[1] -= s; - this->value[2] -= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator-=(mat<3, 4, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - this->value[2] -= m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator*=(U s) - { - this->value[0] *= s; - this->value[1] *= s; - this->value[2] *= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> & mat<3, 4, T, Q>::operator/=(U s) - { - this->value[0] /= s; - this->value[1] /= s; - this->value[2] /= s; - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - ++this->value[2]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - --this->value[2]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> mat<3, 4, T, Q>::operator++(int) - { - mat<3, 4, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> mat<3, 4, T, Q>::operator--(int) - { - mat<3, 4, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m) - { - return mat<3, 4, T, Q>( - -m[0], - -m[1], - -m[2]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m, T scalar) - { - return mat<3, 4, T, Q>( - m[0] + scalar, - m[1] + scalar, - m[2] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) - { - return mat<3, 4, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1], - m1[2] + m2[2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m, T scalar) - { - return mat<3, 4, T, Q>( - m[0] - scalar, - m[1] - scalar, - m[2] - scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) - { - return mat<3, 4, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1], - m1[2] - m2[2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m, T scalar) - { - return mat<3, 4, T, Q>( - m[0] * scalar, - m[1] * scalar, - m[2] * scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(T scalar, mat<3, 4, T, Q> const& m) - { - return mat<3, 4, T, Q>( - m[0] * scalar, - m[1] * scalar, - m[2] * scalar); - } - - template - GLM_FUNC_QUALIFIER typename mat<3, 4, T, Q>::col_type operator* - ( - mat<3, 4, T, Q> const& m, - typename mat<3, 4, T, Q>::row_type const& v - ) - { - return typename mat<3, 4, T, Q>::col_type( - m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z, - m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z, - m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z, - m[0][3] * v.x + m[1][3] * v.y + m[2][3] * v.z); - } - - template - GLM_FUNC_QUALIFIER typename mat<3, 4, T, Q>::row_type operator* - ( - typename mat<3, 4, T, Q>::col_type const& v, - mat<3, 4, T, Q> const& m - ) - { - return typename mat<3, 4, T, Q>::row_type( - v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2] + v.w * m[0][3], - v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2] + v.w * m[1][3], - v.x * m[2][0] + v.y * m[2][1] + v.z * m[2][2] + v.w * m[2][3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<4, 3, T, Q> const& m2) - { - const T SrcA00 = m1[0][0]; - const T SrcA01 = m1[0][1]; - const T SrcA02 = m1[0][2]; - const T SrcA03 = m1[0][3]; - const T SrcA10 = m1[1][0]; - const T SrcA11 = m1[1][1]; - const T SrcA12 = m1[1][2]; - const T SrcA13 = m1[1][3]; - const T SrcA20 = m1[2][0]; - const T SrcA21 = m1[2][1]; - const T SrcA22 = m1[2][2]; - const T SrcA23 = m1[2][3]; - - const T SrcB00 = m2[0][0]; - const T SrcB01 = m2[0][1]; - const T SrcB02 = m2[0][2]; - const T SrcB10 = m2[1][0]; - const T SrcB11 = m2[1][1]; - const T SrcB12 = m2[1][2]; - const T SrcB20 = m2[2][0]; - const T SrcB21 = m2[2][1]; - const T SrcB22 = m2[2][2]; - const T SrcB30 = m2[3][0]; - const T SrcB31 = m2[3][1]; - const T SrcB32 = m2[3][2]; - - mat<4, 4, T, Q> Result; - Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02; - Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02; - Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02; - Result[0][3] = SrcA03 * SrcB00 + SrcA13 * SrcB01 + SrcA23 * SrcB02; - Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12; - Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12; - Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11 + SrcA22 * SrcB12; - Result[1][3] = SrcA03 * SrcB10 + SrcA13 * SrcB11 + SrcA23 * SrcB12; - Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21 + SrcA20 * SrcB22; - Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21 + SrcA21 * SrcB22; - Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21 + SrcA22 * SrcB22; - Result[2][3] = SrcA03 * SrcB20 + SrcA13 * SrcB21 + SrcA23 * SrcB22; - Result[3][0] = SrcA00 * SrcB30 + SrcA10 * SrcB31 + SrcA20 * SrcB32; - Result[3][1] = SrcA01 * SrcB30 + SrcA11 * SrcB31 + SrcA21 * SrcB32; - Result[3][2] = SrcA02 * SrcB30 + SrcA12 * SrcB31 + SrcA22 * SrcB32; - Result[3][3] = SrcA03 * SrcB30 + SrcA13 * SrcB31 + SrcA23 * SrcB32; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<2, 3, T, Q> const& m2) - { - return mat<2, 4, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2], - m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2], - m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<3, 3, T, Q> const& m2) - { - return mat<3, 4, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2], - m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2], - m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2], - m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2], - m1[0][3] * m2[2][0] + m1[1][3] * m2[2][1] + m1[2][3] * m2[2][2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator/(mat<3, 4, T, Q> const& m, T scalar) - { - return mat<3, 4, T, Q>( - m[0] / scalar, - m[1] / scalar, - m[2] / scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator/(T scalar, mat<3, 4, T, Q> const& m) - { - return mat<3, 4, T, Q>( - scalar / m[0], - scalar / m[1], - scalar / m[2]); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]); - } -} //namespace glm diff --git a/src/vendor/glm/detail/type_mat4x2.hpp b/src/vendor/glm/detail/type_mat4x2.hpp deleted file mode 100755 index 56f500d..0000000 --- a/src/vendor/glm/detail/type_mat4x2.hpp +++ /dev/null @@ -1,171 +0,0 @@ -/// @ref core -/// @file glm/detail/type_mat4x2.hpp - -#pragma once - -#include "type_vec2.hpp" -#include "type_vec4.hpp" -#include -#include - -namespace glm -{ - template - struct mat<4, 2, T, Q> - { - typedef vec<2, T, Q> col_type; - typedef vec<4, T, Q> row_type; - typedef mat<4, 2, T, Q> type; - typedef mat<2, 4, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[4]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 4; } - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT_CTOR; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<4, 2, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T x0, T y0, - T x1, T y1, - T x2, T y2, - T x3, T y3); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v0, - col_type const& v1, - col_type const& v2, - col_type const& v3); - - // -- Conversions -- - - template< - typename X0, typename Y0, - typename X1, typename Y1, - typename X2, typename Y2, - typename X3, typename Y3> - GLM_FUNC_DECL GLM_CONSTEXPR mat( - X0 x0, Y0 y0, - X1 x1, Y1 y1, - X2 x2, Y2 y2, - X3 x3, Y3 y3); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<2, V1, Q> const& v1, - vec<2, V2, Q> const& v2, - vec<2, V3, Q> const& v3, - vec<2, V4, Q> const& v4); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<4, 2, T, Q> & operator=(mat<4, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 2, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<4, 2, T, Q> & operator+=(mat<4, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 2, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<4, 2, T, Q> & operator-=(mat<4, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 2, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<4, 2, T, Q> & operator/=(U s); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<4, 2, T, Q> & operator++ (); - GLM_FUNC_DECL mat<4, 2, T, Q> & operator-- (); - GLM_FUNC_DECL mat<4, 2, T, Q> operator++(int); - GLM_FUNC_DECL mat<4, 2, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator*(T scalar, mat<4, 2, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<4, 2, T, Q>::col_type operator*(mat<4, 2, T, Q> const& m, typename mat<4, 2, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<4, 2, T, Q>::row_type operator*(typename mat<4, 2, T, Q>::col_type const& v, mat<4, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<2, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<3, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator/(mat<4, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator/(T scalar, mat<4, 2, T, Q> const& m); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat4x2.inl" -#endif diff --git a/src/vendor/glm/detail/type_mat4x2.inl b/src/vendor/glm/detail/type_mat4x2.inl deleted file mode 100755 index efe5833..0000000 --- a/src/vendor/glm/detail/type_mat4x2.inl +++ /dev/null @@ -1,574 +0,0 @@ -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0), col_type(0, 1), col_type(0, 0), col_type(0, 0)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0); - this->value[1] = col_type(0, 1); - this->value[2] = col_type(0, 0); - this->value[3] = col_type(0, 0); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 2, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - this->value[3] = m[3]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(T s) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(s, 0), col_type(0, s), col_type(0, 0), col_type(0, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(s, 0); - this->value[1] = col_type(0, s); - this->value[2] = col_type(0, 0); - this->value[3] = col_type(0, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat - ( - T x0, T y0, - T x1, T y1, - T x2, T y2, - T x3, T y3 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2), col_type(x3, y3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0); - this->value[1] = col_type(x1, y1); - this->value[2] = col_type(x2, y2); - this->value[3] = col_type(x3, y3); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2, col_type const& v3) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = v0; - this->value[1] = v1; - this->value[2] = v2; - this->value[3] = v3; -# endif - } - - // -- Conversion constructors -- - - template - template< - typename X0, typename Y0, - typename X1, typename Y1, - typename X2, typename Y2, - typename X3, typename Y3> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat - ( - X0 x0, Y0 y0, - X1 x1, Y1 y1, - X2 x2, Y2 y2, - X3 x3, Y3 y3 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2), col_type(x3, y3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0); - this->value[1] = col_type(x1, y1); - this->value[2] = col_type(x2, y2); - this->value[3] = col_type(x3, y3); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(vec<2, V0, Q> const& v0, vec<2, V1, Q> const& v1, vec<2, V2, Q> const& v2, vec<2, V3, Q> const& v3) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v0); - this->value[1] = col_type(v1); - this->value[2] = col_type(v2); - this->value[3] = col_type(v3); -# endif - } - - // -- Conversion -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 2, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(m[3]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<2, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<3, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(m[3]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<2, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<3, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<2, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(m[3]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<3, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(0); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<4, 2, T, Q>::col_type & mat<4, 2, T, Q>::operator[](typename mat<4, 2, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<4, 2, T, Q>::col_type const& mat<4, 2, T, Q>::operator[](typename mat<4, 2, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary updatable operators -- - - template - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q>& mat<4, 2, T, Q>::operator=(mat<4, 2, U, Q> const& m) - { - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - this->value[3] = m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator+=(U s) - { - this->value[0] += s; - this->value[1] += s; - this->value[2] += s; - this->value[3] += s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator+=(mat<4, 2, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - this->value[2] += m[2]; - this->value[3] += m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator-=(U s) - { - this->value[0] -= s; - this->value[1] -= s; - this->value[2] -= s; - this->value[3] -= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator-=(mat<4, 2, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - this->value[2] -= m[2]; - this->value[3] -= m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator*=(U s) - { - this->value[0] *= s; - this->value[1] *= s; - this->value[2] *= s; - this->value[3] *= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator/=(U s) - { - this->value[0] /= s; - this->value[1] /= s; - this->value[2] /= s; - this->value[3] /= s; - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - ++this->value[2]; - ++this->value[3]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - --this->value[2]; - --this->value[3]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> mat<4, 2, T, Q>::operator++(int) - { - mat<4, 2, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> mat<4, 2, T, Q>::operator--(int) - { - mat<4, 2, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m) - { - return mat<4, 2, T, Q>( - -m[0], - -m[1], - -m[2], - -m[3]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m, T scalar) - { - return mat<4, 2, T, Q>( - m[0] + scalar, - m[1] + scalar, - m[2] + scalar, - m[3] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) - { - return mat<4, 2, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1], - m1[2] + m2[2], - m1[3] + m2[3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m, T scalar) - { - return mat<4, 2, T, Q>( - m[0] - scalar, - m[1] - scalar, - m[2] - scalar, - m[3] - scalar); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) - { - return mat<4, 2, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1], - m1[2] - m2[2], - m1[3] - m2[3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m, T scalar) - { - return mat<4, 2, T, Q>( - m[0] * scalar, - m[1] * scalar, - m[2] * scalar, - m[3] * scalar); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(T scalar, mat<4, 2, T, Q> const& m) - { - return mat<4, 2, T, Q>( - m[0] * scalar, - m[1] * scalar, - m[2] * scalar, - m[3] * scalar); - } - - template - GLM_FUNC_QUALIFIER typename mat<4, 2, T, Q>::col_type operator*(mat<4, 2, T, Q> const& m, typename mat<4, 2, T, Q>::row_type const& v) - { - return typename mat<4, 2, T, Q>::col_type( - m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w, - m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w); - } - - template - GLM_FUNC_QUALIFIER typename mat<4, 2, T, Q>::row_type operator*(typename mat<4, 2, T, Q>::col_type const& v, mat<4, 2, T, Q> const& m) - { - return typename mat<4, 2, T, Q>::row_type( - v.x * m[0][0] + v.y * m[0][1], - v.x * m[1][0] + v.y * m[1][1], - v.x * m[2][0] + v.y * m[2][1], - v.x * m[3][0] + v.y * m[3][1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<2, 4, T, Q> const& m2) - { - T const SrcA00 = m1[0][0]; - T const SrcA01 = m1[0][1]; - T const SrcA10 = m1[1][0]; - T const SrcA11 = m1[1][1]; - T const SrcA20 = m1[2][0]; - T const SrcA21 = m1[2][1]; - T const SrcA30 = m1[3][0]; - T const SrcA31 = m1[3][1]; - - T const SrcB00 = m2[0][0]; - T const SrcB01 = m2[0][1]; - T const SrcB02 = m2[0][2]; - T const SrcB03 = m2[0][3]; - T const SrcB10 = m2[1][0]; - T const SrcB11 = m2[1][1]; - T const SrcB12 = m2[1][2]; - T const SrcB13 = m2[1][3]; - - mat<2, 2, T, Q> Result; - Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02 + SrcA30 * SrcB03; - Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02 + SrcA31 * SrcB03; - Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12 + SrcA30 * SrcB13; - Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12 + SrcA31 * SrcB13; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<3, 4, T, Q> const& m2) - { - return mat<3, 2, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<4, 4, T, Q> const& m2) - { - return mat<4, 2, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3], - m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2] + m1[3][0] * m2[3][3], - m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2] + m1[3][1] * m2[3][3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator/(mat<4, 2, T, Q> const& m, T scalar) - { - return mat<4, 2, T, Q>( - m[0] / scalar, - m[1] / scalar, - m[2] / scalar, - m[3] / scalar); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator/(T scalar, mat<4, 2, T, Q> const& m) - { - return mat<4, 2, T, Q>( - scalar / m[0], - scalar / m[1], - scalar / m[2], - scalar / m[3]); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]); - } -} //namespace glm diff --git a/src/vendor/glm/detail/type_mat4x3.hpp b/src/vendor/glm/detail/type_mat4x3.hpp deleted file mode 100755 index 5a4668f..0000000 --- a/src/vendor/glm/detail/type_mat4x3.hpp +++ /dev/null @@ -1,171 +0,0 @@ -/// @ref core -/// @file glm/detail/type_mat4x3.hpp - -#pragma once - -#include "type_vec3.hpp" -#include "type_vec4.hpp" -#include -#include - -namespace glm -{ - template - struct mat<4, 3, T, Q> - { - typedef vec<3, T, Q> col_type; - typedef vec<4, T, Q> row_type; - typedef mat<4, 3, T, Q> type; - typedef mat<3, 4, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[4]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 4; } - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT_CTOR; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<4, 3, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T const& x); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T const& x0, T const& y0, T const& z0, - T const& x1, T const& y1, T const& z1, - T const& x2, T const& y2, T const& z2, - T const& x3, T const& y3, T const& z3); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v0, - col_type const& v1, - col_type const& v2, - col_type const& v3); - - // -- Conversions -- - - template< - typename X1, typename Y1, typename Z1, - typename X2, typename Y2, typename Z2, - typename X3, typename Y3, typename Z3, - typename X4, typename Y4, typename Z4> - GLM_FUNC_DECL GLM_CONSTEXPR mat( - X1 const& x1, Y1 const& y1, Z1 const& z1, - X2 const& x2, Y2 const& y2, Z2 const& z2, - X3 const& x3, Y3 const& y3, Z3 const& z3, - X4 const& x4, Y4 const& y4, Z4 const& z4); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<3, V1, Q> const& v1, - vec<3, V2, Q> const& v2, - vec<3, V3, Q> const& v3, - vec<3, V4, Q> const& v4); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<4, 3, T, Q> & operator=(mat<4, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 3, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<4, 3, T, Q> & operator+=(mat<4, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 3, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<4, 3, T, Q> & operator-=(mat<4, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 3, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<4, 3, T, Q> & operator/=(U s); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<4, 3, T, Q>& operator++(); - GLM_FUNC_DECL mat<4, 3, T, Q>& operator--(); - GLM_FUNC_DECL mat<4, 3, T, Q> operator++(int); - GLM_FUNC_DECL mat<4, 3, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m, T const& s); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m, T const& s); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m, T const& s); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator*(T const& s, mat<4, 3, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<4, 3, T, Q>::col_type operator*(mat<4, 3, T, Q> const& m, typename mat<4, 3, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<4, 3, T, Q>::row_type operator*(typename mat<4, 3, T, Q>::col_type const& v, mat<4, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<2, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<3, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator/(mat<4, 3, T, Q> const& m, T const& s); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator/(T const& s, mat<4, 3, T, Q> const& m); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat4x3.inl" -#endif //GLM_EXTERNAL_TEMPLATE diff --git a/src/vendor/glm/detail/type_mat4x3.inl b/src/vendor/glm/detail/type_mat4x3.inl deleted file mode 100755 index 1249e95..0000000 --- a/src/vendor/glm/detail/type_mat4x3.inl +++ /dev/null @@ -1,598 +0,0 @@ -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0, 0), col_type(0, 1, 0), col_type(0, 0, 1), col_type(0, 0, 0)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0, 0); - this->value[1] = col_type(0, 1, 0); - this->value[2] = col_type(0, 0, 1); - this->value[3] = col_type(0, 0, 0); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<4, 3, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - this->value[3] = m[3]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(T const& s) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(s, 0, 0), col_type(0, s, 0), col_type(0, 0, s), col_type(0, 0, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(s, 0, 0); - this->value[1] = col_type(0, s, 0); - this->value[2] = col_type(0, 0, s); - this->value[3] = col_type(0, 0, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat - ( - T const& x0, T const& y0, T const& z0, - T const& x1, T const& y1, T const& z1, - T const& x2, T const& y2, T const& z2, - T const& x3, T const& y3, T const& z3 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0, z0), col_type(x1, y1, z1), col_type(x2, y2, z2), col_type(x3, y3, z3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0, z0); - this->value[1] = col_type(x1, y1, z1); - this->value[2] = col_type(x2, y2, z2); - this->value[3] = col_type(x3, y3, z3); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2, col_type const& v3) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = v0; - this->value[1] = v1; - this->value[2] = v2; - this->value[3] = v3; -# endif - } - - // -- Conversion constructors -- - - template - template< - typename X0, typename Y0, typename Z0, - typename X1, typename Y1, typename Z1, - typename X2, typename Y2, typename Z2, - typename X3, typename Y3, typename Z3> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat - ( - X0 const& x0, Y0 const& y0, Z0 const& z0, - X1 const& x1, Y1 const& y1, Z1 const& z1, - X2 const& x2, Y2 const& y2, Z2 const& z2, - X3 const& x3, Y3 const& y3, Z3 const& z3 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0, z0), col_type(x1, y1, z1), col_type(x2, y2, z2), col_type(x3, y3, z3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0, z0); - this->value[1] = col_type(x1, y1, z1); - this->value[2] = col_type(x2, y2, z2); - this->value[3] = col_type(x3, y3, z3); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(vec<3, V1, Q> const& v1, vec<3, V2, Q> const& v2, vec<3, V3, Q> const& v3, vec<3, V4, Q> const& v4) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v1), col_type(v2), col_type(v3), col_type(v4)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v1); - this->value[1] = col_type(v2); - this->value[2] = col_type(v3); - this->value[3] = col_type(v4); -# endif - } - - // -- Matrix conversions -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<4, 3, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(m[3]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<2, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(0, 0, 1), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(0, 0, 1); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<3, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<4, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(m[3]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<2, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0, 0, 1); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<3, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 1), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(m[2], 1); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<2, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0, 0, 1); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<4, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 1), col_type(m[3], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(m[2], 1); - this->value[3] = col_type(m[3], 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<3, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(0); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<4, 3, T, Q>::col_type & mat<4, 3, T, Q>::operator[](typename mat<4, 3, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<4, 3, T, Q>::col_type const& mat<4, 3, T, Q>::operator[](typename mat<4, 3, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary updatable operators -- - - template - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q>& mat<4, 3, T, Q>::operator=(mat<4, 3, U, Q> const& m) - { - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - this->value[3] = m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator+=(U s) - { - this->value[0] += s; - this->value[1] += s; - this->value[2] += s; - this->value[3] += s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator+=(mat<4, 3, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - this->value[2] += m[2]; - this->value[3] += m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator-=(U s) - { - this->value[0] -= s; - this->value[1] -= s; - this->value[2] -= s; - this->value[3] -= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator-=(mat<4, 3, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - this->value[2] -= m[2]; - this->value[3] -= m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator*=(U s) - { - this->value[0] *= s; - this->value[1] *= s; - this->value[2] *= s; - this->value[3] *= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator/=(U s) - { - this->value[0] /= s; - this->value[1] /= s; - this->value[2] /= s; - this->value[3] /= s; - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - ++this->value[2]; - ++this->value[3]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - --this->value[2]; - --this->value[3]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> mat<4, 3, T, Q>::operator++(int) - { - mat<4, 3, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> mat<4, 3, T, Q>::operator--(int) - { - mat<4, 3, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m) - { - return mat<4, 3, T, Q>( - -m[0], - -m[1], - -m[2], - -m[3]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m, T const& s) - { - return mat<4, 3, T, Q>( - m[0] + s, - m[1] + s, - m[2] + s, - m[3] + s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) - { - return mat<4, 3, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1], - m1[2] + m2[2], - m1[3] + m2[3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m, T const& s) - { - return mat<4, 3, T, Q>( - m[0] - s, - m[1] - s, - m[2] - s, - m[3] - s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) - { - return mat<4, 3, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1], - m1[2] - m2[2], - m1[3] - m2[3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m, T const& s) - { - return mat<4, 3, T, Q>( - m[0] * s, - m[1] * s, - m[2] * s, - m[3] * s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(T const& s, mat<4, 3, T, Q> const& m) - { - return mat<4, 3, T, Q>( - m[0] * s, - m[1] * s, - m[2] * s, - m[3] * s); - } - - template - GLM_FUNC_QUALIFIER typename mat<4, 3, T, Q>::col_type operator* - ( - mat<4, 3, T, Q> const& m, - typename mat<4, 3, T, Q>::row_type const& v) - { - return typename mat<4, 3, T, Q>::col_type( - m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w, - m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w, - m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z + m[3][2] * v.w); - } - - template - GLM_FUNC_QUALIFIER typename mat<4, 3, T, Q>::row_type operator* - ( - typename mat<4, 3, T, Q>::col_type const& v, - mat<4, 3, T, Q> const& m) - { - return typename mat<4, 3, T, Q>::row_type( - v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2], - v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2], - v.x * m[2][0] + v.y * m[2][1] + v.z * m[2][2], - v.x * m[3][0] + v.y * m[3][1] + v.z * m[3][2]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<2, 4, T, Q> const& m2) - { - return mat<2, 3, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<3, 4, T, Q> const& m2) - { - T const SrcA00 = m1[0][0]; - T const SrcA01 = m1[0][1]; - T const SrcA02 = m1[0][2]; - T const SrcA10 = m1[1][0]; - T const SrcA11 = m1[1][1]; - T const SrcA12 = m1[1][2]; - T const SrcA20 = m1[2][0]; - T const SrcA21 = m1[2][1]; - T const SrcA22 = m1[2][2]; - T const SrcA30 = m1[3][0]; - T const SrcA31 = m1[3][1]; - T const SrcA32 = m1[3][2]; - - T const SrcB00 = m2[0][0]; - T const SrcB01 = m2[0][1]; - T const SrcB02 = m2[0][2]; - T const SrcB03 = m2[0][3]; - T const SrcB10 = m2[1][0]; - T const SrcB11 = m2[1][1]; - T const SrcB12 = m2[1][2]; - T const SrcB13 = m2[1][3]; - T const SrcB20 = m2[2][0]; - T const SrcB21 = m2[2][1]; - T const SrcB22 = m2[2][2]; - T const SrcB23 = m2[2][3]; - - mat<3, 3, T, Q> Result; - Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02 + SrcA30 * SrcB03; - Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02 + SrcA31 * SrcB03; - Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02 + SrcA32 * SrcB03; - Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12 + SrcA30 * SrcB13; - Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12 + SrcA31 * SrcB13; - Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11 + SrcA22 * SrcB12 + SrcA32 * SrcB13; - Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21 + SrcA20 * SrcB22 + SrcA30 * SrcB23; - Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21 + SrcA21 * SrcB22 + SrcA31 * SrcB23; - Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21 + SrcA22 * SrcB22 + SrcA32 * SrcB23; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<4, 4, T, Q> const& m2) - { - return mat<4, 3, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3], - m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2] + m1[3][2] * m2[2][3], - m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2] + m1[3][0] * m2[3][3], - m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2] + m1[3][1] * m2[3][3], - m1[0][2] * m2[3][0] + m1[1][2] * m2[3][1] + m1[2][2] * m2[3][2] + m1[3][2] * m2[3][3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator/(mat<4, 3, T, Q> const& m, T const& s) - { - return mat<4, 3, T, Q>( - m[0] / s, - m[1] / s, - m[2] / s, - m[3] / s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator/(T const& s, mat<4, 3, T, Q> const& m) - { - return mat<4, 3, T, Q>( - s / m[0], - s / m[1], - s / m[2], - s / m[3]); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]); - } -} //namespace glm diff --git a/src/vendor/glm/detail/type_mat4x4.hpp b/src/vendor/glm/detail/type_mat4x4.hpp deleted file mode 100755 index b92e208..0000000 --- a/src/vendor/glm/detail/type_mat4x4.hpp +++ /dev/null @@ -1,189 +0,0 @@ -/// @ref core -/// @file glm/detail/type_mat4x4.hpp - -#pragma once - -#include "type_vec4.hpp" -#include -#include - -namespace glm -{ - template - struct mat<4, 4, T, Q> - { - typedef vec<4, T, Q> col_type; - typedef vec<4, T, Q> row_type; - typedef mat<4, 4, T, Q> type; - typedef mat<4, 4, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[4]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 4;} - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT_CTOR; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<4, 4, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T const& x); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T const& x0, T const& y0, T const& z0, T const& w0, - T const& x1, T const& y1, T const& z1, T const& w1, - T const& x2, T const& y2, T const& z2, T const& w2, - T const& x3, T const& y3, T const& z3, T const& w3); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v0, - col_type const& v1, - col_type const& v2, - col_type const& v3); - - // -- Conversions -- - - template< - typename X1, typename Y1, typename Z1, typename W1, - typename X2, typename Y2, typename Z2, typename W2, - typename X3, typename Y3, typename Z3, typename W3, - typename X4, typename Y4, typename Z4, typename W4> - GLM_FUNC_DECL GLM_CONSTEXPR mat( - X1 const& x1, Y1 const& y1, Z1 const& z1, W1 const& w1, - X2 const& x2, Y2 const& y2, Z2 const& z2, W2 const& w2, - X3 const& x3, Y3 const& y3, Z3 const& z3, W3 const& w3, - X4 const& x4, Y4 const& y4, Z4 const& z4, W4 const& w4); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<4, V1, Q> const& v1, - vec<4, V2, Q> const& v2, - vec<4, V3, Q> const& v3, - vec<4, V4, Q> const& v4); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator=(mat<4, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator+=(mat<4, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator-=(mat<4, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator*=(mat<4, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator/=(U s); - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator/=(mat<4, 4, U, Q> const& m); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<4, 4, T, Q> & operator++(); - GLM_FUNC_DECL mat<4, 4, T, Q> & operator--(); - GLM_FUNC_DECL mat<4, 4, T, Q> operator++(int); - GLM_FUNC_DECL mat<4, 4, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m, T const& s); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator+(T const& s, mat<4, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m, T const& s); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator-(T const& s, mat<4, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m, T const& s); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator*(T const& s, mat<4, 4, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<4, 4, T, Q>::col_type operator*(mat<4, 4, T, Q> const& m, typename mat<4, 4, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<4, 4, T, Q>::row_type operator*(typename mat<4, 4, T, Q>::col_type const& v, mat<4, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m, T const& s); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator/(T const& s, mat<4, 4, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<4, 4, T, Q>::col_type operator/(mat<4, 4, T, Q> const& m, typename mat<4, 4, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<4, 4, T, Q>::row_type operator/(typename mat<4, 4, T, Q>::col_type const& v, mat<4, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat4x4.inl" -#endif//GLM_EXTERNAL_TEMPLATE diff --git a/src/vendor/glm/detail/type_mat4x4.inl b/src/vendor/glm/detail/type_mat4x4.inl deleted file mode 100755 index 5c2166e..0000000 --- a/src/vendor/glm/detail/type_mat4x4.inl +++ /dev/null @@ -1,706 +0,0 @@ -#include "../matrix.hpp" - -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0, 0, 0), col_type(0, 1, 0, 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0, 0, 0); - this->value[1] = col_type(0, 1, 0, 0); - this->value[2] = col_type(0, 0, 1, 0); - this->value[3] = col_type(0, 0, 0, 1); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<4, 4, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - this->value[3] = m[3]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(T const& s) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(s, 0, 0, 0), col_type(0, s, 0, 0), col_type(0, 0, s, 0), col_type(0, 0, 0, s)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(s, 0, 0, 0); - this->value[1] = col_type(0, s, 0, 0); - this->value[2] = col_type(0, 0, s, 0); - this->value[3] = col_type(0, 0, 0, s); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat - ( - T const& x0, T const& y0, T const& z0, T const& w0, - T const& x1, T const& y1, T const& z1, T const& w1, - T const& x2, T const& y2, T const& z2, T const& w2, - T const& x3, T const& y3, T const& z3, T const& w3 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{ - col_type(x0, y0, z0, w0), - col_type(x1, y1, z1, w1), - col_type(x2, y2, z2, w2), - col_type(x3, y3, z3, w3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0, z0, w0); - this->value[1] = col_type(x1, y1, z1, w1); - this->value[2] = col_type(x2, y2, z2, w2); - this->value[3] = col_type(x3, y3, z3, w3); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2, col_type const& v3) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = v0; - this->value[1] = v1; - this->value[2] = v2; - this->value[3] = v3; -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<4, 4, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(m[3]); -# endif - } - - // -- Conversions -- - - template - template< - typename X1, typename Y1, typename Z1, typename W1, - typename X2, typename Y2, typename Z2, typename W2, - typename X3, typename Y3, typename Z3, typename W3, - typename X4, typename Y4, typename Z4, typename W4> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat - ( - X1 const& x1, Y1 const& y1, Z1 const& z1, W1 const& w1, - X2 const& x2, Y2 const& y2, Z2 const& z2, W2 const& w2, - X3 const& x3, Y3 const& y3, Z3 const& z3, W3 const& w3, - X4 const& x4, Y4 const& y4, Z4 const& z4, W4 const& w4 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x1, y1, z1, w1), col_type(x2, y2, z2, w2), col_type(x3, y3, z3, w3), col_type(x4, y4, z4, w4)} -# endif - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 1st parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 2nd parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 3rd parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 4th parameter type invalid."); - - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 5th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 6th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 7th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 8th parameter type invalid."); - - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 9th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 10th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 11th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 12th parameter type invalid."); - - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 13th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 14th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 15th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 16th parameter type invalid."); - -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x1, y1, z1, w1); - this->value[1] = col_type(x2, y2, z2, w2); - this->value[2] = col_type(x3, y3, z3, w3); - this->value[3] = col_type(x4, y4, z4, w4); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(vec<4, V1, Q> const& v1, vec<4, V2, Q> const& v2, vec<4, V3, Q> const& v3, vec<4, V4, Q> const& v4) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v1), col_type(v2), col_type(v3), col_type(v4)} -# endif - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 1st parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 2nd parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 3rd parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 4th parameter type invalid."); - -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v1); - this->value[1] = col_type(v2); - this->value[2] = col_type(v3); - this->value[3] = col_type(v4); -# endif - } - - // -- Matrix conversions -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<2, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); - this->value[2] = col_type(0, 0, 1, 0); - this->value[3] = col_type(0, 0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<3, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 0), col_type(0, 0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(m[2], 0); - this->value[3] = col_type(0, 0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<2, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(0, 0, 1, 0); - this->value[3] = col_type(0, 0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<3, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(m[2], 1, 0), col_type(0, 0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); - this->value[2] = col_type(m[2], 1, 0); - this->value[3] = col_type(0, 0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<2, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = col_type(0, 0, 1, 0); - this->value[3] = col_type(0, 0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<4, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); - this->value[2] = col_type(0, 0, 1, 0); - this->value[3] = col_type(0, 0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<3, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0, 0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - this->value[3] = col_type(0, 0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<4, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 0), col_type(m[3], 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(m[2], 0); - this->value[3] = col_type(m[3], 1); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::col_type & mat<4, 4, T, Q>::operator[](typename mat<4, 4, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<4, 4, T, Q>::col_type const& mat<4, 4, T, Q>::operator[](typename mat<4, 4, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary arithmetic operators -- - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q>& mat<4, 4, T, Q>::operator=(mat<4, 4, U, Q> const& m) - { - //memcpy could be faster - //memcpy(&this->value, &m.value, 16 * sizeof(valType)); - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - this->value[3] = m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q>& mat<4, 4, T, Q>::operator+=(U s) - { - this->value[0] += s; - this->value[1] += s; - this->value[2] += s; - this->value[3] += s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q>& mat<4, 4, T, Q>::operator+=(mat<4, 4, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - this->value[2] += m[2]; - this->value[3] += m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator-=(U s) - { - this->value[0] -= s; - this->value[1] -= s; - this->value[2] -= s; - this->value[3] -= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator-=(mat<4, 4, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - this->value[2] -= m[2]; - this->value[3] -= m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator*=(U s) - { - this->value[0] *= s; - this->value[1] *= s; - this->value[2] *= s; - this->value[3] *= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator*=(mat<4, 4, U, Q> const& m) - { - return (*this = *this * m); - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator/=(U s) - { - this->value[0] /= s; - this->value[1] /= s; - this->value[2] /= s; - this->value[3] /= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator/=(mat<4, 4, U, Q> const& m) - { - return *this *= inverse(m); - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - ++this->value[2]; - ++this->value[3]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - --this->value[2]; - --this->value[3]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> mat<4, 4, T, Q>::operator++(int) - { - mat<4, 4, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> mat<4, 4, T, Q>::operator--(int) - { - mat<4, 4, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary constant operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m) - { - return mat<4, 4, T, Q>( - -m[0], - -m[1], - -m[2], - -m[3]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m, T const& s) - { - return mat<4, 4, T, Q>( - m[0] + s, - m[1] + s, - m[2] + s, - m[3] + s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(T const& s, mat<4, 4, T, Q> const& m) - { - return mat<4, 4, T, Q>( - m[0] + s, - m[1] + s, - m[2] + s, - m[3] + s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) - { - return mat<4, 4, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1], - m1[2] + m2[2], - m1[3] + m2[3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m, T const& s) - { - return mat<4, 4, T, Q>( - m[0] - s, - m[1] - s, - m[2] - s, - m[3] - s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(T const& s, mat<4, 4, T, Q> const& m) - { - return mat<4, 4, T, Q>( - s - m[0], - s - m[1], - s - m[2], - s - m[3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) - { - return mat<4, 4, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1], - m1[2] - m2[2], - m1[3] - m2[3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m, T const & s) - { - return mat<4, 4, T, Q>( - m[0] * s, - m[1] * s, - m[2] * s, - m[3] * s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(T const& s, mat<4, 4, T, Q> const& m) - { - return mat<4, 4, T, Q>( - m[0] * s, - m[1] * s, - m[2] * s, - m[3] * s); - } - - template - GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::col_type operator* - ( - mat<4, 4, T, Q> const& m, - typename mat<4, 4, T, Q>::row_type const& v - ) - { -/* - __m128 v0 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 v1 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(1, 1, 1, 1)); - __m128 v2 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(2, 2, 2, 2)); - __m128 v3 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 m0 = _mm_mul_ps(m[0].data, v0); - __m128 m1 = _mm_mul_ps(m[1].data, v1); - __m128 a0 = _mm_add_ps(m0, m1); - - __m128 m2 = _mm_mul_ps(m[2].data, v2); - __m128 m3 = _mm_mul_ps(m[3].data, v3); - __m128 a1 = _mm_add_ps(m2, m3); - - __m128 a2 = _mm_add_ps(a0, a1); - - return typename mat<4, 4, T, Q>::col_type(a2); -*/ - - typename mat<4, 4, T, Q>::col_type const Mov0(v[0]); - typename mat<4, 4, T, Q>::col_type const Mov1(v[1]); - typename mat<4, 4, T, Q>::col_type const Mul0 = m[0] * Mov0; - typename mat<4, 4, T, Q>::col_type const Mul1 = m[1] * Mov1; - typename mat<4, 4, T, Q>::col_type const Add0 = Mul0 + Mul1; - typename mat<4, 4, T, Q>::col_type const Mov2(v[2]); - typename mat<4, 4, T, Q>::col_type const Mov3(v[3]); - typename mat<4, 4, T, Q>::col_type const Mul2 = m[2] * Mov2; - typename mat<4, 4, T, Q>::col_type const Mul3 = m[3] * Mov3; - typename mat<4, 4, T, Q>::col_type const Add1 = Mul2 + Mul3; - typename mat<4, 4, T, Q>::col_type const Add2 = Add0 + Add1; - return Add2; - -/* - return typename mat<4, 4, T, Q>::col_type( - m[0][0] * v[0] + m[1][0] * v[1] + m[2][0] * v[2] + m[3][0] * v[3], - m[0][1] * v[0] + m[1][1] * v[1] + m[2][1] * v[2] + m[3][1] * v[3], - m[0][2] * v[0] + m[1][2] * v[1] + m[2][2] * v[2] + m[3][2] * v[3], - m[0][3] * v[0] + m[1][3] * v[1] + m[2][3] * v[2] + m[3][3] * v[3]); -*/ - } - - template - GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::row_type operator* - ( - typename mat<4, 4, T, Q>::col_type const& v, - mat<4, 4, T, Q> const& m - ) - { - return typename mat<4, 4, T, Q>::row_type( - m[0][0] * v[0] + m[0][1] * v[1] + m[0][2] * v[2] + m[0][3] * v[3], - m[1][0] * v[0] + m[1][1] * v[1] + m[1][2] * v[2] + m[1][3] * v[3], - m[2][0] * v[0] + m[2][1] * v[1] + m[2][2] * v[2] + m[2][3] * v[3], - m[3][0] * v[0] + m[3][1] * v[1] + m[3][2] * v[2] + m[3][3] * v[3]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) - { - return mat<2, 4, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3], - m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2] + m1[3][3] * m2[0][3], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3], - m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2] + m1[3][3] * m2[1][3]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) - { - return mat<3, 4, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3], - m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2] + m1[3][3] * m2[0][3], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3], - m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2] + m1[3][3] * m2[1][3], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3], - m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2] + m1[3][2] * m2[2][3], - m1[0][3] * m2[2][0] + m1[1][3] * m2[2][1] + m1[2][3] * m2[2][2] + m1[3][3] * m2[2][3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) - { - typename mat<4, 4, T, Q>::col_type const SrcA0 = m1[0]; - typename mat<4, 4, T, Q>::col_type const SrcA1 = m1[1]; - typename mat<4, 4, T, Q>::col_type const SrcA2 = m1[2]; - typename mat<4, 4, T, Q>::col_type const SrcA3 = m1[3]; - - typename mat<4, 4, T, Q>::col_type const SrcB0 = m2[0]; - typename mat<4, 4, T, Q>::col_type const SrcB1 = m2[1]; - typename mat<4, 4, T, Q>::col_type const SrcB2 = m2[2]; - typename mat<4, 4, T, Q>::col_type const SrcB3 = m2[3]; - - mat<4, 4, T, Q> Result; - Result[0] = SrcA0 * SrcB0[0] + SrcA1 * SrcB0[1] + SrcA2 * SrcB0[2] + SrcA3 * SrcB0[3]; - Result[1] = SrcA0 * SrcB1[0] + SrcA1 * SrcB1[1] + SrcA2 * SrcB1[2] + SrcA3 * SrcB1[3]; - Result[2] = SrcA0 * SrcB2[0] + SrcA1 * SrcB2[1] + SrcA2 * SrcB2[2] + SrcA3 * SrcB2[3]; - Result[3] = SrcA0 * SrcB3[0] + SrcA1 * SrcB3[1] + SrcA2 * SrcB3[2] + SrcA3 * SrcB3[3]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m, T const& s) - { - return mat<4, 4, T, Q>( - m[0] / s, - m[1] / s, - m[2] / s, - m[3] / s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator/(T const& s, mat<4, 4, T, Q> const& m) - { - return mat<4, 4, T, Q>( - s / m[0], - s / m[1], - s / m[2], - s / m[3]); - } - - template - GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::col_type operator/(mat<4, 4, T, Q> const& m, typename mat<4, 4, T, Q>::row_type const& v) - { - return inverse(m) * v; - } - - template - GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::row_type operator/(typename mat<4, 4, T, Q>::col_type const& v, mat<4, 4, T, Q> const& m) - { - return v * inverse(m); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) - { - mat<4, 4, T, Q> m1_copy(m1); - return m1_copy /= m2; - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "type_mat4x4_simd.inl" -#endif diff --git a/src/vendor/glm/detail/type_mat4x4_simd.inl b/src/vendor/glm/detail/type_mat4x4_simd.inl deleted file mode 100755 index fb3a16f..0000000 --- a/src/vendor/glm/detail/type_mat4x4_simd.inl +++ /dev/null @@ -1,6 +0,0 @@ -/// @ref core - -namespace glm -{ - -}//namespace glm diff --git a/src/vendor/glm/detail/type_quat.hpp b/src/vendor/glm/detail/type_quat.hpp deleted file mode 100755 index 376c0dc..0000000 --- a/src/vendor/glm/detail/type_quat.hpp +++ /dev/null @@ -1,191 +0,0 @@ -/// @ref core -/// @file glm/detail/type_quat.hpp - -#pragma once - -// Dependency: -#include "../detail/type_mat3x3.hpp" -#include "../detail/type_mat4x4.hpp" -#include "../detail/type_vec3.hpp" -#include "../detail/type_vec4.hpp" -#include "../ext/vector_relational.hpp" -#include "../ext/quaternion_relational.hpp" -#include "../gtc/constants.hpp" -#include "../gtc/matrix_transform.hpp" - -namespace glm -{ - template - struct qua - { - // -- Implementation detail -- - - typedef qua type; - typedef T value_type; - - // -- Data -- - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wpedantic" -# elif GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wgnu-anonymous-struct" -# pragma clang diagnostic ignored "-Wnested-anon-types" -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(push) -# pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union -# endif -# endif - -# if GLM_LANG & GLM_LANG_CXXMS_FLAG - union - { -# ifdef GLM_FORCE_QUAT_DATA_XYZW - struct { T x, y, z, w; }; -# else - struct { T w, x, y, z; }; -# endif - - typename detail::storage<4, T, detail::is_aligned::value>::type data; - }; -# else -# ifdef GLM_FORCE_QUAT_DATA_XYZW - T x, y, z, w; -# else - T w, x, y, z; -# endif -# endif - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(pop) -# endif -# endif - - // -- Component accesses -- - - typedef length_t length_type; - - /// Return the count of components of a quaternion - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 4;} - - GLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const; - - // -- Implicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR qua() GLM_DEFAULT_CTOR; - GLM_FUNC_DECL GLM_CONSTEXPR qua(qua const& q) GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR qua(qua const& q); - - // -- Explicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR qua(T s, vec<3, T, Q> const& v); - -# ifdef GLM_FORCE_QUAT_DATA_XYZW - GLM_FUNC_DECL GLM_CONSTEXPR qua(T x, T y, T z, T w); -# else - GLM_FUNC_DECL GLM_CONSTEXPR qua(T w, T x, T y, T z); -# endif - - // -- Conversion constructors -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT qua(qua const& q); - - /// Explicit conversion operators -# if GLM_HAS_EXPLICIT_CONVERSION_OPERATORS - GLM_FUNC_DECL explicit operator mat<3, 3, T, Q>() const; - GLM_FUNC_DECL explicit operator mat<4, 4, T, Q>() const; -# endif - - /// Create a quaternion from two normalized axis - /// - /// @param u A first normalized axis - /// @param v A second normalized axis - /// @see gtc_quaternion - /// @see http://lolengine.net/blog/2013/09/18/beautiful-maths-quaternion-from-vectors - GLM_FUNC_DECL qua(vec<3, T, Q> const& u, vec<3, T, Q> const& v); - - /// Build a quaternion from euler angles (pitch, yaw, roll), in radians. - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT qua(vec<3, T, Q> const& eulerAngles); - GLM_FUNC_DECL GLM_EXPLICIT qua(mat<3, 3, T, Q> const& q); - GLM_FUNC_DECL GLM_EXPLICIT qua(mat<4, 4, T, Q> const& q); - - // -- Unary arithmetic operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR qua& operator=(qua const& q) GLM_DEFAULT; - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua& operator=(qua const& q); - template - GLM_FUNC_DECL GLM_CONSTEXPR qua& operator+=(qua const& q); - template - GLM_FUNC_DECL GLM_CONSTEXPR qua& operator-=(qua const& q); - template - GLM_FUNC_DECL GLM_CONSTEXPR qua& operator*=(qua const& q); - template - GLM_FUNC_DECL GLM_CONSTEXPR qua& operator*=(U s); - template - GLM_FUNC_DECL GLM_CONSTEXPR qua& operator/=(U s); - }; - - // -- Unary bit operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua operator+(qua const& q); - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua operator-(qua const& q); - - // -- Binary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua operator+(qua const& q, qua const& p); - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua operator-(qua const& q, qua const& p); - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua operator*(qua const& q, qua const& p); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(qua const& q, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, qua const& q); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(qua const& q, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, qua const& q); - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua operator*(qua const& q, T const& s); - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua operator*(T const& s, qua const& q); - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua operator/(qua const& q, T const& s); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(qua const& q1, qua const& q2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(qua const& q1, qua const& q2); -} //namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_quat.inl" -#endif//GLM_EXTERNAL_TEMPLATE diff --git a/src/vendor/glm/detail/type_quat.inl b/src/vendor/glm/detail/type_quat.inl deleted file mode 100755 index 52deed4..0000000 --- a/src/vendor/glm/detail/type_quat.inl +++ /dev/null @@ -1,412 +0,0 @@ -#include "../trigonometric.hpp" -#include "../exponential.hpp" -#include "../ext/quaternion_common.hpp" -#include "../ext/quaternion_geometric.hpp" -#include - -namespace glm{ -namespace detail -{ - template - struct genTypeTrait > - { - static const genTypeEnum GENTYPE = GENTYPE_QUAT; - }; - - template - struct compute_dot, T, Aligned> - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static T call(qua const& a, qua const& b) - { - vec<4, T, Q> tmp(a.w * b.w, a.x * b.x, a.y * b.y, a.z * b.z); - return (tmp.x + tmp.y) + (tmp.z + tmp.w); - } - }; - - template - struct compute_quat_add - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static qua call(qua const& q, qua const& p) - { - return qua(q.w + p.w, q.x + p.x, q.y + p.y, q.z + p.z); - } - }; - - template - struct compute_quat_sub - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static qua call(qua const& q, qua const& p) - { - return qua(q.w - p.w, q.x - p.x, q.y - p.y, q.z - p.z); - } - }; - - template - struct compute_quat_mul_scalar - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static qua call(qua const& q, T s) - { - return qua(q.w * s, q.x * s, q.y * s, q.z * s); - } - }; - - template - struct compute_quat_div_scalar - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static qua call(qua const& q, T s) - { - return qua(q.w / s, q.x / s, q.y / s, q.z / s); - } - }; - - template - struct compute_quat_mul_vec4 - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(qua const& q, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(q * vec<3, T, Q>(v), v.w); - } - }; -}//namespace detail - - // -- Component accesses -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T & qua::operator[](typename qua::length_type i) - { - assert(i >= 0 && i < this->length()); -# ifdef GLM_FORCE_QUAT_DATA_XYZW - return (&x)[i]; -# else - return (&w)[i]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& qua::operator[](typename qua::length_type i) const - { - assert(i >= 0 && i < this->length()); -# ifdef GLM_FORCE_QUAT_DATA_XYZW - return (&x)[i]; -# else - return (&w)[i]; -# endif - } - - // -- Implicit basic constructors -- - -# if GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua() -# if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE -# ifdef GLM_FORCE_QUAT_DATA_XYZW - : x(0), y(0), z(0), w(1) -# else - : w(1), x(0), y(0), z(0) -# endif -# endif - {} -# endif - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua(qua const& q) -# ifdef GLM_FORCE_QUAT_DATA_XYZW - : x(q.x), y(q.y), z(q.z), w(q.w) -# else - : w(q.w), x(q.x), y(q.y), z(q.z) -# endif - {} -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua(qua const& q) -# ifdef GLM_FORCE_QUAT_DATA_XYZW - : x(q.x), y(q.y), z(q.z), w(q.w) -# else - : w(q.w), x(q.x), y(q.y), z(q.z) -# endif - {} - - // -- Explicit basic constructors -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua(T s, vec<3, T, Q> const& v) -# ifdef GLM_FORCE_QUAT_DATA_XYZW - : x(v.x), y(v.y), z(v.z), w(s) -# else - : w(s), x(v.x), y(v.y), z(v.z) -# endif - {} - - template -# ifdef GLM_FORCE_QUAT_DATA_XYZW - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua(T _x, T _y, T _z, T _w) - : x(_x), y(_y), z(_z), w(_w) -# else - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua(T _w, T _x, T _y, T _z) - : w(_w), x(_x), y(_y), z(_z) -# endif - {} - - // -- Conversion constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua(qua const& q) -# ifdef GLM_FORCE_QUAT_DATA_XYZW - : x(static_cast(q.x)), y(static_cast(q.y)), z(static_cast(q.z)), w(static_cast(q.w)) -# else - : w(static_cast(q.w)), x(static_cast(q.x)), y(static_cast(q.y)), z(static_cast(q.z)) -# endif - {} - - //template - //GLM_FUNC_QUALIFIER qua::qua - //( - // valType const& pitch, - // valType const& yaw, - // valType const& roll - //) - //{ - // vec<3, valType> eulerAngle(pitch * valType(0.5), yaw * valType(0.5), roll * valType(0.5)); - // vec<3, valType> c = glm::cos(eulerAngle * valType(0.5)); - // vec<3, valType> s = glm::sin(eulerAngle * valType(0.5)); - // - // this->w = c.x * c.y * c.z + s.x * s.y * s.z; - // this->x = s.x * c.y * c.z - c.x * s.y * s.z; - // this->y = c.x * s.y * c.z + s.x * c.y * s.z; - // this->z = c.x * c.y * s.z - s.x * s.y * c.z; - //} - - template - GLM_FUNC_QUALIFIER qua::qua(vec<3, T, Q> const& u, vec<3, T, Q> const& v) - { - T norm_u_norm_v = sqrt(dot(u, u) * dot(v, v)); - T real_part = norm_u_norm_v + dot(u, v); - vec<3, T, Q> t; - - if(real_part < static_cast(1.e-6f) * norm_u_norm_v) - { - // If u and v are exactly opposite, rotate 180 degrees - // around an arbitrary orthogonal axis. Axis normalisation - // can happen later, when we normalise the quaternion. - real_part = static_cast(0); - t = abs(u.x) > abs(u.z) ? vec<3, T, Q>(-u.y, u.x, static_cast(0)) : vec<3, T, Q>(static_cast(0), -u.z, u.y); - } - else - { - // Otherwise, build quaternion the standard way. - t = cross(u, v); - } - - *this = normalize(qua(real_part, t.x, t.y, t.z)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua(vec<3, T, Q> const& eulerAngle) - { - vec<3, T, Q> c = glm::cos(eulerAngle * T(0.5)); - vec<3, T, Q> s = glm::sin(eulerAngle * T(0.5)); - - this->w = c.x * c.y * c.z + s.x * s.y * s.z; - this->x = s.x * c.y * c.z - c.x * s.y * s.z; - this->y = c.x * s.y * c.z + s.x * c.y * s.z; - this->z = c.x * c.y * s.z - s.x * s.y * c.z; - } - - template - GLM_FUNC_QUALIFIER qua::qua(mat<3, 3, T, Q> const& m) - { - *this = quat_cast(m); - } - - template - GLM_FUNC_QUALIFIER qua::qua(mat<4, 4, T, Q> const& m) - { - *this = quat_cast(m); - } - -# if GLM_HAS_EXPLICIT_CONVERSION_OPERATORS - template - GLM_FUNC_QUALIFIER qua::operator mat<3, 3, T, Q>() const - { - return mat3_cast(*this); - } - - template - GLM_FUNC_QUALIFIER qua::operator mat<4, 4, T, Q>() const - { - return mat4_cast(*this); - } -# endif//GLM_HAS_EXPLICIT_CONVERSION_OPERATORS - - // -- Unary arithmetic operators -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator=(qua const& q) - { - this->w = q.w; - this->x = q.x; - this->y = q.y; - this->z = q.z; - return *this; - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator=(qua const& q) - { - this->w = static_cast(q.w); - this->x = static_cast(q.x); - this->y = static_cast(q.y); - this->z = static_cast(q.z); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator+=(qua const& q) - { - return (*this = detail::compute_quat_add::value>::call(*this, qua(q))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator-=(qua const& q) - { - return (*this = detail::compute_quat_sub::value>::call(*this, qua(q))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator*=(qua const& r) - { - qua const p(*this); - qua const q(r); - - this->w = p.w * q.w - p.x * q.x - p.y * q.y - p.z * q.z; - this->x = p.w * q.x + p.x * q.w + p.y * q.z - p.z * q.y; - this->y = p.w * q.y + p.y * q.w + p.z * q.x - p.x * q.z; - this->z = p.w * q.z + p.z * q.w + p.x * q.y - p.y * q.x; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator*=(U s) - { - return (*this = detail::compute_quat_mul_scalar::value>::call(*this, static_cast(s))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator/=(U s) - { - return (*this = detail::compute_quat_div_scalar::value>::call(*this, static_cast(s))); - } - - // -- Unary bit operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator+(qua const& q) - { - return q; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator-(qua const& q) - { - return qua(-q.w, -q.x, -q.y, -q.z); - } - - // -- Binary operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator+(qua const& q, qua const& p) - { - return qua(q) += p; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator-(qua const& q, qua const& p) - { - return qua(q) -= p; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator*(qua const& q, qua const& p) - { - return qua(q) *= p; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(qua const& q, vec<3, T, Q> const& v) - { - vec<3, T, Q> const QuatVector(q.x, q.y, q.z); - vec<3, T, Q> const uv(glm::cross(QuatVector, v)); - vec<3, T, Q> const uuv(glm::cross(QuatVector, uv)); - - return v + ((uv * q.w) + uuv) * static_cast(2); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, qua const& q) - { - return glm::inverse(q) * v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(qua const& q, vec<4, T, Q> const& v) - { - return detail::compute_quat_mul_vec4::value>::call(q, v); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, qua const& q) - { - return glm::inverse(q) * v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator*(qua const& q, T const& s) - { - return qua( - q.w * s, q.x * s, q.y * s, q.z * s); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator*(T const& s, qua const& q) - { - return q * s; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator/(qua const& q, T const& s) - { - return qua( - q.w / s, q.x / s, q.y / s, q.z / s); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(qua const& q1, qua const& q2) - { - return q1.x == q2.x && q1.y == q2.y && q1.z == q2.z && q1.w == q2.w; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(qua const& q1, qua const& q2) - { - return q1.x != q2.x || q1.y != q2.y || q1.z != q2.z || q1.w != q2.w; - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "type_quat_simd.inl" -#endif - diff --git a/src/vendor/glm/detail/type_quat_simd.inl b/src/vendor/glm/detail/type_quat_simd.inl deleted file mode 100755 index 3333e59..0000000 --- a/src/vendor/glm/detail/type_quat_simd.inl +++ /dev/null @@ -1,188 +0,0 @@ -/// @ref core - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -namespace glm{ -namespace detail -{ -/* - template - struct compute_quat_mul - { - static qua call(qua const& q1, qua const& q2) - { - // SSE2 STATS: 11 shuffle, 8 mul, 8 add - // SSE4 STATS: 3 shuffle, 4 mul, 4 dpps - - __m128 const mul0 = _mm_mul_ps(q1.Data, _mm_shuffle_ps(q2.Data, q2.Data, _MM_SHUFFLE(0, 1, 2, 3))); - __m128 const mul1 = _mm_mul_ps(q1.Data, _mm_shuffle_ps(q2.Data, q2.Data, _MM_SHUFFLE(1, 0, 3, 2))); - __m128 const mul2 = _mm_mul_ps(q1.Data, _mm_shuffle_ps(q2.Data, q2.Data, _MM_SHUFFLE(2, 3, 0, 1))); - __m128 const mul3 = _mm_mul_ps(q1.Data, q2.Data); - -# if GLM_ARCH & GLM_ARCH_SSE41_BIT - __m128 const add0 = _mm_dp_ps(mul0, _mm_set_ps(1.0f, -1.0f, 1.0f, 1.0f), 0xff); - __m128 const add1 = _mm_dp_ps(mul1, _mm_set_ps(1.0f, 1.0f, 1.0f, -1.0f), 0xff); - __m128 const add2 = _mm_dp_ps(mul2, _mm_set_ps(1.0f, 1.0f, -1.0f, 1.0f), 0xff); - __m128 const add3 = _mm_dp_ps(mul3, _mm_set_ps(1.0f, -1.0f, -1.0f, -1.0f), 0xff); -# else - __m128 const mul4 = _mm_mul_ps(mul0, _mm_set_ps(1.0f, -1.0f, 1.0f, 1.0f)); - __m128 const add0 = _mm_add_ps(mul0, _mm_movehl_ps(mul4, mul4)); - __m128 const add4 = _mm_add_ss(add0, _mm_shuffle_ps(add0, add0, 1)); - - __m128 const mul5 = _mm_mul_ps(mul1, _mm_set_ps(1.0f, 1.0f, 1.0f, -1.0f)); - __m128 const add1 = _mm_add_ps(mul1, _mm_movehl_ps(mul5, mul5)); - __m128 const add5 = _mm_add_ss(add1, _mm_shuffle_ps(add1, add1, 1)); - - __m128 const mul6 = _mm_mul_ps(mul2, _mm_set_ps(1.0f, 1.0f, -1.0f, 1.0f)); - __m128 const add2 = _mm_add_ps(mul6, _mm_movehl_ps(mul6, mul6)); - __m128 const add6 = _mm_add_ss(add2, _mm_shuffle_ps(add2, add2, 1)); - - __m128 const mul7 = _mm_mul_ps(mul3, _mm_set_ps(1.0f, -1.0f, -1.0f, -1.0f)); - __m128 const add3 = _mm_add_ps(mul3, _mm_movehl_ps(mul7, mul7)); - __m128 const add7 = _mm_add_ss(add3, _mm_shuffle_ps(add3, add3, 1)); - #endif - - // This SIMD code is a politically correct way of doing this, but in every test I've tried it has been slower than - // the final code below. I'll keep this here for reference - maybe somebody else can do something better... - // - //__m128 xxyy = _mm_shuffle_ps(add4, add5, _MM_SHUFFLE(0, 0, 0, 0)); - //__m128 zzww = _mm_shuffle_ps(add6, add7, _MM_SHUFFLE(0, 0, 0, 0)); - // - //return _mm_shuffle_ps(xxyy, zzww, _MM_SHUFFLE(2, 0, 2, 0)); - - qua Result; - _mm_store_ss(&Result.x, add4); - _mm_store_ss(&Result.y, add5); - _mm_store_ss(&Result.z, add6); - _mm_store_ss(&Result.w, add7); - return Result; - } - }; -*/ - - template - struct compute_quat_add - { - static qua call(qua const& q, qua const& p) - { - qua Result; - Result.data = _mm_add_ps(q.data, p.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template - struct compute_quat_add - { - static qua call(qua const& a, qua const& b) - { - qua Result; - Result.data = _mm256_add_pd(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_quat_sub - { - static qua call(qua const& q, qua const& p) - { - vec<4, float, Q> Result; - Result.data = _mm_sub_ps(q.data, p.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template - struct compute_quat_sub - { - static qua call(qua const& a, qua const& b) - { - qua Result; - Result.data = _mm256_sub_pd(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_quat_mul_scalar - { - static qua call(qua const& q, float s) - { - vec<4, float, Q> Result; - Result.data = _mm_mul_ps(q.data, _mm_set_ps1(s)); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template - struct compute_quat_mul_scalar - { - static qua call(qua const& q, double s) - { - qua Result; - Result.data = _mm256_mul_pd(q.data, _mm_set_ps1(s)); - return Result; - } - }; -# endif - - template - struct compute_quat_div_scalar - { - static qua call(qua const& q, float s) - { - vec<4, float, Q> Result; - Result.data = _mm_div_ps(q.data, _mm_set_ps1(s)); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template - struct compute_quat_div_scalar - { - static qua call(qua const& q, double s) - { - qua Result; - Result.data = _mm256_div_pd(q.data, _mm_set_ps1(s)); - return Result; - } - }; -# endif - - template - struct compute_quat_mul_vec4 - { - static vec<4, float, Q> call(qua const& q, vec<4, float, Q> const& v) - { - __m128 const q_wwww = _mm_shuffle_ps(q.data, q.data, _MM_SHUFFLE(3, 3, 3, 3)); - __m128 const q_swp0 = _mm_shuffle_ps(q.data, q.data, _MM_SHUFFLE(3, 0, 2, 1)); - __m128 const q_swp1 = _mm_shuffle_ps(q.data, q.data, _MM_SHUFFLE(3, 1, 0, 2)); - __m128 const v_swp0 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(3, 0, 2, 1)); - __m128 const v_swp1 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(3, 1, 0, 2)); - - __m128 uv = _mm_sub_ps(_mm_mul_ps(q_swp0, v_swp1), _mm_mul_ps(q_swp1, v_swp0)); - __m128 uv_swp0 = _mm_shuffle_ps(uv, uv, _MM_SHUFFLE(3, 0, 2, 1)); - __m128 uv_swp1 = _mm_shuffle_ps(uv, uv, _MM_SHUFFLE(3, 1, 0, 2)); - __m128 uuv = _mm_sub_ps(_mm_mul_ps(q_swp0, uv_swp1), _mm_mul_ps(q_swp1, uv_swp0)); - - __m128 const two = _mm_set1_ps(2.0f); - uv = _mm_mul_ps(uv, _mm_mul_ps(q_wwww, two)); - uuv = _mm_mul_ps(uuv, two); - - vec<4, float, Q> Result; - Result.data = _mm_add_ps(v.Data, _mm_add_ps(uv, uuv)); - return Result; - } - }; -}//namespace detail -}//namespace glm - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT - diff --git a/src/vendor/glm/detail/type_vec1.hpp b/src/vendor/glm/detail/type_vec1.hpp deleted file mode 100755 index ed381cc..0000000 --- a/src/vendor/glm/detail/type_vec1.hpp +++ /dev/null @@ -1,308 +0,0 @@ -/// @ref core -/// @file glm/detail/type_vec1.hpp - -#pragma once - -#include "qualifier.hpp" -#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR -# include "_swizzle.hpp" -#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION -# include "_swizzle_func.hpp" -#endif -#include - -namespace glm -{ - template - struct vec<1, T, Q> - { - // -- Implementation detail -- - - typedef T value_type; - typedef vec<1, T, Q> type; - typedef vec<1, bool, Q> bool_type; - - // -- Data -- - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wpedantic" -# elif GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wgnu-anonymous-struct" -# pragma clang diagnostic ignored "-Wnested-anon-types" -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(push) -# pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union -# endif -# endif - -# if GLM_CONFIG_XYZW_ONLY - T x; -# elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE - union - { - T x; - T r; - T s; - - typename detail::storage<1, T, detail::is_aligned::value>::type data; -/* -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - _GLM_SWIZZLE1_2_MEMBERS(T, Q, x) - _GLM_SWIZZLE1_2_MEMBERS(T, Q, r) - _GLM_SWIZZLE1_2_MEMBERS(T, Q, s) - _GLM_SWIZZLE1_3_MEMBERS(T, Q, x) - _GLM_SWIZZLE1_3_MEMBERS(T, Q, r) - _GLM_SWIZZLE1_3_MEMBERS(T, Q, s) - _GLM_SWIZZLE1_4_MEMBERS(T, Q, x) - _GLM_SWIZZLE1_4_MEMBERS(T, Q, r) - _GLM_SWIZZLE1_4_MEMBERS(T, Q, s) -# endif -*/ - }; -# else - union {T x, r, s;}; -/* -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION - GLM_SWIZZLE_GEN_VEC_FROM_VEC1(T, Q) -# endif -*/ -# endif - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(pop) -# endif -# endif - - // -- Component accesses -- - - /// Return the count of components of the vector - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 1;} - - GLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const; - - // -- Implicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT_CTOR; - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec const& v) GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, T, P> const& v); - - // -- Explicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar); - - // -- Conversion vector constructors -- - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<2, U, P> const& v); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<3, U, P> const& v); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v); - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<1, U, P> const& v); - - // -- Swizzle constructors -- -/* -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<1, T, Q, E0, -1,-2,-3> const& that) - { - *this = that(); - } -# endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR -*/ - // -- Unary arithmetic operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator=(vec const& v) GLM_DEFAULT; - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator+=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator+=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator-=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator-=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator*=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator*=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator/=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator/=(vec<1, U, Q> const& v); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator++(); - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator--(); - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator++(int); - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator--(int); - - // -- Unary bit operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator%=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator%=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator&=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator&=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator|=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator|=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator^=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator^=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator<<=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator<<=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator>>=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator>>=(vec<1, U, Q> const& v); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v); - - // -- Binary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator*(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator/(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator%(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator&(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator|(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator^(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator<<(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator>>(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator~(vec<1, T, Q> const& v); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, bool, Q> operator&&(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, bool, Q> operator||(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_vec1.inl" -#endif//GLM_EXTERNAL_TEMPLATE diff --git a/src/vendor/glm/detail/type_vec1.inl b/src/vendor/glm/detail/type_vec1.inl deleted file mode 100755 index 52a9b3a..0000000 --- a/src/vendor/glm/detail/type_vec1.inl +++ /dev/null @@ -1,553 +0,0 @@ -/// @ref core - -#include "./compute_vector_relational.hpp" - -namespace glm -{ - // -- Implicit basic constructors -- - -# if GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec() -# if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE - : x(0) -# endif - {} -# endif - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<1, T, Q> const& v) - : x(v.x) - {} -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<1, T, P> const& v) - : x(v.x) - {} - - // -- Explicit basic constructors -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(T scalar) - : x(scalar) - {} - - // -- Conversion vector constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<1, U, P> const& v) - : x(static_cast(v.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<2, U, P> const& v) - : x(static_cast(v.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<3, U, P> const& v) - : x(static_cast(v.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<4, U, P> const& v) - : x(static_cast(v.x)) - {} - - // -- Component accesses -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T & vec<1, T, Q>::operator[](typename vec<1, T, Q>::length_type) - { - return x; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<1, T, Q>::operator[](typename vec<1, T, Q>::length_type) const - { - return x; - } - - // -- Unary arithmetic operators -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator=(vec<1, T, Q> const& v) - { - this->x = v.x; - return *this; - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator=(vec<1, U, Q> const& v) - { - this->x = static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator+=(U scalar) - { - this->x += static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator+=(vec<1, U, Q> const& v) - { - this->x += static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator-=(U scalar) - { - this->x -= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator-=(vec<1, U, Q> const& v) - { - this->x -= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator*=(U scalar) - { - this->x *= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator*=(vec<1, U, Q> const& v) - { - this->x *= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator/=(U scalar) - { - this->x /= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator/=(vec<1, U, Q> const& v) - { - this->x /= static_cast(v.x); - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator++() - { - ++this->x; - return *this; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator--() - { - --this->x; - return *this; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> vec<1, T, Q>::operator++(int) - { - vec<1, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> vec<1, T, Q>::operator--(int) - { - vec<1, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary bit operators -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator%=(U scalar) - { - this->x %= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator%=(vec<1, U, Q> const& v) - { - this->x %= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator&=(U scalar) - { - this->x &= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator&=(vec<1, U, Q> const& v) - { - this->x &= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator|=(U scalar) - { - this->x |= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator|=(vec<1, U, Q> const& v) - { - this->x |= U(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator^=(U scalar) - { - this->x ^= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator^=(vec<1, U, Q> const& v) - { - this->x ^= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator<<=(U scalar) - { - this->x <<= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator<<=(vec<1, U, Q> const& v) - { - this->x <<= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator>>=(U scalar) - { - this->x >>= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator>>=(vec<1, U, Q> const& v) - { - this->x >>= static_cast(v.x); - return *this; - } - - // -- Unary constant operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v) - { - return v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - -v.x); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - v.x + scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - scalar + v.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - v1.x + v2.x); - } - - //operator- - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - v.x - scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - scalar - v.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - v1.x - v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - v.x * scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator*(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - scalar * v.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - v1.x * v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - v.x / scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator/(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - scalar / v.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - v1.x / v2.x); - } - - // -- Binary bit operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - v.x % scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator%(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - scalar % v.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - v1.x % v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - v.x & scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator&(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - scalar & v.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - v1.x & v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - v.x | scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator|(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - scalar | v.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - v1.x | v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - v.x ^ scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator^(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - scalar ^ v.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - v1.x ^ v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - static_cast(v.x << scalar)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator<<(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - static_cast(scalar << v.x)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - static_cast(v1.x << v2.x)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - static_cast(v.x >> scalar)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator>>(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - static_cast(scalar >> v.x)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - static_cast(v1.x >> v2.x)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator~(vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - ~v.x); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return detail::compute_equal::is_iec559>::call(v1.x, v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return !(v1 == v2); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, bool, Q> operator&&(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2) - { - return vec<1, bool, Q>(v1.x && v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, bool, Q> operator||(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2) - { - return vec<1, bool, Q>(v1.x || v2.x); - } -}//namespace glm diff --git a/src/vendor/glm/detail/type_vec2.hpp b/src/vendor/glm/detail/type_vec2.hpp deleted file mode 100755 index 5aa969d..0000000 --- a/src/vendor/glm/detail/type_vec2.hpp +++ /dev/null @@ -1,402 +0,0 @@ -/// @ref core -/// @file glm/detail/type_vec2.hpp - -#pragma once - -#include "qualifier.hpp" -#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR -# include "_swizzle.hpp" -#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION -# include "_swizzle_func.hpp" -#endif -#include - -namespace glm -{ - template - struct vec<2, T, Q> - { - // -- Implementation detail -- - - typedef T value_type; - typedef vec<2, T, Q> type; - typedef vec<2, bool, Q> bool_type; - - // -- Data -- - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wpedantic" -# elif GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wgnu-anonymous-struct" -# pragma clang diagnostic ignored "-Wnested-anon-types" -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(push) -# pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union -# endif -# endif - -# if GLM_CONFIG_XYZW_ONLY - T x, y; -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION - GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, Q, x, y) -# endif//GLM_CONFIG_SWIZZLE -# elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE - union - { - struct{ T x, y; }; - struct{ T r, g; }; - struct{ T s, t; }; - - typename detail::storage<2, T, detail::is_aligned::value>::type data; - -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - GLM_SWIZZLE2_2_MEMBERS(T, Q, x, y) - GLM_SWIZZLE2_2_MEMBERS(T, Q, r, g) - GLM_SWIZZLE2_2_MEMBERS(T, Q, s, t) - GLM_SWIZZLE2_3_MEMBERS(T, Q, x, y) - GLM_SWIZZLE2_3_MEMBERS(T, Q, r, g) - GLM_SWIZZLE2_3_MEMBERS(T, Q, s, t) - GLM_SWIZZLE2_4_MEMBERS(T, Q, x, y) - GLM_SWIZZLE2_4_MEMBERS(T, Q, r, g) - GLM_SWIZZLE2_4_MEMBERS(T, Q, s, t) -# endif - }; -# else - union {T x, r, s;}; - union {T y, g, t;}; - -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION - GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, Q) -# endif//GLM_CONFIG_SWIZZLE -# endif - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(pop) -# endif -# endif - - // -- Component accesses -- - - /// Return the count of components of the vector - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 2;} - - GLM_FUNC_DECL GLM_CONSTEXPR T& operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const; - - // -- Implicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT_CTOR; - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec const& v) GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, T, P> const& v); - - // -- Explicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR vec(T x, T y); - - // -- Conversion constructors -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec<1, U, P> const& v); - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(A x, B y); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, Q> const& x, B y); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(A x, vec<1, B, Q> const& y); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, Q> const& x, vec<1, B, Q> const& y); - - // -- Conversion vector constructors -- - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<3, U, P> const& v); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v); - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<2, U, P> const& v); - - // -- Swizzle constructors -- -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1,-1,-2> const& that) - { - *this = that(); - } -# endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - - // -- Unary arithmetic operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator=(vec const& v) GLM_DEFAULT; - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(vec<2, U, Q> const& v); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator++(); - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator--(); - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator++(int); - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator--(int); - - // -- Unary bit operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(vec<2, U, Q> const& v); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v); - - // -- Binary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator~(vec<2, T, Q> const& v); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, bool, Q> operator&&(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, bool, Q> operator||(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_vec2.inl" -#endif//GLM_EXTERNAL_TEMPLATE diff --git a/src/vendor/glm/detail/type_vec2.inl b/src/vendor/glm/detail/type_vec2.inl deleted file mode 100755 index 55ab64d..0000000 --- a/src/vendor/glm/detail/type_vec2.inl +++ /dev/null @@ -1,915 +0,0 @@ -/// @ref core - -#include "./compute_vector_relational.hpp" - -namespace glm -{ - // -- Implicit basic constructors -- - -# if GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec() -# if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE - : x(0), y(0) -# endif - {} -# endif - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<2, T, Q> const& v) - : x(v.x), y(v.y) - {} -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<2, T, P> const& v) - : x(v.x), y(v.y) - {} - - // -- Explicit basic constructors -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(T scalar) - : x(scalar), y(scalar) - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(T _x, T _y) - : x(_x), y(_y) - {} - - // -- Conversion scalar constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<1, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(A _x, B _y) - : x(static_cast(_x)) - , y(static_cast(_y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<1, A, Q> const& _x, B _y) - : x(static_cast(_x.x)) - , y(static_cast(_y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(A _x, vec<1, B, Q> const& _y) - : x(static_cast(_x)) - , y(static_cast(_y.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<1, A, Q> const& _x, vec<1, B, Q> const& _y) - : x(static_cast(_x.x)) - , y(static_cast(_y.x)) - {} - - // -- Conversion vector constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<2, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<3, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<4, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.y)) - {} - - // -- Component accesses -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T & vec<2, T, Q>::operator[](typename vec<2, T, Q>::length_type i) - { - assert(i >= 0 && i < this->length()); - switch(i) - { - default: - case 0: - return x; - case 1: - return y; - } - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<2, T, Q>::operator[](typename vec<2, T, Q>::length_type i) const - { - assert(i >= 0 && i < this->length()); - switch(i) - { - default: - case 0: - return x; - case 1: - return y; - } - } - - // -- Unary arithmetic operators -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator=(vec<2, T, Q> const& v) - { - this->x = v.x; - this->y = v.y; - return *this; - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator=(vec<2, U, Q> const& v) - { - this->x = static_cast(v.x); - this->y = static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator+=(U scalar) - { - this->x += static_cast(scalar); - this->y += static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator+=(vec<1, U, Q> const& v) - { - this->x += static_cast(v.x); - this->y += static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator+=(vec<2, U, Q> const& v) - { - this->x += static_cast(v.x); - this->y += static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator-=(U scalar) - { - this->x -= static_cast(scalar); - this->y -= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator-=(vec<1, U, Q> const& v) - { - this->x -= static_cast(v.x); - this->y -= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator-=(vec<2, U, Q> const& v) - { - this->x -= static_cast(v.x); - this->y -= static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator*=(U scalar) - { - this->x *= static_cast(scalar); - this->y *= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator*=(vec<1, U, Q> const& v) - { - this->x *= static_cast(v.x); - this->y *= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator*=(vec<2, U, Q> const& v) - { - this->x *= static_cast(v.x); - this->y *= static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator/=(U scalar) - { - this->x /= static_cast(scalar); - this->y /= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator/=(vec<1, U, Q> const& v) - { - this->x /= static_cast(v.x); - this->y /= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator/=(vec<2, U, Q> const& v) - { - this->x /= static_cast(v.x); - this->y /= static_cast(v.y); - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator++() - { - ++this->x; - ++this->y; - return *this; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator--() - { - --this->x; - --this->y; - return *this; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> vec<2, T, Q>::operator++(int) - { - vec<2, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> vec<2, T, Q>::operator--(int) - { - vec<2, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary bit operators -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator%=(U scalar) - { - this->x %= static_cast(scalar); - this->y %= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator%=(vec<1, U, Q> const& v) - { - this->x %= static_cast(v.x); - this->y %= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator%=(vec<2, U, Q> const& v) - { - this->x %= static_cast(v.x); - this->y %= static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator&=(U scalar) - { - this->x &= static_cast(scalar); - this->y &= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator&=(vec<1, U, Q> const& v) - { - this->x &= static_cast(v.x); - this->y &= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator&=(vec<2, U, Q> const& v) - { - this->x &= static_cast(v.x); - this->y &= static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator|=(U scalar) - { - this->x |= static_cast(scalar); - this->y |= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator|=(vec<1, U, Q> const& v) - { - this->x |= static_cast(v.x); - this->y |= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator|=(vec<2, U, Q> const& v) - { - this->x |= static_cast(v.x); - this->y |= static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator^=(U scalar) - { - this->x ^= static_cast(scalar); - this->y ^= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator^=(vec<1, U, Q> const& v) - { - this->x ^= static_cast(v.x); - this->y ^= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator^=(vec<2, U, Q> const& v) - { - this->x ^= static_cast(v.x); - this->y ^= static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator<<=(U scalar) - { - this->x <<= static_cast(scalar); - this->y <<= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator<<=(vec<1, U, Q> const& v) - { - this->x <<= static_cast(v.x); - this->y <<= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator<<=(vec<2, U, Q> const& v) - { - this->x <<= static_cast(v.x); - this->y <<= static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator>>=(U scalar) - { - this->x >>= static_cast(scalar); - this->y >>= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator>>=(vec<1, U, Q> const& v) - { - this->x >>= static_cast(v.x); - this->y >>= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator>>=(vec<2, U, Q> const& v) - { - this->x >>= static_cast(v.x); - this->y >>= static_cast(v.y); - return *this; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v) - { - return v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - -v.x, - -v.y); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x + scalar, - v.y + scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x + v2.x, - v1.y + v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar + v.x, - scalar + v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x + v2.x, - v1.x + v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x + v2.x, - v1.y + v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x - scalar, - v.y - scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x - v2.x, - v1.y - v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar - v.x, - scalar - v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x - v2.x, - v1.x - v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x - v2.x, - v1.y - v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x * scalar, - v.y * scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x * v2.x, - v1.y * v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar * v.x, - scalar * v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x * v2.x, - v1.x * v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x * v2.x, - v1.y * v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x / scalar, - v.y / scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x / v2.x, - v1.y / v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar / v.x, - scalar / v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x / v2.x, - v1.x / v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x / v2.x, - v1.y / v2.y); - } - - // -- Binary bit operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x % scalar, - v.y % scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x % v2.x, - v1.y % v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar % v.x, - scalar % v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x % v2.x, - v1.x % v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x % v2.x, - v1.y % v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x & scalar, - v.y & scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x & v2.x, - v1.y & v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar & v.x, - scalar & v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x & v2.x, - v1.x & v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x & v2.x, - v1.y & v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x | scalar, - v.y | scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x | v2.x, - v1.y | v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar | v.x, - scalar | v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x | v2.x, - v1.x | v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x | v2.x, - v1.y | v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x ^ scalar, - v.y ^ scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x ^ v2.x, - v1.y ^ v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar ^ v.x, - scalar ^ v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x ^ v2.x, - v1.x ^ v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x ^ v2.x, - v1.y ^ v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x << scalar, - v.y << scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x << v2.x, - v1.y << v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar << v.x, - scalar << v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x << v2.x, - v1.x << v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x << v2.x, - v1.y << v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x >> scalar, - v.y >> scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x >> v2.x, - v1.y >> v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar >> v.x, - scalar >> v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x >> v2.x, - v1.x >> v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x >> v2.x, - v1.y >> v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator~(vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - ~v.x, - ~v.y); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return - detail::compute_equal::is_iec559>::call(v1.x, v2.x) && - detail::compute_equal::is_iec559>::call(v1.y, v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return !(v1 == v2); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, bool, Q> operator&&(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2) - { - return vec<2, bool, Q>(v1.x && v2.x, v1.y && v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, bool, Q> operator||(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2) - { - return vec<2, bool, Q>(v1.x || v2.x, v1.y || v2.y); - } -}//namespace glm diff --git a/src/vendor/glm/detail/type_vec3.hpp b/src/vendor/glm/detail/type_vec3.hpp deleted file mode 100755 index cfc5000..0000000 --- a/src/vendor/glm/detail/type_vec3.hpp +++ /dev/null @@ -1,435 +0,0 @@ -/// @ref core -/// @file glm/detail/type_vec3.hpp - -#pragma once - -#include "qualifier.hpp" -#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR -# include "_swizzle.hpp" -#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION -# include "_swizzle_func.hpp" -#endif -#include - -namespace glm -{ - template - struct vec<3, T, Q> - { - // -- Implementation detail -- - - typedef T value_type; - typedef vec<3, T, Q> type; - typedef vec<3, bool, Q> bool_type; - - // -- Data -- - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wpedantic" -# elif GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wgnu-anonymous-struct" -# pragma clang diagnostic ignored "-Wnested-anon-types" -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(push) -# pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union -# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE -# pragma warning(disable: 4324) // structure was padded due to alignment specifier -# endif -# endif -# endif - -# if GLM_CONFIG_XYZW_ONLY - T x, y, z; -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION - GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, Q, x, y, z) -# endif//GLM_CONFIG_SWIZZLE -# elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE - union - { - struct{ T x, y, z; }; - struct{ T r, g, b; }; - struct{ T s, t, p; }; - - typename detail::storage<3, T, detail::is_aligned::value>::type data; - -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - GLM_SWIZZLE3_2_MEMBERS(T, Q, x, y, z) - GLM_SWIZZLE3_2_MEMBERS(T, Q, r, g, b) - GLM_SWIZZLE3_2_MEMBERS(T, Q, s, t, p) - GLM_SWIZZLE3_3_MEMBERS(T, Q, x, y, z) - GLM_SWIZZLE3_3_MEMBERS(T, Q, r, g, b) - GLM_SWIZZLE3_3_MEMBERS(T, Q, s, t, p) - GLM_SWIZZLE3_4_MEMBERS(T, Q, x, y, z) - GLM_SWIZZLE3_4_MEMBERS(T, Q, r, g, b) - GLM_SWIZZLE3_4_MEMBERS(T, Q, s, t, p) -# endif - }; -# else - union { T x, r, s; }; - union { T y, g, t; }; - union { T z, b, p; }; - -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION - GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, Q) -# endif//GLM_CONFIG_SWIZZLE -# endif//GLM_LANG - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(pop) -# endif -# endif - - // -- Component accesses -- - - /// Return the count of components of the vector - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 3;} - - GLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const; - - // -- Implicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT_CTOR; - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec const& v) GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<3, T, P> const& v); - - // -- Explicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR vec(T a, T b, T c); - - // -- Conversion scalar constructors -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec<1, U, P> const& v); - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X x, Y y, Z z); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, Z _z); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, Z _z); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec<1, Z, Q> const& _z); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z); - - // -- Conversion vector constructors -- - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, B _z); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<2, B, P> const& _yz); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v); - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<3, U, P> const& v); - - // -- Swizzle constructors -- -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<3, T, Q, E0, E1, E2, -1> const& that) - { - *this = that(); - } - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, T const& scalar) - { - *this = vec(v(), scalar); - } - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(T const& scalar, detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v) - { - *this = vec(scalar, v()); - } -# endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - - // -- Unary arithmetic operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q>& operator=(vec<3, T, Q> const& v) GLM_DEFAULT; - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator+=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator+=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator+=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator-=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator-=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator-=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator*=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator*=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator*=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator/=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator/=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator/=(vec<3, U, Q> const& v); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator++(); - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator--(); - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator++(int); - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator--(int); - - // -- Unary bit operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator%=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator%=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator%=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator&=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator&=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator&=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator|=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator|=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator|=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator^=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator^=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator^=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator<<=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator<<=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator<<=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator>>=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator>>=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator>>=(vec<3, U, Q> const& v); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v); - - // -- Binary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator~(vec<3, T, Q> const& v); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, bool, Q> operator&&(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, bool, Q> operator||(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_vec3.inl" -#endif//GLM_EXTERNAL_TEMPLATE diff --git a/src/vendor/glm/detail/type_vec3.inl b/src/vendor/glm/detail/type_vec3.inl deleted file mode 100755 index 8d15db8..0000000 --- a/src/vendor/glm/detail/type_vec3.inl +++ /dev/null @@ -1,1070 +0,0 @@ -/// @ref core - -#include "compute_vector_relational.hpp" - -namespace glm -{ - // -- Implicit basic constructors -- - -# if GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec() -# if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE - : x(0), y(0), z(0) -# endif - {} -# endif - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<3, T, Q> const& v) - : x(v.x), y(v.y), z(v.z) - {} -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<3, T, P> const& v) - : x(v.x), y(v.y), z(v.z) - {} - - // -- Explicit basic constructors -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(T scalar) - : x(scalar), y(scalar), z(scalar) - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(T _x, T _y, T _z) - : x(_x), y(_y), z(_z) - {} - - // -- Conversion scalar constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.x)) - , z(static_cast(v.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(X _x, Y _y, Z _z) - : x(static_cast(_x)) - , y(static_cast(_y)) - , z(static_cast(_z)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, Z _z) - : x(static_cast(_x.x)) - , y(static_cast(_y)) - , z(static_cast(_z)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, Z _z) - : x(static_cast(_x)) - , y(static_cast(_y.x)) - , z(static_cast(_z)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z) - : x(static_cast(_x.x)) - , y(static_cast(_y.x)) - , z(static_cast(_z)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(X _x, Y _y, vec<1, Z, Q> const& _z) - : x(static_cast(_x)) - , y(static_cast(_y)) - , z(static_cast(_z.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z) - : x(static_cast(_x.x)) - , y(static_cast(_y)) - , z(static_cast(_z.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z) - : x(static_cast(_x)) - , y(static_cast(_y.x)) - , z(static_cast(_z.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z) - : x(static_cast(_x.x)) - , y(static_cast(_y.x)) - , z(static_cast(_z.x)) - {} - - // -- Conversion vector constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<2, A, P> const& _xy, B _z) - : x(static_cast(_xy.x)) - , y(static_cast(_xy.y)) - , z(static_cast(_z)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z) - : x(static_cast(_xy.x)) - , y(static_cast(_xy.y)) - , z(static_cast(_z.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(A _x, vec<2, B, P> const& _yz) - : x(static_cast(_x)) - , y(static_cast(_yz.x)) - , z(static_cast(_yz.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz) - : x(static_cast(_x.x)) - , y(static_cast(_yz.x)) - , z(static_cast(_yz.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<3, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.y)) - , z(static_cast(v.z)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<4, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.y)) - , z(static_cast(v.z)) - {} - - // -- Component accesses -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T & vec<3, T, Q>::operator[](typename vec<3, T, Q>::length_type i) - { - assert(i >= 0 && i < this->length()); - switch(i) - { - default: - case 0: - return x; - case 1: - return y; - case 2: - return z; - } - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<3, T, Q>::operator[](typename vec<3, T, Q>::length_type i) const - { - assert(i >= 0 && i < this->length()); - switch(i) - { - default: - case 0: - return x; - case 1: - return y; - case 2: - return z; - } - } - - // -- Unary arithmetic operators -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>& vec<3, T, Q>::operator=(vec<3, T, Q> const& v) - { - this->x = v.x; - this->y = v.y; - this->z = v.z; - return *this; - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>& vec<3, T, Q>::operator=(vec<3, U, Q> const& v) - { - this->x = static_cast(v.x); - this->y = static_cast(v.y); - this->z = static_cast(v.z); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator+=(U scalar) - { - this->x += static_cast(scalar); - this->y += static_cast(scalar); - this->z += static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator+=(vec<1, U, Q> const& v) - { - this->x += static_cast(v.x); - this->y += static_cast(v.x); - this->z += static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator+=(vec<3, U, Q> const& v) - { - this->x += static_cast(v.x); - this->y += static_cast(v.y); - this->z += static_cast(v.z); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator-=(U scalar) - { - this->x -= static_cast(scalar); - this->y -= static_cast(scalar); - this->z -= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator-=(vec<1, U, Q> const& v) - { - this->x -= static_cast(v.x); - this->y -= static_cast(v.x); - this->z -= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator-=(vec<3, U, Q> const& v) - { - this->x -= static_cast(v.x); - this->y -= static_cast(v.y); - this->z -= static_cast(v.z); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator*=(U scalar) - { - this->x *= static_cast(scalar); - this->y *= static_cast(scalar); - this->z *= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator*=(vec<1, U, Q> const& v) - { - this->x *= static_cast(v.x); - this->y *= static_cast(v.x); - this->z *= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator*=(vec<3, U, Q> const& v) - { - this->x *= static_cast(v.x); - this->y *= static_cast(v.y); - this->z *= static_cast(v.z); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator/=(U v) - { - this->x /= static_cast(v); - this->y /= static_cast(v); - this->z /= static_cast(v); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator/=(vec<1, U, Q> const& v) - { - this->x /= static_cast(v.x); - this->y /= static_cast(v.x); - this->z /= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator/=(vec<3, U, Q> const& v) - { - this->x /= static_cast(v.x); - this->y /= static_cast(v.y); - this->z /= static_cast(v.z); - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator++() - { - ++this->x; - ++this->y; - ++this->z; - return *this; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator--() - { - --this->x; - --this->y; - --this->z; - return *this; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> vec<3, T, Q>::operator++(int) - { - vec<3, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> vec<3, T, Q>::operator--(int) - { - vec<3, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary bit operators -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator%=(U scalar) - { - this->x %= scalar; - this->y %= scalar; - this->z %= scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator%=(vec<1, U, Q> const& v) - { - this->x %= v.x; - this->y %= v.x; - this->z %= v.x; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator%=(vec<3, U, Q> const& v) - { - this->x %= v.x; - this->y %= v.y; - this->z %= v.z; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator&=(U scalar) - { - this->x &= scalar; - this->y &= scalar; - this->z &= scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator&=(vec<1, U, Q> const& v) - { - this->x &= v.x; - this->y &= v.x; - this->z &= v.x; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator&=(vec<3, U, Q> const& v) - { - this->x &= v.x; - this->y &= v.y; - this->z &= v.z; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator|=(U scalar) - { - this->x |= scalar; - this->y |= scalar; - this->z |= scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator|=(vec<1, U, Q> const& v) - { - this->x |= v.x; - this->y |= v.x; - this->z |= v.x; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator|=(vec<3, U, Q> const& v) - { - this->x |= v.x; - this->y |= v.y; - this->z |= v.z; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator^=(U scalar) - { - this->x ^= scalar; - this->y ^= scalar; - this->z ^= scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator^=(vec<1, U, Q> const& v) - { - this->x ^= v.x; - this->y ^= v.x; - this->z ^= v.x; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator^=(vec<3, U, Q> const& v) - { - this->x ^= v.x; - this->y ^= v.y; - this->z ^= v.z; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator<<=(U scalar) - { - this->x <<= scalar; - this->y <<= scalar; - this->z <<= scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator<<=(vec<1, U, Q> const& v) - { - this->x <<= static_cast(v.x); - this->y <<= static_cast(v.x); - this->z <<= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator<<=(vec<3, U, Q> const& v) - { - this->x <<= static_cast(v.x); - this->y <<= static_cast(v.y); - this->z <<= static_cast(v.z); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator>>=(U scalar) - { - this->x >>= static_cast(scalar); - this->y >>= static_cast(scalar); - this->z >>= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator>>=(vec<1, U, Q> const& v) - { - this->x >>= static_cast(v.x); - this->y >>= static_cast(v.x); - this->z >>= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator>>=(vec<3, U, Q> const& v) - { - this->x >>= static_cast(v.x); - this->y >>= static_cast(v.y); - this->z >>= static_cast(v.z); - return *this; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v) - { - return v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - -v.x, - -v.y, - -v.z); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x + scalar, - v.y + scalar, - v.z + scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x + scalar.x, - v.y + scalar.x, - v.z + scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar + v.x, - scalar + v.y, - scalar + v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x + v.x, - scalar.x + v.y, - scalar.x + v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x + v2.x, - v1.y + v2.y, - v1.z + v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x - scalar, - v.y - scalar, - v.z - scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x - scalar.x, - v.y - scalar.x, - v.z - scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar - v.x, - scalar - v.y, - scalar - v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x - v.x, - scalar.x - v.y, - scalar.x - v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x - v2.x, - v1.y - v2.y, - v1.z - v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x * scalar, - v.y * scalar, - v.z * scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x * scalar.x, - v.y * scalar.x, - v.z * scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar * v.x, - scalar * v.y, - scalar * v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x * v.x, - scalar.x * v.y, - scalar.x * v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x * v2.x, - v1.y * v2.y, - v1.z * v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x / scalar, - v.y / scalar, - v.z / scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x / scalar.x, - v.y / scalar.x, - v.z / scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar / v.x, - scalar / v.y, - scalar / v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x / v.x, - scalar.x / v.y, - scalar.x / v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x / v2.x, - v1.y / v2.y, - v1.z / v2.z); - } - - // -- Binary bit operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x % scalar, - v.y % scalar, - v.z % scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x % scalar.x, - v.y % scalar.x, - v.z % scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar % v.x, - scalar % v.y, - scalar % v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x % v.x, - scalar.x % v.y, - scalar.x % v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x % v2.x, - v1.y % v2.y, - v1.z % v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x & scalar, - v.y & scalar, - v.z & scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x & scalar.x, - v.y & scalar.x, - v.z & scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar & v.x, - scalar & v.y, - scalar & v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x & v.x, - scalar.x & v.y, - scalar.x & v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x & v2.x, - v1.y & v2.y, - v1.z & v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x | scalar, - v.y | scalar, - v.z | scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x | scalar.x, - v.y | scalar.x, - v.z | scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar | v.x, - scalar | v.y, - scalar | v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x | v.x, - scalar.x | v.y, - scalar.x | v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x | v2.x, - v1.y | v2.y, - v1.z | v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x ^ scalar, - v.y ^ scalar, - v.z ^ scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x ^ scalar.x, - v.y ^ scalar.x, - v.z ^ scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar ^ v.x, - scalar ^ v.y, - scalar ^ v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x ^ v.x, - scalar.x ^ v.y, - scalar.x ^ v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x ^ v2.x, - v1.y ^ v2.y, - v1.z ^ v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x << scalar, - v.y << scalar, - v.z << scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x << scalar.x, - v.y << scalar.x, - v.z << scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar << v.x, - scalar << v.y, - scalar << v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x << v.x, - scalar.x << v.y, - scalar.x << v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x << v2.x, - v1.y << v2.y, - v1.z << v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x >> scalar, - v.y >> scalar, - v.z >> scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x >> scalar.x, - v.y >> scalar.x, - v.z >> scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar >> v.x, - scalar >> v.y, - scalar >> v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x >> v.x, - scalar.x >> v.y, - scalar.x >> v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x >> v2.x, - v1.y >> v2.y, - v1.z >> v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator~(vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - ~v.x, - ~v.y, - ~v.z); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return - detail::compute_equal::is_iec559>::call(v1.x, v2.x) && - detail::compute_equal::is_iec559>::call(v1.y, v2.y) && - detail::compute_equal::is_iec559>::call(v1.z, v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return !(v1 == v2); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, bool, Q> operator&&(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2) - { - return vec<3, bool, Q>(v1.x && v2.x, v1.y && v2.y, v1.z && v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, bool, Q> operator||(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2) - { - return vec<3, bool, Q>(v1.x || v2.x, v1.y || v2.y, v1.z || v2.z); - } -}//namespace glm diff --git a/src/vendor/glm/detail/type_vec4.hpp b/src/vendor/glm/detail/type_vec4.hpp deleted file mode 100755 index fbe8c0e..0000000 --- a/src/vendor/glm/detail/type_vec4.hpp +++ /dev/null @@ -1,508 +0,0 @@ -/// @ref core -/// @file glm/detail/type_vec4.hpp - -#pragma once - -#include "qualifier.hpp" -#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR -# include "_swizzle.hpp" -#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION -# include "_swizzle_func.hpp" -#endif -#include - -namespace glm -{ - template - struct vec<4, T, Q> - { - // -- Implementation detail -- - - typedef T value_type; - typedef vec<4, T, Q> type; - typedef vec<4, bool, Q> bool_type; - - // -- Data -- - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wpedantic" -# elif GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wgnu-anonymous-struct" -# pragma clang diagnostic ignored "-Wnested-anon-types" -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(push) -# pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union -# endif -# endif - -# if GLM_CONFIG_XYZW_ONLY - T x, y, z, w; -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION - GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, Q, x, y, z, w) -# endif//GLM_CONFIG_SWIZZLE -# elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE - union - { - struct { T x, y, z, w; }; - struct { T r, g, b, a; }; - struct { T s, t, p, q; }; - - typename detail::storage<4, T, detail::is_aligned::value>::type data; - -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - GLM_SWIZZLE4_2_MEMBERS(T, Q, x, y, z, w) - GLM_SWIZZLE4_2_MEMBERS(T, Q, r, g, b, a) - GLM_SWIZZLE4_2_MEMBERS(T, Q, s, t, p, q) - GLM_SWIZZLE4_3_MEMBERS(T, Q, x, y, z, w) - GLM_SWIZZLE4_3_MEMBERS(T, Q, r, g, b, a) - GLM_SWIZZLE4_3_MEMBERS(T, Q, s, t, p, q) - GLM_SWIZZLE4_4_MEMBERS(T, Q, x, y, z, w) - GLM_SWIZZLE4_4_MEMBERS(T, Q, r, g, b, a) - GLM_SWIZZLE4_4_MEMBERS(T, Q, s, t, p, q) -# endif - }; -# else - union { T x, r, s; }; - union { T y, g, t; }; - union { T z, b, p; }; - union { T w, a, q; }; - -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION - GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, Q) -# endif -# endif - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(pop) -# endif -# endif - - // -- Component accesses -- - - typedef length_t length_type; - - /// Return the count of components of the vector - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 4;} - - GLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const; - - // -- Implicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT_CTOR; - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<4, T, Q> const& v) GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<4, T, P> const& v); - - // -- Explicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR vec(T x, T y, T z, T w); - - // -- Conversion scalar constructors -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec<1, U, P> const& v); - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, Z _z, W _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, Z _z, W _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, Z _z, W _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, W _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec<1, Z, Q> const& _z, W _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, W _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, Z _z, vec<1, W, Q> const& _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _Y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w); - - // -- Conversion vector constructors -- - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, B _z, C _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, C _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, B _z, vec<1, C, P> const& _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, vec<1, C, P> const& _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<2, B, P> const& _yz, C _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, C _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, B _y, vec<2, C, P> const& _zw); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, B _y, vec<2, C, P> const& _zw); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<3, A, P> const& _xyz, B _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<3, A, P> const& _xyz, vec<1, B, P> const& _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<3, B, P> const& _yzw); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<3, B, P> const& _yzw); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<2, B, P> const& _zw); - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v); - - // -- Swizzle constructors -- -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<4, T, Q, E0, E1, E2, E3> const& that) - { - *this = that(); - } - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, detail::_swizzle<2, T, Q, F0, F1, -1, -2> const& u) - { - *this = vec<4, T, Q>(v(), u()); - } - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(T const& x, T const& y, detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v) - { - *this = vec<4, T, Q>(x, y, v()); - } - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(T const& x, detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, T const& w) - { - *this = vec<4, T, Q>(x, v(), w); - } - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, T const& z, T const& w) - { - *this = vec<4, T, Q>(v(), z, w); - } - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<3, T, Q, E0, E1, E2, -1> const& v, T const& w) - { - *this = vec<4, T, Q>(v(), w); - } - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(T const& x, detail::_swizzle<3, T, Q, E0, E1, E2, -1> const& v) - { - *this = vec<4, T, Q>(x, v()); - } -# endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - - // -- Unary arithmetic operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator=(vec<4, T, Q> const& v) GLM_DEFAULT; - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator+=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator+=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator+=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator-=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator-=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator-=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator*=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator*=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator*=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator/=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator/=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator/=(vec<4, U, Q> const& v); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator++(); - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator--(); - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator++(int); - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator--(int); - - // -- Unary bit operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator%=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator%=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator%=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator&=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator&=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator&=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator|=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator|=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator|=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator^=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator^=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator^=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator<<=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator<<=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator<<=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator>>=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator>>=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator>>=(vec<4, U, Q> const& v); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v); - - // -- Binary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v, T const & scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v, T const & scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, T const & scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v, T const & scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator~(vec<4, T, Q> const& v); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, bool, Q> operator&&(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, bool, Q> operator||(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_vec4.inl" -#endif//GLM_EXTERNAL_TEMPLATE diff --git a/src/vendor/glm/detail/type_vec4.inl b/src/vendor/glm/detail/type_vec4.inl deleted file mode 100755 index f520c09..0000000 --- a/src/vendor/glm/detail/type_vec4.inl +++ /dev/null @@ -1,1142 +0,0 @@ -/// @ref core - -#include "compute_vector_relational.hpp" - -namespace glm{ -namespace detail -{ - template - struct compute_vec4_add - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w); - } - }; - - template - struct compute_vec4_sub - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w); - } - }; - - template - struct compute_vec4_mul - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w); - } - }; - - template - struct compute_vec4_div - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x / b.x, a.y / b.y, a.z / b.z, a.w / b.w); - } - }; - - template - struct compute_vec4_mod - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x % b.x, a.y % b.y, a.z % b.z, a.w % b.w); - } - }; - - template - struct compute_vec4_and - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x & b.x, a.y & b.y, a.z & b.z, a.w & b.w); - } - }; - - template - struct compute_vec4_or - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x | b.x, a.y | b.y, a.z | b.z, a.w | b.w); - } - }; - - template - struct compute_vec4_xor - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x ^ b.x, a.y ^ b.y, a.z ^ b.z, a.w ^ b.w); - } - }; - - template - struct compute_vec4_shift_left - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x << b.x, a.y << b.y, a.z << b.z, a.w << b.w); - } - }; - - template - struct compute_vec4_shift_right - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x >> b.x, a.y >> b.y, a.z >> b.z, a.w >> b.w); - } - }; - - template - struct compute_vec4_equal - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return - detail::compute_equal::is_iec559>::call(v1.x, v2.x) && - detail::compute_equal::is_iec559>::call(v1.y, v2.y) && - detail::compute_equal::is_iec559>::call(v1.z, v2.z) && - detail::compute_equal::is_iec559>::call(v1.w, v2.w); - } - }; - - template - struct compute_vec4_nequal - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return !compute_vec4_equal::value, sizeof(T) * 8, detail::is_aligned::value>::call(v1, v2); - } - }; - - template - struct compute_vec4_bitwise_not - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& v) - { - return vec<4, T, Q>(~v.x, ~v.y, ~v.z, ~v.w); - } - }; -}//namespace detail - - // -- Implicit basic constructors -- - -# if GLM_CONFIG_DEFAULTED_DEFAULT_CTOR == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec() -# if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE - : x(0), y(0), z(0), w(0) -# endif - {} -# endif - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<4, T, Q> const& v) - : x(v.x), y(v.y), z(v.z), w(v.w) - {} -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<4, T, P> const& v) - : x(v.x), y(v.y), z(v.z), w(v.w) - {} - - // -- Explicit basic constructors -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(T scalar) - : x(scalar), y(scalar), z(scalar), w(scalar) - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(T _x, T _y, T _z, T _w) - : x(_x), y(_y), z(_z), w(_w) - {} - - // -- Conversion scalar constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.x)) - , z(static_cast(v.x)) - , w(static_cast(v.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, Y _y, Z _z, W _w) - : x(static_cast(_x)) - , y(static_cast(_y)) - , z(static_cast(_z)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, Z _z, W _w) - : x(static_cast(_x.x)) - , y(static_cast(_y)) - , z(static_cast(_z)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, Z _z, W _w) - : x(static_cast(_x)) - , y(static_cast(_y.x)) - , z(static_cast(_z)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, W _w) - : x(static_cast(_x.x)) - , y(static_cast(_y.x)) - , z(static_cast(_z)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, Y _y, vec<1, Z, Q> const& _z, W _w) - : x(static_cast(_x)) - , y(static_cast(_y)) - , z(static_cast(_z.x)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, W _w) - : x(static_cast(_x.x)) - , y(static_cast(_y)) - , z(static_cast(_z.x)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w) - : x(static_cast(_x)) - , y(static_cast(_y.x)) - , z(static_cast(_z.x)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w) - : x(static_cast(_x.x)) - , y(static_cast(_y.x)) - , z(static_cast(_z.x)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, Z _z, vec<1, W, Q> const& _w) - : x(static_cast(_x.x)) - , y(static_cast(_y)) - , z(static_cast(_z)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w) - : x(static_cast(_x)) - , y(static_cast(_y.x)) - , z(static_cast(_z)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w) - : x(static_cast(_x.x)) - , y(static_cast(_y.x)) - , z(static_cast(_z)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w) - : x(static_cast(_x)) - , y(static_cast(_y)) - , z(static_cast(_z.x)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w) - : x(static_cast(_x.x)) - , y(static_cast(_y)) - , z(static_cast(_z.x)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w) - : x(static_cast(_x)) - , y(static_cast(_y.x)) - , z(static_cast(_z.x)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w) - : x(static_cast(_x.x)) - , y(static_cast(_y.x)) - , z(static_cast(_z.x)) - , w(static_cast(_w.x)) - {} - - // -- Conversion vector constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, B _z, C _w) - : x(static_cast(_xy.x)) - , y(static_cast(_xy.y)) - , z(static_cast(_z)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, C _w) - : x(static_cast(_xy.x)) - , y(static_cast(_xy.y)) - , z(static_cast(_z.x)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, B _z, vec<1, C, P> const& _w) - : x(static_cast(_xy.x)) - , y(static_cast(_xy.y)) - , z(static_cast(_z)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, vec<1, C, P> const& _w) - : x(static_cast(_xy.x)) - , y(static_cast(_xy.y)) - , z(static_cast(_z.x)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, vec<2, B, P> const& _yz, C _w) - : x(static_cast(_x)) - , y(static_cast(_yz.x)) - , z(static_cast(_yz.y)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, C _w) - : x(static_cast(_x.x)) - , y(static_cast(_yz.x)) - , z(static_cast(_yz.y)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w) - : x(static_cast(_x)) - , y(static_cast(_yz.x)) - , z(static_cast(_yz.y)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w) - : x(static_cast(_x.x)) - , y(static_cast(_yz.x)) - , z(static_cast(_yz.y)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, B _y, vec<2, C, P> const& _zw) - : x(static_cast(_x)) - , y(static_cast(_y)) - , z(static_cast(_zw.x)) - , w(static_cast(_zw.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, B _y, vec<2, C, P> const& _zw) - : x(static_cast(_x.x)) - , y(static_cast(_y)) - , z(static_cast(_zw.x)) - , w(static_cast(_zw.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw) - : x(static_cast(_x)) - , y(static_cast(_y.x)) - , z(static_cast(_zw.x)) - , w(static_cast(_zw.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw) - : x(static_cast(_x.x)) - , y(static_cast(_y.x)) - , z(static_cast(_zw.x)) - , w(static_cast(_zw.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<3, A, P> const& _xyz, B _w) - : x(static_cast(_xyz.x)) - , y(static_cast(_xyz.y)) - , z(static_cast(_xyz.z)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<3, A, P> const& _xyz, vec<1, B, P> const& _w) - : x(static_cast(_xyz.x)) - , y(static_cast(_xyz.y)) - , z(static_cast(_xyz.z)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, vec<3, B, P> const& _yzw) - : x(static_cast(_x)) - , y(static_cast(_yzw.x)) - , z(static_cast(_yzw.y)) - , w(static_cast(_yzw.z)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<3, B, P> const& _yzw) - : x(static_cast(_x.x)) - , y(static_cast(_yzw.x)) - , z(static_cast(_yzw.y)) - , w(static_cast(_yzw.z)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, vec<2, B, P> const& _zw) - : x(static_cast(_xy.x)) - , y(static_cast(_xy.y)) - , z(static_cast(_zw.x)) - , w(static_cast(_zw.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<4, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.y)) - , z(static_cast(v.z)) - , w(static_cast(v.w)) - {} - - // -- Component accesses -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T& vec<4, T, Q>::operator[](typename vec<4, T, Q>::length_type i) - { - assert(i >= 0 && i < this->length()); - switch(i) - { - default: - case 0: - return x; - case 1: - return y; - case 2: - return z; - case 3: - return w; - } - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<4, T, Q>::operator[](typename vec<4, T, Q>::length_type i) const - { - assert(i >= 0 && i < this->length()); - switch(i) - { - default: - case 0: - return x; - case 1: - return y; - case 2: - return z; - case 3: - return w; - } - } - - // -- Unary arithmetic operators -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>& vec<4, T, Q>::operator=(vec<4, T, Q> const& v) - { - this->x = v.x; - this->y = v.y; - this->z = v.z; - this->w = v.w; - return *this; - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>& vec<4, T, Q>::operator=(vec<4, U, Q> const& v) - { - this->x = static_cast(v.x); - this->y = static_cast(v.y); - this->z = static_cast(v.z); - this->w = static_cast(v.w); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator+=(U scalar) - { - return (*this = detail::compute_vec4_add::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator+=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_add::value>::call(*this, vec<4, T, Q>(v.x))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator+=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_add::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator-=(U scalar) - { - return (*this = detail::compute_vec4_sub::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator-=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_sub::value>::call(*this, vec<4, T, Q>(v.x))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator-=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_sub::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator*=(U scalar) - { - return (*this = detail::compute_vec4_mul::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator*=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_mul::value>::call(*this, vec<4, T, Q>(v.x))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator*=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_mul::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator/=(U scalar) - { - return (*this = detail::compute_vec4_div::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator/=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_div::value>::call(*this, vec<4, T, Q>(v.x))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator/=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_div::value>::call(*this, vec<4, T, Q>(v))); - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator++() - { - ++this->x; - ++this->y; - ++this->z; - ++this->w; - return *this; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator--() - { - --this->x; - --this->y; - --this->z; - --this->w; - return *this; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> vec<4, T, Q>::operator++(int) - { - vec<4, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> vec<4, T, Q>::operator--(int) - { - vec<4, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary bit operators -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator%=(U scalar) - { - return (*this = detail::compute_vec4_mod::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator%=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_mod::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator%=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_mod::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator&=(U scalar) - { - return (*this = detail::compute_vec4_and::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator&=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_and::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator&=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_and::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator|=(U scalar) - { - return (*this = detail::compute_vec4_or::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator|=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_or::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator|=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_or::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator^=(U scalar) - { - return (*this = detail::compute_vec4_xor::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator^=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_xor::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator^=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_xor::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator<<=(U scalar) - { - return (*this = detail::compute_vec4_shift_left::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator<<=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_shift_left::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator<<=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_shift_left::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator>>=(U scalar) - { - return (*this = detail::compute_vec4_shift_right::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator>>=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_shift_right::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator>>=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_shift_right::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - // -- Unary constant operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v) - { - return v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v) - { - return vec<4, T, Q>(0) -= v; - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v, T const & scalar) - { - return vec<4, T, Q>(v) += scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) += v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(v) += scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v2) += v1; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) += v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v, T const & scalar) - { - return vec<4, T, Q>(v) -= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) -= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar) -= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1.x) -= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) -= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, T const & scalar) - { - return vec<4, T, Q>(v) *= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) *= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(v) *= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v2) *= v1; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) *= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v, T const & scalar) - { - return vec<4, T, Q>(v) /= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) /= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar) /= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1.x) /= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) /= v2; - } - - // -- Binary bit operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v, T scalar) - { - return vec<4, T, Q>(v) %= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) %= v2.x; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar) %= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar.x) %= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) %= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, T scalar) - { - return vec<4, T, Q>(v) &= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<4, T, Q>(v) &= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar) &= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1.x) &= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) &= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v, T scalar) - { - return vec<4, T, Q>(v) |= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) |= v2.x; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar) |= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1.x) |= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) |= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v, T scalar) - { - return vec<4, T, Q>(v) ^= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) ^= v2.x; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar) ^= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1.x) ^= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) ^= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v, T scalar) - { - return vec<4, T, Q>(v) <<= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) <<= v2.x; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar) <<= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1.x) <<= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) <<= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v, T scalar) - { - return vec<4, T, Q>(v) >>= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) >>= v2.x; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar) >>= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1.x) >>= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) >>= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator~(vec<4, T, Q> const& v) - { - return detail::compute_vec4_bitwise_not::value, sizeof(T) * 8, detail::is_aligned::value>::call(v); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return detail::compute_vec4_equal::value, sizeof(T) * 8, detail::is_aligned::value>::call(v1, v2); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return detail::compute_vec4_nequal::value, sizeof(T) * 8, detail::is_aligned::value>::call(v1, v2); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, bool, Q> operator&&(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2) - { - return vec<4, bool, Q>(v1.x && v2.x, v1.y && v2.y, v1.z && v2.z, v1.w && v2.w); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, bool, Q> operator||(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2) - { - return vec<4, bool, Q>(v1.x || v2.x, v1.y || v2.y, v1.z || v2.z, v1.w || v2.w); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "type_vec4_simd.inl" -#endif diff --git a/src/vendor/glm/detail/type_vec4_simd.inl b/src/vendor/glm/detail/type_vec4_simd.inl deleted file mode 100755 index 149c413..0000000 --- a/src/vendor/glm/detail/type_vec4_simd.inl +++ /dev/null @@ -1,775 +0,0 @@ -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -namespace glm{ -namespace detail -{ -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - template - struct _swizzle_base1<4, float, Q, E0,E1,E2,E3, true> : public _swizzle_base0 - { - GLM_FUNC_QUALIFIER vec<4, float, Q> operator ()() const - { - __m128 data = *reinterpret_cast<__m128 const*>(&this->_buffer); - - vec<4, float, Q> Result; -# if GLM_ARCH & GLM_ARCH_AVX_BIT - Result.data = _mm_permute_ps(data, _MM_SHUFFLE(E3, E2, E1, E0)); -# else - Result.data = _mm_shuffle_ps(data, data, _MM_SHUFFLE(E3, E2, E1, E0)); -# endif - return Result; - } - }; - - template - struct _swizzle_base1<4, int, Q, E0,E1,E2,E3, true> : public _swizzle_base0 - { - GLM_FUNC_QUALIFIER vec<4, int, Q> operator ()() const - { - __m128i data = *reinterpret_cast<__m128i const*>(&this->_buffer); - - vec<4, int, Q> Result; - Result.data = _mm_shuffle_epi32(data, _MM_SHUFFLE(E3, E2, E1, E0)); - return Result; - } - }; - - template - struct _swizzle_base1<4, uint, Q, E0,E1,E2,E3, true> : public _swizzle_base0 - { - GLM_FUNC_QUALIFIER vec<4, uint, Q> operator ()() const - { - __m128i data = *reinterpret_cast<__m128i const*>(&this->_buffer); - - vec<4, uint, Q> Result; - Result.data = _mm_shuffle_epi32(data, _MM_SHUFFLE(E3, E2, E1, E0)); - return Result; - } - }; -# endif// GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - - template - struct compute_vec4_add - { - static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) - { - vec<4, float, Q> Result; - Result.data = _mm_add_ps(a.data, b.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template - struct compute_vec4_add - { - static vec<4, double, Q> call(vec<4, double, Q> const& a, vec<4, double, Q> const& b) - { - vec<4, double, Q> Result; - Result.data = _mm256_add_pd(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_vec4_sub - { - static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) - { - vec<4, float, Q> Result; - Result.data = _mm_sub_ps(a.data, b.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template - struct compute_vec4_sub - { - static vec<4, double, Q> call(vec<4, double, Q> const& a, vec<4, double, Q> const& b) - { - vec<4, double, Q> Result; - Result.data = _mm256_sub_pd(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_vec4_mul - { - static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) - { - vec<4, float, Q> Result; - Result.data = _mm_mul_ps(a.data, b.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template - struct compute_vec4_mul - { - static vec<4, double, Q> call(vec<4, double, Q> const& a, vec<4, double, Q> const& b) - { - vec<4, double, Q> Result; - Result.data = _mm256_mul_pd(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_vec4_div - { - static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) - { - vec<4, float, Q> Result; - Result.data = _mm_div_ps(a.data, b.data); - return Result; - } - }; - - # if GLM_ARCH & GLM_ARCH_AVX_BIT - template - struct compute_vec4_div - { - static vec<4, double, Q> call(vec<4, double, Q> const& a, vec<4, double, Q> const& b) - { - vec<4, double, Q> Result; - Result.data = _mm256_div_pd(a.data, b.data); - return Result; - } - }; -# endif - - template<> - struct compute_vec4_div - { - static vec<4, float, aligned_lowp> call(vec<4, float, aligned_lowp> const& a, vec<4, float, aligned_lowp> const& b) - { - vec<4, float, aligned_lowp> Result; - Result.data = _mm_mul_ps(a.data, _mm_rcp_ps(b.data)); - return Result; - } - }; - - template - struct compute_vec4_and - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm_and_si128(a.data, b.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX2_BIT - template - struct compute_vec4_and - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm256_and_si256(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_vec4_or - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm_or_si128(a.data, b.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX2_BIT - template - struct compute_vec4_or - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm256_or_si256(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_vec4_xor - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm_xor_si128(a.data, b.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX2_BIT - template - struct compute_vec4_xor - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm256_xor_si256(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_vec4_shift_left - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm_sll_epi32(a.data, b.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX2_BIT - template - struct compute_vec4_shift_left - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm256_sll_epi64(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_vec4_shift_right - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm_srl_epi32(a.data, b.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX2_BIT - template - struct compute_vec4_shift_right - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm256_srl_epi64(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_vec4_bitwise_not - { - static vec<4, T, Q> call(vec<4, T, Q> const& v) - { - vec<4, T, Q> Result; - Result.data = _mm_xor_si128(v.data, _mm_set1_epi32(-1)); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX2_BIT - template - struct compute_vec4_bitwise_not - { - static vec<4, T, Q> call(vec<4, T, Q> const& v) - { - vec<4, T, Q> Result; - Result.data = _mm256_xor_si256(v.data, _mm_set1_epi32(-1)); - return Result; - } - }; -# endif - - template - struct compute_vec4_equal - { - static bool call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) - { - return _mm_movemask_ps(_mm_cmpneq_ps(v1.data, v2.data)) == 0; - } - }; - -# if GLM_ARCH & GLM_ARCH_SSE41_BIT - template - struct compute_vec4_equal - { - static bool call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2) - { - //return _mm_movemask_epi8(_mm_cmpeq_epi32(v1.data, v2.data)) != 0; - __m128i neq = _mm_xor_si128(v1.data, v2.data); - return _mm_test_all_zeros(neq, neq) == 0; - } - }; -# endif - - template - struct compute_vec4_nequal - { - static bool call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) - { - return _mm_movemask_ps(_mm_cmpneq_ps(v1.data, v2.data)) != 0; - } - }; - -# if GLM_ARCH & GLM_ARCH_SSE41_BIT - template - struct compute_vec4_nequal - { - static bool call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2) - { - //return _mm_movemask_epi8(_mm_cmpneq_epi32(v1.data, v2.data)) != 0; - __m128i neq = _mm_xor_si128(v1.data, v2.data); - return _mm_test_all_zeros(neq, neq) != 0; - } - }; -# endif -}//namespace detail - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(float _s) : - data(_mm_set1_ps(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(float _s) : - data(_mm_set1_ps(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(float _s) : - data(_mm_set1_ps(_s)) - {} - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, double, aligned_lowp>::vec(double _s) : - data(_mm256_set1_pd(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, double, aligned_mediump>::vec(double _s) : - data(_mm256_set1_pd(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, double, aligned_highp>::vec(double _s) : - data(_mm256_set1_pd(_s)) - {} -# endif - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_lowp>::vec(int _s) : - data(_mm_set1_epi32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_mediump>::vec(int _s) : - data(_mm_set1_epi32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_highp>::vec(int _s) : - data(_mm_set1_epi32(_s)) - {} - -# if GLM_ARCH & GLM_ARCH_AVX2_BIT - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, detail::int64, aligned_lowp>::vec(detail::int64 _s) : - data(_mm256_set1_epi64x(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, detail::int64, aligned_mediump>::vec(detail::int64 _s) : - data(_mm256_set1_epi64x(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, detail::int64, aligned_highp>::vec(detail::int64 _s) : - data(_mm256_set1_epi64x(_s)) - {} -# endif - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(float _x, float _y, float _z, float _w) : - data(_mm_set_ps(_w, _z, _y, _x)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(float _x, float _y, float _z, float _w) : - data(_mm_set_ps(_w, _z, _y, _x)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(float _x, float _y, float _z, float _w) : - data(_mm_set_ps(_w, _z, _y, _x)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_lowp>::vec(int _x, int _y, int _z, int _w) : - data(_mm_set_epi32(_w, _z, _y, _x)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_mediump>::vec(int _x, int _y, int _z, int _w) : - data(_mm_set_epi32(_w, _z, _y, _x)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_highp>::vec(int _x, int _y, int _z, int _w) : - data(_mm_set_epi32(_w, _z, _y, _x)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(int _x, int _y, int _z, int _w) : - data(_mm_cvtepi32_ps(_mm_set_epi32(_w, _z, _y, _x))) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(int _x, int _y, int _z, int _w) : - data(_mm_cvtepi32_ps(_mm_set_epi32(_w, _z, _y, _x))) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(int _x, int _y, int _z, int _w) : - data(_mm_cvtepi32_ps(_mm_set_epi32(_w, _z, _y, _x))) - {} -}//namespace glm - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT - -#if GLM_ARCH & GLM_ARCH_NEON_BIT -namespace glm { -namespace detail { - - template - struct compute_vec4_add - { - static - vec<4, float, Q> - call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) - { - vec<4, float, Q> Result; - Result.data = vaddq_f32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_add - { - static - vec<4, uint, Q> - call(vec<4, uint, Q> const& a, vec<4, uint, Q> const& b) - { - vec<4, uint, Q> Result; - Result.data = vaddq_u32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_add - { - static - vec<4, int, Q> - call(vec<4, int, Q> const& a, vec<4, int, Q> const& b) - { - vec<4, uint, Q> Result; - Result.data = vaddq_s32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_sub - { - static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) - { - vec<4, float, Q> Result; - Result.data = vsubq_f32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_sub - { - static vec<4, uint, Q> call(vec<4, uint, Q> const& a, vec<4, uint, Q> const& b) - { - vec<4, uint, Q> Result; - Result.data = vsubq_u32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_sub - { - static vec<4, int, Q> call(vec<4, int, Q> const& a, vec<4, int, Q> const& b) - { - vec<4, int, Q> Result; - Result.data = vsubq_s32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_mul - { - static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) - { - vec<4, float, Q> Result; - Result.data = vmulq_f32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_mul - { - static vec<4, uint, Q> call(vec<4, uint, Q> const& a, vec<4, uint, Q> const& b) - { - vec<4, uint, Q> Result; - Result.data = vmulq_u32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_mul - { - static vec<4, int, Q> call(vec<4, int, Q> const& a, vec<4, int, Q> const& b) - { - vec<4, int, Q> Result; - Result.data = vmulq_s32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_div - { - static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) - { - vec<4, float, Q> Result; - Result.data = vdivq_f32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_equal - { - static bool call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) - { - uint32x4_t cmp = vceqq_f32(v1.data, v2.data); -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - cmp = vpminq_u32(cmp, cmp); - cmp = vpminq_u32(cmp, cmp); - uint32_t r = cmp[0]; -#else - uint32x2_t cmpx2 = vpmin_u32(vget_low_f32(cmp), vget_high_f32(cmp)); - cmpx2 = vpmin_u32(cmpx2, cmpx2); - uint32_t r = cmpx2[0]; -#endif - return r == ~0u; - } - }; - - template - struct compute_vec4_equal - { - static bool call(vec<4, uint, Q> const& v1, vec<4, uint, Q> const& v2) - { - uint32x4_t cmp = vceqq_u32(v1.data, v2.data); -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - cmp = vpminq_u32(cmp, cmp); - cmp = vpminq_u32(cmp, cmp); - uint32_t r = cmp[0]; -#else - uint32x2_t cmpx2 = vpmin_u32(vget_low_f32(cmp), vget_high_f32(cmp)); - cmpx2 = vpmin_u32(cmpx2, cmpx2); - uint32_t r = cmpx2[0]; -#endif - return r == ~0u; - } - }; - - template - struct compute_vec4_equal - { - static bool call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2) - { - uint32x4_t cmp = vceqq_s32(v1.data, v2.data); -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - cmp = vpminq_u32(cmp, cmp); - cmp = vpminq_u32(cmp, cmp); - uint32_t r = cmp[0]; -#else - uint32x2_t cmpx2 = vpmin_u32(vget_low_f32(cmp), vget_high_f32(cmp)); - cmpx2 = vpmin_u32(cmpx2, cmpx2); - uint32_t r = cmpx2[0]; -#endif - return r == ~0u; - } - }; - - template - struct compute_vec4_nequal - { - static bool call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) - { - return !compute_vec4_equal::call(v1, v2); - } - }; - - template - struct compute_vec4_nequal - { - static bool call(vec<4, uint, Q> const& v1, vec<4, uint, Q> const& v2) - { - return !compute_vec4_equal::call(v1, v2); - } - }; - - template - struct compute_vec4_nequal - { - static bool call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2) - { - return !compute_vec4_equal::call(v1, v2); - } - }; - -}//namespace detail - -#if !GLM_CONFIG_XYZW_ONLY - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(float _s) : - data(vdupq_n_f32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(float _s) : - data(vdupq_n_f32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(float _s) : - data(vdupq_n_f32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_lowp>::vec(int _s) : - data(vdupq_n_s32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_mediump>::vec(int _s) : - data(vdupq_n_s32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_highp>::vec(int _s) : - data(vdupq_n_s32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, uint, aligned_lowp>::vec(uint _s) : - data(vdupq_n_u32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, uint, aligned_mediump>::vec(uint _s) : - data(vdupq_n_u32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, uint, aligned_highp>::vec(uint _s) : - data(vdupq_n_u32(_s)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(const vec<4, float, aligned_highp>& rhs) : - data(rhs.data) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(const vec<4, int, aligned_highp>& rhs) : - data(vcvtq_f32_s32(rhs.data)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(const vec<4, uint, aligned_highp>& rhs) : - data(vcvtq_f32_u32(rhs.data)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(int _x, int _y, int _z, int _w) : - data(vcvtq_f32_s32(vec<4, int, aligned_lowp>(_x, _y, _z, _w).data)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(int _x, int _y, int _z, int _w) : - data(vcvtq_f32_s32(vec<4, int, aligned_mediump>(_x, _y, _z, _w).data)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(int _x, int _y, int _z, int _w) : - data(vcvtq_f32_s32(vec<4, int, aligned_highp>(_x, _y, _z, _w).data)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(uint _x, uint _y, uint _z, uint _w) : - data(vcvtq_f32_u32(vec<4, uint, aligned_lowp>(_x, _y, _z, _w).data)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(uint _x, uint _y, uint _z, uint _w) : - data(vcvtq_f32_u32(vec<4, uint, aligned_mediump>(_x, _y, _z, _w).data)) - {} - - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(uint _x, uint _y, uint _z, uint _w) : - data(vcvtq_f32_u32(vec<4, uint, aligned_highp>(_x, _y, _z, _w).data)) - {} - -#endif -}//namespace glm - -#endif diff --git a/src/vendor/glm/exponential.hpp b/src/vendor/glm/exponential.hpp deleted file mode 100755 index f8fb886..0000000 --- a/src/vendor/glm/exponential.hpp +++ /dev/null @@ -1,110 +0,0 @@ -/// @ref core -/// @file glm/exponential.hpp -/// -/// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions -/// -/// @defgroup core_func_exponential Exponential functions -/// @ingroup core -/// -/// Provides GLSL exponential functions -/// -/// These all operate component-wise. The description is per component. -/// -/// Include to use these core features. - -#pragma once - -#include "detail/type_vec1.hpp" -#include "detail/type_vec2.hpp" -#include "detail/type_vec3.hpp" -#include "detail/type_vec4.hpp" -#include - -namespace glm -{ - /// @addtogroup core_func_exponential - /// @{ - - /// Returns 'base' raised to the power 'exponent'. - /// - /// @param base Floating point value. pow function is defined for input values of 'base' defined in the range (inf-, inf+) in the limit of the type qualifier. - /// @param exponent Floating point value representing the 'exponent'. - /// - /// @see GLSL pow man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - GLM_FUNC_DECL vec pow(vec const& base, vec const& exponent); - - /// Returns the natural exponentiation of x, i.e., e^x. - /// - /// @param v exp function is defined for input values of v defined in the range (inf-, inf+) in the limit of the type qualifier. - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL exp man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - GLM_FUNC_DECL vec exp(vec const& v); - - /// Returns the natural logarithm of v, i.e., - /// returns the value y which satisfies the equation x = e^y. - /// Results are undefined if v <= 0. - /// - /// @param v log function is defined for input values of v defined in the range (0, inf+) in the limit of the type qualifier. - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL log man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - GLM_FUNC_DECL vec log(vec const& v); - - /// Returns 2 raised to the v power. - /// - /// @param v exp2 function is defined for input values of v defined in the range (inf-, inf+) in the limit of the type qualifier. - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL exp2 man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - GLM_FUNC_DECL vec exp2(vec const& v); - - /// Returns the base 2 log of x, i.e., returns the value y, - /// which satisfies the equation x = 2 ^ y. - /// - /// @param v log2 function is defined for input values of v defined in the range (0, inf+) in the limit of the type qualifier. - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL log2 man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - GLM_FUNC_DECL vec log2(vec const& v); - - /// Returns the positive square root of v. - /// - /// @param v sqrt function is defined for input values of v defined in the range [0, inf+) in the limit of the type qualifier. - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL sqrt man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - GLM_FUNC_DECL vec sqrt(vec const& v); - - /// Returns the reciprocal of the positive square root of v. - /// - /// @param v inversesqrt function is defined for input values of v defined in the range [0, inf+) in the limit of the type qualifier. - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL inversesqrt man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - GLM_FUNC_DECL vec inversesqrt(vec const& v); - - /// @} -}//namespace glm - -#include "detail/func_exponential.inl" diff --git a/src/vendor/glm/ext.hpp b/src/vendor/glm/ext.hpp deleted file mode 100755 index 39cabc3..0000000 --- a/src/vendor/glm/ext.hpp +++ /dev/null @@ -1,255 +0,0 @@ -/// @file glm/ext.hpp -/// -/// @ref core (Dependence) - -#include "detail/setup.hpp" - -#pragma once - -#include "glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_MESSAGE_EXT_INCLUDED_DISPLAYED) -# define GLM_MESSAGE_EXT_INCLUDED_DISPLAYED -# pragma message("GLM: All extensions included (not recommended)") -#endif//GLM_MESSAGES - -#include "./ext/matrix_clip_space.hpp" -#include "./ext/matrix_common.hpp" - -#include "./ext/matrix_double2x2.hpp" -#include "./ext/matrix_double2x2_precision.hpp" -#include "./ext/matrix_double2x3.hpp" -#include "./ext/matrix_double2x3_precision.hpp" -#include "./ext/matrix_double2x4.hpp" -#include "./ext/matrix_double2x4_precision.hpp" -#include "./ext/matrix_double3x2.hpp" -#include "./ext/matrix_double3x2_precision.hpp" -#include "./ext/matrix_double3x3.hpp" -#include "./ext/matrix_double3x3_precision.hpp" -#include "./ext/matrix_double3x4.hpp" -#include "./ext/matrix_double3x4_precision.hpp" -#include "./ext/matrix_double4x2.hpp" -#include "./ext/matrix_double4x2_precision.hpp" -#include "./ext/matrix_double4x3.hpp" -#include "./ext/matrix_double4x3_precision.hpp" -#include "./ext/matrix_double4x4.hpp" -#include "./ext/matrix_double4x4_precision.hpp" - -#include "./ext/matrix_float2x2.hpp" -#include "./ext/matrix_float2x2_precision.hpp" -#include "./ext/matrix_float2x3.hpp" -#include "./ext/matrix_float2x3_precision.hpp" -#include "./ext/matrix_float2x4.hpp" -#include "./ext/matrix_float2x4_precision.hpp" -#include "./ext/matrix_float3x2.hpp" -#include "./ext/matrix_float3x2_precision.hpp" -#include "./ext/matrix_float3x3.hpp" -#include "./ext/matrix_float3x3_precision.hpp" -#include "./ext/matrix_float3x4.hpp" -#include "./ext/matrix_float3x4_precision.hpp" -#include "./ext/matrix_float4x2.hpp" -#include "./ext/matrix_float4x2_precision.hpp" -#include "./ext/matrix_float4x3.hpp" -#include "./ext/matrix_float4x3_precision.hpp" -#include "./ext/matrix_float4x4.hpp" -#include "./ext/matrix_float4x4_precision.hpp" - -#include "./ext/matrix_int2x2.hpp" -#include "./ext/matrix_int2x2_sized.hpp" -#include "./ext/matrix_int2x3.hpp" -#include "./ext/matrix_int2x3_sized.hpp" -#include "./ext/matrix_int2x4.hpp" -#include "./ext/matrix_int2x4_sized.hpp" -#include "./ext/matrix_int3x2.hpp" -#include "./ext/matrix_int3x2_sized.hpp" -#include "./ext/matrix_int3x3.hpp" -#include "./ext/matrix_int3x3_sized.hpp" -#include "./ext/matrix_int3x4.hpp" -#include "./ext/matrix_int3x4_sized.hpp" -#include "./ext/matrix_int4x2.hpp" -#include "./ext/matrix_int4x2_sized.hpp" -#include "./ext/matrix_int4x3.hpp" -#include "./ext/matrix_int4x3_sized.hpp" -#include "./ext/matrix_int4x4.hpp" -#include "./ext/matrix_int4x4_sized.hpp" - -#include "./ext/matrix_uint2x2.hpp" -#include "./ext/matrix_uint2x2_sized.hpp" -#include "./ext/matrix_uint2x3.hpp" -#include "./ext/matrix_uint2x3_sized.hpp" -#include "./ext/matrix_uint2x4.hpp" -#include "./ext/matrix_uint2x4_sized.hpp" -#include "./ext/matrix_uint3x2.hpp" -#include "./ext/matrix_uint3x2_sized.hpp" -#include "./ext/matrix_uint3x3.hpp" -#include "./ext/matrix_uint3x3_sized.hpp" -#include "./ext/matrix_uint3x4.hpp" -#include "./ext/matrix_uint3x4_sized.hpp" -#include "./ext/matrix_uint4x2.hpp" -#include "./ext/matrix_uint4x2_sized.hpp" -#include "./ext/matrix_uint4x3.hpp" -#include "./ext/matrix_uint4x3_sized.hpp" -#include "./ext/matrix_uint4x4.hpp" -#include "./ext/matrix_uint4x4_sized.hpp" - -#include "./ext/matrix_projection.hpp" -#include "./ext/matrix_relational.hpp" -#include "./ext/matrix_transform.hpp" - -#include "./ext/quaternion_common.hpp" -#include "./ext/quaternion_double.hpp" -#include "./ext/quaternion_double_precision.hpp" -#include "./ext/quaternion_float.hpp" -#include "./ext/quaternion_float_precision.hpp" -#include "./ext/quaternion_exponential.hpp" -#include "./ext/quaternion_geometric.hpp" -#include "./ext/quaternion_relational.hpp" -#include "./ext/quaternion_transform.hpp" -#include "./ext/quaternion_trigonometric.hpp" - -#include "./ext/scalar_common.hpp" -#include "./ext/scalar_constants.hpp" -#include "./ext/scalar_integer.hpp" -#include "./ext/scalar_packing.hpp" -#include "./ext/scalar_reciprocal.hpp" -#include "./ext/scalar_relational.hpp" -#include "./ext/scalar_ulp.hpp" - -#include "./ext/scalar_int_sized.hpp" -#include "./ext/scalar_uint_sized.hpp" - -#include "./ext/vector_common.hpp" -#include "./ext/vector_integer.hpp" -#include "./ext/vector_packing.hpp" -#include "./ext/vector_reciprocal.hpp" -#include "./ext/vector_relational.hpp" -#include "./ext/vector_ulp.hpp" - -#include "./ext/vector_bool1.hpp" -#include "./ext/vector_bool1_precision.hpp" -#include "./ext/vector_bool2.hpp" -#include "./ext/vector_bool2_precision.hpp" -#include "./ext/vector_bool3.hpp" -#include "./ext/vector_bool3_precision.hpp" -#include "./ext/vector_bool4.hpp" -#include "./ext/vector_bool4_precision.hpp" - -#include "./ext/vector_double1.hpp" -#include "./ext/vector_double1_precision.hpp" -#include "./ext/vector_double2.hpp" -#include "./ext/vector_double2_precision.hpp" -#include "./ext/vector_double3.hpp" -#include "./ext/vector_double3_precision.hpp" -#include "./ext/vector_double4.hpp" -#include "./ext/vector_double4_precision.hpp" - -#include "./ext/vector_float1.hpp" -#include "./ext/vector_float1_precision.hpp" -#include "./ext/vector_float2.hpp" -#include "./ext/vector_float2_precision.hpp" -#include "./ext/vector_float3.hpp" -#include "./ext/vector_float3_precision.hpp" -#include "./ext/vector_float4.hpp" -#include "./ext/vector_float4_precision.hpp" - -#include "./ext/vector_int1.hpp" -#include "./ext/vector_int1_sized.hpp" -#include "./ext/vector_int2.hpp" -#include "./ext/vector_int2_sized.hpp" -#include "./ext/vector_int3.hpp" -#include "./ext/vector_int3_sized.hpp" -#include "./ext/vector_int4.hpp" -#include "./ext/vector_int4_sized.hpp" - -#include "./ext/vector_uint1.hpp" -#include "./ext/vector_uint1_sized.hpp" -#include "./ext/vector_uint2.hpp" -#include "./ext/vector_uint2_sized.hpp" -#include "./ext/vector_uint3.hpp" -#include "./ext/vector_uint3_sized.hpp" -#include "./ext/vector_uint4.hpp" -#include "./ext/vector_uint4_sized.hpp" - -#include "./gtc/bitfield.hpp" -#include "./gtc/color_space.hpp" -#include "./gtc/constants.hpp" -#include "./gtc/epsilon.hpp" -#include "./gtc/integer.hpp" -#include "./gtc/matrix_access.hpp" -#include "./gtc/matrix_integer.hpp" -#include "./gtc/matrix_inverse.hpp" -#include "./gtc/matrix_transform.hpp" -#include "./gtc/noise.hpp" -#include "./gtc/packing.hpp" -#include "./gtc/quaternion.hpp" -#include "./gtc/random.hpp" -#include "./gtc/reciprocal.hpp" -#include "./gtc/round.hpp" -#include "./gtc/type_precision.hpp" -#include "./gtc/type_ptr.hpp" -#include "./gtc/ulp.hpp" -#include "./gtc/vec1.hpp" -#if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE -# include "./gtc/type_aligned.hpp" -#endif - -#ifdef GLM_ENABLE_EXPERIMENTAL -#include "./gtx/associated_min_max.hpp" -#include "./gtx/bit.hpp" -#include "./gtx/closest_point.hpp" -#include "./gtx/color_encoding.hpp" -#include "./gtx/color_space.hpp" -#include "./gtx/color_space_YCoCg.hpp" -#include "./gtx/compatibility.hpp" -#include "./gtx/component_wise.hpp" -#include "./gtx/dual_quaternion.hpp" -#include "./gtx/euler_angles.hpp" -#include "./gtx/extend.hpp" -#include "./gtx/extended_min_max.hpp" -#include "./gtx/fast_exponential.hpp" -#include "./gtx/fast_square_root.hpp" -#include "./gtx/fast_trigonometry.hpp" -#include "./gtx/functions.hpp" -#include "./gtx/gradient_paint.hpp" -#include "./gtx/handed_coordinate_space.hpp" -#include "./gtx/integer.hpp" -#include "./gtx/intersect.hpp" -#include "./gtx/log_base.hpp" -#include "./gtx/matrix_cross_product.hpp" -#include "./gtx/matrix_interpolation.hpp" -#include "./gtx/matrix_major_storage.hpp" -#include "./gtx/matrix_operation.hpp" -#include "./gtx/matrix_query.hpp" -#include "./gtx/mixed_product.hpp" -#include "./gtx/norm.hpp" -#include "./gtx/normal.hpp" -#include "./gtx/normalize_dot.hpp" -#include "./gtx/number_precision.hpp" -#include "./gtx/optimum_pow.hpp" -#include "./gtx/orthonormalize.hpp" -#include "./gtx/perpendicular.hpp" -#include "./gtx/polar_coordinates.hpp" -#include "./gtx/projection.hpp" -#include "./gtx/quaternion.hpp" -#include "./gtx/raw_data.hpp" -#include "./gtx/rotate_vector.hpp" -#include "./gtx/spline.hpp" -#include "./gtx/std_based_type.hpp" -#if !((GLM_COMPILER & GLM_COMPILER_CUDA) || (GLM_COMPILER & GLM_COMPILER_HIP)) -# include "./gtx/string_cast.hpp" -#endif -#include "./gtx/transform.hpp" -#include "./gtx/transform2.hpp" -#include "./gtx/vec_swizzle.hpp" -#include "./gtx/vector_angle.hpp" -#include "./gtx/vector_query.hpp" -#include "./gtx/wrap.hpp" - -#if GLM_HAS_TEMPLATE_ALIASES -# include "./gtx/scalar_multiplication.hpp" -#endif - -#if GLM_HAS_RANGE_FOR -# include "./gtx/range.hpp" -#endif -#endif//GLM_ENABLE_EXPERIMENTAL diff --git a/src/vendor/glm/ext/matrix_clip_space.hpp b/src/vendor/glm/ext/matrix_clip_space.hpp deleted file mode 100755 index c3874f2..0000000 --- a/src/vendor/glm/ext/matrix_clip_space.hpp +++ /dev/null @@ -1,522 +0,0 @@ -/// @ref ext_matrix_clip_space -/// @file glm/ext/matrix_clip_space.hpp -/// -/// @defgroup ext_matrix_clip_space GLM_EXT_matrix_clip_space -/// @ingroup ext -/// -/// Defines functions that generate clip space transformation matrices. -/// -/// The matrices generated by this extension use standard OpenGL fixed-function -/// conventions. For example, the lookAt function generates a transform from world -/// space into the specific eye space that the projective matrix functions -/// (perspective, ortho, etc) are designed to expect. The OpenGL compatibility -/// specifications defines the particular layout of this eye space. -/// -/// Include to use the features of this extension. -/// -/// @see ext_matrix_transform -/// @see ext_matrix_projection - -#pragma once - -// Dependencies -#include "../ext/scalar_constants.hpp" -#include "../geometric.hpp" -#include "../trigonometric.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_clip_space extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_clip_space - /// @{ - - /// Creates a matrix for projecting two-dimensional coordinates onto the screen. - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top, T const& zNear, T const& zFar) - /// @see gluOrtho2D man page - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> ortho( - T left, T right, T bottom, T top); - - /// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoLH_ZO( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a matrix for an orthographic parallel viewing volume using right-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoLH_NO( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoRH_ZO( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoRH_NO( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoZO( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoNO( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. - /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoLH( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates. - /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoRH( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a matrix for an orthographic parallel viewing volume, using the default handedness and default near and far clip planes definition. - /// To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE. - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - /// @see glOrtho man page - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> ortho( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a left handed frustum matrix. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumLH_ZO( - T left, T right, T bottom, T top, T near, T far); - - /// Creates a left handed frustum matrix. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumLH_NO( - T left, T right, T bottom, T top, T near, T far); - - /// Creates a right handed frustum matrix. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumRH_ZO( - T left, T right, T bottom, T top, T near, T far); - - /// Creates a right handed frustum matrix. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumRH_NO( - T left, T right, T bottom, T top, T near, T far); - - /// Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumZO( - T left, T right, T bottom, T top, T near, T far); - - /// Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumNO( - T left, T right, T bottom, T top, T near, T far); - - /// Creates a left handed frustum matrix. - /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumLH( - T left, T right, T bottom, T top, T near, T far); - - /// Creates a right handed frustum matrix. - /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumRH( - T left, T right, T bottom, T top, T near, T far); - - /// Creates a frustum matrix with default handedness, using the default handedness and default near and far clip planes definition. - /// To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE. - /// - /// @tparam T A floating-point scalar type - /// @see glFrustum man page - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustum( - T left, T right, T bottom, T top, T near, T far); - - - /// Creates a matrix for a right handed, symetric perspective-view frustum. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveRH_ZO( - T fovy, T aspect, T near, T far); - - /// Creates a matrix for a right handed, symetric perspective-view frustum. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveRH_NO( - T fovy, T aspect, T near, T far); - - /// Creates a matrix for a left handed, symetric perspective-view frustum. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveLH_ZO( - T fovy, T aspect, T near, T far); - - /// Creates a matrix for a left handed, symetric perspective-view frustum. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveLH_NO( - T fovy, T aspect, T near, T far); - - /// Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveZO( - T fovy, T aspect, T near, T far); - - /// Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveNO( - T fovy, T aspect, T near, T far); - - /// Creates a matrix for a right handed, symetric perspective-view frustum. - /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveRH( - T fovy, T aspect, T near, T far); - - /// Creates a matrix for a left handed, symetric perspective-view frustum. - /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveLH( - T fovy, T aspect, T near, T far); - - /// Creates a matrix for a symetric perspective-view frustum based on the default handedness and default near and far clip planes definition. - /// To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE. - /// - /// @param fovy Specifies the field of view angle in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - /// @see gluPerspective man page - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspective( - T fovy, T aspect, T near, T far); - - /// Builds a perspective projection matrix based on a field of view using right-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovRH_ZO( - T fov, T width, T height, T near, T far); - - /// Builds a perspective projection matrix based on a field of view using right-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovRH_NO( - T fov, T width, T height, T near, T far); - - /// Builds a perspective projection matrix based on a field of view using left-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovLH_ZO( - T fov, T width, T height, T near, T far); - - /// Builds a perspective projection matrix based on a field of view using left-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovLH_NO( - T fov, T width, T height, T near, T far); - - /// Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovZO( - T fov, T width, T height, T near, T far); - - /// Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovNO( - T fov, T width, T height, T near, T far); - - /// Builds a right handed perspective projection matrix based on a field of view. - /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovRH( - T fov, T width, T height, T near, T far); - - /// Builds a left handed perspective projection matrix based on a field of view. - /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovLH( - T fov, T width, T height, T near, T far); - - /// Builds a perspective projection matrix based on a field of view and the default handedness and default near and far clip planes definition. - /// To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE. - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFov( - T fov, T width, T height, T near, T far); - - /// Creates a matrix for a left handed, symmetric perspective-view frustum with far plane at infinite. - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> infinitePerspectiveLH( - T fovy, T aspect, T near); - - /// Creates a matrix for a right handed, symmetric perspective-view frustum with far plane at infinite. - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> infinitePerspectiveRH( - T fovy, T aspect, T near); - - /// Creates a matrix for a symmetric perspective-view frustum with far plane at infinite with default handedness. - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> infinitePerspective( - T fovy, T aspect, T near); - - /// Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping. - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> tweakedInfinitePerspective( - T fovy, T aspect, T near); - - /// Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping. - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param ep Epsilon - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> tweakedInfinitePerspective( - T fovy, T aspect, T near, T ep); - - /// @} -}//namespace glm - -#include "matrix_clip_space.inl" diff --git a/src/vendor/glm/ext/matrix_clip_space.inl b/src/vendor/glm/ext/matrix_clip_space.inl deleted file mode 100755 index 7e4df33..0000000 --- a/src/vendor/glm/ext/matrix_clip_space.inl +++ /dev/null @@ -1,555 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> ortho(T left, T right, T bottom, T top) - { - mat<4, 4, T, defaultp> Result(static_cast(1)); - Result[0][0] = static_cast(2) / (right - left); - Result[1][1] = static_cast(2) / (top - bottom); - Result[2][2] = - static_cast(1); - Result[3][0] = - (right + left) / (right - left); - Result[3][1] = - (top + bottom) / (top - bottom); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoLH_ZO(T left, T right, T bottom, T top, T zNear, T zFar) - { - mat<4, 4, T, defaultp> Result(1); - Result[0][0] = static_cast(2) / (right - left); - Result[1][1] = static_cast(2) / (top - bottom); - Result[2][2] = static_cast(1) / (zFar - zNear); - Result[3][0] = - (right + left) / (right - left); - Result[3][1] = - (top + bottom) / (top - bottom); - Result[3][2] = - zNear / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoLH_NO(T left, T right, T bottom, T top, T zNear, T zFar) - { - mat<4, 4, T, defaultp> Result(1); - Result[0][0] = static_cast(2) / (right - left); - Result[1][1] = static_cast(2) / (top - bottom); - Result[2][2] = static_cast(2) / (zFar - zNear); - Result[3][0] = - (right + left) / (right - left); - Result[3][1] = - (top + bottom) / (top - bottom); - Result[3][2] = - (zFar + zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoRH_ZO(T left, T right, T bottom, T top, T zNear, T zFar) - { - mat<4, 4, T, defaultp> Result(1); - Result[0][0] = static_cast(2) / (right - left); - Result[1][1] = static_cast(2) / (top - bottom); - Result[2][2] = - static_cast(1) / (zFar - zNear); - Result[3][0] = - (right + left) / (right - left); - Result[3][1] = - (top + bottom) / (top - bottom); - Result[3][2] = - zNear / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoRH_NO(T left, T right, T bottom, T top, T zNear, T zFar) - { - mat<4, 4, T, defaultp> Result(1); - Result[0][0] = static_cast(2) / (right - left); - Result[1][1] = static_cast(2) / (top - bottom); - Result[2][2] = - static_cast(2) / (zFar - zNear); - Result[3][0] = - (right + left) / (right - left); - Result[3][1] = - (top + bottom) / (top - bottom); - Result[3][2] = - (zFar + zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoZO(T left, T right, T bottom, T top, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return orthoLH_ZO(left, right, bottom, top, zNear, zFar); -# else - return orthoRH_ZO(left, right, bottom, top, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoNO(T left, T right, T bottom, T top, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return orthoLH_NO(left, right, bottom, top, zNear, zFar); -# else - return orthoRH_NO(left, right, bottom, top, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoLH(T left, T right, T bottom, T top, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return orthoLH_ZO(left, right, bottom, top, zNear, zFar); -# else - return orthoLH_NO(left, right, bottom, top, zNear, zFar); -# endif - - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoRH(T left, T right, T bottom, T top, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return orthoRH_ZO(left, right, bottom, top, zNear, zFar); -# else - return orthoRH_NO(left, right, bottom, top, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> ortho(T left, T right, T bottom, T top, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO - return orthoLH_ZO(left, right, bottom, top, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO - return orthoLH_NO(left, right, bottom, top, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO - return orthoRH_ZO(left, right, bottom, top, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO - return orthoRH_NO(left, right, bottom, top, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumLH_ZO(T left, T right, T bottom, T top, T nearVal, T farVal) - { - mat<4, 4, T, defaultp> Result(0); - Result[0][0] = (static_cast(2) * nearVal) / (right - left); - Result[1][1] = (static_cast(2) * nearVal) / (top - bottom); - Result[2][0] = (right + left) / (right - left); - Result[2][1] = (top + bottom) / (top - bottom); - Result[2][2] = farVal / (farVal - nearVal); - Result[2][3] = static_cast(1); - Result[3][2] = -(farVal * nearVal) / (farVal - nearVal); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumLH_NO(T left, T right, T bottom, T top, T nearVal, T farVal) - { - mat<4, 4, T, defaultp> Result(0); - Result[0][0] = (static_cast(2) * nearVal) / (right - left); - Result[1][1] = (static_cast(2) * nearVal) / (top - bottom); - Result[2][0] = (right + left) / (right - left); - Result[2][1] = (top + bottom) / (top - bottom); - Result[2][2] = (farVal + nearVal) / (farVal - nearVal); - Result[2][3] = static_cast(1); - Result[3][2] = - (static_cast(2) * farVal * nearVal) / (farVal - nearVal); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumRH_ZO(T left, T right, T bottom, T top, T nearVal, T farVal) - { - mat<4, 4, T, defaultp> Result(0); - Result[0][0] = (static_cast(2) * nearVal) / (right - left); - Result[1][1] = (static_cast(2) * nearVal) / (top - bottom); - Result[2][0] = (right + left) / (right - left); - Result[2][1] = (top + bottom) / (top - bottom); - Result[2][2] = farVal / (nearVal - farVal); - Result[2][3] = static_cast(-1); - Result[3][2] = -(farVal * nearVal) / (farVal - nearVal); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumRH_NO(T left, T right, T bottom, T top, T nearVal, T farVal) - { - mat<4, 4, T, defaultp> Result(0); - Result[0][0] = (static_cast(2) * nearVal) / (right - left); - Result[1][1] = (static_cast(2) * nearVal) / (top - bottom); - Result[2][0] = (right + left) / (right - left); - Result[2][1] = (top + bottom) / (top - bottom); - Result[2][2] = - (farVal + nearVal) / (farVal - nearVal); - Result[2][3] = static_cast(-1); - Result[3][2] = - (static_cast(2) * farVal * nearVal) / (farVal - nearVal); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumZO(T left, T right, T bottom, T top, T nearVal, T farVal) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return frustumLH_ZO(left, right, bottom, top, nearVal, farVal); -# else - return frustumRH_ZO(left, right, bottom, top, nearVal, farVal); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumNO(T left, T right, T bottom, T top, T nearVal, T farVal) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return frustumLH_NO(left, right, bottom, top, nearVal, farVal); -# else - return frustumRH_NO(left, right, bottom, top, nearVal, farVal); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumLH(T left, T right, T bottom, T top, T nearVal, T farVal) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return frustumLH_ZO(left, right, bottom, top, nearVal, farVal); -# else - return frustumLH_NO(left, right, bottom, top, nearVal, farVal); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumRH(T left, T right, T bottom, T top, T nearVal, T farVal) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return frustumRH_ZO(left, right, bottom, top, nearVal, farVal); -# else - return frustumRH_NO(left, right, bottom, top, nearVal, farVal); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustum(T left, T right, T bottom, T top, T nearVal, T farVal) - { -# if GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO - return frustumLH_ZO(left, right, bottom, top, nearVal, farVal); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO - return frustumLH_NO(left, right, bottom, top, nearVal, farVal); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO - return frustumRH_ZO(left, right, bottom, top, nearVal, farVal); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO - return frustumRH_NO(left, right, bottom, top, nearVal, farVal); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveRH_ZO(T fovy, T aspect, T zNear, T zFar) - { - assert(abs(aspect - std::numeric_limits::epsilon()) > static_cast(0)); - - T const tanHalfFovy = tan(fovy / static_cast(2)); - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = static_cast(1) / (aspect * tanHalfFovy); - Result[1][1] = static_cast(1) / (tanHalfFovy); - Result[2][2] = zFar / (zNear - zFar); - Result[2][3] = - static_cast(1); - Result[3][2] = -(zFar * zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveRH_NO(T fovy, T aspect, T zNear, T zFar) - { - assert(abs(aspect - std::numeric_limits::epsilon()) > static_cast(0)); - - T const tanHalfFovy = tan(fovy / static_cast(2)); - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = static_cast(1) / (aspect * tanHalfFovy); - Result[1][1] = static_cast(1) / (tanHalfFovy); - Result[2][2] = - (zFar + zNear) / (zFar - zNear); - Result[2][3] = - static_cast(1); - Result[3][2] = - (static_cast(2) * zFar * zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveLH_ZO(T fovy, T aspect, T zNear, T zFar) - { - assert(abs(aspect - std::numeric_limits::epsilon()) > static_cast(0)); - - T const tanHalfFovy = tan(fovy / static_cast(2)); - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = static_cast(1) / (aspect * tanHalfFovy); - Result[1][1] = static_cast(1) / (tanHalfFovy); - Result[2][2] = zFar / (zFar - zNear); - Result[2][3] = static_cast(1); - Result[3][2] = -(zFar * zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveLH_NO(T fovy, T aspect, T zNear, T zFar) - { - assert(abs(aspect - std::numeric_limits::epsilon()) > static_cast(0)); - - T const tanHalfFovy = tan(fovy / static_cast(2)); - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = static_cast(1) / (aspect * tanHalfFovy); - Result[1][1] = static_cast(1) / (tanHalfFovy); - Result[2][2] = (zFar + zNear) / (zFar - zNear); - Result[2][3] = static_cast(1); - Result[3][2] = - (static_cast(2) * zFar * zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveZO(T fovy, T aspect, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return perspectiveLH_ZO(fovy, aspect, zNear, zFar); -# else - return perspectiveRH_ZO(fovy, aspect, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveNO(T fovy, T aspect, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return perspectiveLH_NO(fovy, aspect, zNear, zFar); -# else - return perspectiveRH_NO(fovy, aspect, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveLH(T fovy, T aspect, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return perspectiveLH_ZO(fovy, aspect, zNear, zFar); -# else - return perspectiveLH_NO(fovy, aspect, zNear, zFar); -# endif - - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveRH(T fovy, T aspect, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return perspectiveRH_ZO(fovy, aspect, zNear, zFar); -# else - return perspectiveRH_NO(fovy, aspect, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspective(T fovy, T aspect, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO - return perspectiveLH_ZO(fovy, aspect, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO - return perspectiveLH_NO(fovy, aspect, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO - return perspectiveRH_ZO(fovy, aspect, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO - return perspectiveRH_NO(fovy, aspect, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovRH_ZO(T fov, T width, T height, T zNear, T zFar) - { - assert(width > static_cast(0)); - assert(height > static_cast(0)); - assert(fov > static_cast(0)); - - T const rad = fov; - T const h = glm::cos(static_cast(0.5) * rad) / glm::sin(static_cast(0.5) * rad); - T const w = h * height / width; ///todo max(width , Height) / min(width , Height)? - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = w; - Result[1][1] = h; - Result[2][2] = zFar / (zNear - zFar); - Result[2][3] = - static_cast(1); - Result[3][2] = -(zFar * zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovRH_NO(T fov, T width, T height, T zNear, T zFar) - { - assert(width > static_cast(0)); - assert(height > static_cast(0)); - assert(fov > static_cast(0)); - - T const rad = fov; - T const h = glm::cos(static_cast(0.5) * rad) / glm::sin(static_cast(0.5) * rad); - T const w = h * height / width; ///todo max(width , Height) / min(width , Height)? - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = w; - Result[1][1] = h; - Result[2][2] = - (zFar + zNear) / (zFar - zNear); - Result[2][3] = - static_cast(1); - Result[3][2] = - (static_cast(2) * zFar * zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovLH_ZO(T fov, T width, T height, T zNear, T zFar) - { - assert(width > static_cast(0)); - assert(height > static_cast(0)); - assert(fov > static_cast(0)); - - T const rad = fov; - T const h = glm::cos(static_cast(0.5) * rad) / glm::sin(static_cast(0.5) * rad); - T const w = h * height / width; ///todo max(width , Height) / min(width , Height)? - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = w; - Result[1][1] = h; - Result[2][2] = zFar / (zFar - zNear); - Result[2][3] = static_cast(1); - Result[3][2] = -(zFar * zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovLH_NO(T fov, T width, T height, T zNear, T zFar) - { - assert(width > static_cast(0)); - assert(height > static_cast(0)); - assert(fov > static_cast(0)); - - T const rad = fov; - T const h = glm::cos(static_cast(0.5) * rad) / glm::sin(static_cast(0.5) * rad); - T const w = h * height / width; ///todo max(width , Height) / min(width , Height)? - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = w; - Result[1][1] = h; - Result[2][2] = (zFar + zNear) / (zFar - zNear); - Result[2][3] = static_cast(1); - Result[3][2] = - (static_cast(2) * zFar * zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovZO(T fov, T width, T height, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return perspectiveFovLH_ZO(fov, width, height, zNear, zFar); -# else - return perspectiveFovRH_ZO(fov, width, height, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovNO(T fov, T width, T height, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return perspectiveFovLH_NO(fov, width, height, zNear, zFar); -# else - return perspectiveFovRH_NO(fov, width, height, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovLH(T fov, T width, T height, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return perspectiveFovLH_ZO(fov, width, height, zNear, zFar); -# else - return perspectiveFovLH_NO(fov, width, height, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovRH(T fov, T width, T height, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return perspectiveFovRH_ZO(fov, width, height, zNear, zFar); -# else - return perspectiveFovRH_NO(fov, width, height, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFov(T fov, T width, T height, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO - return perspectiveFovLH_ZO(fov, width, height, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO - return perspectiveFovLH_NO(fov, width, height, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO - return perspectiveFovRH_ZO(fov, width, height, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO - return perspectiveFovRH_NO(fov, width, height, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> infinitePerspectiveRH(T fovy, T aspect, T zNear) - { - T const range = tan(fovy / static_cast(2)) * zNear; - T const left = -range * aspect; - T const right = range * aspect; - T const bottom = -range; - T const top = range; - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = (static_cast(2) * zNear) / (right - left); - Result[1][1] = (static_cast(2) * zNear) / (top - bottom); - Result[2][2] = - static_cast(1); - Result[2][3] = - static_cast(1); - Result[3][2] = - static_cast(2) * zNear; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> infinitePerspectiveLH(T fovy, T aspect, T zNear) - { - T const range = tan(fovy / static_cast(2)) * zNear; - T const left = -range * aspect; - T const right = range * aspect; - T const bottom = -range; - T const top = range; - - mat<4, 4, T, defaultp> Result(T(0)); - Result[0][0] = (static_cast(2) * zNear) / (right - left); - Result[1][1] = (static_cast(2) * zNear) / (top - bottom); - Result[2][2] = static_cast(1); - Result[2][3] = static_cast(1); - Result[3][2] = - static_cast(2) * zNear; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> infinitePerspective(T fovy, T aspect, T zNear) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return infinitePerspectiveLH(fovy, aspect, zNear); -# else - return infinitePerspectiveRH(fovy, aspect, zNear); -# endif - } - - // Infinite projection matrix: http://www.terathon.com/gdc07_lengyel.pdf - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> tweakedInfinitePerspective(T fovy, T aspect, T zNear, T ep) - { - T const range = tan(fovy / static_cast(2)) * zNear; - T const left = -range * aspect; - T const right = range * aspect; - T const bottom = -range; - T const top = range; - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = (static_cast(2) * zNear) / (right - left); - Result[1][1] = (static_cast(2) * zNear) / (top - bottom); - Result[2][2] = ep - static_cast(1); - Result[2][3] = static_cast(-1); - Result[3][2] = (ep - static_cast(2)) * zNear; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> tweakedInfinitePerspective(T fovy, T aspect, T zNear) - { - return tweakedInfinitePerspective(fovy, aspect, zNear, epsilon()); - } -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_common.hpp b/src/vendor/glm/ext/matrix_common.hpp deleted file mode 100755 index 05c3799..0000000 --- a/src/vendor/glm/ext/matrix_common.hpp +++ /dev/null @@ -1,36 +0,0 @@ -/// @ref ext_matrix_common -/// @file glm/ext/matrix_common.hpp -/// -/// @defgroup ext_matrix_common GLM_EXT_matrix_common -/// @ingroup ext -/// -/// Defines functions for common matrix operations. -/// -/// Include to use the features of this extension. -/// -/// @see ext_matrix_common - -#pragma once - -#include "../detail/qualifier.hpp" -#include "../detail/_fixes.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_transform extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_common - /// @{ - - template - GLM_FUNC_DECL mat mix(mat const& x, mat const& y, mat const& a); - - template - GLM_FUNC_DECL mat mix(mat const& x, mat const& y, U a); - - /// @} -}//namespace glm - -#include "matrix_common.inl" diff --git a/src/vendor/glm/ext/matrix_common.inl b/src/vendor/glm/ext/matrix_common.inl deleted file mode 100755 index 9d50848..0000000 --- a/src/vendor/glm/ext/matrix_common.inl +++ /dev/null @@ -1,16 +0,0 @@ -#include "../matrix.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat mix(mat const& x, mat const& y, U a) - { - return mat(x) * (static_cast(1) - a) + mat(y) * a; - } - - template - GLM_FUNC_QUALIFIER mat mix(mat const& x, mat const& y, mat const& a) - { - return matrixCompMult(mat(x), static_cast(1) - a) + matrixCompMult(mat(y), a); - } -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_double2x2.hpp b/src/vendor/glm/ext/matrix_double2x2.hpp deleted file mode 100755 index 94dca54..0000000 --- a/src/vendor/glm/ext/matrix_double2x2.hpp +++ /dev/null @@ -1,23 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double2x2.hpp - -#pragma once -#include "../detail/type_mat2x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 2 columns of 2 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<2, 2, double, defaultp> dmat2x2; - - /// 2 columns of 2 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<2, 2, double, defaultp> dmat2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_double2x2_precision.hpp b/src/vendor/glm/ext/matrix_double2x2_precision.hpp deleted file mode 100755 index 9e2c174..0000000 --- a/src/vendor/glm/ext/matrix_double2x2_precision.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double2x2_precision.hpp - -#pragma once -#include "../detail/type_mat2x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, double, lowp> lowp_dmat2; - - /// 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, double, mediump> mediump_dmat2; - - /// 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, double, highp> highp_dmat2; - - /// 2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, double, lowp> lowp_dmat2x2; - - /// 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, double, mediump> mediump_dmat2x2; - - /// 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, double, highp> highp_dmat2x2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_double2x3.hpp b/src/vendor/glm/ext/matrix_double2x3.hpp deleted file mode 100755 index bfef87a..0000000 --- a/src/vendor/glm/ext/matrix_double2x3.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double2x3.hpp - -#pragma once -#include "../detail/type_mat2x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 2 columns of 3 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<2, 3, double, defaultp> dmat2x3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_double2x3_precision.hpp b/src/vendor/glm/ext/matrix_double2x3_precision.hpp deleted file mode 100755 index 098fb60..0000000 --- a/src/vendor/glm/ext/matrix_double2x3_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double2x3_precision.hpp - -#pragma once -#include "../detail/type_mat2x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 2 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 3, double, lowp> lowp_dmat2x3; - - /// 2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 3, double, mediump> mediump_dmat2x3; - - /// 2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 3, double, highp> highp_dmat2x3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_double2x4.hpp b/src/vendor/glm/ext/matrix_double2x4.hpp deleted file mode 100755 index 499284b..0000000 --- a/src/vendor/glm/ext/matrix_double2x4.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double2x4.hpp - -#pragma once -#include "../detail/type_mat2x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 2 columns of 4 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<2, 4, double, defaultp> dmat2x4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_double2x4_precision.hpp b/src/vendor/glm/ext/matrix_double2x4_precision.hpp deleted file mode 100755 index 9b61ebc..0000000 --- a/src/vendor/glm/ext/matrix_double2x4_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double2x4_precision.hpp - -#pragma once -#include "../detail/type_mat2x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 2 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 4, double, lowp> lowp_dmat2x4; - - /// 2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 4, double, mediump> mediump_dmat2x4; - - /// 2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 4, double, highp> highp_dmat2x4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_double3x2.hpp b/src/vendor/glm/ext/matrix_double3x2.hpp deleted file mode 100755 index dd23f36..0000000 --- a/src/vendor/glm/ext/matrix_double3x2.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double3x2.hpp - -#pragma once -#include "../detail/type_mat3x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 3 columns of 2 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<3, 2, double, defaultp> dmat3x2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_double3x2_precision.hpp b/src/vendor/glm/ext/matrix_double3x2_precision.hpp deleted file mode 100755 index 068d9e9..0000000 --- a/src/vendor/glm/ext/matrix_double3x2_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double3x2_precision.hpp - -#pragma once -#include "../detail/type_mat3x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 3 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 2, double, lowp> lowp_dmat3x2; - - /// 3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 2, double, mediump> mediump_dmat3x2; - - /// 3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 2, double, highp> highp_dmat3x2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_double3x3.hpp b/src/vendor/glm/ext/matrix_double3x3.hpp deleted file mode 100755 index 53572b7..0000000 --- a/src/vendor/glm/ext/matrix_double3x3.hpp +++ /dev/null @@ -1,23 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double3x3.hpp - -#pragma once -#include "../detail/type_mat3x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 3 columns of 3 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<3, 3, double, defaultp> dmat3x3; - - /// 3 columns of 3 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<3, 3, double, defaultp> dmat3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_double3x3_precision.hpp b/src/vendor/glm/ext/matrix_double3x3_precision.hpp deleted file mode 100755 index 8691e78..0000000 --- a/src/vendor/glm/ext/matrix_double3x3_precision.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double3x3_precision.hpp - -#pragma once -#include "../detail/type_mat3x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, double, lowp> lowp_dmat3; - - /// 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, double, mediump> mediump_dmat3; - - /// 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, double, highp> highp_dmat3; - - /// 3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, double, lowp> lowp_dmat3x3; - - /// 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, double, mediump> mediump_dmat3x3; - - /// 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, double, highp> highp_dmat3x3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_double3x4.hpp b/src/vendor/glm/ext/matrix_double3x4.hpp deleted file mode 100755 index c572d63..0000000 --- a/src/vendor/glm/ext/matrix_double3x4.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double3x4.hpp - -#pragma once -#include "../detail/type_mat3x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 3 columns of 4 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<3, 4, double, defaultp> dmat3x4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_double3x4_precision.hpp b/src/vendor/glm/ext/matrix_double3x4_precision.hpp deleted file mode 100755 index f040217..0000000 --- a/src/vendor/glm/ext/matrix_double3x4_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double3x4_precision.hpp - -#pragma once -#include "../detail/type_mat3x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 3 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 4, double, lowp> lowp_dmat3x4; - - /// 3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 4, double, mediump> mediump_dmat3x4; - - /// 3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 4, double, highp> highp_dmat3x4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_double4x2.hpp b/src/vendor/glm/ext/matrix_double4x2.hpp deleted file mode 100755 index 9b229f4..0000000 --- a/src/vendor/glm/ext/matrix_double4x2.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double4x2.hpp - -#pragma once -#include "../detail/type_mat4x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 4 columns of 2 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<4, 2, double, defaultp> dmat4x2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_double4x2_precision.hpp b/src/vendor/glm/ext/matrix_double4x2_precision.hpp deleted file mode 100755 index 6ad18ba..0000000 --- a/src/vendor/glm/ext/matrix_double4x2_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double4x2_precision.hpp - -#pragma once -#include "../detail/type_mat4x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 4 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 2, double, lowp> lowp_dmat4x2; - - /// 4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 2, double, mediump> mediump_dmat4x2; - - /// 4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 2, double, highp> highp_dmat4x2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_double4x3.hpp b/src/vendor/glm/ext/matrix_double4x3.hpp deleted file mode 100755 index dca4cf9..0000000 --- a/src/vendor/glm/ext/matrix_double4x3.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double4x3.hpp - -#pragma once -#include "../detail/type_mat4x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 4 columns of 3 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<4, 3, double, defaultp> dmat4x3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_double4x3_precision.hpp b/src/vendor/glm/ext/matrix_double4x3_precision.hpp deleted file mode 100755 index f7371de..0000000 --- a/src/vendor/glm/ext/matrix_double4x3_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double4x3_precision.hpp - -#pragma once -#include "../detail/type_mat4x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 4 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 3, double, lowp> lowp_dmat4x3; - - /// 4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 3, double, mediump> mediump_dmat4x3; - - /// 4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 3, double, highp> highp_dmat4x3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_double4x4.hpp b/src/vendor/glm/ext/matrix_double4x4.hpp deleted file mode 100755 index 81e1bf6..0000000 --- a/src/vendor/glm/ext/matrix_double4x4.hpp +++ /dev/null @@ -1,23 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double4x4.hpp - -#pragma once -#include "../detail/type_mat4x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 4 columns of 4 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<4, 4, double, defaultp> dmat4x4; - - /// 4 columns of 4 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<4, 4, double, defaultp> dmat4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_double4x4_precision.hpp b/src/vendor/glm/ext/matrix_double4x4_precision.hpp deleted file mode 100755 index 4c36a84..0000000 --- a/src/vendor/glm/ext/matrix_double4x4_precision.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_double4x4_precision.hpp - -#pragma once -#include "../detail/type_mat4x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, double, lowp> lowp_dmat4; - - /// 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, double, mediump> mediump_dmat4; - - /// 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, double, highp> highp_dmat4; - - /// 4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, double, lowp> lowp_dmat4x4; - - /// 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, double, mediump> mediump_dmat4x4; - - /// 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, double, highp> highp_dmat4x4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_float2x2.hpp b/src/vendor/glm/ext/matrix_float2x2.hpp deleted file mode 100755 index 53df921..0000000 --- a/src/vendor/glm/ext/matrix_float2x2.hpp +++ /dev/null @@ -1,23 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float2x2.hpp - -#pragma once -#include "../detail/type_mat2x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 2 columns of 2 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<2, 2, float, defaultp> mat2x2; - - /// 2 columns of 2 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<2, 2, float, defaultp> mat2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_float2x2_precision.hpp b/src/vendor/glm/ext/matrix_float2x2_precision.hpp deleted file mode 100755 index 898b6db..0000000 --- a/src/vendor/glm/ext/matrix_float2x2_precision.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float2x2_precision.hpp - -#pragma once -#include "../detail/type_mat2x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, float, lowp> lowp_mat2; - - /// 2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, float, mediump> mediump_mat2; - - /// 2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, float, highp> highp_mat2; - - /// 2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, float, lowp> lowp_mat2x2; - - /// 2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, float, mediump> mediump_mat2x2; - - /// 2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, float, highp> highp_mat2x2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_float2x3.hpp b/src/vendor/glm/ext/matrix_float2x3.hpp deleted file mode 100755 index 6f68822..0000000 --- a/src/vendor/glm/ext/matrix_float2x3.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float2x3.hpp - -#pragma once -#include "../detail/type_mat2x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 2 columns of 3 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<2, 3, float, defaultp> mat2x3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_float2x3_precision.hpp b/src/vendor/glm/ext/matrix_float2x3_precision.hpp deleted file mode 100755 index 50c1032..0000000 --- a/src/vendor/glm/ext/matrix_float2x3_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float2x3_precision.hpp - -#pragma once -#include "../detail/type_mat2x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 2 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 3, float, lowp> lowp_mat2x3; - - /// 2 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 3, float, mediump> mediump_mat2x3; - - /// 2 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 3, float, highp> highp_mat2x3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_float2x4.hpp b/src/vendor/glm/ext/matrix_float2x4.hpp deleted file mode 100755 index 30f30de..0000000 --- a/src/vendor/glm/ext/matrix_float2x4.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float2x4.hpp - -#pragma once -#include "../detail/type_mat2x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 2 columns of 4 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<2, 4, float, defaultp> mat2x4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_float2x4_precision.hpp b/src/vendor/glm/ext/matrix_float2x4_precision.hpp deleted file mode 100755 index 079d638..0000000 --- a/src/vendor/glm/ext/matrix_float2x4_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float2x4_precision.hpp - -#pragma once -#include "../detail/type_mat2x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 2 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 4, float, lowp> lowp_mat2x4; - - /// 2 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 4, float, mediump> mediump_mat2x4; - - /// 2 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 4, float, highp> highp_mat2x4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_float3x2.hpp b/src/vendor/glm/ext/matrix_float3x2.hpp deleted file mode 100755 index d39dd2f..0000000 --- a/src/vendor/glm/ext/matrix_float3x2.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float3x2.hpp - -#pragma once -#include "../detail/type_mat3x2.hpp" - -namespace glm -{ - /// @addtogroup core - /// @{ - - /// 3 columns of 2 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<3, 2, float, defaultp> mat3x2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_float3x2_precision.hpp b/src/vendor/glm/ext/matrix_float3x2_precision.hpp deleted file mode 100755 index 8572c2a..0000000 --- a/src/vendor/glm/ext/matrix_float3x2_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float3x2_precision.hpp - -#pragma once -#include "../detail/type_mat3x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 3 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 2, float, lowp> lowp_mat3x2; - - /// 3 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 2, float, mediump> mediump_mat3x2; - - /// 3 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 2, float, highp> highp_mat3x2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_float3x3.hpp b/src/vendor/glm/ext/matrix_float3x3.hpp deleted file mode 100755 index 177d809..0000000 --- a/src/vendor/glm/ext/matrix_float3x3.hpp +++ /dev/null @@ -1,23 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float3x3.hpp - -#pragma once -#include "../detail/type_mat3x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 3 columns of 3 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<3, 3, float, defaultp> mat3x3; - - /// 3 columns of 3 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<3, 3, float, defaultp> mat3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_float3x3_precision.hpp b/src/vendor/glm/ext/matrix_float3x3_precision.hpp deleted file mode 100755 index 8a900c1..0000000 --- a/src/vendor/glm/ext/matrix_float3x3_precision.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float3x3_precision.hpp - -#pragma once -#include "../detail/type_mat3x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, float, lowp> lowp_mat3; - - /// 3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, float, mediump> mediump_mat3; - - /// 3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, float, highp> highp_mat3; - - /// 3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, float, lowp> lowp_mat3x3; - - /// 3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, float, mediump> mediump_mat3x3; - - /// 3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, float, highp> highp_mat3x3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_float3x4.hpp b/src/vendor/glm/ext/matrix_float3x4.hpp deleted file mode 100755 index 64b8459..0000000 --- a/src/vendor/glm/ext/matrix_float3x4.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float3x4.hpp - -#pragma once -#include "../detail/type_mat3x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 3 columns of 4 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<3, 4, float, defaultp> mat3x4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_float3x4_precision.hpp b/src/vendor/glm/ext/matrix_float3x4_precision.hpp deleted file mode 100755 index bc36bf1..0000000 --- a/src/vendor/glm/ext/matrix_float3x4_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float3x4_precision.hpp - -#pragma once -#include "../detail/type_mat3x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 3 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 4, float, lowp> lowp_mat3x4; - - /// 3 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 4, float, mediump> mediump_mat3x4; - - /// 3 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 4, float, highp> highp_mat3x4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_float4x2.hpp b/src/vendor/glm/ext/matrix_float4x2.hpp deleted file mode 100755 index 1ed5227..0000000 --- a/src/vendor/glm/ext/matrix_float4x2.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float4x2.hpp - -#pragma once -#include "../detail/type_mat4x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 4 columns of 2 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<4, 2, float, defaultp> mat4x2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_float4x2_precision.hpp b/src/vendor/glm/ext/matrix_float4x2_precision.hpp deleted file mode 100755 index 88fd069..0000000 --- a/src/vendor/glm/ext/matrix_float4x2_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float2x2_precision.hpp - -#pragma once -#include "../detail/type_mat2x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 4 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 2, float, lowp> lowp_mat4x2; - - /// 4 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 2, float, mediump> mediump_mat4x2; - - /// 4 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 2, float, highp> highp_mat4x2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_float4x3.hpp b/src/vendor/glm/ext/matrix_float4x3.hpp deleted file mode 100755 index 5dbe765..0000000 --- a/src/vendor/glm/ext/matrix_float4x3.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float4x3.hpp - -#pragma once -#include "../detail/type_mat4x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 4 columns of 3 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<4, 3, float, defaultp> mat4x3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_float4x3_precision.hpp b/src/vendor/glm/ext/matrix_float4x3_precision.hpp deleted file mode 100755 index 846ed4f..0000000 --- a/src/vendor/glm/ext/matrix_float4x3_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float4x3_precision.hpp - -#pragma once -#include "../detail/type_mat4x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 4 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 3, float, lowp> lowp_mat4x3; - - /// 4 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 3, float, mediump> mediump_mat4x3; - - /// 4 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 3, float, highp> highp_mat4x3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_float4x4.hpp b/src/vendor/glm/ext/matrix_float4x4.hpp deleted file mode 100755 index 5ba111d..0000000 --- a/src/vendor/glm/ext/matrix_float4x4.hpp +++ /dev/null @@ -1,23 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float4x4.hpp - -#pragma once -#include "../detail/type_mat4x4.hpp" - -namespace glm -{ - /// @ingroup core_matrix - /// @{ - - /// 4 columns of 4 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<4, 4, float, defaultp> mat4x4; - - /// 4 columns of 4 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<4, 4, float, defaultp> mat4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_float4x4_precision.hpp b/src/vendor/glm/ext/matrix_float4x4_precision.hpp deleted file mode 100755 index 597149b..0000000 --- a/src/vendor/glm/ext/matrix_float4x4_precision.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref core -/// @file glm/ext/matrix_float4x4_precision.hpp - -#pragma once -#include "../detail/type_mat4x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, float, lowp> lowp_mat4; - - /// 4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, float, mediump> mediump_mat4; - - /// 4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, float, highp> highp_mat4; - - /// 4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, float, lowp> lowp_mat4x4; - - /// 4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, float, mediump> mediump_mat4x4; - - /// 4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, float, highp> highp_mat4x4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_int2x2.hpp b/src/vendor/glm/ext/matrix_int2x2.hpp deleted file mode 100755 index c6aa068..0000000 --- a/src/vendor/glm/ext/matrix_int2x2.hpp +++ /dev/null @@ -1,38 +0,0 @@ -/// @ref ext_matrix_int2x2 -/// @file glm/ext/matrix_int2x2.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int2x2 GLM_EXT_matrix_int2x2 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x2.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int2x2 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int2x2 - /// @{ - - /// Signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2 - typedef mat<2, 2, int, defaultp> imat2x2; - - /// Signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2 - typedef mat<2, 2, int, defaultp> imat2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_int2x2_sized.hpp b/src/vendor/glm/ext/matrix_int2x2_sized.hpp deleted file mode 100755 index 70c0c21..0000000 --- a/src/vendor/glm/ext/matrix_int2x2_sized.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/// @ref ext_matrix_int2x2_sized -/// @file glm/ext/matrix_int2x2_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int2x2_sized GLM_EXT_matrix_int2x2_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x2.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int2x2_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int2x2_sized - /// @{ - - /// 8 bit signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2_sized - typedef mat<2, 2, int8, defaultp> i8mat2x2; - - /// 16 bit signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2_sized - typedef mat<2, 2, int16, defaultp> i16mat2x2; - - /// 32 bit signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2_sized - typedef mat<2, 2, int32, defaultp> i32mat2x2; - - /// 64 bit signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2_sized - typedef mat<2, 2, int64, defaultp> i64mat2x2; - - - /// 8 bit signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2_sized - typedef mat<2, 2, int8, defaultp> i8mat2; - - /// 16 bit signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2_sized - typedef mat<2, 2, int16, defaultp> i16mat2; - - /// 32 bit signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2_sized - typedef mat<2, 2, int32, defaultp> i32mat2; - - /// 64 bit signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2_sized - typedef mat<2, 2, int64, defaultp> i64mat2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_int2x3.hpp b/src/vendor/glm/ext/matrix_int2x3.hpp deleted file mode 100755 index aee415c..0000000 --- a/src/vendor/glm/ext/matrix_int2x3.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_int2x3 -/// @file glm/ext/matrix_int2x3.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int2x3 GLM_EXT_matrix_int2x3 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x3.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int2x3 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int2x3 - /// @{ - - /// Signed integer 2x3 matrix. - /// - /// @see ext_matrix_int2x3 - typedef mat<2, 3, int, defaultp> imat2x3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_int2x3_sized.hpp b/src/vendor/glm/ext/matrix_int2x3_sized.hpp deleted file mode 100755 index b5526fe..0000000 --- a/src/vendor/glm/ext/matrix_int2x3_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_int2x3_sized -/// @file glm/ext/matrix_int2x3_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int2x3_sized GLM_EXT_matrix_int2x3_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x3.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int2x3_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int2x3_sized - /// @{ - - /// 8 bit signed integer 2x3 matrix. - /// - /// @see ext_matrix_int2x3_sized - typedef mat<2, 3, int8, defaultp> i8mat2x3; - - /// 16 bit signed integer 2x3 matrix. - /// - /// @see ext_matrix_int2x3_sized - typedef mat<2, 3, int16, defaultp> i16mat2x3; - - /// 32 bit signed integer 2x3 matrix. - /// - /// @see ext_matrix_int2x3_sized - typedef mat<2, 3, int32, defaultp> i32mat2x3; - - /// 64 bit signed integer 2x3 matrix. - /// - /// @see ext_matrix_int2x3_sized - typedef mat<2, 3, int64, defaultp> i64mat2x3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_int2x4.hpp b/src/vendor/glm/ext/matrix_int2x4.hpp deleted file mode 100755 index 4f36331..0000000 --- a/src/vendor/glm/ext/matrix_int2x4.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_int2x4 -/// @file glm/ext/matrix_int2x4.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int2x4 GLM_EXT_matrix_int2x4 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int2x4 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int2x4 - /// @{ - - /// Signed integer 2x4 matrix. - /// - /// @see ext_matrix_int2x4 - typedef mat<2, 4, int, defaultp> imat2x4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_int2x4_sized.hpp b/src/vendor/glm/ext/matrix_int2x4_sized.hpp deleted file mode 100755 index a66a5e7..0000000 --- a/src/vendor/glm/ext/matrix_int2x4_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_int2x4_sized -/// @file glm/ext/matrix_int2x4_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int2x4_sized GLM_EXT_matrix_int2x4_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x4.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int2x4_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int2x4_sized - /// @{ - - /// 8 bit signed integer 2x4 matrix. - /// - /// @see ext_matrix_int2x4_sized - typedef mat<2, 4, int8, defaultp> i8mat2x4; - - /// 16 bit signed integer 2x4 matrix. - /// - /// @see ext_matrix_int2x4_sized - typedef mat<2, 4, int16, defaultp> i16mat2x4; - - /// 32 bit signed integer 2x4 matrix. - /// - /// @see ext_matrix_int2x4_sized - typedef mat<2, 4, int32, defaultp> i32mat2x4; - - /// 64 bit signed integer 2x4 matrix. - /// - /// @see ext_matrix_int2x4_sized - typedef mat<2, 4, int64, defaultp> i64mat2x4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_int3x2.hpp b/src/vendor/glm/ext/matrix_int3x2.hpp deleted file mode 100755 index 3bd563b..0000000 --- a/src/vendor/glm/ext/matrix_int3x2.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_int3x2 -/// @file glm/ext/matrix_int3x2.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int3x2 GLM_EXT_matrix_int3x2 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x2.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int3x2 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int3x2 - /// @{ - - /// Signed integer 3x2 matrix. - /// - /// @see ext_matrix_int3x2 - typedef mat<3, 2, int, defaultp> imat3x2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_int3x2_sized.hpp b/src/vendor/glm/ext/matrix_int3x2_sized.hpp deleted file mode 100755 index 7e34c52..0000000 --- a/src/vendor/glm/ext/matrix_int3x2_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_int3x2_sized -/// @file glm/ext/matrix_int3x2_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int3x2_sized GLM_EXT_matrix_int3x2_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x2.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int3x2_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int3x2_sized - /// @{ - - /// 8 bit signed integer 3x2 matrix. - /// - /// @see ext_matrix_int3x2_sized - typedef mat<3, 2, int8, defaultp> i8mat3x2; - - /// 16 bit signed integer 3x2 matrix. - /// - /// @see ext_matrix_int3x2_sized - typedef mat<3, 2, int16, defaultp> i16mat3x2; - - /// 32 bit signed integer 3x2 matrix. - /// - /// @see ext_matrix_int3x2_sized - typedef mat<3, 2, int32, defaultp> i32mat3x2; - - /// 64 bit signed integer 3x2 matrix. - /// - /// @see ext_matrix_int3x2_sized - typedef mat<3, 2, int64, defaultp> i64mat3x2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_int3x3.hpp b/src/vendor/glm/ext/matrix_int3x3.hpp deleted file mode 100755 index 287488d..0000000 --- a/src/vendor/glm/ext/matrix_int3x3.hpp +++ /dev/null @@ -1,38 +0,0 @@ -/// @ref ext_matrix_int3x3 -/// @file glm/ext/matrix_int3x3.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int3x3 GLM_EXT_matrix_int3x3 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x3.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int3x3 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int3x3 - /// @{ - - /// Signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3 - typedef mat<3, 3, int, defaultp> imat3x3; - - /// Signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3 - typedef mat<3, 3, int, defaultp> imat3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_int3x3_sized.hpp b/src/vendor/glm/ext/matrix_int3x3_sized.hpp deleted file mode 100755 index 577e305..0000000 --- a/src/vendor/glm/ext/matrix_int3x3_sized.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/// @ref ext_matrix_int3x3_sized -/// @file glm/ext/matrix_int3x3_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int3x3_sized GLM_EXT_matrix_int3x3_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x3.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int3x3_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int3x3_sized - /// @{ - - /// 8 bit signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3_sized - typedef mat<3, 3, int8, defaultp> i8mat3x3; - - /// 16 bit signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3_sized - typedef mat<3, 3, int16, defaultp> i16mat3x3; - - /// 32 bit signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3_sized - typedef mat<3, 3, int32, defaultp> i32mat3x3; - - /// 64 bit signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3_sized - typedef mat<3, 3, int64, defaultp> i64mat3x3; - - - /// 8 bit signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3_sized - typedef mat<3, 3, int8, defaultp> i8mat3; - - /// 16 bit signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3_sized - typedef mat<3, 3, int16, defaultp> i16mat3; - - /// 32 bit signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3_sized - typedef mat<3, 3, int32, defaultp> i32mat3; - - /// 64 bit signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3_sized - typedef mat<3, 3, int64, defaultp> i64mat3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_int3x4.hpp b/src/vendor/glm/ext/matrix_int3x4.hpp deleted file mode 100755 index 08e534d..0000000 --- a/src/vendor/glm/ext/matrix_int3x4.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_int3x4 -/// @file glm/ext/matrix_int3x4.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int3x4 GLM_EXT_matrix_int3x4 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int3x4 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int3x4 - /// @{ - - /// Signed integer 3x4 matrix. - /// - /// @see ext_matrix_int3x4 - typedef mat<3, 4, int, defaultp> imat3x4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_int3x4_sized.hpp b/src/vendor/glm/ext/matrix_int3x4_sized.hpp deleted file mode 100755 index 692c48c..0000000 --- a/src/vendor/glm/ext/matrix_int3x4_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_int3x4_sized -/// @file glm/ext/matrix_int3x2_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int3x4_sized GLM_EXT_matrix_int3x4_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x4.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int3x4_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int3x4_sized - /// @{ - - /// 8 bit signed integer 3x4 matrix. - /// - /// @see ext_matrix_int3x4_sized - typedef mat<3, 4, int8, defaultp> i8mat3x4; - - /// 16 bit signed integer 3x4 matrix. - /// - /// @see ext_matrix_int3x4_sized - typedef mat<3, 4, int16, defaultp> i16mat3x4; - - /// 32 bit signed integer 3x4 matrix. - /// - /// @see ext_matrix_int3x4_sized - typedef mat<3, 4, int32, defaultp> i32mat3x4; - - /// 64 bit signed integer 3x4 matrix. - /// - /// @see ext_matrix_int3x4_sized - typedef mat<3, 4, int64, defaultp> i64mat3x4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_int4x2.hpp b/src/vendor/glm/ext/matrix_int4x2.hpp deleted file mode 100755 index f756ef2..0000000 --- a/src/vendor/glm/ext/matrix_int4x2.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_int4x2 -/// @file glm/ext/matrix_int4x2.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int4x2 GLM_EXT_matrix_int4x2 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x2.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int4x2 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int4x2 - /// @{ - - /// Signed integer 4x2 matrix. - /// - /// @see ext_matrix_int4x2 - typedef mat<4, 2, int, defaultp> imat4x2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_int4x2_sized.hpp b/src/vendor/glm/ext/matrix_int4x2_sized.hpp deleted file mode 100755 index 63a99d6..0000000 --- a/src/vendor/glm/ext/matrix_int4x2_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_int4x2_sized -/// @file glm/ext/matrix_int4x2_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int4x2_sized GLM_EXT_matrix_int4x2_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x2.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int4x2_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int4x2_sized - /// @{ - - /// 8 bit signed integer 4x2 matrix. - /// - /// @see ext_matrix_int4x2_sized - typedef mat<4, 2, int8, defaultp> i8mat4x2; - - /// 16 bit signed integer 4x2 matrix. - /// - /// @see ext_matrix_int4x2_sized - typedef mat<4, 2, int16, defaultp> i16mat4x2; - - /// 32 bit signed integer 4x2 matrix. - /// - /// @see ext_matrix_int4x2_sized - typedef mat<4, 2, int32, defaultp> i32mat4x2; - - /// 64 bit signed integer 4x2 matrix. - /// - /// @see ext_matrix_int4x2_sized - typedef mat<4, 2, int64, defaultp> i64mat4x2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_int4x3.hpp b/src/vendor/glm/ext/matrix_int4x3.hpp deleted file mode 100755 index d5d97a7..0000000 --- a/src/vendor/glm/ext/matrix_int4x3.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_int4x3 -/// @file glm/ext/matrix_int4x3.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int4x3 GLM_EXT_matrix_int4x3 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x3.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int4x3 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int4x3 - /// @{ - - /// Signed integer 4x3 matrix. - /// - /// @see ext_matrix_int4x3 - typedef mat<4, 3, int, defaultp> imat4x3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_int4x3_sized.hpp b/src/vendor/glm/ext/matrix_int4x3_sized.hpp deleted file mode 100755 index 55078fa..0000000 --- a/src/vendor/glm/ext/matrix_int4x3_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_int4x3_sized -/// @file glm/ext/matrix_int4x3_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int4x3_sized GLM_EXT_matrix_int4x3_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x3.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int4x3_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int4x3_sized - /// @{ - - /// 8 bit signed integer 4x3 matrix. - /// - /// @see ext_matrix_int4x3_sized - typedef mat<4, 3, int8, defaultp> i8mat4x3; - - /// 16 bit signed integer 4x3 matrix. - /// - /// @see ext_matrix_int4x3_sized - typedef mat<4, 3, int16, defaultp> i16mat4x3; - - /// 32 bit signed integer 4x3 matrix. - /// - /// @see ext_matrix_int4x3_sized - typedef mat<4, 3, int32, defaultp> i32mat4x3; - - /// 64 bit signed integer 4x3 matrix. - /// - /// @see ext_matrix_int4x3_sized - typedef mat<4, 3, int64, defaultp> i64mat4x3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_int4x4.hpp b/src/vendor/glm/ext/matrix_int4x4.hpp deleted file mode 100755 index e17cff1..0000000 --- a/src/vendor/glm/ext/matrix_int4x4.hpp +++ /dev/null @@ -1,38 +0,0 @@ -/// @ref ext_matrix_int4x4 -/// @file glm/ext/matrix_int4x4.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int4x4 GLM_EXT_matrix_int4x4 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int4x4 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int4x4 - /// @{ - - /// Signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4 - typedef mat<4, 4, int, defaultp> imat4x4; - - /// Signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4 - typedef mat<4, 4, int, defaultp> imat4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_int4x4_sized.hpp b/src/vendor/glm/ext/matrix_int4x4_sized.hpp deleted file mode 100755 index 4a11203..0000000 --- a/src/vendor/glm/ext/matrix_int4x4_sized.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/// @ref ext_matrix_int4x4_sized -/// @file glm/ext/matrix_int4x4_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int4x4_sized GLM_EXT_matrix_int4x4_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x4.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int4x4_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int4x4_sized - /// @{ - - /// 8 bit signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4_sized - typedef mat<4, 4, int8, defaultp> i8mat4x4; - - /// 16 bit signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4_sized - typedef mat<4, 4, int16, defaultp> i16mat4x4; - - /// 32 bit signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4_sized - typedef mat<4, 4, int32, defaultp> i32mat4x4; - - /// 64 bit signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4_sized - typedef mat<4, 4, int64, defaultp> i64mat4x4; - - - /// 8 bit signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4_sized - typedef mat<4, 4, int8, defaultp> i8mat4; - - /// 16 bit signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4_sized - typedef mat<4, 4, int16, defaultp> i16mat4; - - /// 32 bit signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4_sized - typedef mat<4, 4, int32, defaultp> i32mat4; - - /// 64 bit signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4_sized - typedef mat<4, 4, int64, defaultp> i64mat4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_integer.hpp b/src/vendor/glm/ext/matrix_integer.hpp deleted file mode 100755 index 7d7dfc5..0000000 --- a/src/vendor/glm/ext/matrix_integer.hpp +++ /dev/null @@ -1,91 +0,0 @@ -/// @ref ext_matrix_integer -/// @file glm/ext/matrix_integer.hpp -/// -/// @defgroup ext_matrix_integer GLM_EXT_matrix_integer -/// @ingroup ext -/// -/// Defines functions that generate common transformation matrices. -/// -/// The matrices generated by this extension use standard OpenGL fixed-function -/// conventions. For example, the lookAt function generates a transform from world -/// space into the specific eye space that the projective matrix functions -/// (perspective, ortho, etc) are designed to expect. The OpenGL compatibility -/// specifications defines the particular layout of this eye space. -/// -/// Include to use the features of this extension. -/// -/// @see ext_matrix_projection -/// @see ext_matrix_clip_space - -#pragma once - -// Dependencies -#include "../gtc/constants.hpp" -#include "../geometric.hpp" -#include "../trigonometric.hpp" -#include "../matrix.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_integer extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_integer - /// @{ - - /// Multiply matrix x by matrix y component-wise, i.e., - /// result[i][j] is the scalar product of x[i][j] and y[i][j]. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number a column - /// @tparam R Integer between 1 and 4 included that qualify the number a row - /// @tparam T Floating-point or signed integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL matrixCompMult man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - template - GLM_FUNC_DECL mat matrixCompMult(mat const& x, mat const& y); - - /// Treats the first parameter c as a column vector - /// and the second parameter r as a row vector - /// and does a linear algebraic matrix multiply c * r. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number a column - /// @tparam R Integer between 1 and 4 included that qualify the number a row - /// @tparam T Floating-point or signed integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL outerProduct man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - template - GLM_FUNC_DECL typename detail::outerProduct_trait::type outerProduct(vec const& c, vec const& r); - - /// Returns the transposed matrix of x - /// - /// @tparam C Integer between 1 and 4 included that qualify the number a column - /// @tparam R Integer between 1 and 4 included that qualify the number a row - /// @tparam T Floating-point or signed integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL transpose man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - template - GLM_FUNC_DECL typename mat::transpose_type transpose(mat const& x); - - /// Return the determinant of a squared matrix. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number a column - /// @tparam R Integer between 1 and 4 included that qualify the number a row - /// @tparam T Floating-point or signed integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL determinant man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - template - GLM_FUNC_DECL T determinant(mat const& m); - - /// @} -}//namespace glm - -#include "matrix_integer.inl" diff --git a/src/vendor/glm/ext/matrix_integer.inl b/src/vendor/glm/ext/matrix_integer.inl deleted file mode 100755 index 8b377ce..0000000 --- a/src/vendor/glm/ext/matrix_integer.inl +++ /dev/null @@ -1,38 +0,0 @@ -namespace glm{ -namespace detail -{ - template - struct compute_matrixCompMult_type { - GLM_FUNC_QUALIFIER static mat call(mat const& x, mat const& y) - { - return detail::compute_matrixCompMult::value>::call(x, y); - } - }; - - template - struct compute_outerProduct_type { - GLM_FUNC_QUALIFIER static typename detail::outerProduct_trait::type call(vec const& c, vec const& r) - { - return detail::compute_outerProduct::call(c, r); - } - }; - - template - struct compute_transpose_type - { - GLM_FUNC_QUALIFIER static mat call(mat const& m) - { - return detail::compute_transpose::value>::call(m); - } - }; - - template - struct compute_determinant_type{ - - GLM_FUNC_QUALIFIER static T call(mat const& m) - { - return detail::compute_determinant::value>::call(m); - } - }; -}//namespace detail -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_projection.hpp b/src/vendor/glm/ext/matrix_projection.hpp deleted file mode 100755 index 51fd01b..0000000 --- a/src/vendor/glm/ext/matrix_projection.hpp +++ /dev/null @@ -1,149 +0,0 @@ -/// @ref ext_matrix_projection -/// @file glm/ext/matrix_projection.hpp -/// -/// @defgroup ext_matrix_projection GLM_EXT_matrix_projection -/// @ingroup ext -/// -/// Functions that generate common projection transformation matrices. -/// -/// The matrices generated by this extension use standard OpenGL fixed-function -/// conventions. For example, the lookAt function generates a transform from world -/// space into the specific eye space that the projective matrix functions -/// (perspective, ortho, etc) are designed to expect. The OpenGL compatibility -/// specifications defines the particular layout of this eye space. -/// -/// Include to use the features of this extension. -/// -/// @see ext_matrix_transform -/// @see ext_matrix_clip_space - -#pragma once - -// Dependencies -#include "../gtc/constants.hpp" -#include "../geometric.hpp" -#include "../trigonometric.hpp" -#include "../matrix.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_projection extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_projection - /// @{ - - /// Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @param obj Specify the object coordinates. - /// @param model Specifies the current modelview matrix - /// @param proj Specifies the current projection matrix - /// @param viewport Specifies the current viewport - /// @return Return the computed window coordinates. - /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. - /// @tparam U Currently supported: Floating-point types and integer types. - /// - /// @see gluProject man page - template - GLM_FUNC_DECL vec<3, T, Q> projectZO( - vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); - - /// Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param obj Specify the object coordinates. - /// @param model Specifies the current modelview matrix - /// @param proj Specifies the current projection matrix - /// @param viewport Specifies the current viewport - /// @return Return the computed window coordinates. - /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. - /// @tparam U Currently supported: Floating-point types and integer types. - /// - /// @see gluProject man page - template - GLM_FUNC_DECL vec<3, T, Q> projectNO( - vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); - - /// Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates using default near and far clip planes definition. - /// To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE. - /// - /// @param obj Specify the object coordinates. - /// @param model Specifies the current modelview matrix - /// @param proj Specifies the current projection matrix - /// @param viewport Specifies the current viewport - /// @return Return the computed window coordinates. - /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. - /// @tparam U Currently supported: Floating-point types and integer types. - /// - /// @see gluProject man page - template - GLM_FUNC_DECL vec<3, T, Q> project( - vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); - - /// Map the specified window coordinates (win.x, win.y, win.z) into object coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @param win Specify the window coordinates to be mapped. - /// @param model Specifies the modelview matrix - /// @param proj Specifies the projection matrix - /// @param viewport Specifies the viewport - /// @return Returns the computed object coordinates. - /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. - /// @tparam U Currently supported: Floating-point types and integer types. - /// - /// @see gluUnProject man page - template - GLM_FUNC_DECL vec<3, T, Q> unProjectZO( - vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); - - /// Map the specified window coordinates (win.x, win.y, win.z) into object coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param win Specify the window coordinates to be mapped. - /// @param model Specifies the modelview matrix - /// @param proj Specifies the projection matrix - /// @param viewport Specifies the viewport - /// @return Returns the computed object coordinates. - /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. - /// @tparam U Currently supported: Floating-point types and integer types. - /// - /// @see gluUnProject man page - template - GLM_FUNC_DECL vec<3, T, Q> unProjectNO( - vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); - - /// Map the specified window coordinates (win.x, win.y, win.z) into object coordinates using default near and far clip planes definition. - /// To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE. - /// - /// @param win Specify the window coordinates to be mapped. - /// @param model Specifies the modelview matrix - /// @param proj Specifies the projection matrix - /// @param viewport Specifies the viewport - /// @return Returns the computed object coordinates. - /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. - /// @tparam U Currently supported: Floating-point types and integer types. - /// - /// @see gluUnProject man page - template - GLM_FUNC_DECL vec<3, T, Q> unProject( - vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); - - /// Define a picking region - /// - /// @param center Specify the center of a picking region in window coordinates. - /// @param delta Specify the width and height, respectively, of the picking region in window coordinates. - /// @param viewport Rendering viewport - /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. - /// @tparam U Currently supported: Floating-point types and integer types. - /// - /// @see gluPickMatrix man page - template - GLM_FUNC_DECL mat<4, 4, T, Q> pickMatrix( - vec<2, T, Q> const& center, vec<2, T, Q> const& delta, vec<4, U, Q> const& viewport); - - /// @} -}//namespace glm - -#include "matrix_projection.inl" diff --git a/src/vendor/glm/ext/matrix_projection.inl b/src/vendor/glm/ext/matrix_projection.inl deleted file mode 100755 index 2f2c196..0000000 --- a/src/vendor/glm/ext/matrix_projection.inl +++ /dev/null @@ -1,106 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> projectZO(vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) - { - vec<4, T, Q> tmp = vec<4, T, Q>(obj, static_cast(1)); - tmp = model * tmp; - tmp = proj * tmp; - - tmp /= tmp.w; - tmp.x = tmp.x * static_cast(0.5) + static_cast(0.5); - tmp.y = tmp.y * static_cast(0.5) + static_cast(0.5); - - tmp[0] = tmp[0] * T(viewport[2]) + T(viewport[0]); - tmp[1] = tmp[1] * T(viewport[3]) + T(viewport[1]); - - return vec<3, T, Q>(tmp); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> projectNO(vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) - { - vec<4, T, Q> tmp = vec<4, T, Q>(obj, static_cast(1)); - tmp = model * tmp; - tmp = proj * tmp; - - tmp /= tmp.w; - tmp = tmp * static_cast(0.5) + static_cast(0.5); - tmp[0] = tmp[0] * T(viewport[2]) + T(viewport[0]); - tmp[1] = tmp[1] * T(viewport[3]) + T(viewport[1]); - - return vec<3, T, Q>(tmp); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> project(vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return projectZO(obj, model, proj, viewport); -# else - return projectNO(obj, model, proj, viewport); -# endif - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> unProjectZO(vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) - { - mat<4, 4, T, Q> Inverse = inverse(proj * model); - - vec<4, T, Q> tmp = vec<4, T, Q>(win, T(1)); - tmp.x = (tmp.x - T(viewport[0])) / T(viewport[2]); - tmp.y = (tmp.y - T(viewport[1])) / T(viewport[3]); - tmp.x = tmp.x * static_cast(2) - static_cast(1); - tmp.y = tmp.y * static_cast(2) - static_cast(1); - - vec<4, T, Q> obj = Inverse * tmp; - obj /= obj.w; - - return vec<3, T, Q>(obj); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> unProjectNO(vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) - { - mat<4, 4, T, Q> Inverse = inverse(proj * model); - - vec<4, T, Q> tmp = vec<4, T, Q>(win, T(1)); - tmp.x = (tmp.x - T(viewport[0])) / T(viewport[2]); - tmp.y = (tmp.y - T(viewport[1])) / T(viewport[3]); - tmp = tmp * static_cast(2) - static_cast(1); - - vec<4, T, Q> obj = Inverse * tmp; - obj /= obj.w; - - return vec<3, T, Q>(obj); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> unProject(vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return unProjectZO(win, model, proj, viewport); -# else - return unProjectNO(win, model, proj, viewport); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> pickMatrix(vec<2, T, Q> const& center, vec<2, T, Q> const& delta, vec<4, U, Q> const& viewport) - { - assert(delta.x > static_cast(0) && delta.y > static_cast(0)); - mat<4, 4, T, Q> Result(static_cast(1)); - - if(!(delta.x > static_cast(0) && delta.y > static_cast(0))) - return Result; // Error - - vec<3, T, Q> Temp( - (static_cast(viewport[2]) - static_cast(2) * (center.x - static_cast(viewport[0]))) / delta.x, - (static_cast(viewport[3]) - static_cast(2) * (center.y - static_cast(viewport[1]))) / delta.y, - static_cast(0)); - - // Translate and scale the picked region to the entire window - Result = translate(Result, Temp); - return scale(Result, vec<3, T, Q>(static_cast(viewport[2]) / delta.x, static_cast(viewport[3]) / delta.y, static_cast(1))); - } -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_relational.hpp b/src/vendor/glm/ext/matrix_relational.hpp deleted file mode 100755 index 20023ad..0000000 --- a/src/vendor/glm/ext/matrix_relational.hpp +++ /dev/null @@ -1,132 +0,0 @@ -/// @ref ext_matrix_relational -/// @file glm/ext/matrix_relational.hpp -/// -/// @defgroup ext_matrix_relational GLM_EXT_matrix_relational -/// @ingroup ext -/// -/// Exposes comparison functions for matrix types that take a user defined epsilon values. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_relational -/// @see ext_scalar_relational -/// @see ext_quaternion_relational - -#pragma once - -// Dependencies -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_relational extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_relational - /// @{ - - /// Perform a component-wise equal-to comparison of two matrices. - /// Return a boolean vector which components value is True if this expression is satisfied per column of the matrices. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(mat const& x, mat const& y); - - /// Perform a component-wise not-equal-to comparison of two matrices. - /// Return a boolean vector which components value is True if this expression is satisfied per column of the matrices. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y); - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is satisfied. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(mat const& x, mat const& y, T epsilon); - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is satisfied. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(mat const& x, mat const& y, vec const& epsilon); - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is not satisfied. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y, T epsilon); - - /// Returns the component-wise comparison of |x - y| >= epsilon. - /// True if this expression is not satisfied. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y, vec const& epsilon); - - /// Returns the component-wise comparison between two vectors in term of ULPs. - /// True if this expression is satisfied. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(mat const& x, mat const& y, int ULPs); - - /// Returns the component-wise comparison between two vectors in term of ULPs. - /// True if this expression is satisfied. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(mat const& x, mat const& y, vec const& ULPs); - - /// Returns the component-wise comparison between two vectors in term of ULPs. - /// True if this expression is not satisfied. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y, int ULPs); - - /// Returns the component-wise comparison between two vectors in term of ULPs. - /// True if this expression is not satisfied. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y, vec const& ULPs); - - /// @} -}//namespace glm - -#include "matrix_relational.inl" diff --git a/src/vendor/glm/ext/matrix_relational.inl b/src/vendor/glm/ext/matrix_relational.inl deleted file mode 100755 index 9cd42b7..0000000 --- a/src/vendor/glm/ext/matrix_relational.inl +++ /dev/null @@ -1,88 +0,0 @@ -/// @ref ext_vector_relational -/// @file glm/ext/vector_relational.inl - -// Dependency: -#include "../ext/vector_relational.hpp" -#include "../common.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(mat const& a, mat const& b) - { - vec Result(true); - for(length_t i = 0; i < C; ++i) - Result[i] = all(equal(a[i], b[i])); - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(mat const& a, mat const& b, T Epsilon) - { - return equal(a, b, vec(Epsilon)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(mat const& a, mat const& b, vec const& Epsilon) - { - vec Result(true); - for(length_t i = 0; i < C; ++i) - Result[i] = all(equal(a[i], b[i], Epsilon[i])); - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(mat const& a, mat const& b) - { - vec Result(true); - for(length_t i = 0; i < C; ++i) - Result[i] = any(notEqual(a[i], b[i])); - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(mat const& a, mat const& b, T Epsilon) - { - return notEqual(a, b, vec(Epsilon)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(mat const& a, mat const& b, vec const& Epsilon) - { - vec Result(true); - for(length_t i = 0; i < C; ++i) - Result[i] = any(notEqual(a[i], b[i], Epsilon[i])); - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(mat const& a, mat const& b, int MaxULPs) - { - return equal(a, b, vec(MaxULPs)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(mat const& a, mat const& b, vec const& MaxULPs) - { - vec Result(true); - for(length_t i = 0; i < C; ++i) - Result[i] = all(equal(a[i], b[i], MaxULPs[i])); - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(mat const& a, mat const& b, int MaxULPs) - { - return notEqual(a, b, vec(MaxULPs)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(mat const& a, mat const& b, vec const& MaxULPs) - { - vec Result(true); - for(length_t i = 0; i < C; ++i) - Result[i] = any(notEqual(a[i], b[i], MaxULPs[i])); - return Result; - } - -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_transform.hpp b/src/vendor/glm/ext/matrix_transform.hpp deleted file mode 100755 index cbd187e..0000000 --- a/src/vendor/glm/ext/matrix_transform.hpp +++ /dev/null @@ -1,144 +0,0 @@ -/// @ref ext_matrix_transform -/// @file glm/ext/matrix_transform.hpp -/// -/// @defgroup ext_matrix_transform GLM_EXT_matrix_transform -/// @ingroup ext -/// -/// Defines functions that generate common transformation matrices. -/// -/// The matrices generated by this extension use standard OpenGL fixed-function -/// conventions. For example, the lookAt function generates a transform from world -/// space into the specific eye space that the projective matrix functions -/// (perspective, ortho, etc) are designed to expect. The OpenGL compatibility -/// specifications defines the particular layout of this eye space. -/// -/// Include to use the features of this extension. -/// -/// @see ext_matrix_projection -/// @see ext_matrix_clip_space - -#pragma once - -// Dependencies -#include "../gtc/constants.hpp" -#include "../geometric.hpp" -#include "../trigonometric.hpp" -#include "../matrix.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_transform extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_transform - /// @{ - - /// Builds an identity matrix. - template - GLM_FUNC_DECL GLM_CONSTEXPR genType identity(); - - /// Builds a translation 4 * 4 matrix created from a vector of 3 components. - /// - /// @param m Input matrix multiplied by this translation matrix. - /// @param v Coordinates of a translation vector. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - /// - /// @code - /// #include - /// #include - /// ... - /// glm::mat4 m = glm::translate(glm::mat4(1.0f), glm::vec3(1.0f)); - /// // m[0][0] == 1.0f, m[0][1] == 0.0f, m[0][2] == 0.0f, m[0][3] == 0.0f - /// // m[1][0] == 0.0f, m[1][1] == 1.0f, m[1][2] == 0.0f, m[1][3] == 0.0f - /// // m[2][0] == 0.0f, m[2][1] == 0.0f, m[2][2] == 1.0f, m[2][3] == 0.0f - /// // m[3][0] == 1.0f, m[3][1] == 1.0f, m[3][2] == 1.0f, m[3][3] == 1.0f - /// @endcode - /// - /// @see - translate(mat<4, 4, T, Q> const& m, T x, T y, T z) - /// @see - translate(vec<3, T, Q> const& v) - /// @see glTranslate man page - template - GLM_FUNC_DECL mat<4, 4, T, Q> translate( - mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v); - - /// Builds a rotation 4 * 4 matrix created from an axis vector and an angle. - /// - /// @param m Input matrix multiplied by this rotation matrix. - /// @param angle Rotation angle expressed in radians. - /// @param axis Rotation axis, recommended to be normalized. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - /// - /// @see - rotate(mat<4, 4, T, Q> const& m, T angle, T x, T y, T z) - /// @see - rotate(T angle, vec<3, T, Q> const& v) - /// @see glRotate man page - template - GLM_FUNC_DECL mat<4, 4, T, Q> rotate( - mat<4, 4, T, Q> const& m, T angle, vec<3, T, Q> const& axis); - - /// Builds a scale 4 * 4 matrix created from 3 scalars. - /// - /// @param m Input matrix multiplied by this scale matrix. - /// @param v Ratio of scaling for each axis. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - /// - /// @see - scale(mat<4, 4, T, Q> const& m, T x, T y, T z) - /// @see - scale(vec<3, T, Q> const& v) - /// @see glScale man page - template - GLM_FUNC_DECL mat<4, 4, T, Q> scale( - mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v); - - /// Build a right handed look at view matrix. - /// - /// @param eye Position of the camera - /// @param center Position where the camera is looking at - /// @param up Normalized up vector, how the camera is oriented. Typically (0, 0, 1) - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - /// - /// @see - frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) - template - GLM_FUNC_DECL mat<4, 4, T, Q> lookAtRH( - vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up); - - /// Build a left handed look at view matrix. - /// - /// @param eye Position of the camera - /// @param center Position where the camera is looking at - /// @param up Normalized up vector, how the camera is oriented. Typically (0, 0, 1) - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - /// - /// @see - frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) - template - GLM_FUNC_DECL mat<4, 4, T, Q> lookAtLH( - vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up); - - /// Build a look at view matrix based on the default handedness. - /// - /// @param eye Position of the camera - /// @param center Position where the camera is looking at - /// @param up Normalized up vector, how the camera is oriented. Typically (0, 0, 1) - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - /// - /// @see - frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) - /// @see gluLookAt man page - template - GLM_FUNC_DECL mat<4, 4, T, Q> lookAt( - vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up); - - /// @} -}//namespace glm - -#include "matrix_transform.inl" diff --git a/src/vendor/glm/ext/matrix_transform.inl b/src/vendor/glm/ext/matrix_transform.inl deleted file mode 100755 index 01cefab..0000000 --- a/src/vendor/glm/ext/matrix_transform.inl +++ /dev/null @@ -1,153 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType identity() - { - return detail::init_gentype::GENTYPE>::identity(); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> translate(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v) - { - mat<4, 4, T, Q> Result(m); - Result[3] = m[0] * v[0] + m[1] * v[1] + m[2] * v[2] + m[3]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rotate(mat<4, 4, T, Q> const& m, T angle, vec<3, T, Q> const& v) - { - T const a = angle; - T const c = cos(a); - T const s = sin(a); - - vec<3, T, Q> axis(normalize(v)); - vec<3, T, Q> temp((T(1) - c) * axis); - - mat<4, 4, T, Q> Rotate; - Rotate[0][0] = c + temp[0] * axis[0]; - Rotate[0][1] = temp[0] * axis[1] + s * axis[2]; - Rotate[0][2] = temp[0] * axis[2] - s * axis[1]; - - Rotate[1][0] = temp[1] * axis[0] - s * axis[2]; - Rotate[1][1] = c + temp[1] * axis[1]; - Rotate[1][2] = temp[1] * axis[2] + s * axis[0]; - - Rotate[2][0] = temp[2] * axis[0] + s * axis[1]; - Rotate[2][1] = temp[2] * axis[1] - s * axis[0]; - Rotate[2][2] = c + temp[2] * axis[2]; - - mat<4, 4, T, Q> Result; - Result[0] = m[0] * Rotate[0][0] + m[1] * Rotate[0][1] + m[2] * Rotate[0][2]; - Result[1] = m[0] * Rotate[1][0] + m[1] * Rotate[1][1] + m[2] * Rotate[1][2]; - Result[2] = m[0] * Rotate[2][0] + m[1] * Rotate[2][1] + m[2] * Rotate[2][2]; - Result[3] = m[3]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rotate_slow(mat<4, 4, T, Q> const& m, T angle, vec<3, T, Q> const& v) - { - T const a = angle; - T const c = cos(a); - T const s = sin(a); - mat<4, 4, T, Q> Result; - - vec<3, T, Q> axis = normalize(v); - - Result[0][0] = c + (static_cast(1) - c) * axis.x * axis.x; - Result[0][1] = (static_cast(1) - c) * axis.x * axis.y + s * axis.z; - Result[0][2] = (static_cast(1) - c) * axis.x * axis.z - s * axis.y; - Result[0][3] = static_cast(0); - - Result[1][0] = (static_cast(1) - c) * axis.y * axis.x - s * axis.z; - Result[1][1] = c + (static_cast(1) - c) * axis.y * axis.y; - Result[1][2] = (static_cast(1) - c) * axis.y * axis.z + s * axis.x; - Result[1][3] = static_cast(0); - - Result[2][0] = (static_cast(1) - c) * axis.z * axis.x + s * axis.y; - Result[2][1] = (static_cast(1) - c) * axis.z * axis.y - s * axis.x; - Result[2][2] = c + (static_cast(1) - c) * axis.z * axis.z; - Result[2][3] = static_cast(0); - - Result[3] = vec<4, T, Q>(0, 0, 0, 1); - return m * Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> scale(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v) - { - mat<4, 4, T, Q> Result; - Result[0] = m[0] * v[0]; - Result[1] = m[1] * v[1]; - Result[2] = m[2] * v[2]; - Result[3] = m[3]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> scale_slow(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v) - { - mat<4, 4, T, Q> Result(T(1)); - Result[0][0] = v.x; - Result[1][1] = v.y; - Result[2][2] = v.z; - return m * Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> lookAtRH(vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up) - { - vec<3, T, Q> const f(normalize(center - eye)); - vec<3, T, Q> const s(normalize(cross(f, up))); - vec<3, T, Q> const u(cross(s, f)); - - mat<4, 4, T, Q> Result(1); - Result[0][0] = s.x; - Result[1][0] = s.y; - Result[2][0] = s.z; - Result[0][1] = u.x; - Result[1][1] = u.y; - Result[2][1] = u.z; - Result[0][2] =-f.x; - Result[1][2] =-f.y; - Result[2][2] =-f.z; - Result[3][0] =-dot(s, eye); - Result[3][1] =-dot(u, eye); - Result[3][2] = dot(f, eye); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> lookAtLH(vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up) - { - vec<3, T, Q> const f(normalize(center - eye)); - vec<3, T, Q> const s(normalize(cross(up, f))); - vec<3, T, Q> const u(cross(f, s)); - - mat<4, 4, T, Q> Result(1); - Result[0][0] = s.x; - Result[1][0] = s.y; - Result[2][0] = s.z; - Result[0][1] = u.x; - Result[1][1] = u.y; - Result[2][1] = u.z; - Result[0][2] = f.x; - Result[1][2] = f.y; - Result[2][2] = f.z; - Result[3][0] = -dot(s, eye); - Result[3][1] = -dot(u, eye); - Result[3][2] = -dot(f, eye); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> lookAt(vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up) - { -# if (GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT) - return lookAtLH(eye, center, up); -# else - return lookAtRH(eye, center, up); -# endif - } -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_uint2x2.hpp b/src/vendor/glm/ext/matrix_uint2x2.hpp deleted file mode 100755 index 034771a..0000000 --- a/src/vendor/glm/ext/matrix_uint2x2.hpp +++ /dev/null @@ -1,38 +0,0 @@ -/// @ref ext_matrix_uint2x2 -/// @file glm/ext/matrix_uint2x2.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint2x2 GLM_EXT_matrix_uint2x2 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x2.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint2x2 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint2x2 - /// @{ - - /// Unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2 - typedef mat<2, 2, uint, defaultp> umat2x2; - - /// Unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2 - typedef mat<2, 2, uint, defaultp> umat2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_uint2x2_sized.hpp b/src/vendor/glm/ext/matrix_uint2x2_sized.hpp deleted file mode 100755 index 4555324..0000000 --- a/src/vendor/glm/ext/matrix_uint2x2_sized.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/// @ref ext_matrix_uint2x2_sized -/// @file glm/ext/matrix_uint2x2_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint2x2_sized GLM_EXT_matrix_uint2x2_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x2.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint2x2_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint2x2_sized - /// @{ - - /// 8 bit unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2_sized - typedef mat<2, 2, uint8, defaultp> u8mat2x2; - - /// 16 bit unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2_sized - typedef mat<2, 2, uint16, defaultp> u16mat2x2; - - /// 32 bit unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2_sized - typedef mat<2, 2, uint32, defaultp> u32mat2x2; - - /// 64 bit unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2_sized - typedef mat<2, 2, uint64, defaultp> u64mat2x2; - - - /// 8 bit unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2_sized - typedef mat<2, 2, uint8, defaultp> u8mat2; - - /// 16 bit unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2_sized - typedef mat<2, 2, uint16, defaultp> u16mat2; - - /// 32 bit unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2_sized - typedef mat<2, 2, uint32, defaultp> u32mat2; - - /// 64 bit unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2_sized - typedef mat<2, 2, uint64, defaultp> u64mat2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_uint2x3.hpp b/src/vendor/glm/ext/matrix_uint2x3.hpp deleted file mode 100755 index 7de62f6..0000000 --- a/src/vendor/glm/ext/matrix_uint2x3.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_uint2x3 -/// @file glm/ext/matrix_uint2x3.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int2x3 GLM_EXT_matrix_uint2x3 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x3.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint2x3 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint2x3 - /// @{ - - /// Unsigned integer 2x3 matrix. - /// - /// @see ext_matrix_uint2x3 - typedef mat<2, 3, uint, defaultp> umat2x3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_uint2x3_sized.hpp b/src/vendor/glm/ext/matrix_uint2x3_sized.hpp deleted file mode 100755 index db7939c..0000000 --- a/src/vendor/glm/ext/matrix_uint2x3_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_uint2x3_sized -/// @file glm/ext/matrix_uint2x3_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint2x3_sized GLM_EXT_matrix_uint2x3_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x3.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint2x3_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint2x3_sized - /// @{ - - /// 8 bit unsigned integer 2x3 matrix. - /// - /// @see ext_matrix_uint2x3_sized - typedef mat<2, 3, uint8, defaultp> u8mat2x3; - - /// 16 bit unsigned integer 2x3 matrix. - /// - /// @see ext_matrix_uint2x3_sized - typedef mat<2, 3, uint16, defaultp> u16mat2x3; - - /// 32 bit unsigned integer 2x3 matrix. - /// - /// @see ext_matrix_uint2x3_sized - typedef mat<2, 3, uint32, defaultp> u32mat2x3; - - /// 64 bit unsigned integer 2x3 matrix. - /// - /// @see ext_matrix_uint2x3_sized - typedef mat<2, 3, uint64, defaultp> u64mat2x3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_uint2x4.hpp b/src/vendor/glm/ext/matrix_uint2x4.hpp deleted file mode 100755 index 0f99350..0000000 --- a/src/vendor/glm/ext/matrix_uint2x4.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_uint2x4 -/// @file glm/ext/matrix_uint2x4.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint2x4 GLM_EXT_matrix_int2x4 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint2x4 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint2x4 - /// @{ - - /// Unsigned integer 2x4 matrix. - /// - /// @see ext_matrix_uint2x4 - typedef mat<2, 4, uint, defaultp> umat2x4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_uint2x4_sized.hpp b/src/vendor/glm/ext/matrix_uint2x4_sized.hpp deleted file mode 100755 index 5cb8e54..0000000 --- a/src/vendor/glm/ext/matrix_uint2x4_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_uint2x4_sized -/// @file glm/ext/matrixu_uint2x4_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint2x4_sized GLM_EXT_matrix_uint2x4_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x4.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint2x4_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint2x4_sized - /// @{ - - /// 8 bit unsigned integer 2x4 matrix. - /// - /// @see ext_matrix_uint2x4_sized - typedef mat<2, 4, uint8, defaultp> u8mat2x4; - - /// 16 bit unsigned integer 2x4 matrix. - /// - /// @see ext_matrix_uint2x4_sized - typedef mat<2, 4, uint16, defaultp> u16mat2x4; - - /// 32 bit unsigned integer 2x4 matrix. - /// - /// @see ext_matrix_uint2x4_sized - typedef mat<2, 4, uint32, defaultp> u32mat2x4; - - /// 64 bit unsigned integer 2x4 matrix. - /// - /// @see ext_matrix_uint2x4_sized - typedef mat<2, 4, uint64, defaultp> u64mat2x4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_uint3x2.hpp b/src/vendor/glm/ext/matrix_uint3x2.hpp deleted file mode 100755 index 47f4873..0000000 --- a/src/vendor/glm/ext/matrix_uint3x2.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_uint3x2 -/// @file glm/ext/matrix_uint3x2.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int3x2 GLM_EXT_matrix_uint3x2 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x2.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint3x2 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint3x2 - /// @{ - - /// Unsigned integer 3x2 matrix. - /// - /// @see ext_matrix_uint3x2 - typedef mat<3, 2, uint, defaultp> umat3x2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_uint3x2_sized.hpp b/src/vendor/glm/ext/matrix_uint3x2_sized.hpp deleted file mode 100755 index c81af8f..0000000 --- a/src/vendor/glm/ext/matrix_uint3x2_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_uint3x2_sized -/// @file glm/ext/matrix_uint3x2_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint3x2_sized GLM_EXT_matrix_uint3x2_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x2.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint3x2_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint3x2_sized - /// @{ - - /// 8 bit signed integer 3x2 matrix. - /// - /// @see ext_matrix_uint3x2_sized - typedef mat<3, 2, uint8, defaultp> u8mat3x2; - - /// 16 bit signed integer 3x2 matrix. - /// - /// @see ext_matrix_uint3x2_sized - typedef mat<3, 2, uint16, defaultp> u16mat3x2; - - /// 32 bit signed integer 3x2 matrix. - /// - /// @see ext_matrix_uint3x2_sized - typedef mat<3, 2, uint32, defaultp> u32mat3x2; - - /// 64 bit signed integer 3x2 matrix. - /// - /// @see ext_matrix_uint3x2_sized - typedef mat<3, 2, uint64, defaultp> u64mat3x2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_uint3x3.hpp b/src/vendor/glm/ext/matrix_uint3x3.hpp deleted file mode 100755 index 1004c0d..0000000 --- a/src/vendor/glm/ext/matrix_uint3x3.hpp +++ /dev/null @@ -1,38 +0,0 @@ -/// @ref ext_matrix_uint3x3 -/// @file glm/ext/matrix_uint3x3.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint3x3 GLM_EXT_matrix_uint3x3 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x3.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint3x3 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint3x3 - /// @{ - - /// Unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3 - typedef mat<3, 3, uint, defaultp> umat3x3; - - /// Unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3 - typedef mat<3, 3, uint, defaultp> umat3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_uint3x3_sized.hpp b/src/vendor/glm/ext/matrix_uint3x3_sized.hpp deleted file mode 100755 index 41a8be7..0000000 --- a/src/vendor/glm/ext/matrix_uint3x3_sized.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/// @ref ext_matrix_uint3x3_sized -/// @file glm/ext/matrix_uint3x3_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint3x3_sized GLM_EXT_matrix_uint3x3_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x3.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint3x3_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint3x3_sized - /// @{ - - /// 8 bit unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3_sized - typedef mat<3, 3, uint8, defaultp> u8mat3x3; - - /// 16 bit unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3_sized - typedef mat<3, 3, uint16, defaultp> u16mat3x3; - - /// 32 bit unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3_sized - typedef mat<3, 3, uint32, defaultp> u32mat3x3; - - /// 64 bit unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3_sized - typedef mat<3, 3, uint64, defaultp> u64mat3x3; - - - /// 8 bit unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3_sized - typedef mat<3, 3, uint8, defaultp> u8mat3; - - /// 16 bit unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3_sized - typedef mat<3, 3, uint16, defaultp> u16mat3; - - /// 32 bit unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3_sized - typedef mat<3, 3, uint32, defaultp> u32mat3; - - /// 64 bit unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3_sized - typedef mat<3, 3, uint64, defaultp> u64mat3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_uint3x4.hpp b/src/vendor/glm/ext/matrix_uint3x4.hpp deleted file mode 100755 index c6dd78c..0000000 --- a/src/vendor/glm/ext/matrix_uint3x4.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_uint3x4 -/// @file glm/ext/matrix_uint3x4.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint3x4 GLM_EXT_matrix_uint3x4 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint3x4 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint3x4 - /// @{ - - /// Signed integer 3x4 matrix. - /// - /// @see ext_matrix_uint3x4 - typedef mat<3, 4, uint, defaultp> umat3x4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_uint3x4_sized.hpp b/src/vendor/glm/ext/matrix_uint3x4_sized.hpp deleted file mode 100755 index 2ce28ad..0000000 --- a/src/vendor/glm/ext/matrix_uint3x4_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_uint3x4_sized -/// @file glm/ext/matrix_uint3x2_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint3x4_sized GLM_EXT_matrix_uint3x4_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x4.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint3x4_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint3x4_sized - /// @{ - - /// 8 bit unsigned integer 3x4 matrix. - /// - /// @see ext_matrix_uint3x4_sized - typedef mat<3, 4, uint8, defaultp> u8mat3x4; - - /// 16 bit unsigned integer 3x4 matrix. - /// - /// @see ext_matrix_uint3x4_sized - typedef mat<3, 4, uint16, defaultp> u16mat3x4; - - /// 32 bit unsigned integer 3x4 matrix. - /// - /// @see ext_matrix_uint3x4_sized - typedef mat<3, 4, uint32, defaultp> u32mat3x4; - - /// 64 bit unsigned integer 3x4 matrix. - /// - /// @see ext_matrix_uint3x4_sized - typedef mat<3, 4, uint64, defaultp> u64mat3x4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_uint4x2.hpp b/src/vendor/glm/ext/matrix_uint4x2.hpp deleted file mode 100755 index 0446f57..0000000 --- a/src/vendor/glm/ext/matrix_uint4x2.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_uint4x2 -/// @file glm/ext/matrix_uint4x2.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint4x2 GLM_EXT_matrix_uint4x2 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x2.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint4x2 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint4x2 - /// @{ - - /// Unsigned integer 4x2 matrix. - /// - /// @see ext_matrix_uint4x2 - typedef mat<4, 2, uint, defaultp> umat4x2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_uint4x2_sized.hpp b/src/vendor/glm/ext/matrix_uint4x2_sized.hpp deleted file mode 100755 index 57a66bf..0000000 --- a/src/vendor/glm/ext/matrix_uint4x2_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_uint4x2_sized -/// @file glm/ext/matrix_uint4x2_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint4x2_sized GLM_EXT_matrix_uint4x2_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x2.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint4x2_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint4x2_sized - /// @{ - - /// 8 bit unsigned integer 4x2 matrix. - /// - /// @see ext_matrix_uint4x2_sized - typedef mat<4, 2, uint8, defaultp> u8mat4x2; - - /// 16 bit unsigned integer 4x2 matrix. - /// - /// @see ext_matrix_uint4x2_sized - typedef mat<4, 2, uint16, defaultp> u16mat4x2; - - /// 32 bit unsigned integer 4x2 matrix. - /// - /// @see ext_matrix_uint4x2_sized - typedef mat<4, 2, uint32, defaultp> u32mat4x2; - - /// 64 bit unsigned integer 4x2 matrix. - /// - /// @see ext_matrix_uint4x2_sized - typedef mat<4, 2, uint64, defaultp> u64mat4x2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_uint4x3.hpp b/src/vendor/glm/ext/matrix_uint4x3.hpp deleted file mode 100755 index 54c24e4..0000000 --- a/src/vendor/glm/ext/matrix_uint4x3.hpp +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref ext_matrix_uint4x3 -/// @file glm/ext/matrix_uint4x3.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint4x3 GLM_EXT_matrix_uint4x3 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x3.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint4x3 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint4x3 - /// @{ - - /// Unsigned integer 4x3 matrix. - /// - /// @see ext_matrix_uint4x3 - typedef mat<4, 3, uint, defaultp> umat4x3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_uint4x3_sized.hpp b/src/vendor/glm/ext/matrix_uint4x3_sized.hpp deleted file mode 100755 index 2e61124..0000000 --- a/src/vendor/glm/ext/matrix_uint4x3_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_matrix_uint4x3_sized -/// @file glm/ext/matrix_uint4x3_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint4x3_sized GLM_EXT_matrix_uint4x3_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x3.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint4x3_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint4x3_sized - /// @{ - - /// 8 bit unsigned integer 4x3 matrix. - /// - /// @see ext_matrix_uint4x3_sized - typedef mat<4, 3, uint8, defaultp> u8mat4x3; - - /// 16 bit unsigned integer 4x3 matrix. - /// - /// @see ext_matrix_uint4x3_sized - typedef mat<4, 3, uint16, defaultp> u16mat4x3; - - /// 32 bit unsigned integer 4x3 matrix. - /// - /// @see ext_matrix_uint4x3_sized - typedef mat<4, 3, uint32, defaultp> u32mat4x3; - - /// 64 bit unsigned integer 4x3 matrix. - /// - /// @see ext_matrix_uint4x3_sized - typedef mat<4, 3, uint64, defaultp> u64mat4x3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_uint4x4.hpp b/src/vendor/glm/ext/matrix_uint4x4.hpp deleted file mode 100755 index 5cc8455..0000000 --- a/src/vendor/glm/ext/matrix_uint4x4.hpp +++ /dev/null @@ -1,38 +0,0 @@ -/// @ref ext_matrix_uint4x4 -/// @file glm/ext/matrix_uint4x4.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint4x4 GLM_EXT_matrix_uint4x4 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint4x4 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint4x4 - /// @{ - - /// Unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4 - typedef mat<4, 4, uint, defaultp> umat4x4; - - /// Unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4 - typedef mat<4, 4, uint, defaultp> umat4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/matrix_uint4x4_sized.hpp b/src/vendor/glm/ext/matrix_uint4x4_sized.hpp deleted file mode 100755 index bb10bd2..0000000 --- a/src/vendor/glm/ext/matrix_uint4x4_sized.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/// @ref ext_matrix_uint4x4_sized -/// @file glm/ext/matrix_uint4x4_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint4x4_sized GLM_EXT_matrix_uint4x4_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x4.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint4x4_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint4x4_sized - /// @{ - - /// 8 bit unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4_sized - typedef mat<4, 4, uint8, defaultp> u8mat4x4; - - /// 16 bit unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4_sized - typedef mat<4, 4, uint16, defaultp> u16mat4x4; - - /// 32 bit unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4_sized - typedef mat<4, 4, uint32, defaultp> u32mat4x4; - - /// 64 bit unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4_sized - typedef mat<4, 4, uint64, defaultp> u64mat4x4; - - - /// 8 bit unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4_sized - typedef mat<4, 4, uint8, defaultp> u8mat4; - - /// 16 bit unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4_sized - typedef mat<4, 4, uint16, defaultp> u16mat4; - - /// 32 bit unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4_sized - typedef mat<4, 4, uint32, defaultp> u32mat4; - - /// 64 bit unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4_sized - typedef mat<4, 4, uint64, defaultp> u64mat4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/quaternion_common.hpp b/src/vendor/glm/ext/quaternion_common.hpp deleted file mode 100755 index f519d55..0000000 --- a/src/vendor/glm/ext/quaternion_common.hpp +++ /dev/null @@ -1,135 +0,0 @@ -/// @ref ext_quaternion_common -/// @file glm/ext/quaternion_common.hpp -/// -/// @defgroup ext_quaternion_common GLM_EXT_quaternion_common -/// @ingroup ext -/// -/// Provides common functions for quaternion types -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_common -/// @see ext_vector_common -/// @see ext_quaternion_float -/// @see ext_quaternion_double -/// @see ext_quaternion_exponential -/// @see ext_quaternion_geometric -/// @see ext_quaternion_relational -/// @see ext_quaternion_trigonometric -/// @see ext_quaternion_transform - -#pragma once - -// Dependency: -#include "../ext/scalar_constants.hpp" -#include "../ext/quaternion_geometric.hpp" -#include "../common.hpp" -#include "../trigonometric.hpp" -#include "../exponential.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_common extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_common - /// @{ - - /// Spherical linear interpolation of two quaternions. - /// The interpolation is oriented and the rotation is performed at constant speed. - /// For short path spherical linear interpolation, use the slerp function. - /// - /// @param x A quaternion - /// @param y A quaternion - /// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1]. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - /// - /// @see - slerp(qua const& x, qua const& y, T const& a) - template - GLM_FUNC_DECL qua mix(qua const& x, qua const& y, T a); - - /// Linear interpolation of two quaternions. - /// The interpolation is oriented. - /// - /// @param x A quaternion - /// @param y A quaternion - /// @param a Interpolation factor. The interpolation is defined in the range [0, 1]. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua lerp(qua const& x, qua const& y, T a); - - /// Spherical linear interpolation of two quaternions. - /// The interpolation always take the short path and the rotation is performed at constant speed. - /// - /// @param x A quaternion - /// @param y A quaternion - /// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1]. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua slerp(qua const& x, qua const& y, T a); - - /// Spherical linear interpolation of two quaternions with multiple spins over rotation axis. - /// The interpolation always take the short path when the spin count is positive and long path - /// when count is negative. Rotation is performed at constant speed. - /// - /// @param x A quaternion - /// @param y A quaternion - /// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1]. - /// @param k Additional spin count. If Value is negative interpolation will be on "long" path. - /// - /// @tparam T A floating-point scalar type - /// @tparam S An integer scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua slerp(qua const& x, qua const& y, T a, S k); - - /// Returns the q conjugate. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua conjugate(qua const& q); - - /// Returns the q inverse. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua inverse(qua const& q); - - /// Returns true if x holds a NaN (not a number) - /// representation in the underlying implementation's set of - /// floating point representations. Returns false otherwise, - /// including for implementations with no NaN - /// representations. - /// - /// /!\ When using compiler fast math, this function may fail. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL vec<4, bool, Q> isnan(qua const& x); - - /// Returns true if x holds a positive infinity or negative - /// infinity representation in the underlying implementation's - /// set of floating point representations. Returns false - /// otherwise, including for implementations with no infinity - /// representations. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL vec<4, bool, Q> isinf(qua const& x); - - /// @} -} //namespace glm - -#include "quaternion_common.inl" diff --git a/src/vendor/glm/ext/quaternion_common.inl b/src/vendor/glm/ext/quaternion_common.inl deleted file mode 100755 index 0e4a3bb..0000000 --- a/src/vendor/glm/ext/quaternion_common.inl +++ /dev/null @@ -1,144 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER qua mix(qua const& x, qua const& y, T a) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'mix' only accept floating-point inputs"); - - T const cosTheta = dot(x, y); - - // Perform a linear interpolation when cosTheta is close to 1 to avoid side effect of sin(angle) becoming a zero denominator - if(cosTheta > static_cast(1) - epsilon()) - { - // Linear interpolation - return qua( - mix(x.w, y.w, a), - mix(x.x, y.x, a), - mix(x.y, y.y, a), - mix(x.z, y.z, a)); - } - else - { - // Essential Mathematics, page 467 - T angle = acos(cosTheta); - return (sin((static_cast(1) - a) * angle) * x + sin(a * angle) * y) / sin(angle); - } - } - - template - GLM_FUNC_QUALIFIER qua lerp(qua const& x, qua const& y, T a) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'lerp' only accept floating-point inputs"); - - // Lerp is only defined in [0, 1] - assert(a >= static_cast(0)); - assert(a <= static_cast(1)); - - return x * (static_cast(1) - a) + (y * a); - } - - template - GLM_FUNC_QUALIFIER qua slerp(qua const& x, qua const& y, T a) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'slerp' only accept floating-point inputs"); - - qua z = y; - - T cosTheta = dot(x, y); - - // If cosTheta < 0, the interpolation will take the long way around the sphere. - // To fix this, one quat must be negated. - if(cosTheta < static_cast(0)) - { - z = -y; - cosTheta = -cosTheta; - } - - // Perform a linear interpolation when cosTheta is close to 1 to avoid side effect of sin(angle) becoming a zero denominator - if(cosTheta > static_cast(1) - epsilon()) - { - // Linear interpolation - return qua( - mix(x.w, z.w, a), - mix(x.x, z.x, a), - mix(x.y, z.y, a), - mix(x.z, z.z, a)); - } - else - { - // Essential Mathematics, page 467 - T angle = acos(cosTheta); - return (sin((static_cast(1) - a) * angle) * x + sin(a * angle) * z) / sin(angle); - } - } - - template - GLM_FUNC_QUALIFIER qua slerp(qua const& x, qua const& y, T a, S k) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'slerp' only accept floating-point inputs"); - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'slerp' only accept integer for spin count"); - - qua z = y; - - T cosTheta = dot(x, y); - - // If cosTheta < 0, the interpolation will take the long way around the sphere. - // To fix this, one quat must be negated. - if (cosTheta < static_cast(0)) - { - z = -y; - cosTheta = -cosTheta; - } - - // Perform a linear interpolation when cosTheta is close to 1 to avoid side effect of sin(angle) becoming a zero denominator - if (cosTheta > static_cast(1) - epsilon()) - { - // Linear interpolation - return qua( - mix(x.w, z.w, a), - mix(x.x, z.x, a), - mix(x.y, z.y, a), - mix(x.z, z.z, a)); - } - else - { - // Graphics Gems III, page 96 - T angle = acos(cosTheta); - T phi = angle + k * glm::pi(); - return (sin(angle - a * phi)* x + sin(a * phi) * z) / sin(angle); - } - } - - template - GLM_FUNC_QUALIFIER qua conjugate(qua const& q) - { - return qua(q.w, -q.x, -q.y, -q.z); - } - - template - GLM_FUNC_QUALIFIER qua inverse(qua const& q) - { - return conjugate(q) / dot(q, q); - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> isnan(qua const& q) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isnan' only accept floating-point inputs"); - - return vec<4, bool, Q>(isnan(q.x), isnan(q.y), isnan(q.z), isnan(q.w)); - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> isinf(qua const& q) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isinf' only accept floating-point inputs"); - - return vec<4, bool, Q>(isinf(q.x), isinf(q.y), isinf(q.z), isinf(q.w)); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "quaternion_common_simd.inl" -#endif - diff --git a/src/vendor/glm/ext/quaternion_common_simd.inl b/src/vendor/glm/ext/quaternion_common_simd.inl deleted file mode 100755 index ddfc8a4..0000000 --- a/src/vendor/glm/ext/quaternion_common_simd.inl +++ /dev/null @@ -1,18 +0,0 @@ -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -namespace glm{ -namespace detail -{ - template - struct compute_dot, float, true> - { - static GLM_FUNC_QUALIFIER float call(qua const& x, qua const& y) - { - return _mm_cvtss_f32(glm_vec1_dot(x.data, y.data)); - } - }; -}//namespace detail -}//namespace glm - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT - diff --git a/src/vendor/glm/ext/quaternion_double.hpp b/src/vendor/glm/ext/quaternion_double.hpp deleted file mode 100755 index 63b24de..0000000 --- a/src/vendor/glm/ext/quaternion_double.hpp +++ /dev/null @@ -1,39 +0,0 @@ -/// @ref ext_quaternion_double -/// @file glm/ext/quaternion_double.hpp -/// -/// @defgroup ext_quaternion_double GLM_EXT_quaternion_double -/// @ingroup ext -/// -/// Exposes double-precision floating point quaternion type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_quaternion_float -/// @see ext_quaternion_double_precision -/// @see ext_quaternion_common -/// @see ext_quaternion_exponential -/// @see ext_quaternion_geometric -/// @see ext_quaternion_relational -/// @see ext_quaternion_transform -/// @see ext_quaternion_trigonometric - -#pragma once - -// Dependency: -#include "../detail/type_quat.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_double extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_double - /// @{ - - /// Quaternion of double-precision floating-point numbers. - typedef qua dquat; - - /// @} -} //namespace glm - diff --git a/src/vendor/glm/ext/quaternion_double_precision.hpp b/src/vendor/glm/ext/quaternion_double_precision.hpp deleted file mode 100755 index 8aa24a1..0000000 --- a/src/vendor/glm/ext/quaternion_double_precision.hpp +++ /dev/null @@ -1,42 +0,0 @@ -/// @ref ext_quaternion_double_precision -/// @file glm/ext/quaternion_double_precision.hpp -/// -/// @defgroup ext_quaternion_double_precision GLM_EXT_quaternion_double_precision -/// @ingroup ext -/// -/// Exposes double-precision floating point quaternion type with various precision in term of ULPs. -/// -/// Include to use the features of this extension. - -#pragma once - -// Dependency: -#include "../detail/type_quat.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_double_precision extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_double_precision - /// @{ - - /// Quaternion of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see ext_quaternion_double_precision - typedef qua lowp_dquat; - - /// Quaternion of medium double-qualifier floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see ext_quaternion_double_precision - typedef qua mediump_dquat; - - /// Quaternion of high double-qualifier floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see ext_quaternion_double_precision - typedef qua highp_dquat; - - /// @} -} //namespace glm - diff --git a/src/vendor/glm/ext/quaternion_exponential.hpp b/src/vendor/glm/ext/quaternion_exponential.hpp deleted file mode 100755 index affe297..0000000 --- a/src/vendor/glm/ext/quaternion_exponential.hpp +++ /dev/null @@ -1,63 +0,0 @@ -/// @ref ext_quaternion_exponential -/// @file glm/ext/quaternion_exponential.hpp -/// -/// @defgroup ext_quaternion_exponential GLM_EXT_quaternion_exponential -/// @ingroup ext -/// -/// Provides exponential functions for quaternion types -/// -/// Include to use the features of this extension. -/// -/// @see core_exponential -/// @see ext_quaternion_float -/// @see ext_quaternion_double - -#pragma once - -// Dependency: -#include "../common.hpp" -#include "../trigonometric.hpp" -#include "../geometric.hpp" -#include "../ext/scalar_constants.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_exponential extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_transform - /// @{ - - /// Returns a exponential of a quaternion. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua exp(qua const& q); - - /// Returns a logarithm of a quaternion - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua log(qua const& q); - - /// Returns a quaternion raised to a power. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua pow(qua const& q, T y); - - /// Returns the square root of a quaternion - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua sqrt(qua const& q); - - /// @} -} //namespace glm - -#include "quaternion_exponential.inl" diff --git a/src/vendor/glm/ext/quaternion_exponential.inl b/src/vendor/glm/ext/quaternion_exponential.inl deleted file mode 100755 index dd24b6c..0000000 --- a/src/vendor/glm/ext/quaternion_exponential.inl +++ /dev/null @@ -1,89 +0,0 @@ -#include "scalar_constants.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER qua exp(qua const& q) - { - vec<3, T, Q> u(q.x, q.y, q.z); - T const Angle = glm::length(u); - if (Angle < epsilon()) - return qua(); - - vec<3, T, Q> const v(u / Angle); - return qua(cos(Angle), sin(Angle) * v); - } - - template - GLM_FUNC_QUALIFIER qua log(qua const& q) - { - vec<3, T, Q> u(q.x, q.y, q.z); - T Vec3Len = length(u); - - if (Vec3Len < epsilon()) - { - if(q.w > static_cast(0)) - return qua(log(q.w), static_cast(0), static_cast(0), static_cast(0)); - else if(q.w < static_cast(0)) - return qua(log(-q.w), pi(), static_cast(0), static_cast(0)); - else - return qua(std::numeric_limits::infinity(), std::numeric_limits::infinity(), std::numeric_limits::infinity(), std::numeric_limits::infinity()); - } - else - { - T t = atan(Vec3Len, T(q.w)) / Vec3Len; - T QuatLen2 = Vec3Len * Vec3Len + q.w * q.w; - return qua(static_cast(0.5) * log(QuatLen2), t * q.x, t * q.y, t * q.z); - } - } - - template - GLM_FUNC_QUALIFIER qua pow(qua const& x, T y) - { - //Raising to the power of 0 should yield 1 - //Needed to prevent a division by 0 error later on - if(y > -epsilon() && y < epsilon()) - return qua(1,0,0,0); - - //To deal with non-unit quaternions - T magnitude = sqrt(x.x * x.x + x.y * x.y + x.z * x.z + x.w *x.w); - - T Angle; - if(abs(x.w / magnitude) > cos_one_over_two()) - { - //Scalar component is close to 1; using it to recover angle would lose precision - //Instead, we use the non-scalar components since sin() is accurate around 0 - - //Prevent a division by 0 error later on - T VectorMagnitude = x.x * x.x + x.y * x.y + x.z * x.z; - //Despite the compiler might say, we actually want to compare - //VectorMagnitude to 0. here; we could use denorm_int() compiling a - //project with unsafe maths optimizations might make the comparison - //always false, even when VectorMagnitude is 0. - if (VectorMagnitude < std::numeric_limits::min()) { - //Equivalent to raising a real number to a power - return qua(pow(x.w, y), 0, 0, 0); - } - - Angle = asin(sqrt(VectorMagnitude) / magnitude); - } - else - { - //Scalar component is small, shouldn't cause loss of precision - Angle = acos(x.w / magnitude); - } - - T NewAngle = Angle * y; - T Div = sin(NewAngle) / sin(Angle); - T Mag = pow(magnitude, y - static_cast(1)); - return qua(cos(NewAngle) * magnitude * Mag, x.x * Div * Mag, x.y * Div * Mag, x.z * Div * Mag); - } - - template - GLM_FUNC_QUALIFIER qua sqrt(qua const& x) - { - return pow(x, static_cast(0.5)); - } -}//namespace glm - - diff --git a/src/vendor/glm/ext/quaternion_float.hpp b/src/vendor/glm/ext/quaternion_float.hpp deleted file mode 100755 index ca42a60..0000000 --- a/src/vendor/glm/ext/quaternion_float.hpp +++ /dev/null @@ -1,39 +0,0 @@ -/// @ref ext_quaternion_float -/// @file glm/ext/quaternion_float.hpp -/// -/// @defgroup ext_quaternion_float GLM_EXT_quaternion_float -/// @ingroup ext -/// -/// Exposes single-precision floating point quaternion type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_quaternion_double -/// @see ext_quaternion_float_precision -/// @see ext_quaternion_common -/// @see ext_quaternion_exponential -/// @see ext_quaternion_geometric -/// @see ext_quaternion_relational -/// @see ext_quaternion_transform -/// @see ext_quaternion_trigonometric - -#pragma once - -// Dependency: -#include "../detail/type_quat.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_float extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_float - /// @{ - - /// Quaternion of single-precision floating-point numbers. - typedef qua quat; - - /// @} -} //namespace glm - diff --git a/src/vendor/glm/ext/quaternion_float_precision.hpp b/src/vendor/glm/ext/quaternion_float_precision.hpp deleted file mode 100755 index f9e4f5c..0000000 --- a/src/vendor/glm/ext/quaternion_float_precision.hpp +++ /dev/null @@ -1,36 +0,0 @@ -/// @ref ext_quaternion_float_precision -/// @file glm/ext/quaternion_float_precision.hpp -/// -/// @defgroup ext_quaternion_float_precision GLM_EXT_quaternion_float_precision -/// @ingroup ext -/// -/// Exposes single-precision floating point quaternion type with various precision in term of ULPs. -/// -/// Include to use the features of this extension. - -#pragma once - -// Dependency: -#include "../detail/type_quat.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_float_precision extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_float_precision - /// @{ - - /// Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef qua lowp_quat; - - /// Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef qua mediump_quat; - - /// Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef qua highp_quat; - - /// @} -} //namespace glm - diff --git a/src/vendor/glm/ext/quaternion_geometric.hpp b/src/vendor/glm/ext/quaternion_geometric.hpp deleted file mode 100755 index 6d98bbe..0000000 --- a/src/vendor/glm/ext/quaternion_geometric.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/// @ref ext_quaternion_geometric -/// @file glm/ext/quaternion_geometric.hpp -/// -/// @defgroup ext_quaternion_geometric GLM_EXT_quaternion_geometric -/// @ingroup ext -/// -/// Provides geometric functions for quaternion types -/// -/// Include to use the features of this extension. -/// -/// @see core_geometric -/// @see ext_quaternion_float -/// @see ext_quaternion_double - -#pragma once - -// Dependency: -#include "../geometric.hpp" -#include "../exponential.hpp" -#include "../ext/vector_relational.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_geometric extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_geometric - /// @{ - - /// Returns the norm of a quaternions - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_quaternion_geometric - template - GLM_FUNC_DECL T length(qua const& q); - - /// Returns the normalized quaternion. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_quaternion_geometric - template - GLM_FUNC_DECL qua normalize(qua const& q); - - /// Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ... - /// - /// @tparam T Floating-point scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @see ext_quaternion_geometric - template - GLM_FUNC_DECL T dot(qua const& x, qua const& y); - - /// Compute a cross product. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_quaternion_geometric - template - GLM_FUNC_QUALIFIER qua cross(qua const& q1, qua const& q2); - - /// @} -} //namespace glm - -#include "quaternion_geometric.inl" diff --git a/src/vendor/glm/ext/quaternion_geometric.inl b/src/vendor/glm/ext/quaternion_geometric.inl deleted file mode 100755 index e155ac5..0000000 --- a/src/vendor/glm/ext/quaternion_geometric.inl +++ /dev/null @@ -1,36 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER T dot(qua const& x, qua const& y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'dot' accepts only floating-point inputs"); - return detail::compute_dot, T, detail::is_aligned::value>::call(x, y); - } - - template - GLM_FUNC_QUALIFIER T length(qua const& q) - { - return glm::sqrt(dot(q, q)); - } - - template - GLM_FUNC_QUALIFIER qua normalize(qua const& q) - { - T len = length(q); - if(len <= static_cast(0)) // Problem - return qua(static_cast(1), static_cast(0), static_cast(0), static_cast(0)); - T oneOverLen = static_cast(1) / len; - return qua(q.w * oneOverLen, q.x * oneOverLen, q.y * oneOverLen, q.z * oneOverLen); - } - - template - GLM_FUNC_QUALIFIER qua cross(qua const& q1, qua const& q2) - { - return qua( - q1.w * q2.w - q1.x * q2.x - q1.y * q2.y - q1.z * q2.z, - q1.w * q2.x + q1.x * q2.w + q1.y * q2.z - q1.z * q2.y, - q1.w * q2.y + q1.y * q2.w + q1.z * q2.x - q1.x * q2.z, - q1.w * q2.z + q1.z * q2.w + q1.x * q2.y - q1.y * q2.x); - } -}//namespace glm - diff --git a/src/vendor/glm/ext/quaternion_relational.hpp b/src/vendor/glm/ext/quaternion_relational.hpp deleted file mode 100755 index 7aa121d..0000000 --- a/src/vendor/glm/ext/quaternion_relational.hpp +++ /dev/null @@ -1,62 +0,0 @@ -/// @ref ext_quaternion_relational -/// @file glm/ext/quaternion_relational.hpp -/// -/// @defgroup ext_quaternion_relational GLM_EXT_quaternion_relational -/// @ingroup ext -/// -/// Exposes comparison functions for quaternion types that take a user defined epsilon values. -/// -/// Include to use the features of this extension. -/// -/// @see core_vector_relational -/// @see ext_vector_relational -/// @see ext_matrix_relational -/// @see ext_quaternion_float -/// @see ext_quaternion_double - -#pragma once - -// Dependency: -#include "../vector_relational.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_relational extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_relational - /// @{ - - /// Returns the component-wise comparison of result x == y. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL vec<4, bool, Q> equal(qua const& x, qua const& y); - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL vec<4, bool, Q> equal(qua const& x, qua const& y, T epsilon); - - /// Returns the component-wise comparison of result x != y. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL vec<4, bool, Q> notEqual(qua const& x, qua const& y); - - /// Returns the component-wise comparison of |x - y| >= epsilon. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL vec<4, bool, Q> notEqual(qua const& x, qua const& y, T epsilon); - - /// @} -} //namespace glm - -#include "quaternion_relational.inl" diff --git a/src/vendor/glm/ext/quaternion_relational.inl b/src/vendor/glm/ext/quaternion_relational.inl deleted file mode 100755 index b1713e9..0000000 --- a/src/vendor/glm/ext/quaternion_relational.inl +++ /dev/null @@ -1,35 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> equal(qua const& x, qua const& y) - { - vec<4, bool, Q> Result; - for(length_t i = 0; i < x.length(); ++i) - Result[i] = x[i] == y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> equal(qua const& x, qua const& y, T epsilon) - { - vec<4, T, Q> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w); - return lessThan(abs(v), vec<4, T, Q>(epsilon)); - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> notEqual(qua const& x, qua const& y) - { - vec<4, bool, Q> Result; - for(length_t i = 0; i < x.length(); ++i) - Result[i] = x[i] != y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> notEqual(qua const& x, qua const& y, T epsilon) - { - vec<4, T, Q> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w); - return greaterThanEqual(abs(v), vec<4, T, Q>(epsilon)); - } -}//namespace glm - diff --git a/src/vendor/glm/ext/quaternion_transform.hpp b/src/vendor/glm/ext/quaternion_transform.hpp deleted file mode 100755 index a9cc5c2..0000000 --- a/src/vendor/glm/ext/quaternion_transform.hpp +++ /dev/null @@ -1,47 +0,0 @@ -/// @ref ext_quaternion_transform -/// @file glm/ext/quaternion_transform.hpp -/// -/// @defgroup ext_quaternion_transform GLM_EXT_quaternion_transform -/// @ingroup ext -/// -/// Provides transformation functions for quaternion types -/// -/// Include to use the features of this extension. -/// -/// @see ext_quaternion_float -/// @see ext_quaternion_double -/// @see ext_quaternion_exponential -/// @see ext_quaternion_geometric -/// @see ext_quaternion_relational -/// @see ext_quaternion_trigonometric - -#pragma once - -// Dependency: -#include "../common.hpp" -#include "../trigonometric.hpp" -#include "../geometric.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_transform extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_transform - /// @{ - - /// Rotates a quaternion from a vector of 3 components axis and an angle. - /// - /// @param q Source orientation - /// @param angle Angle expressed in radians. - /// @param axis Axis of the rotation - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL qua rotate(qua const& q, T const& angle, vec<3, T, Q> const& axis); - /// @} -} //namespace glm - -#include "quaternion_transform.inl" diff --git a/src/vendor/glm/ext/quaternion_transform.inl b/src/vendor/glm/ext/quaternion_transform.inl deleted file mode 100755 index b87ecb6..0000000 --- a/src/vendor/glm/ext/quaternion_transform.inl +++ /dev/null @@ -1,24 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER qua rotate(qua const& q, T const& angle, vec<3, T, Q> const& v) - { - vec<3, T, Q> Tmp = v; - - // Axis of rotation must be normalised - T len = glm::length(Tmp); - if(abs(len - static_cast(1)) > static_cast(0.001)) - { - T oneOverLen = static_cast(1) / len; - Tmp.x *= oneOverLen; - Tmp.y *= oneOverLen; - Tmp.z *= oneOverLen; - } - - T const AngleRad(angle); - T const Sin = sin(AngleRad * static_cast(0.5)); - - return q * qua(cos(AngleRad * static_cast(0.5)), Tmp.x * Sin, Tmp.y * Sin, Tmp.z * Sin); - } -}//namespace glm - diff --git a/src/vendor/glm/ext/quaternion_trigonometric.hpp b/src/vendor/glm/ext/quaternion_trigonometric.hpp deleted file mode 100755 index 76cea27..0000000 --- a/src/vendor/glm/ext/quaternion_trigonometric.hpp +++ /dev/null @@ -1,63 +0,0 @@ -/// @ref ext_quaternion_trigonometric -/// @file glm/ext/quaternion_trigonometric.hpp -/// -/// @defgroup ext_quaternion_trigonometric GLM_EXT_quaternion_trigonometric -/// @ingroup ext -/// -/// Provides trigonometric functions for quaternion types -/// -/// Include to use the features of this extension. -/// -/// @see ext_quaternion_float -/// @see ext_quaternion_double -/// @see ext_quaternion_exponential -/// @see ext_quaternion_geometric -/// @see ext_quaternion_relational -/// @see ext_quaternion_transform - -#pragma once - -// Dependency: -#include "../trigonometric.hpp" -#include "../exponential.hpp" -#include "scalar_constants.hpp" -#include "vector_relational.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_trigonometric extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_trigonometric - /// @{ - - /// Returns the quaternion rotation angle. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL T angle(qua const& x); - - /// Returns the q rotation axis. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL vec<3, T, Q> axis(qua const& x); - - /// Build a quaternion from an angle and a normalized axis. - /// - /// @param angle Angle expressed in radians. - /// @param axis Axis of the quaternion, must be normalized. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua angleAxis(T const& angle, vec<3, T, Q> const& axis); - - /// @} -} //namespace glm - -#include "quaternion_trigonometric.inl" diff --git a/src/vendor/glm/ext/quaternion_trigonometric.inl b/src/vendor/glm/ext/quaternion_trigonometric.inl deleted file mode 100755 index 896449a..0000000 --- a/src/vendor/glm/ext/quaternion_trigonometric.inl +++ /dev/null @@ -1,37 +0,0 @@ -#include "scalar_constants.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER T angle(qua const& x) - { - if (abs(x.w) > cos_one_over_two()) - { - T const a = asin(sqrt(x.x * x.x + x.y * x.y + x.z * x.z)) * static_cast(2); - if(x.w < static_cast(0)) - return pi() * static_cast(2) - a; - return a; - } - - return acos(x.w) * static_cast(2); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> axis(qua const& x) - { - T const tmp1 = static_cast(1) - x.w * x.w; - if(tmp1 <= static_cast(0)) - return vec<3, T, Q>(0, 0, 1); - T const tmp2 = static_cast(1) / sqrt(tmp1); - return vec<3, T, Q>(x.x * tmp2, x.y * tmp2, x.z * tmp2); - } - - template - GLM_FUNC_QUALIFIER qua angleAxis(T const& angle, vec<3, T, Q> const& v) - { - T const a(angle); - T const s = glm::sin(a * static_cast(0.5)); - - return qua(glm::cos(a * static_cast(0.5)), v * s); - } -}//namespace glm diff --git a/src/vendor/glm/ext/scalar_common.hpp b/src/vendor/glm/ext/scalar_common.hpp deleted file mode 100755 index df04b6b..0000000 --- a/src/vendor/glm/ext/scalar_common.hpp +++ /dev/null @@ -1,181 +0,0 @@ -/// @ref ext_scalar_common -/// @file glm/ext/scalar_common.hpp -/// -/// @defgroup ext_scalar_common GLM_EXT_scalar_common -/// @ingroup ext -/// -/// Exposes min and max functions for 3 to 4 scalar parameters. -/// -/// Include to use the features of this extension. -/// -/// @see core_func_common -/// @see ext_vector_common - -#pragma once - -// Dependency: -#include "../common.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_common extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_scalar_common - /// @{ - - /// Returns the minimum component-wise values of 3 inputs - /// - /// @tparam T A floating-point scalar type. - /// - /// @see ext_scalar_common - template - GLM_FUNC_DECL T min(T a, T b, T c); - - /// Returns the minimum component-wise values of 4 inputs - /// - /// @tparam T A floating-point scalar type. - /// - /// @see ext_scalar_common - template - GLM_FUNC_DECL T min(T a, T b, T c, T d); - - /// Returns the maximum component-wise values of 3 inputs - /// - /// @tparam T A floating-point scalar type. - /// - /// @see ext_scalar_common - template - GLM_FUNC_DECL T max(T a, T b, T c); - - /// Returns the maximum component-wise values of 4 inputs - /// - /// @tparam T A floating-point scalar type. - /// - /// @see ext_scalar_common - template - GLM_FUNC_DECL T max(T a, T b, T c, T d); - - /// Returns the minimum component-wise values of 2 inputs. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam T A floating-point scalar type. - /// - /// @see std::fmin documentation - /// @see ext_scalar_common - template - GLM_FUNC_DECL T fmin(T a, T b); - - /// Returns the minimum component-wise values of 3 inputs. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam T A floating-point scalar type. - /// - /// @see std::fmin documentation - /// @see ext_scalar_common - template - GLM_FUNC_DECL T fmin(T a, T b, T c); - - /// Returns the minimum component-wise values of 4 inputs. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam T A floating-point scalar type. - /// - /// @see std::fmin documentation - /// @see ext_scalar_common - template - GLM_FUNC_DECL T fmin(T a, T b, T c, T d); - - /// Returns the maximum component-wise values of 2 inputs. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam T A floating-point scalar type. - /// - /// @see std::fmax documentation - /// @see ext_scalar_common - template - GLM_FUNC_DECL T fmax(T a, T b); - - /// Returns the maximum component-wise values of 3 inputs. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam T A floating-point scalar type. - /// - /// @see std::fmax documentation - /// @see ext_scalar_common - template - GLM_FUNC_DECL T fmax(T a, T b, T C); - - /// Returns the maximum component-wise values of 4 inputs. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam T A floating-point scalar type. - /// - /// @see std::fmax documentation - /// @see ext_scalar_common - template - GLM_FUNC_DECL T fmax(T a, T b, T C, T D); - - /// Returns min(max(x, minVal), maxVal) for each component in x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam genType Floating-point scalar types. - /// - /// @see ext_scalar_common - template - GLM_FUNC_DECL genType fclamp(genType x, genType minVal, genType maxVal); - - /// Simulate GL_CLAMP OpenGL wrap mode - /// - /// @tparam genType Floating-point scalar types. - /// - /// @see ext_scalar_common extension. - template - GLM_FUNC_DECL genType clamp(genType const& Texcoord); - - /// Simulate GL_REPEAT OpenGL wrap mode - /// - /// @tparam genType Floating-point scalar types. - /// - /// @see ext_scalar_common extension. - template - GLM_FUNC_DECL genType repeat(genType const& Texcoord); - - /// Simulate GL_MIRRORED_REPEAT OpenGL wrap mode - /// - /// @tparam genType Floating-point scalar types. - /// - /// @see ext_scalar_common extension. - template - GLM_FUNC_DECL genType mirrorClamp(genType const& Texcoord); - - /// Simulate GL_MIRROR_REPEAT OpenGL wrap mode - /// - /// @tparam genType Floating-point scalar types. - /// - /// @see ext_scalar_common extension. - template - GLM_FUNC_DECL genType mirrorRepeat(genType const& Texcoord); - - /// Returns a value equal to the nearest integer to x. - /// The fraction 0.5 will round in a direction chosen by the - /// implementation, presumably the direction that is fastest. - /// - /// @param x The values of the argument must be greater or equal to zero. - /// @tparam genType floating point scalar types. - /// - /// @see GLSL round man page - /// @see ext_scalar_common extension. - template - GLM_FUNC_DECL int iround(genType const& x); - - /// Returns a value equal to the nearest integer to x. - /// The fraction 0.5 will round in a direction chosen by the - /// implementation, presumably the direction that is fastest. - /// - /// @param x The values of the argument must be greater or equal to zero. - /// @tparam genType floating point scalar types. - /// - /// @see GLSL round man page - /// @see ext_scalar_common extension. - template - GLM_FUNC_DECL uint uround(genType const& x); - - /// @} -}//namespace glm - -#include "scalar_common.inl" diff --git a/src/vendor/glm/ext/scalar_common.inl b/src/vendor/glm/ext/scalar_common.inl deleted file mode 100755 index 2807a37..0000000 --- a/src/vendor/glm/ext/scalar_common.inl +++ /dev/null @@ -1,170 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER T min(T a, T b, T c) - { - return glm::min(glm::min(a, b), c); - } - - template - GLM_FUNC_QUALIFIER T min(T a, T b, T c, T d) - { - return glm::min(glm::min(a, b), glm::min(c, d)); - } - - template - GLM_FUNC_QUALIFIER T max(T a, T b, T c) - { - return glm::max(glm::max(a, b), c); - } - - template - GLM_FUNC_QUALIFIER T max(T a, T b, T c, T d) - { - return glm::max(glm::max(a, b), glm::max(c, d)); - } - -# if GLM_HAS_CXX11_STL - using std::fmin; -# else - template - GLM_FUNC_QUALIFIER T fmin(T a, T b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point input"); - - if (isnan(a)) - return b; - return min(a, b); - } -# endif - - template - GLM_FUNC_QUALIFIER T fmin(T a, T b, T c) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point input"); - - if (isnan(a)) - return fmin(b, c); - if (isnan(b)) - return fmin(a, c); - if (isnan(c)) - return min(a, b); - return min(a, b, c); - } - - template - GLM_FUNC_QUALIFIER T fmin(T a, T b, T c, T d) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point input"); - - if (isnan(a)) - return fmin(b, c, d); - if (isnan(b)) - return min(a, fmin(c, d)); - if (isnan(c)) - return fmin(min(a, b), d); - if (isnan(d)) - return min(a, b, c); - return min(a, b, c, d); - } - - -# if GLM_HAS_CXX11_STL - using std::fmax; -# else - template - GLM_FUNC_QUALIFIER T fmax(T a, T b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point input"); - - if (isnan(a)) - return b; - return max(a, b); - } -# endif - - template - GLM_FUNC_QUALIFIER T fmax(T a, T b, T c) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point input"); - - if (isnan(a)) - return fmax(b, c); - if (isnan(b)) - return fmax(a, c); - if (isnan(c)) - return max(a, b); - return max(a, b, c); - } - - template - GLM_FUNC_QUALIFIER T fmax(T a, T b, T c, T d) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point input"); - - if (isnan(a)) - return fmax(b, c, d); - if (isnan(b)) - return max(a, fmax(c, d)); - if (isnan(c)) - return fmax(max(a, b), d); - if (isnan(d)) - return max(a, b, c); - return max(a, b, c, d); - } - - // fclamp - template - GLM_FUNC_QUALIFIER genType fclamp(genType x, genType minVal, genType maxVal) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fclamp' only accept floating-point or integer inputs"); - return fmin(fmax(x, minVal), maxVal); - } - - template - GLM_FUNC_QUALIFIER genType clamp(genType const& Texcoord) - { - return glm::clamp(Texcoord, static_cast(0), static_cast(1)); - } - - template - GLM_FUNC_QUALIFIER genType repeat(genType const& Texcoord) - { - return glm::fract(Texcoord); - } - - template - GLM_FUNC_QUALIFIER genType mirrorClamp(genType const& Texcoord) - { - return glm::fract(glm::abs(Texcoord)); - } - - template - GLM_FUNC_QUALIFIER genType mirrorRepeat(genType const& Texcoord) - { - genType const Abs = glm::abs(Texcoord); - genType const Clamp = glm::mod(glm::floor(Abs), static_cast(2)); - genType const Floor = glm::floor(Abs); - genType const Rest = Abs - Floor; - genType const Mirror = Clamp + Rest; - return mix(Rest, static_cast(1) - Rest, Mirror >= static_cast(1)); - } - - template - GLM_FUNC_QUALIFIER int iround(genType const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'iround' only accept floating-point inputs"); - assert(static_cast(0.0) <= x); - - return static_cast(x + static_cast(0.5)); - } - - template - GLM_FUNC_QUALIFIER uint uround(genType const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'uround' only accept floating-point inputs"); - assert(static_cast(0.0) <= x); - - return static_cast(x + static_cast(0.5)); - } -}//namespace glm diff --git a/src/vendor/glm/ext/scalar_constants.hpp b/src/vendor/glm/ext/scalar_constants.hpp deleted file mode 100755 index 74e210d..0000000 --- a/src/vendor/glm/ext/scalar_constants.hpp +++ /dev/null @@ -1,40 +0,0 @@ -/// @ref ext_scalar_constants -/// @file glm/ext/scalar_constants.hpp -/// -/// @defgroup ext_scalar_constants GLM_EXT_scalar_constants -/// @ingroup ext -/// -/// Provides a list of constants and precomputed useful values. -/// -/// Include to use the features of this extension. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_constants extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_scalar_constants - /// @{ - - /// Return the epsilon constant for floating point types. - template - GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon(); - - /// Return the pi constant for floating point types. - template - GLM_FUNC_DECL GLM_CONSTEXPR genType pi(); - - /// Return the value of cos(1 / 2) for floating point types. - template - GLM_FUNC_DECL GLM_CONSTEXPR genType cos_one_over_two(); - - /// @} -} //namespace glm - -#include "scalar_constants.inl" diff --git a/src/vendor/glm/ext/scalar_constants.inl b/src/vendor/glm/ext/scalar_constants.inl deleted file mode 100755 index b475adf..0000000 --- a/src/vendor/glm/ext/scalar_constants.inl +++ /dev/null @@ -1,24 +0,0 @@ -#include - -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType epsilon() - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'epsilon' only accepts floating-point inputs"); - return std::numeric_limits::epsilon(); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType pi() - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'pi' only accepts floating-point inputs"); - return static_cast(3.14159265358979323846264338327950288); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType cos_one_over_two() - { - return genType(0.877582561890372716130286068203503191); - } -} //namespace glm diff --git a/src/vendor/glm/ext/scalar_int_sized.hpp b/src/vendor/glm/ext/scalar_int_sized.hpp deleted file mode 100755 index 8e9c511..0000000 --- a/src/vendor/glm/ext/scalar_int_sized.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/// @ref ext_scalar_int_sized -/// @file glm/ext/scalar_int_sized.hpp -/// -/// @defgroup ext_scalar_int_sized GLM_EXT_scalar_int_sized -/// @ingroup ext -/// -/// Exposes sized signed integer scalar types. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_uint_sized - -#pragma once - -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_int_sized extension included") -#endif - -namespace glm{ -namespace detail -{ -# if GLM_HAS_EXTENDED_INTEGER_TYPE - typedef std::int8_t int8; - typedef std::int16_t int16; - typedef std::int32_t int32; -# else - typedef signed char int8; - typedef signed short int16; - typedef signed int int32; -#endif// - - template<> - struct is_int - { - enum test {value = ~0}; - }; - - template<> - struct is_int - { - enum test {value = ~0}; - }; - - template<> - struct is_int - { - enum test {value = ~0}; - }; -}//namespace detail - - - /// @addtogroup ext_scalar_int_sized - /// @{ - - /// 8 bit signed integer type. - typedef detail::int8 int8; - - /// 16 bit signed integer type. - typedef detail::int16 int16; - - /// 32 bit signed integer type. - typedef detail::int32 int32; - - /// 64 bit signed integer type. - typedef detail::int64 int64; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/scalar_integer.hpp b/src/vendor/glm/ext/scalar_integer.hpp deleted file mode 100755 index a2ca8a2..0000000 --- a/src/vendor/glm/ext/scalar_integer.hpp +++ /dev/null @@ -1,92 +0,0 @@ -/// @ref ext_scalar_integer -/// @file glm/ext/scalar_integer.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_scalar_integer GLM_EXT_scalar_integer -/// @ingroup ext -/// -/// Include to use the features of this extension. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../detail/_vectorize.hpp" -#include "../detail/type_float.hpp" -#include "../vector_relational.hpp" -#include "../common.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_integer extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_scalar_integer - /// @{ - - /// Return true if the value is a power of two number. - /// - /// @see ext_scalar_integer - template - GLM_FUNC_DECL bool isPowerOfTwo(genIUType v); - - /// Return the power of two number which value is just higher the input value, - /// round up to a power of two. - /// - /// @see ext_scalar_integer - template - GLM_FUNC_DECL genIUType nextPowerOfTwo(genIUType v); - - /// Return the power of two number which value is just lower the input value, - /// round down to a power of two. - /// - /// @see ext_scalar_integer - template - GLM_FUNC_DECL genIUType prevPowerOfTwo(genIUType v); - - /// Return true if the 'Value' is a multiple of 'Multiple'. - /// - /// @see ext_scalar_integer - template - GLM_FUNC_DECL bool isMultiple(genIUType v, genIUType Multiple); - - /// Higher multiple number of Source. - /// - /// @tparam genIUType Integer scalar or vector types. - /// - /// @param v Source value to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see ext_scalar_integer - template - GLM_FUNC_DECL genIUType nextMultiple(genIUType v, genIUType Multiple); - - /// Lower multiple number of Source. - /// - /// @tparam genIUType Integer scalar or vector types. - /// - /// @param v Source value to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see ext_scalar_integer - template - GLM_FUNC_DECL genIUType prevMultiple(genIUType v, genIUType Multiple); - - /// Returns the bit number of the Nth significant bit set to - /// 1 in the binary representation of value. - /// If value bitcount is less than the Nth significant bit, -1 will be returned. - /// - /// @tparam genIUType Signed or unsigned integer scalar types. - /// - /// @see ext_scalar_integer - template - GLM_FUNC_DECL int findNSB(genIUType x, int significantBitCount); - - /// @} -} //namespace glm - -#include "scalar_integer.inl" diff --git a/src/vendor/glm/ext/scalar_integer.inl b/src/vendor/glm/ext/scalar_integer.inl deleted file mode 100755 index efba960..0000000 --- a/src/vendor/glm/ext/scalar_integer.inl +++ /dev/null @@ -1,243 +0,0 @@ -#include "../integer.hpp" - -namespace glm{ -namespace detail -{ - template - struct compute_ceilShift - { - GLM_FUNC_QUALIFIER static vec call(vec const& v, T) - { - return v; - } - }; - - template - struct compute_ceilShift - { - GLM_FUNC_QUALIFIER static vec call(vec const& v, T Shift) - { - return v | (v >> Shift); - } - }; - - template - struct compute_ceilPowerOfTwo - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - GLM_STATIC_ASSERT(!std::numeric_limits::is_iec559, "'ceilPowerOfTwo' only accept integer scalar or vector inputs"); - - vec const Sign(sign(x)); - - vec v(abs(x)); - - v = v - static_cast(1); - v = v | (v >> static_cast(1)); - v = v | (v >> static_cast(2)); - v = v | (v >> static_cast(4)); - v = compute_ceilShift= 2>::call(v, 8); - v = compute_ceilShift= 4>::call(v, 16); - v = compute_ceilShift= 8>::call(v, 32); - return (v + static_cast(1)) * Sign; - } - }; - - template - struct compute_ceilPowerOfTwo - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - GLM_STATIC_ASSERT(!std::numeric_limits::is_iec559, "'ceilPowerOfTwo' only accept integer scalar or vector inputs"); - - vec v(x); - - v = v - static_cast(1); - v = v | (v >> static_cast(1)); - v = v | (v >> static_cast(2)); - v = v | (v >> static_cast(4)); - v = compute_ceilShift= 2>::call(v, 8); - v = compute_ceilShift= 4>::call(v, 16); - v = compute_ceilShift= 8>::call(v, 32); - return v + static_cast(1); - } - }; - - template - struct compute_ceilMultiple{}; - - template<> - struct compute_ceilMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - if(Source > genType(0)) - return Source + (Multiple - std::fmod(Source, Multiple)); - else - return Source + std::fmod(-Source, Multiple); - } - }; - - template<> - struct compute_ceilMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - genType Tmp = Source - genType(1); - return Tmp + (Multiple - (Tmp % Multiple)); - } - }; - - template<> - struct compute_ceilMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - assert(Multiple > genType(0)); - if(Source > genType(0)) - { - genType Tmp = Source - genType(1); - return Tmp + (Multiple - (Tmp % Multiple)); - } - else - return Source + (-Source % Multiple); - } - }; - - template - struct compute_floorMultiple{}; - - template<> - struct compute_floorMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - if(Source >= genType(0)) - return Source - std::fmod(Source, Multiple); - else - return Source - std::fmod(Source, Multiple) - Multiple; - } - }; - - template<> - struct compute_floorMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - if(Source >= genType(0)) - return Source - Source % Multiple; - else - { - genType Tmp = Source + genType(1); - return Tmp - Tmp % Multiple - Multiple; - } - } - }; - - template<> - struct compute_floorMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - if(Source >= genType(0)) - return Source - Source % Multiple; - else - { - genType Tmp = Source + genType(1); - return Tmp - Tmp % Multiple - Multiple; - } - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER bool isPowerOfTwo(genIUType Value) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'isPowerOfTwo' only accept integer inputs"); - - genIUType const Result = glm::abs(Value); - return !(Result & (Result - 1)); - } - - template - GLM_FUNC_QUALIFIER genIUType nextPowerOfTwo(genIUType value) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'nextPowerOfTwo' only accept integer inputs"); - - return detail::compute_ceilPowerOfTwo<1, genIUType, defaultp, std::numeric_limits::is_signed>::call(vec<1, genIUType, defaultp>(value)).x; - } - - template - GLM_FUNC_QUALIFIER genIUType prevPowerOfTwo(genIUType value) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'prevPowerOfTwo' only accept integer inputs"); - - return isPowerOfTwo(value) ? value : static_cast(static_cast(1) << static_cast(findMSB(value))); - } - - template - GLM_FUNC_QUALIFIER bool isMultiple(genIUType Value, genIUType Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'isMultiple' only accept integer inputs"); - - return isMultiple(vec<1, genIUType>(Value), vec<1, genIUType>(Multiple)).x; - } - - template - GLM_FUNC_QUALIFIER genIUType nextMultiple(genIUType Source, genIUType Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'nextMultiple' only accept integer inputs"); - - return detail::compute_ceilMultiple::is_iec559, std::numeric_limits::is_signed>::call(Source, Multiple); - } - - template - GLM_FUNC_QUALIFIER genIUType prevMultiple(genIUType Source, genIUType Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'prevMultiple' only accept integer inputs"); - - return detail::compute_floorMultiple::is_iec559, std::numeric_limits::is_signed>::call(Source, Multiple); - } - - template - GLM_FUNC_QUALIFIER int findNSB(genIUType x, int significantBitCount) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findNSB' only accept integer inputs"); - - if(bitCount(x) < significantBitCount) - return -1; - - genIUType const One = static_cast(1); - int bitPos = 0; - - genIUType key = x; - int nBitCount = significantBitCount; - int Step = sizeof(x) * 8 / 2; - while (key > One) - { - genIUType Mask = static_cast((One << Step) - One); - genIUType currentKey = key & Mask; - int currentBitCount = bitCount(currentKey); - if (nBitCount > currentBitCount) - { - nBitCount -= currentBitCount; - bitPos += Step; - key >>= static_cast(Step); - } - else - { - key = key & Mask; - } - - Step >>= 1; - } - - return static_cast(bitPos); - } -}//namespace glm diff --git a/src/vendor/glm/ext/scalar_packing.hpp b/src/vendor/glm/ext/scalar_packing.hpp deleted file mode 100755 index 18b85b7..0000000 --- a/src/vendor/glm/ext/scalar_packing.hpp +++ /dev/null @@ -1,32 +0,0 @@ -/// @ref ext_scalar_packing -/// @file glm/ext/scalar_packing.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_scalar_packing GLM_EXT_scalar_packing -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// This extension provides a set of function to convert scalar values to packed -/// formats. - -#pragma once - -// Dependency: -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_packing extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_scalar_packing - /// @{ - - - /// @} -}// namespace glm - -#include "scalar_packing.inl" diff --git a/src/vendor/glm/ext/scalar_packing.inl b/src/vendor/glm/ext/scalar_packing.inl deleted file mode 100755 index e69de29..0000000 diff --git a/src/vendor/glm/ext/scalar_reciprocal.hpp b/src/vendor/glm/ext/scalar_reciprocal.hpp deleted file mode 100755 index 1c7b81d..0000000 --- a/src/vendor/glm/ext/scalar_reciprocal.hpp +++ /dev/null @@ -1,135 +0,0 @@ -/// @ref ext_scalar_reciprocal -/// @file glm/ext/scalar_reciprocal.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_scalar_reciprocal GLM_EXT_scalar_reciprocal -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Define secant, cosecant and cotangent functions. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_reciprocal extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_scalar_reciprocal - /// @{ - - /// Secant function. - /// hypotenuse / adjacent or 1 / cos(x) - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see ext_scalar_reciprocal - template - GLM_FUNC_DECL genType sec(genType angle); - - /// Cosecant function. - /// hypotenuse / opposite or 1 / sin(x) - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see ext_scalar_reciprocal - template - GLM_FUNC_DECL genType csc(genType angle); - - /// Cotangent function. - /// adjacent / opposite or 1 / tan(x) - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see ext_scalar_reciprocal - template - GLM_FUNC_DECL genType cot(genType angle); - - /// Inverse secant function. - /// - /// @return Return an angle expressed in radians. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see ext_scalar_reciprocal - template - GLM_FUNC_DECL genType asec(genType x); - - /// Inverse cosecant function. - /// - /// @return Return an angle expressed in radians. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see ext_scalar_reciprocal - template - GLM_FUNC_DECL genType acsc(genType x); - - /// Inverse cotangent function. - /// - /// @return Return an angle expressed in radians. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see ext_scalar_reciprocal - template - GLM_FUNC_DECL genType acot(genType x); - - /// Secant hyperbolic function. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see ext_scalar_reciprocal - template - GLM_FUNC_DECL genType sech(genType angle); - - /// Cosecant hyperbolic function. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see ext_scalar_reciprocal - template - GLM_FUNC_DECL genType csch(genType angle); - - /// Cotangent hyperbolic function. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see ext_scalar_reciprocal - template - GLM_FUNC_DECL genType coth(genType angle); - - /// Inverse secant hyperbolic function. - /// - /// @return Return an angle expressed in radians. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see ext_scalar_reciprocal - template - GLM_FUNC_DECL genType asech(genType x); - - /// Inverse cosecant hyperbolic function. - /// - /// @return Return an angle expressed in radians. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see ext_scalar_reciprocal - template - GLM_FUNC_DECL genType acsch(genType x); - - /// Inverse cotangent hyperbolic function. - /// - /// @return Return an angle expressed in radians. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see ext_scalar_reciprocal - template - GLM_FUNC_DECL genType acoth(genType x); - - /// @} -}//namespace glm - -#include "scalar_reciprocal.inl" diff --git a/src/vendor/glm/ext/scalar_reciprocal.inl b/src/vendor/glm/ext/scalar_reciprocal.inl deleted file mode 100755 index 570a406..0000000 --- a/src/vendor/glm/ext/scalar_reciprocal.inl +++ /dev/null @@ -1,107 +0,0 @@ -/// @ref ext_scalar_reciprocal - -#include "../trigonometric.hpp" -#include - -namespace glm -{ - // sec - template - GLM_FUNC_QUALIFIER genType sec(genType angle) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'sec' only accept floating-point values"); - return genType(1) / glm::cos(angle); - } - - // csc - template - GLM_FUNC_QUALIFIER genType csc(genType angle) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'csc' only accept floating-point values"); - return genType(1) / glm::sin(angle); - } - - // cot - template - GLM_FUNC_QUALIFIER genType cot(genType angle) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'cot' only accept floating-point values"); - - genType const pi_over_2 = genType(3.1415926535897932384626433832795 / 2.0); - return glm::tan(pi_over_2 - angle); - } - - // asec - template - GLM_FUNC_QUALIFIER genType asec(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'asec' only accept floating-point values"); - return acos(genType(1) / x); - } - - // acsc - template - GLM_FUNC_QUALIFIER genType acsc(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acsc' only accept floating-point values"); - return asin(genType(1) / x); - } - - // acot - template - GLM_FUNC_QUALIFIER genType acot(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acot' only accept floating-point values"); - - genType const pi_over_2 = genType(3.1415926535897932384626433832795 / 2.0); - return pi_over_2 - atan(x); - } - - // sech - template - GLM_FUNC_QUALIFIER genType sech(genType angle) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'sech' only accept floating-point values"); - return genType(1) / glm::cosh(angle); - } - - // csch - template - GLM_FUNC_QUALIFIER genType csch(genType angle) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'csch' only accept floating-point values"); - return genType(1) / glm::sinh(angle); - } - - // coth - template - GLM_FUNC_QUALIFIER genType coth(genType angle) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'coth' only accept floating-point values"); - return glm::cosh(angle) / glm::sinh(angle); - } - - // asech - template - GLM_FUNC_QUALIFIER genType asech(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'asech' only accept floating-point values"); - return acosh(genType(1) / x); - } - - // acsch - template - GLM_FUNC_QUALIFIER genType acsch(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acsch' only accept floating-point values"); - return asinh(genType(1) / x); - } - - // acoth - template - GLM_FUNC_QUALIFIER genType acoth(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acoth' only accept floating-point values"); - return atanh(genType(1) / x); - } -}//namespace glm diff --git a/src/vendor/glm/ext/scalar_relational.hpp b/src/vendor/glm/ext/scalar_relational.hpp deleted file mode 100755 index 3076a5e..0000000 --- a/src/vendor/glm/ext/scalar_relational.hpp +++ /dev/null @@ -1,65 +0,0 @@ -/// @ref ext_scalar_relational -/// @file glm/ext/scalar_relational.hpp -/// -/// @defgroup ext_scalar_relational GLM_EXT_scalar_relational -/// @ingroup ext -/// -/// Exposes comparison functions for scalar types that take a user defined epsilon values. -/// -/// Include to use the features of this extension. -/// -/// @see core_vector_relational -/// @see ext_vector_relational -/// @see ext_matrix_relational - -#pragma once - -// Dependencies -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_relational extension included") -#endif - -namespace glm -{ - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is satisfied. - /// - /// @tparam genType Floating-point or integer scalar types - template - GLM_FUNC_DECL GLM_CONSTEXPR bool equal(genType const& x, genType const& y, genType const& epsilon); - - /// Returns the component-wise comparison of |x - y| >= epsilon. - /// True if this expression is not satisfied. - /// - /// @tparam genType Floating-point or integer scalar types - template - GLM_FUNC_DECL GLM_CONSTEXPR bool notEqual(genType const& x, genType const& y, genType const& epsilon); - - /// Returns the component-wise comparison between two scalars in term of ULPs. - /// True if this expression is satisfied. - /// - /// @param x First operand. - /// @param y Second operand. - /// @param ULPs Maximum difference in ULPs between the two operators to consider them equal. - /// - /// @tparam genType Floating-point or integer scalar types - template - GLM_FUNC_DECL GLM_CONSTEXPR bool equal(genType const& x, genType const& y, int ULPs); - - /// Returns the component-wise comparison between two scalars in term of ULPs. - /// True if this expression is not satisfied. - /// - /// @param x First operand. - /// @param y Second operand. - /// @param ULPs Maximum difference in ULPs between the two operators to consider them not equal. - /// - /// @tparam genType Floating-point or integer scalar types - template - GLM_FUNC_DECL GLM_CONSTEXPR bool notEqual(genType const& x, genType const& y, int ULPs); - - /// @} -}//namespace glm - -#include "scalar_relational.inl" diff --git a/src/vendor/glm/ext/scalar_relational.inl b/src/vendor/glm/ext/scalar_relational.inl deleted file mode 100755 index c85583e..0000000 --- a/src/vendor/glm/ext/scalar_relational.inl +++ /dev/null @@ -1,40 +0,0 @@ -#include "../common.hpp" -#include "../ext/scalar_int_sized.hpp" -#include "../ext/scalar_uint_sized.hpp" -#include "../detail/type_float.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool equal(genType const& x, genType const& y, genType const& epsilon) - { - return abs(x - y) <= epsilon; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool notEqual(genType const& x, genType const& y, genType const& epsilon) - { - return abs(x - y) > epsilon; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool equal(genType const& x, genType const& y, int MaxULPs) - { - detail::float_t const a(x); - detail::float_t const b(y); - - // Different signs means they do not match. - if(a.negative() != b.negative()) - return false; - - // Find the difference in ULPs. - typename detail::float_t::int_type const DiffULPs = abs(a.i - b.i); - return DiffULPs <= MaxULPs; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool notEqual(genType const& x, genType const& y, int ULPs) - { - return !equal(x, y, ULPs); - } -}//namespace glm diff --git a/src/vendor/glm/ext/scalar_uint_sized.hpp b/src/vendor/glm/ext/scalar_uint_sized.hpp deleted file mode 100755 index fd5267f..0000000 --- a/src/vendor/glm/ext/scalar_uint_sized.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/// @ref ext_scalar_uint_sized -/// @file glm/ext/scalar_uint_sized.hpp -/// -/// @defgroup ext_scalar_uint_sized GLM_EXT_scalar_uint_sized -/// @ingroup ext -/// -/// Exposes sized unsigned integer scalar types. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_int_sized - -#pragma once - -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_uint_sized extension included") -#endif - -namespace glm{ -namespace detail -{ -# if GLM_HAS_EXTENDED_INTEGER_TYPE - typedef std::uint8_t uint8; - typedef std::uint16_t uint16; - typedef std::uint32_t uint32; -# else - typedef unsigned char uint8; - typedef unsigned short uint16; - typedef unsigned int uint32; -#endif - - template<> - struct is_int - { - enum test {value = ~0}; - }; - - template<> - struct is_int - { - enum test {value = ~0}; - }; - - template<> - struct is_int - { - enum test {value = ~0}; - }; -}//namespace detail - - - /// @addtogroup ext_scalar_uint_sized - /// @{ - - /// 8 bit unsigned integer type. - typedef detail::uint8 uint8; - - /// 16 bit unsigned integer type. - typedef detail::uint16 uint16; - - /// 32 bit unsigned integer type. - typedef detail::uint32 uint32; - - /// 64 bit unsigned integer type. - typedef detail::uint64 uint64; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/scalar_ulp.hpp b/src/vendor/glm/ext/scalar_ulp.hpp deleted file mode 100755 index 941ada3..0000000 --- a/src/vendor/glm/ext/scalar_ulp.hpp +++ /dev/null @@ -1,74 +0,0 @@ -/// @ref ext_scalar_ulp -/// @file glm/ext/scalar_ulp.hpp -/// -/// @defgroup ext_scalar_ulp GLM_EXT_scalar_ulp -/// @ingroup ext -/// -/// Allow the measurement of the accuracy of a function against a reference -/// implementation. This extension works on floating-point data and provide results -/// in ULP. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_ulp -/// @see ext_scalar_relational - -#pragma once - -// Dependencies -#include "../ext/scalar_int_sized.hpp" -#include "../common.hpp" -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_ulp extension included") -#endif - -namespace glm -{ - /// Return the next ULP value(s) after the input value(s). - /// - /// @tparam genType A floating-point scalar type. - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL genType nextFloat(genType x); - - /// Return the previous ULP value(s) before the input value(s). - /// - /// @tparam genType A floating-point scalar type. - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL genType prevFloat(genType x); - - /// Return the value(s) ULP distance after the input value(s). - /// - /// @tparam genType A floating-point scalar type. - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL genType nextFloat(genType x, int ULPs); - - /// Return the value(s) ULP distance before the input value(s). - /// - /// @tparam genType A floating-point scalar type. - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL genType prevFloat(genType x, int ULPs); - - /// Return the distance in the number of ULP between 2 single-precision floating-point scalars. - /// - /// @see ext_scalar_ulp - GLM_FUNC_DECL int floatDistance(float x, float y); - - /// Return the distance in the number of ULP between 2 double-precision floating-point scalars. - /// - /// @see ext_scalar_ulp - GLM_FUNC_DECL int64 floatDistance(double x, double y); - - /// @} -}//namespace glm - -#include "scalar_ulp.inl" diff --git a/src/vendor/glm/ext/scalar_ulp.inl b/src/vendor/glm/ext/scalar_ulp.inl deleted file mode 100755 index 308df15..0000000 --- a/src/vendor/glm/ext/scalar_ulp.inl +++ /dev/null @@ -1,284 +0,0 @@ -/// Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. -/// -/// Developed at SunPro, a Sun Microsystems, Inc. business. -/// Permission to use, copy, modify, and distribute this -/// software is freely granted, provided that this notice -/// is preserved. - -#include "../detail/type_float.hpp" -#include "../ext/scalar_constants.hpp" -#include -#include - -#if(GLM_COMPILER & GLM_COMPILER_VC) -# pragma warning(push) -# pragma warning(disable : 4127) -#endif - -typedef union -{ - float value; - /* FIXME: Assumes 32 bit int. */ - unsigned int word; -} ieee_float_shape_type; - -typedef union -{ - double value; - struct - { - int lsw; - int msw; - } parts; -} ieee_double_shape_type; - -#define GLM_EXTRACT_WORDS(ix0,ix1,d) \ - do { \ - ieee_double_shape_type ew_u; \ - ew_u.value = (d); \ - (ix0) = ew_u.parts.msw; \ - (ix1) = ew_u.parts.lsw; \ - } while (0) - -#define GLM_GET_FLOAT_WORD(i,d) \ - do { \ - ieee_float_shape_type gf_u; \ - gf_u.value = (d); \ - (i) = gf_u.word; \ - } while (0) - -#define GLM_SET_FLOAT_WORD(d,i) \ - do { \ - ieee_float_shape_type sf_u; \ - sf_u.word = (i); \ - (d) = sf_u.value; \ - } while (0) - -#define GLM_INSERT_WORDS(d,ix0,ix1) \ - do { \ - ieee_double_shape_type iw_u; \ - iw_u.parts.msw = (ix0); \ - iw_u.parts.lsw = (ix1); \ - (d) = iw_u.value; \ - } while (0) - -namespace glm{ -namespace detail -{ - GLM_FUNC_QUALIFIER float nextafterf(float x, float y) - { - volatile float t; - int hx, hy, ix, iy; - - GLM_GET_FLOAT_WORD(hx, x); - GLM_GET_FLOAT_WORD(hy, y); - ix = hx & 0x7fffffff; // |x| - iy = hy & 0x7fffffff; // |y| - - if((ix > 0x7f800000) || // x is nan - (iy > 0x7f800000)) // y is nan - return x + y; - if(abs(y - x) <= epsilon()) - return y; // x=y, return y - if(ix == 0) - { // x == 0 - GLM_SET_FLOAT_WORD(x, (hy & 0x80000000) | 1);// return +-minsubnormal - t = x * x; - if(abs(t - x) <= epsilon()) - return t; - else - return x; // raise underflow flag - } - if(hx >= 0) - { // x > 0 - if(hx > hy) // x > y, x -= ulp - hx -= 1; - else // x < y, x += ulp - hx += 1; - } - else - { // x < 0 - if(hy >= 0 || hx > hy) // x < y, x -= ulp - hx -= 1; - else // x > y, x += ulp - hx += 1; - } - hy = hx & 0x7f800000; - if(hy >= 0x7f800000) - return x + x; // overflow - if(hy < 0x00800000) // underflow - { - t = x * x; - if(abs(t - x) > epsilon()) - { // raise underflow flag - GLM_SET_FLOAT_WORD(y, hx); - return y; - } - } - GLM_SET_FLOAT_WORD(x, hx); - return x; - } - - GLM_FUNC_QUALIFIER double nextafter(double x, double y) - { - volatile double t; - int hx, hy, ix, iy; - unsigned int lx, ly; - - GLM_EXTRACT_WORDS(hx, lx, x); - GLM_EXTRACT_WORDS(hy, ly, y); - ix = hx & 0x7fffffff; // |x| - iy = hy & 0x7fffffff; // |y| - - if(((ix >= 0x7ff00000) && ((ix - 0x7ff00000) | lx) != 0) || // x is nan - ((iy >= 0x7ff00000) && ((iy - 0x7ff00000) | ly) != 0)) // y is nan - return x + y; - if(abs(y - x) <= epsilon()) - return y; // x=y, return y - if((ix | lx) == 0) - { // x == 0 - GLM_INSERT_WORDS(x, hy & 0x80000000, 1); // return +-minsubnormal - t = x * x; - if(abs(t - x) <= epsilon()) - return t; - else - return x; // raise underflow flag - } - if(hx >= 0) { // x > 0 - if(hx > hy || ((hx == hy) && (lx > ly))) { // x > y, x -= ulp - if(lx == 0) hx -= 1; - lx -= 1; - } - else { // x < y, x += ulp - lx += 1; - if(lx == 0) hx += 1; - } - } - else { // x < 0 - if(hy >= 0 || hx > hy || ((hx == hy) && (lx > ly))){// x < y, x -= ulp - if(lx == 0) hx -= 1; - lx -= 1; - } - else { // x > y, x += ulp - lx += 1; - if(lx == 0) hx += 1; - } - } - hy = hx & 0x7ff00000; - if(hy >= 0x7ff00000) - return x + x; // overflow - if(hy < 0x00100000) - { // underflow - t = x * x; - if(abs(t - x) > epsilon()) - { // raise underflow flag - GLM_INSERT_WORDS(y, hx, lx); - return y; - } - } - GLM_INSERT_WORDS(x, hx, lx); - return x; - } -}//namespace detail -}//namespace glm - -#if(GLM_COMPILER & GLM_COMPILER_VC) -# pragma warning(pop) -#endif - -namespace glm -{ - template<> - GLM_FUNC_QUALIFIER float nextFloat(float x) - { -# if GLM_HAS_CXX11_STL - return std::nextafter(x, std::numeric_limits::max()); -# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) - return detail::nextafterf(x, FLT_MAX); -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return __builtin_nextafterf(x, FLT_MAX); -# else - return nextafterf(x, FLT_MAX); -# endif - } - - template<> - GLM_FUNC_QUALIFIER double nextFloat(double x) - { -# if GLM_HAS_CXX11_STL - return std::nextafter(x, std::numeric_limits::max()); -# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) - return detail::nextafter(x, std::numeric_limits::max()); -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return __builtin_nextafter(x, DBL_MAX); -# else - return nextafter(x, DBL_MAX); -# endif - } - - template - GLM_FUNC_QUALIFIER T nextFloat(T x, int ULPs) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'next_float' only accept floating-point input"); - assert(ULPs >= 0); - - T temp = x; - for(int i = 0; i < ULPs; ++i) - temp = nextFloat(temp); - return temp; - } - - GLM_FUNC_QUALIFIER float prevFloat(float x) - { -# if GLM_HAS_CXX11_STL - return std::nextafter(x, std::numeric_limits::min()); -# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) - return detail::nextafterf(x, FLT_MIN); -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return __builtin_nextafterf(x, FLT_MIN); -# else - return nextafterf(x, FLT_MIN); -# endif - } - - GLM_FUNC_QUALIFIER double prevFloat(double x) - { -# if GLM_HAS_CXX11_STL - return std::nextafter(x, std::numeric_limits::min()); -# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) - return _nextafter(x, DBL_MIN); -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return __builtin_nextafter(x, DBL_MIN); -# else - return nextafter(x, DBL_MIN); -# endif - } - - template - GLM_FUNC_QUALIFIER T prevFloat(T x, int ULPs) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'prev_float' only accept floating-point input"); - assert(ULPs >= 0); - - T temp = x; - for(int i = 0; i < ULPs; ++i) - temp = prevFloat(temp); - return temp; - } - - GLM_FUNC_QUALIFIER int floatDistance(float x, float y) - { - detail::float_t const a(x); - detail::float_t const b(y); - - return abs(a.i - b.i); - } - - GLM_FUNC_QUALIFIER int64 floatDistance(double x, double y) - { - detail::float_t const a(x); - detail::float_t const b(y); - - return abs(a.i - b.i); - } -}//namespace glm diff --git a/src/vendor/glm/ext/vector_bool1.hpp b/src/vendor/glm/ext/vector_bool1.hpp deleted file mode 100755 index 002c320..0000000 --- a/src/vendor/glm/ext/vector_bool1.hpp +++ /dev/null @@ -1,30 +0,0 @@ -/// @ref ext_vector_bool1 -/// @file glm/ext/vector_bool1.hpp -/// -/// @defgroup ext_vector_bool1 GLM_EXT_vector_bool1 -/// @ingroup ext -/// -/// Exposes bvec1 vector type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_bool1_precision extension. - -#pragma once - -#include "../detail/type_vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_bool1 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_bool1 - /// @{ - - /// 1 components vector of boolean. - typedef vec<1, bool, defaultp> bvec1; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_bool1_precision.hpp b/src/vendor/glm/ext/vector_bool1_precision.hpp deleted file mode 100755 index e62d3cf..0000000 --- a/src/vendor/glm/ext/vector_bool1_precision.hpp +++ /dev/null @@ -1,34 +0,0 @@ -/// @ref ext_vector_bool1_precision -/// @file glm/ext/vector_bool1_precision.hpp -/// -/// @defgroup ext_vector_bool1_precision GLM_EXT_vector_bool1_precision -/// @ingroup ext -/// -/// Exposes highp_bvec1, mediump_bvec1 and lowp_bvec1 types. -/// -/// Include to use the features of this extension. - -#pragma once - -#include "../detail/type_vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_bool1_precision extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_bool1_precision - /// @{ - - /// 1 component vector of bool values. - typedef vec<1, bool, highp> highp_bvec1; - - /// 1 component vector of bool values. - typedef vec<1, bool, mediump> mediump_bvec1; - - /// 1 component vector of bool values. - typedef vec<1, bool, lowp> lowp_bvec1; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_bool2.hpp b/src/vendor/glm/ext/vector_bool2.hpp deleted file mode 100755 index 52288b7..0000000 --- a/src/vendor/glm/ext/vector_bool2.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_bool2.hpp - -#pragma once -#include "../detail/type_vec2.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 2 components vector of boolean. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<2, bool, defaultp> bvec2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_bool2_precision.hpp b/src/vendor/glm/ext/vector_bool2_precision.hpp deleted file mode 100755 index 4370933..0000000 --- a/src/vendor/glm/ext/vector_bool2_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_bool2_precision.hpp - -#pragma once -#include "../detail/type_vec2.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 2 components vector of high qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, bool, highp> highp_bvec2; - - /// 2 components vector of medium qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, bool, mediump> mediump_bvec2; - - /// 2 components vector of low qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, bool, lowp> lowp_bvec2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_bool3.hpp b/src/vendor/glm/ext/vector_bool3.hpp deleted file mode 100755 index 90a0b7e..0000000 --- a/src/vendor/glm/ext/vector_bool3.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_bool3.hpp - -#pragma once -#include "../detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 3 components vector of boolean. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<3, bool, defaultp> bvec3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_bool3_precision.hpp b/src/vendor/glm/ext/vector_bool3_precision.hpp deleted file mode 100755 index 89cd2d3..0000000 --- a/src/vendor/glm/ext/vector_bool3_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_bool3_precision.hpp - -#pragma once -#include "../detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 3 components vector of high qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, bool, highp> highp_bvec3; - - /// 3 components vector of medium qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, bool, mediump> mediump_bvec3; - - /// 3 components vector of low qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, bool, lowp> lowp_bvec3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_bool4.hpp b/src/vendor/glm/ext/vector_bool4.hpp deleted file mode 100755 index 18aa71b..0000000 --- a/src/vendor/glm/ext/vector_bool4.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_bool4.hpp - -#pragma once -#include "../detail/type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 4 components vector of boolean. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<4, bool, defaultp> bvec4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_bool4_precision.hpp b/src/vendor/glm/ext/vector_bool4_precision.hpp deleted file mode 100755 index 79786e5..0000000 --- a/src/vendor/glm/ext/vector_bool4_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_bool4_precision.hpp - -#pragma once -#include "../detail/type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 4 components vector of high qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, bool, highp> highp_bvec4; - - /// 4 components vector of medium qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, bool, mediump> mediump_bvec4; - - /// 4 components vector of low qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, bool, lowp> lowp_bvec4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_common.hpp b/src/vendor/glm/ext/vector_common.hpp deleted file mode 100755 index c0a2858..0000000 --- a/src/vendor/glm/ext/vector_common.hpp +++ /dev/null @@ -1,228 +0,0 @@ -/// @ref ext_vector_common -/// @file glm/ext/vector_common.hpp -/// -/// @defgroup ext_vector_common GLM_EXT_vector_common -/// @ingroup ext -/// -/// Exposes min and max functions for 3 to 4 vector parameters. -/// -/// Include to use the features of this extension. -/// -/// @see core_common -/// @see ext_scalar_common - -#pragma once - -// Dependency: -#include "../ext/scalar_common.hpp" -#include "../common.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_common extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_common - /// @{ - - /// Return the minimum component-wise values of 3 inputs - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec min(vec const& a, vec const& b, vec const& c); - - /// Return the minimum component-wise values of 4 inputs - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec min(vec const& a, vec const& b, vec const& c, vec const& d); - - /// Return the maximum component-wise values of 3 inputs - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec max(vec const& x, vec const& y, vec const& z); - - /// Return the maximum component-wise values of 4 inputs - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec max( vec const& x, vec const& y, vec const& z, vec const& w); - - /// Returns y if y < x; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see std::fmin documentation - template - GLM_FUNC_DECL vec fmin(vec const& x, T y); - - /// Returns y if y < x; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see std::fmin documentation - template - GLM_FUNC_DECL vec fmin(vec const& x, vec const& y); - - /// Returns y if y < x; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see std::fmin documentation - template - GLM_FUNC_DECL vec fmin(vec const& a, vec const& b, vec const& c); - - /// Returns y if y < x; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see std::fmin documentation - template - GLM_FUNC_DECL vec fmin(vec const& a, vec const& b, vec const& c, vec const& d); - - /// Returns y if x < y; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see std::fmax documentation - template - GLM_FUNC_DECL vec fmax(vec const& a, T b); - - /// Returns y if x < y; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see std::fmax documentation - template - GLM_FUNC_DECL vec fmax(vec const& a, vec const& b); - - /// Returns y if x < y; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see std::fmax documentation - template - GLM_FUNC_DECL vec fmax(vec const& a, vec const& b, vec const& c); - - /// Returns y if x < y; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see std::fmax documentation - template - GLM_FUNC_DECL vec fmax(vec const& a, vec const& b, vec const& c, vec const& d); - - /// Returns min(max(x, minVal), maxVal) for each component in x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_common - template - GLM_FUNC_DECL vec fclamp(vec const& x, T minVal, T maxVal); - - /// Returns min(max(x, minVal), maxVal) for each component in x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_common - template - GLM_FUNC_DECL vec fclamp(vec const& x, vec const& minVal, vec const& maxVal); - - /// Simulate GL_CLAMP OpenGL wrap mode - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_common extension. - template - GLM_FUNC_DECL vec clamp(vec const& Texcoord); - - /// Simulate GL_REPEAT OpenGL wrap mode - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_common extension. - template - GLM_FUNC_DECL vec repeat(vec const& Texcoord); - - /// Simulate GL_MIRRORED_REPEAT OpenGL wrap mode - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_common extension. - template - GLM_FUNC_DECL vec mirrorClamp(vec const& Texcoord); - - /// Simulate GL_MIRROR_REPEAT OpenGL wrap mode - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_common extension. - template - GLM_FUNC_DECL vec mirrorRepeat(vec const& Texcoord); - - /// Returns a value equal to the nearest integer to x. - /// The fraction 0.5 will round in a direction chosen by the - /// implementation, presumably the direction that is fastest. - /// - /// @param x The values of the argument must be greater or equal to zero. - /// @tparam T floating point scalar types. - /// - /// @see GLSL round man page - /// @see ext_vector_common extension. - template - GLM_FUNC_DECL vec iround(vec const& x); - - /// Returns a value equal to the nearest integer to x. - /// The fraction 0.5 will round in a direction chosen by the - /// implementation, presumably the direction that is fastest. - /// - /// @param x The values of the argument must be greater or equal to zero. - /// @tparam T floating point scalar types. - /// - /// @see GLSL round man page - /// @see ext_vector_common extension. - template - GLM_FUNC_DECL vec uround(vec const& x); - - /// @} -}//namespace glm - -#include "vector_common.inl" diff --git a/src/vendor/glm/ext/vector_common.inl b/src/vendor/glm/ext/vector_common.inl deleted file mode 100755 index 67817fc..0000000 --- a/src/vendor/glm/ext/vector_common.inl +++ /dev/null @@ -1,147 +0,0 @@ -#include "../detail/_vectorize.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec min(vec const& x, vec const& y, vec const& z) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'min' only accept floating-point or integer inputs"); - return glm::min(glm::min(x, y), z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec min(vec const& x, vec const& y, vec const& z, vec const& w) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'min' only accept floating-point or integer inputs"); - return glm::min(glm::min(x, y), glm::min(z, w)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec max(vec const& x, vec const& y, vec const& z) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'max' only accept floating-point or integer inputs"); - return glm::max(glm::max(x, y), z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec max(vec const& x, vec const& y, vec const& z, vec const& w) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'max' only accept floating-point or integer inputs"); - return glm::max(glm::max(x, y), glm::max(z, w)); - } - - template - GLM_FUNC_QUALIFIER vec fmin(vec const& a, T b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point inputs"); - return detail::functor2::call(fmin, a, vec(b)); - } - - template - GLM_FUNC_QUALIFIER vec fmin(vec const& a, vec const& b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point inputs"); - return detail::functor2::call(fmin, a, b); - } - - template - GLM_FUNC_QUALIFIER vec fmin(vec const& a, vec const& b, vec const& c) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point inputs"); - return fmin(fmin(a, b), c); - } - - template - GLM_FUNC_QUALIFIER vec fmin(vec const& a, vec const& b, vec const& c, vec const& d) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point inputs"); - return fmin(fmin(a, b), fmin(c, d)); - } - - template - GLM_FUNC_QUALIFIER vec fmax(vec const& a, T b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point inputs"); - return detail::functor2::call(fmax, a, vec(b)); - } - - template - GLM_FUNC_QUALIFIER vec fmax(vec const& a, vec const& b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point inputs"); - return detail::functor2::call(fmax, a, b); - } - - template - GLM_FUNC_QUALIFIER vec fmax(vec const& a, vec const& b, vec const& c) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point inputs"); - return fmax(fmax(a, b), c); - } - - template - GLM_FUNC_QUALIFIER vec fmax(vec const& a, vec const& b, vec const& c, vec const& d) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point inputs"); - return fmax(fmax(a, b), fmax(c, d)); - } - - template - GLM_FUNC_QUALIFIER vec fclamp(vec const& x, T minVal, T maxVal) - { - return fmin(fmax(x, vec(minVal)), vec(maxVal)); - } - - template - GLM_FUNC_QUALIFIER vec fclamp(vec const& x, vec const& minVal, vec const& maxVal) - { - return fmin(fmax(x, minVal), maxVal); - } - - template - GLM_FUNC_QUALIFIER vec clamp(vec const& Texcoord) - { - return glm::clamp(Texcoord, vec(0), vec(1)); - } - - template - GLM_FUNC_QUALIFIER vec repeat(vec const& Texcoord) - { - return glm::fract(Texcoord); - } - - template - GLM_FUNC_QUALIFIER vec mirrorClamp(vec const& Texcoord) - { - return glm::fract(glm::abs(Texcoord)); - } - - template - GLM_FUNC_QUALIFIER vec mirrorRepeat(vec const& Texcoord) - { - vec const Abs = glm::abs(Texcoord); - vec const Clamp = glm::mod(glm::floor(Abs), vec(2)); - vec const Floor = glm::floor(Abs); - vec const Rest = Abs - Floor; - vec const Mirror = Clamp + Rest; - return mix(Rest, vec(1) - Rest, glm::greaterThanEqual(Mirror, vec(1))); - } - - template - GLM_FUNC_QUALIFIER vec iround(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'iround' only accept floating-point inputs"); - assert(all(lessThanEqual(vec(0), x))); - - return vec(x + static_cast(0.5)); - } - - template - GLM_FUNC_QUALIFIER vec uround(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'uround' only accept floating-point inputs"); - assert(all(lessThanEqual(vec(0), x))); - - return vec(x + static_cast(0.5)); - } -}//namespace glm diff --git a/src/vendor/glm/ext/vector_double1.hpp b/src/vendor/glm/ext/vector_double1.hpp deleted file mode 100755 index 3882667..0000000 --- a/src/vendor/glm/ext/vector_double1.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref ext_vector_double1 -/// @file glm/ext/vector_double1.hpp -/// -/// @defgroup ext_vector_double1 GLM_EXT_vector_double1 -/// @ingroup ext -/// -/// Exposes double-precision floating point vector type with one component. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_double1_precision extension. -/// @see ext_vector_float1 extension. - -#pragma once - -#include "../detail/type_vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_double1 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_double1 - /// @{ - - /// 1 components vector of double-precision floating-point numbers. - typedef vec<1, double, defaultp> dvec1; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_double1_precision.hpp b/src/vendor/glm/ext/vector_double1_precision.hpp deleted file mode 100755 index 1d47195..0000000 --- a/src/vendor/glm/ext/vector_double1_precision.hpp +++ /dev/null @@ -1,36 +0,0 @@ -/// @ref ext_vector_double1_precision -/// @file glm/ext/vector_double1_precision.hpp -/// -/// @defgroup ext_vector_double1_precision GLM_EXT_vector_double1_precision -/// @ingroup ext -/// -/// Exposes highp_dvec1, mediump_dvec1 and lowp_dvec1 types. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_double1 - -#pragma once - -#include "../detail/type_vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_double1_precision extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_double1_precision - /// @{ - - /// 1 component vector of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<1, double, highp> highp_dvec1; - - /// 1 component vector of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<1, double, mediump> mediump_dvec1; - - /// 1 component vector of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<1, double, lowp> lowp_dvec1; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_double2.hpp b/src/vendor/glm/ext/vector_double2.hpp deleted file mode 100755 index 60e3577..0000000 --- a/src/vendor/glm/ext/vector_double2.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_double2.hpp - -#pragma once -#include "../detail/type_vec2.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 2 components vector of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<2, double, defaultp> dvec2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_double2_precision.hpp b/src/vendor/glm/ext/vector_double2_precision.hpp deleted file mode 100755 index fa53940..0000000 --- a/src/vendor/glm/ext/vector_double2_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_double2_precision.hpp - -#pragma once -#include "../detail/type_vec2.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 2 components vector of high double-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, double, highp> highp_dvec2; - - /// 2 components vector of medium double-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, double, mediump> mediump_dvec2; - - /// 2 components vector of low double-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, double, lowp> lowp_dvec2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_double3.hpp b/src/vendor/glm/ext/vector_double3.hpp deleted file mode 100755 index 6dfe4c6..0000000 --- a/src/vendor/glm/ext/vector_double3.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_double3.hpp - -#pragma once -#include "../detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 3 components vector of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<3, double, defaultp> dvec3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_double3_precision.hpp b/src/vendor/glm/ext/vector_double3_precision.hpp deleted file mode 100755 index a8cfa37..0000000 --- a/src/vendor/glm/ext/vector_double3_precision.hpp +++ /dev/null @@ -1,34 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_double3_precision.hpp - -#pragma once -#include "../detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 3 components vector of high double-qualifier floating-point numbers. - /// There is no guarantee on the actual qualifier. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, double, highp> highp_dvec3; - - /// 3 components vector of medium double-qualifier floating-point numbers. - /// There is no guarantee on the actual qualifier. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, double, mediump> mediump_dvec3; - - /// 3 components vector of low double-qualifier floating-point numbers. - /// There is no guarantee on the actual qualifier. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, double, lowp> lowp_dvec3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_double4.hpp b/src/vendor/glm/ext/vector_double4.hpp deleted file mode 100755 index 87f225f..0000000 --- a/src/vendor/glm/ext/vector_double4.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_double4.hpp - -#pragma once -#include "../detail/type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 4 components vector of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<4, double, defaultp> dvec4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_double4_precision.hpp b/src/vendor/glm/ext/vector_double4_precision.hpp deleted file mode 100755 index 09cafa1..0000000 --- a/src/vendor/glm/ext/vector_double4_precision.hpp +++ /dev/null @@ -1,35 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_double4_precision.hpp - -#pragma once -#include "../detail/setup.hpp" -#include "../detail/type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 4 components vector of high double-qualifier floating-point numbers. - /// There is no guarantee on the actual qualifier. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, double, highp> highp_dvec4; - - /// 4 components vector of medium double-qualifier floating-point numbers. - /// There is no guarantee on the actual qualifier. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, double, mediump> mediump_dvec4; - - /// 4 components vector of low double-qualifier floating-point numbers. - /// There is no guarantee on the actual qualifier. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, double, lowp> lowp_dvec4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_float1.hpp b/src/vendor/glm/ext/vector_float1.hpp deleted file mode 100755 index 28acc2c..0000000 --- a/src/vendor/glm/ext/vector_float1.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref ext_vector_float1 -/// @file glm/ext/vector_float1.hpp -/// -/// @defgroup ext_vector_float1 GLM_EXT_vector_float1 -/// @ingroup ext -/// -/// Exposes single-precision floating point vector type with one component. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_float1_precision extension. -/// @see ext_vector_double1 extension. - -#pragma once - -#include "../detail/type_vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_float1 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_float1 - /// @{ - - /// 1 components vector of single-precision floating-point numbers. - typedef vec<1, float, defaultp> vec1; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_float1_precision.hpp b/src/vendor/glm/ext/vector_float1_precision.hpp deleted file mode 100755 index 6e8dad8..0000000 --- a/src/vendor/glm/ext/vector_float1_precision.hpp +++ /dev/null @@ -1,36 +0,0 @@ -/// @ref ext_vector_float1_precision -/// @file glm/ext/vector_float1_precision.hpp -/// -/// @defgroup ext_vector_float1_precision GLM_EXT_vector_float1_precision -/// @ingroup ext -/// -/// Exposes highp_vec1, mediump_vec1 and lowp_vec1 types. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_float1 extension. - -#pragma once - -#include "../detail/type_vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_float1_precision extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_float1_precision - /// @{ - - /// 1 component vector of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<1, float, highp> highp_vec1; - - /// 1 component vector of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<1, float, mediump> mediump_vec1; - - /// 1 component vector of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<1, float, lowp> lowp_vec1; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_float2.hpp b/src/vendor/glm/ext/vector_float2.hpp deleted file mode 100755 index d31545d..0000000 --- a/src/vendor/glm/ext/vector_float2.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_float2.hpp - -#pragma once -#include "../detail/type_vec2.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 2 components vector of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<2, float, defaultp> vec2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_float2_precision.hpp b/src/vendor/glm/ext/vector_float2_precision.hpp deleted file mode 100755 index 23c0820..0000000 --- a/src/vendor/glm/ext/vector_float2_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_float2_precision.hpp - -#pragma once -#include "../detail/type_vec2.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 2 components vector of high single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, float, highp> highp_vec2; - - /// 2 components vector of medium single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, float, mediump> mediump_vec2; - - /// 2 components vector of low single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, float, lowp> lowp_vec2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_float3.hpp b/src/vendor/glm/ext/vector_float3.hpp deleted file mode 100755 index cd79a62..0000000 --- a/src/vendor/glm/ext/vector_float3.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_float3.hpp - -#pragma once -#include "../detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 3 components vector of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<3, float, defaultp> vec3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_float3_precision.hpp b/src/vendor/glm/ext/vector_float3_precision.hpp deleted file mode 100755 index be640b5..0000000 --- a/src/vendor/glm/ext/vector_float3_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_float3_precision.hpp - -#pragma once -#include "../detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 3 components vector of high single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, float, highp> highp_vec3; - - /// 3 components vector of medium single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, float, mediump> mediump_vec3; - - /// 3 components vector of low single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, float, lowp> lowp_vec3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_float4.hpp b/src/vendor/glm/ext/vector_float4.hpp deleted file mode 100755 index d84adcc..0000000 --- a/src/vendor/glm/ext/vector_float4.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_float4.hpp - -#pragma once -#include "../detail/type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 4 components vector of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<4, float, defaultp> vec4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_float4_precision.hpp b/src/vendor/glm/ext/vector_float4_precision.hpp deleted file mode 100755 index aede838..0000000 --- a/src/vendor/glm/ext/vector_float4_precision.hpp +++ /dev/null @@ -1,31 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_float4_precision.hpp - -#pragma once -#include "../detail/type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 4 components vector of high single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, float, highp> highp_vec4; - - /// 4 components vector of medium single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, float, mediump> mediump_vec4; - - /// 4 components vector of low single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, float, lowp> lowp_vec4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_int1.hpp b/src/vendor/glm/ext/vector_int1.hpp deleted file mode 100755 index dc86038..0000000 --- a/src/vendor/glm/ext/vector_int1.hpp +++ /dev/null @@ -1,32 +0,0 @@ -/// @ref ext_vector_int1 -/// @file glm/ext/vector_int1.hpp -/// -/// @defgroup ext_vector_int1 GLM_EXT_vector_int1 -/// @ingroup ext -/// -/// Exposes ivec1 vector type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_uint1 extension. -/// @see ext_vector_int1_precision extension. - -#pragma once - -#include "../detail/type_vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_int1 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_int1 - /// @{ - - /// 1 component vector of signed integer numbers. - typedef vec<1, int, defaultp> ivec1; - - /// @} -}//namespace glm - diff --git a/src/vendor/glm/ext/vector_int1_sized.hpp b/src/vendor/glm/ext/vector_int1_sized.hpp deleted file mode 100755 index de0d4cf..0000000 --- a/src/vendor/glm/ext/vector_int1_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_vector_int1_sized -/// @file glm/ext/vector_int1_sized.hpp -/// -/// @defgroup ext_vector_int1_sized GLM_EXT_vector_int1_sized -/// @ingroup ext -/// -/// Exposes sized signed integer vector types. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_int_sized -/// @see ext_vector_uint1_sized - -#pragma once - -#include "../ext/vector_int1.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_int1_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_int1_sized - /// @{ - - /// 8 bit signed integer vector of 1 component type. - /// - /// @see ext_vector_int1_sized - typedef vec<1, int8, defaultp> i8vec1; - - /// 16 bit signed integer vector of 1 component type. - /// - /// @see ext_vector_int1_sized - typedef vec<1, int16, defaultp> i16vec1; - - /// 32 bit signed integer vector of 1 component type. - /// - /// @see ext_vector_int1_sized - typedef vec<1, int32, defaultp> i32vec1; - - /// 64 bit signed integer vector of 1 component type. - /// - /// @see ext_vector_int1_sized - typedef vec<1, int64, defaultp> i64vec1; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_int2.hpp b/src/vendor/glm/ext/vector_int2.hpp deleted file mode 100755 index aef803e..0000000 --- a/src/vendor/glm/ext/vector_int2.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_int2.hpp - -#pragma once -#include "../detail/type_vec2.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 2 components vector of signed integer numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<2, int, defaultp> ivec2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_int2_sized.hpp b/src/vendor/glm/ext/vector_int2_sized.hpp deleted file mode 100755 index 1fd57ee..0000000 --- a/src/vendor/glm/ext/vector_int2_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_vector_int2_sized -/// @file glm/ext/vector_int2_sized.hpp -/// -/// @defgroup ext_vector_int2_sized GLM_EXT_vector_int2_sized -/// @ingroup ext -/// -/// Exposes sized signed integer vector of 2 components type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_int_sized -/// @see ext_vector_uint2_sized - -#pragma once - -#include "../ext/vector_int2.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_int2_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_int2_sized - /// @{ - - /// 8 bit signed integer vector of 2 components type. - /// - /// @see ext_vector_int2_sized - typedef vec<2, int8, defaultp> i8vec2; - - /// 16 bit signed integer vector of 2 components type. - /// - /// @see ext_vector_int2_sized - typedef vec<2, int16, defaultp> i16vec2; - - /// 32 bit signed integer vector of 2 components type. - /// - /// @see ext_vector_int2_sized - typedef vec<2, int32, defaultp> i32vec2; - - /// 64 bit signed integer vector of 2 components type. - /// - /// @see ext_vector_int2_sized - typedef vec<2, int64, defaultp> i64vec2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_int3.hpp b/src/vendor/glm/ext/vector_int3.hpp deleted file mode 100755 index 4767e61..0000000 --- a/src/vendor/glm/ext/vector_int3.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_int3.hpp - -#pragma once -#include "../detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 3 components vector of signed integer numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<3, int, defaultp> ivec3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_int3_sized.hpp b/src/vendor/glm/ext/vector_int3_sized.hpp deleted file mode 100755 index 085a3fe..0000000 --- a/src/vendor/glm/ext/vector_int3_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_vector_int3_sized -/// @file glm/ext/vector_int3_sized.hpp -/// -/// @defgroup ext_vector_int3_sized GLM_EXT_vector_int3_sized -/// @ingroup ext -/// -/// Exposes sized signed integer vector of 3 components type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_int_sized -/// @see ext_vector_uint3_sized - -#pragma once - -#include "../ext/vector_int3.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_int3_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_int3_sized - /// @{ - - /// 8 bit signed integer vector of 3 components type. - /// - /// @see ext_vector_int3_sized - typedef vec<3, int8, defaultp> i8vec3; - - /// 16 bit signed integer vector of 3 components type. - /// - /// @see ext_vector_int3_sized - typedef vec<3, int16, defaultp> i16vec3; - - /// 32 bit signed integer vector of 3 components type. - /// - /// @see ext_vector_int3_sized - typedef vec<3, int32, defaultp> i32vec3; - - /// 64 bit signed integer vector of 3 components type. - /// - /// @see ext_vector_int3_sized - typedef vec<3, int64, defaultp> i64vec3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_int4.hpp b/src/vendor/glm/ext/vector_int4.hpp deleted file mode 100755 index bb23adf..0000000 --- a/src/vendor/glm/ext/vector_int4.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_int4.hpp - -#pragma once -#include "../detail/type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 4 components vector of signed integer numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<4, int, defaultp> ivec4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_int4_sized.hpp b/src/vendor/glm/ext/vector_int4_sized.hpp deleted file mode 100755 index c63d465..0000000 --- a/src/vendor/glm/ext/vector_int4_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_vector_int4_sized -/// @file glm/ext/vector_int4_sized.hpp -/// -/// @defgroup ext_vector_int4_sized GLM_EXT_vector_int4_sized -/// @ingroup ext -/// -/// Exposes sized signed integer vector of 4 components type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_int_sized -/// @see ext_vector_uint4_sized - -#pragma once - -#include "../ext/vector_int4.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_int4_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_int4_sized - /// @{ - - /// 8 bit signed integer vector of 4 components type. - /// - /// @see ext_vector_int4_sized - typedef vec<4, int8, defaultp> i8vec4; - - /// 16 bit signed integer vector of 4 components type. - /// - /// @see ext_vector_int4_sized - typedef vec<4, int16, defaultp> i16vec4; - - /// 32 bit signed integer vector of 4 components type. - /// - /// @see ext_vector_int4_sized - typedef vec<4, int32, defaultp> i32vec4; - - /// 64 bit signed integer vector of 4 components type. - /// - /// @see ext_vector_int4_sized - typedef vec<4, int64, defaultp> i64vec4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_integer.hpp b/src/vendor/glm/ext/vector_integer.hpp deleted file mode 100755 index 1304dd8..0000000 --- a/src/vendor/glm/ext/vector_integer.hpp +++ /dev/null @@ -1,149 +0,0 @@ -/// @ref ext_vector_integer -/// @file glm/ext/vector_integer.hpp -/// -/// @see core (dependence) -/// @see ext_vector_integer (dependence) -/// -/// @defgroup ext_vector_integer GLM_EXT_vector_integer -/// @ingroup ext -/// -/// Include to use the features of this extension. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../detail/_vectorize.hpp" -#include "../vector_relational.hpp" -#include "../common.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_integer extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_integer - /// @{ - - /// Return true if the value is a power of two number. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec isPowerOfTwo(vec const& v); - - /// Return the power of two number which value is just higher the input value, - /// round up to a power of two. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec nextPowerOfTwo(vec const& v); - - /// Return the power of two number which value is just lower the input value, - /// round down to a power of two. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec prevPowerOfTwo(vec const& v); - - /// Return true if the 'Value' is a multiple of 'Multiple'. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec isMultiple(vec const& v, T Multiple); - - /// Return true if the 'Value' is a multiple of 'Multiple'. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec isMultiple(vec const& v, vec const& Multiple); - - /// Higher multiple number of Source. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @param v Source values to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec nextMultiple(vec const& v, T Multiple); - - /// Higher multiple number of Source. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @param v Source values to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec nextMultiple(vec const& v, vec const& Multiple); - - /// Lower multiple number of Source. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @param v Source values to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec prevMultiple(vec const& v, T Multiple); - - /// Lower multiple number of Source. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @param v Source values to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec prevMultiple(vec const& v, vec const& Multiple); - - /// Returns the bit number of the Nth significant bit set to - /// 1 in the binary representation of value. - /// If value bitcount is less than the Nth significant bit, -1 will be returned. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Signed or unsigned integer scalar types. - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec findNSB(vec const& Source, vec SignificantBitCount); - - /// @} -} //namespace glm - -#include "vector_integer.inl" diff --git a/src/vendor/glm/ext/vector_integer.inl b/src/vendor/glm/ext/vector_integer.inl deleted file mode 100755 index cefb132..0000000 --- a/src/vendor/glm/ext/vector_integer.inl +++ /dev/null @@ -1,85 +0,0 @@ -#include "scalar_integer.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec isPowerOfTwo(vec const& Value) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'isPowerOfTwo' only accept integer inputs"); - - vec const Result(abs(Value)); - return equal(Result & (Result - vec(1)), vec(0)); - } - - template - GLM_FUNC_QUALIFIER vec nextPowerOfTwo(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'nextPowerOfTwo' only accept integer inputs"); - - return detail::compute_ceilPowerOfTwo::is_signed>::call(v); - } - - template - GLM_FUNC_QUALIFIER vec prevPowerOfTwo(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'prevPowerOfTwo' only accept integer inputs"); - - return detail::functor1::call(prevPowerOfTwo, v); - } - - template - GLM_FUNC_QUALIFIER vec isMultiple(vec const& Value, T Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'isMultiple' only accept integer inputs"); - - return equal(Value % Multiple, vec(0)); - } - - template - GLM_FUNC_QUALIFIER vec isMultiple(vec const& Value, vec const& Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'isMultiple' only accept integer inputs"); - - return equal(Value % Multiple, vec(0)); - } - - template - GLM_FUNC_QUALIFIER vec nextMultiple(vec const& Source, T Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'nextMultiple' only accept integer inputs"); - - return detail::functor2::call(nextMultiple, Source, vec(Multiple)); - } - - template - GLM_FUNC_QUALIFIER vec nextMultiple(vec const& Source, vec const& Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'nextMultiple' only accept integer inputs"); - - return detail::functor2::call(nextMultiple, Source, Multiple); - } - - template - GLM_FUNC_QUALIFIER vec prevMultiple(vec const& Source, T Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'prevMultiple' only accept integer inputs"); - - return detail::functor2::call(prevMultiple, Source, vec(Multiple)); - } - - template - GLM_FUNC_QUALIFIER vec prevMultiple(vec const& Source, vec const& Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'prevMultiple' only accept integer inputs"); - - return detail::functor2::call(prevMultiple, Source, Multiple); - } - - template - GLM_FUNC_QUALIFIER vec findNSB(vec const& Source, vec SignificantBitCount) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findNSB' only accept integer inputs"); - - return detail::functor2_vec_int::call(findNSB, Source, SignificantBitCount); - } -}//namespace glm diff --git a/src/vendor/glm/ext/vector_packing.hpp b/src/vendor/glm/ext/vector_packing.hpp deleted file mode 100755 index 76e5d0c..0000000 --- a/src/vendor/glm/ext/vector_packing.hpp +++ /dev/null @@ -1,32 +0,0 @@ -/// @ref ext_vector_packing -/// @file glm/ext/vector_packing.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_vector_packing GLM_EXT_vector_packing -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// This extension provides a set of function to convert vectors to packed -/// formats. - -#pragma once - -// Dependency: -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_packing extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_packing - /// @{ - - - /// @} -}// namespace glm - -#include "vector_packing.inl" diff --git a/src/vendor/glm/ext/vector_packing.inl b/src/vendor/glm/ext/vector_packing.inl deleted file mode 100755 index e69de29..0000000 diff --git a/src/vendor/glm/ext/vector_reciprocal.hpp b/src/vendor/glm/ext/vector_reciprocal.hpp deleted file mode 100755 index b383e3c..0000000 --- a/src/vendor/glm/ext/vector_reciprocal.hpp +++ /dev/null @@ -1,135 +0,0 @@ -/// @ref ext_vector_reciprocal -/// @file glm/ext/vector_reciprocal.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_reciprocal GLM_EXT_vector_reciprocal -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Define secant, cosecant and cotangent functions. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_reciprocal extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_reciprocal - /// @{ - - /// Secant function. - /// hypotenuse / adjacent or 1 / cos(x) - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see ext_vector_reciprocal - template - GLM_FUNC_DECL genType sec(genType angle); - - /// Cosecant function. - /// hypotenuse / opposite or 1 / sin(x) - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see ext_vector_reciprocal - template - GLM_FUNC_DECL genType csc(genType angle); - - /// Cotangent function. - /// adjacent / opposite or 1 / tan(x) - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see ext_vector_reciprocal - template - GLM_FUNC_DECL genType cot(genType angle); - - /// Inverse secant function. - /// - /// @return Return an angle expressed in radians. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see ext_vector_reciprocal - template - GLM_FUNC_DECL genType asec(genType x); - - /// Inverse cosecant function. - /// - /// @return Return an angle expressed in radians. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see ext_vector_reciprocal - template - GLM_FUNC_DECL genType acsc(genType x); - - /// Inverse cotangent function. - /// - /// @return Return an angle expressed in radians. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see ext_vector_reciprocal - template - GLM_FUNC_DECL genType acot(genType x); - - /// Secant hyperbolic function. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see ext_vector_reciprocal - template - GLM_FUNC_DECL genType sech(genType angle); - - /// Cosecant hyperbolic function. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see ext_vector_reciprocal - template - GLM_FUNC_DECL genType csch(genType angle); - - /// Cotangent hyperbolic function. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see ext_vector_reciprocal - template - GLM_FUNC_DECL genType coth(genType angle); - - /// Inverse secant hyperbolic function. - /// - /// @return Return an angle expressed in radians. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see ext_vector_reciprocal - template - GLM_FUNC_DECL genType asech(genType x); - - /// Inverse cosecant hyperbolic function. - /// - /// @return Return an angle expressed in radians. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see ext_vector_reciprocal - template - GLM_FUNC_DECL genType acsch(genType x); - - /// Inverse cotangent hyperbolic function. - /// - /// @return Return an angle expressed in radians. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see ext_vector_reciprocal - template - GLM_FUNC_DECL genType acoth(genType x); - - /// @} -}//namespace glm - -#include "vector_reciprocal.inl" diff --git a/src/vendor/glm/ext/vector_reciprocal.inl b/src/vendor/glm/ext/vector_reciprocal.inl deleted file mode 100755 index 0d3c25f..0000000 --- a/src/vendor/glm/ext/vector_reciprocal.inl +++ /dev/null @@ -1,105 +0,0 @@ -/// @ref ext_vector_reciprocal - -#include "../trigonometric.hpp" -#include - -namespace glm -{ - // sec - template - GLM_FUNC_QUALIFIER vec sec(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'sec' only accept floating-point inputs"); - return static_cast(1) / detail::functor1::call(cos, x); - } - - // csc - template - GLM_FUNC_QUALIFIER vec csc(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'csc' only accept floating-point inputs"); - return static_cast(1) / detail::functor1::call(sin, x); - } - - // cot - template - GLM_FUNC_QUALIFIER vec cot(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'cot' only accept floating-point inputs"); - T const pi_over_2 = static_cast(3.1415926535897932384626433832795 / 2.0); - return detail::functor1::call(tan, pi_over_2 - x); - } - - // asec - template - GLM_FUNC_QUALIFIER vec asec(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'asec' only accept floating-point inputs"); - return detail::functor1::call(acos, static_cast(1) / x); - } - - // acsc - template - GLM_FUNC_QUALIFIER vec acsc(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acsc' only accept floating-point inputs"); - return detail::functor1::call(asin, static_cast(1) / x); - } - - // acot - template - GLM_FUNC_QUALIFIER vec acot(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acot' only accept floating-point inputs"); - T const pi_over_2 = static_cast(3.1415926535897932384626433832795 / 2.0); - return pi_over_2 - detail::functor1::call(atan, x); - } - - // sech - template - GLM_FUNC_QUALIFIER vec sech(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'sech' only accept floating-point inputs"); - return static_cast(1) / detail::functor1::call(cosh, x); - } - - // csch - template - GLM_FUNC_QUALIFIER vec csch(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'csch' only accept floating-point inputs"); - return static_cast(1) / detail::functor1::call(sinh, x); - } - - // coth - template - GLM_FUNC_QUALIFIER vec coth(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'coth' only accept floating-point inputs"); - return glm::cosh(x) / glm::sinh(x); - } - - // asech - template - GLM_FUNC_QUALIFIER vec asech(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'asech' only accept floating-point inputs"); - return detail::functor1::call(acosh, static_cast(1) / x); - } - - // acsch - template - GLM_FUNC_QUALIFIER vec acsch(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acsch' only accept floating-point inputs"); - return detail::functor1::call(asinh, static_cast(1) / x); - } - - // acoth - template - GLM_FUNC_QUALIFIER vec acoth(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acoth' only accept floating-point inputs"); - return detail::functor1::call(atanh, static_cast(1) / x); - } -}//namespace glm diff --git a/src/vendor/glm/ext/vector_relational.hpp b/src/vendor/glm/ext/vector_relational.hpp deleted file mode 100755 index 1c2367d..0000000 --- a/src/vendor/glm/ext/vector_relational.hpp +++ /dev/null @@ -1,107 +0,0 @@ -/// @ref ext_vector_relational -/// @file glm/ext/vector_relational.hpp -/// -/// @see core (dependence) -/// @see ext_scalar_integer (dependence) -/// -/// @defgroup ext_vector_relational GLM_EXT_vector_relational -/// @ingroup ext -/// -/// Exposes comparison functions for vector types that take a user defined epsilon values. -/// -/// Include to use the features of this extension. -/// -/// @see core_vector_relational -/// @see ext_scalar_relational -/// @see ext_matrix_relational - -#pragma once - -// Dependencies -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_relational extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_relational - /// @{ - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is satisfied. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(vec const& x, vec const& y, T epsilon); - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is satisfied. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(vec const& x, vec const& y, vec const& epsilon); - - /// Returns the component-wise comparison of |x - y| >= epsilon. - /// True if this expression is not satisfied. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, T epsilon); - - /// Returns the component-wise comparison of |x - y| >= epsilon. - /// True if this expression is not satisfied. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, vec const& epsilon); - - /// Returns the component-wise comparison between two vectors in term of ULPs. - /// True if this expression is satisfied. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(vec const& x, vec const& y, int ULPs); - - /// Returns the component-wise comparison between two vectors in term of ULPs. - /// True if this expression is satisfied. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(vec const& x, vec const& y, vec const& ULPs); - - /// Returns the component-wise comparison between two vectors in term of ULPs. - /// True if this expression is not satisfied. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, int ULPs); - - /// Returns the component-wise comparison between two vectors in term of ULPs. - /// True if this expression is not satisfied. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, vec const& ULPs); - - /// @} -}//namespace glm - -#include "vector_relational.inl" diff --git a/src/vendor/glm/ext/vector_relational.inl b/src/vendor/glm/ext/vector_relational.inl deleted file mode 100755 index 7a39ab5..0000000 --- a/src/vendor/glm/ext/vector_relational.inl +++ /dev/null @@ -1,75 +0,0 @@ -#include "../vector_relational.hpp" -#include "../common.hpp" -#include "../detail/qualifier.hpp" -#include "../detail/type_float.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(vec const& x, vec const& y, T Epsilon) - { - return equal(x, y, vec(Epsilon)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(vec const& x, vec const& y, vec const& Epsilon) - { - return lessThanEqual(abs(x - y), Epsilon); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, T Epsilon) - { - return notEqual(x, y, vec(Epsilon)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, vec const& Epsilon) - { - return greaterThan(abs(x - y), Epsilon); - } - - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(vec const& x, vec const& y, int MaxULPs) - { - return equal(x, y, vec(MaxULPs)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(vec const& x, vec const& y, vec const& MaxULPs) - { - vec Result(false); - for(length_t i = 0; i < L; ++i) - { - detail::float_t const a(x[i]); - detail::float_t const b(y[i]); - - // Different signs means they do not match. - if(a.negative() != b.negative()) - { - // Check for equality to make sure +0==-0 - Result[i] = a.mantissa() == b.mantissa() && a.exponent() == b.exponent(); - } - else - { - // Find the difference in ULPs. - typename detail::float_t::int_type const DiffULPs = abs(a.i - b.i); - Result[i] = DiffULPs <= MaxULPs[i]; - } - } - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, int MaxULPs) - { - return notEqual(x, y, vec(MaxULPs)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, vec const& MaxULPs) - { - return not_(equal(x, y, MaxULPs)); - } -}//namespace glm diff --git a/src/vendor/glm/ext/vector_uint1.hpp b/src/vendor/glm/ext/vector_uint1.hpp deleted file mode 100755 index eb8a704..0000000 --- a/src/vendor/glm/ext/vector_uint1.hpp +++ /dev/null @@ -1,32 +0,0 @@ -/// @ref ext_vector_uint1 -/// @file glm/ext/vector_uint1.hpp -/// -/// @defgroup ext_vector_uint1 GLM_EXT_vector_uint1 -/// @ingroup ext -/// -/// Exposes uvec1 vector type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_int1 extension. -/// @see ext_vector_uint1_precision extension. - -#pragma once - -#include "../detail/type_vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_uint1 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_uint1 - /// @{ - - /// 1 component vector of unsigned integer numbers. - typedef vec<1, unsigned int, defaultp> uvec1; - - /// @} -}//namespace glm - diff --git a/src/vendor/glm/ext/vector_uint1_sized.hpp b/src/vendor/glm/ext/vector_uint1_sized.hpp deleted file mode 100755 index 2a938bb..0000000 --- a/src/vendor/glm/ext/vector_uint1_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_vector_uint1_sized -/// @file glm/ext/vector_uint1_sized.hpp -/// -/// @defgroup ext_vector_uint1_sized GLM_EXT_vector_uint1_sized -/// @ingroup ext -/// -/// Exposes sized unsigned integer vector types. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_uint_sized -/// @see ext_vector_int1_sized - -#pragma once - -#include "../ext/vector_uint1.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_uint1_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_uint1_sized - /// @{ - - /// 8 bit unsigned integer vector of 1 component type. - /// - /// @see ext_vector_uint1_sized - typedef vec<1, uint8, defaultp> u8vec1; - - /// 16 bit unsigned integer vector of 1 component type. - /// - /// @see ext_vector_uint1_sized - typedef vec<1, uint16, defaultp> u16vec1; - - /// 32 bit unsigned integer vector of 1 component type. - /// - /// @see ext_vector_uint1_sized - typedef vec<1, uint32, defaultp> u32vec1; - - /// 64 bit unsigned integer vector of 1 component type. - /// - /// @see ext_vector_uint1_sized - typedef vec<1, uint64, defaultp> u64vec1; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_uint2.hpp b/src/vendor/glm/ext/vector_uint2.hpp deleted file mode 100755 index 03c00f5..0000000 --- a/src/vendor/glm/ext/vector_uint2.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_uint2.hpp - -#pragma once -#include "../detail/type_vec2.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 2 components vector of unsigned integer numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<2, unsigned int, defaultp> uvec2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_uint2_sized.hpp b/src/vendor/glm/ext/vector_uint2_sized.hpp deleted file mode 100755 index 620fdc6..0000000 --- a/src/vendor/glm/ext/vector_uint2_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_vector_uint2_sized -/// @file glm/ext/vector_uint2_sized.hpp -/// -/// @defgroup ext_vector_uint2_sized GLM_EXT_vector_uint2_sized -/// @ingroup ext -/// -/// Exposes sized unsigned integer vector of 2 components type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_uint_sized -/// @see ext_vector_int2_sized - -#pragma once - -#include "../ext/vector_uint2.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_uint2_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_uint2_sized - /// @{ - - /// 8 bit unsigned integer vector of 2 components type. - /// - /// @see ext_vector_uint2_sized - typedef vec<2, uint8, defaultp> u8vec2; - - /// 16 bit unsigned integer vector of 2 components type. - /// - /// @see ext_vector_uint2_sized - typedef vec<2, uint16, defaultp> u16vec2; - - /// 32 bit unsigned integer vector of 2 components type. - /// - /// @see ext_vector_uint2_sized - typedef vec<2, uint32, defaultp> u32vec2; - - /// 64 bit unsigned integer vector of 2 components type. - /// - /// @see ext_vector_uint2_sized - typedef vec<2, uint64, defaultp> u64vec2; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_uint3.hpp b/src/vendor/glm/ext/vector_uint3.hpp deleted file mode 100755 index f5b41c4..0000000 --- a/src/vendor/glm/ext/vector_uint3.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_uint3.hpp - -#pragma once -#include "../detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 3 components vector of unsigned integer numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<3, unsigned int, defaultp> uvec3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_uint3_sized.hpp b/src/vendor/glm/ext/vector_uint3_sized.hpp deleted file mode 100755 index 6f96b98..0000000 --- a/src/vendor/glm/ext/vector_uint3_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_vector_uint3_sized -/// @file glm/ext/vector_uint3_sized.hpp -/// -/// @defgroup ext_vector_uint3_sized GLM_EXT_vector_uint3_sized -/// @ingroup ext -/// -/// Exposes sized unsigned integer vector of 3 components type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_uint_sized -/// @see ext_vector_int3_sized - -#pragma once - -#include "../ext/vector_uint3.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_uint3_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_uint3_sized - /// @{ - - /// 8 bit unsigned integer vector of 3 components type. - /// - /// @see ext_vector_uint3_sized - typedef vec<3, uint8, defaultp> u8vec3; - - /// 16 bit unsigned integer vector of 3 components type. - /// - /// @see ext_vector_uint3_sized - typedef vec<3, uint16, defaultp> u16vec3; - - /// 32 bit unsigned integer vector of 3 components type. - /// - /// @see ext_vector_uint3_sized - typedef vec<3, uint32, defaultp> u32vec3; - - /// 64 bit unsigned integer vector of 3 components type. - /// - /// @see ext_vector_uint3_sized - typedef vec<3, uint64, defaultp> u64vec3; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_uint4.hpp b/src/vendor/glm/ext/vector_uint4.hpp deleted file mode 100755 index 32ced58..0000000 --- a/src/vendor/glm/ext/vector_uint4.hpp +++ /dev/null @@ -1,18 +0,0 @@ -/// @ref core -/// @file glm/ext/vector_uint4.hpp - -#pragma once -#include "../detail/type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 4 components vector of unsigned integer numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<4, unsigned int, defaultp> uvec4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_uint4_sized.hpp b/src/vendor/glm/ext/vector_uint4_sized.hpp deleted file mode 100755 index da992ea..0000000 --- a/src/vendor/glm/ext/vector_uint4_sized.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref ext_vector_uint4_sized -/// @file glm/ext/vector_uint4_sized.hpp -/// -/// @defgroup ext_vector_uint4_sized GLM_EXT_vector_uint4_sized -/// @ingroup ext -/// -/// Exposes sized unsigned integer vector of 4 components type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_uint_sized -/// @see ext_vector_int4_sized - -#pragma once - -#include "../ext/vector_uint4.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_uint4_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_uint4_sized - /// @{ - - /// 8 bit unsigned integer vector of 4 components type. - /// - /// @see ext_vector_uint4_sized - typedef vec<4, uint8, defaultp> u8vec4; - - /// 16 bit unsigned integer vector of 4 components type. - /// - /// @see ext_vector_uint4_sized - typedef vec<4, uint16, defaultp> u16vec4; - - /// 32 bit unsigned integer vector of 4 components type. - /// - /// @see ext_vector_uint4_sized - typedef vec<4, uint32, defaultp> u32vec4; - - /// 64 bit unsigned integer vector of 4 components type. - /// - /// @see ext_vector_uint4_sized - typedef vec<4, uint64, defaultp> u64vec4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/ext/vector_ulp.hpp b/src/vendor/glm/ext/vector_ulp.hpp deleted file mode 100755 index 6210396..0000000 --- a/src/vendor/glm/ext/vector_ulp.hpp +++ /dev/null @@ -1,109 +0,0 @@ -/// @ref ext_vector_ulp -/// @file glm/ext/vector_ulp.hpp -/// -/// @defgroup ext_vector_ulp GLM_EXT_vector_ulp -/// @ingroup ext -/// -/// Allow the measurement of the accuracy of a function against a reference -/// implementation. This extension works on floating-point data and provide results -/// in ULP. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_ulp -/// @see ext_scalar_relational -/// @see ext_vector_relational - -#pragma once - -// Dependencies -#include "../ext/scalar_ulp.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_ulp extension included") -#endif - -namespace glm -{ - /// Return the next ULP value(s) after the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL vec nextFloat(vec const& x); - - /// Return the value(s) ULP distance after the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL vec nextFloat(vec const& x, int ULPs); - - /// Return the value(s) ULP distance after the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL vec nextFloat(vec const& x, vec const& ULPs); - - /// Return the previous ULP value(s) before the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL vec prevFloat(vec const& x); - - /// Return the value(s) ULP distance before the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL vec prevFloat(vec const& x, int ULPs); - - /// Return the value(s) ULP distance before the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL vec prevFloat(vec const& x, vec const& ULPs); - - /// Return the distance in the number of ULP between 2 single-precision floating-point scalars. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam Q Value from qualifier enum - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL vec floatDistance(vec const& x, vec const& y); - - /// Return the distance in the number of ULP between 2 double-precision floating-point scalars. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam Q Value from qualifier enum - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL vec floatDistance(vec const& x, vec const& y); - - /// @} -}//namespace glm - -#include "vector_ulp.inl" diff --git a/src/vendor/glm/ext/vector_ulp.inl b/src/vendor/glm/ext/vector_ulp.inl deleted file mode 100755 index 91565ce..0000000 --- a/src/vendor/glm/ext/vector_ulp.inl +++ /dev/null @@ -1,74 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec nextFloat(vec const& x) - { - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = nextFloat(x[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec nextFloat(vec const& x, int ULPs) - { - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = nextFloat(x[i], ULPs); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec nextFloat(vec const& x, vec const& ULPs) - { - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = nextFloat(x[i], ULPs[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec prevFloat(vec const& x) - { - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = prevFloat(x[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec prevFloat(vec const& x, int ULPs) - { - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = prevFloat(x[i], ULPs); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec prevFloat(vec const& x, vec const& ULPs) - { - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = prevFloat(x[i], ULPs[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec floatDistance(vec const& x, vec const& y) - { - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = floatDistance(x[i], y[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec floatDistance(vec const& x, vec const& y) - { - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = floatDistance(x[i], y[i]); - return Result; - } -}//namespace glm diff --git a/src/vendor/glm/fwd.hpp b/src/vendor/glm/fwd.hpp deleted file mode 100755 index 89177f4..0000000 --- a/src/vendor/glm/fwd.hpp +++ /dev/null @@ -1,1233 +0,0 @@ -#pragma once - -#include "detail/qualifier.hpp" - -namespace glm -{ -#if GLM_HAS_EXTENDED_INTEGER_TYPE - typedef std::int8_t int8; - typedef std::int16_t int16; - typedef std::int32_t int32; - typedef std::int64_t int64; - - typedef std::uint8_t uint8; - typedef std::uint16_t uint16; - typedef std::uint32_t uint32; - typedef std::uint64_t uint64; -#else - typedef signed char int8; - typedef signed short int16; - typedef signed int int32; - typedef detail::int64 int64; - - typedef unsigned char uint8; - typedef unsigned short uint16; - typedef unsigned int uint32; - typedef detail::uint64 uint64; -#endif - - // Scalar int - - typedef int8 lowp_i8; - typedef int8 mediump_i8; - typedef int8 highp_i8; - typedef int8 i8; - - typedef int8 lowp_int8; - typedef int8 mediump_int8; - typedef int8 highp_int8; - - typedef int8 lowp_int8_t; - typedef int8 mediump_int8_t; - typedef int8 highp_int8_t; - typedef int8 int8_t; - - typedef int16 lowp_i16; - typedef int16 mediump_i16; - typedef int16 highp_i16; - typedef int16 i16; - - typedef int16 lowp_int16; - typedef int16 mediump_int16; - typedef int16 highp_int16; - - typedef int16 lowp_int16_t; - typedef int16 mediump_int16_t; - typedef int16 highp_int16_t; - typedef int16 int16_t; - - typedef int32 lowp_i32; - typedef int32 mediump_i32; - typedef int32 highp_i32; - typedef int32 i32; - - typedef int32 lowp_int32; - typedef int32 mediump_int32; - typedef int32 highp_int32; - - typedef int32 lowp_int32_t; - typedef int32 mediump_int32_t; - typedef int32 highp_int32_t; - typedef int32 int32_t; - - typedef int64 lowp_i64; - typedef int64 mediump_i64; - typedef int64 highp_i64; - typedef int64 i64; - - typedef int64 lowp_int64; - typedef int64 mediump_int64; - typedef int64 highp_int64; - - typedef int64 lowp_int64_t; - typedef int64 mediump_int64_t; - typedef int64 highp_int64_t; - typedef int64 int64_t; - - // Scalar uint - - typedef unsigned int uint; - - typedef uint8 lowp_u8; - typedef uint8 mediump_u8; - typedef uint8 highp_u8; - typedef uint8 u8; - - typedef uint8 lowp_uint8; - typedef uint8 mediump_uint8; - typedef uint8 highp_uint8; - - typedef uint8 lowp_uint8_t; - typedef uint8 mediump_uint8_t; - typedef uint8 highp_uint8_t; - typedef uint8 uint8_t; - - typedef uint16 lowp_u16; - typedef uint16 mediump_u16; - typedef uint16 highp_u16; - typedef uint16 u16; - - typedef uint16 lowp_uint16; - typedef uint16 mediump_uint16; - typedef uint16 highp_uint16; - - typedef uint16 lowp_uint16_t; - typedef uint16 mediump_uint16_t; - typedef uint16 highp_uint16_t; - typedef uint16 uint16_t; - - typedef uint32 lowp_u32; - typedef uint32 mediump_u32; - typedef uint32 highp_u32; - typedef uint32 u32; - - typedef uint32 lowp_uint32; - typedef uint32 mediump_uint32; - typedef uint32 highp_uint32; - - typedef uint32 lowp_uint32_t; - typedef uint32 mediump_uint32_t; - typedef uint32 highp_uint32_t; - typedef uint32 uint32_t; - - typedef uint64 lowp_u64; - typedef uint64 mediump_u64; - typedef uint64 highp_u64; - typedef uint64 u64; - - typedef uint64 lowp_uint64; - typedef uint64 mediump_uint64; - typedef uint64 highp_uint64; - - typedef uint64 lowp_uint64_t; - typedef uint64 mediump_uint64_t; - typedef uint64 highp_uint64_t; - typedef uint64 uint64_t; - - // Scalar float - - typedef float lowp_f32; - typedef float mediump_f32; - typedef float highp_f32; - typedef float f32; - - typedef float lowp_float32; - typedef float mediump_float32; - typedef float highp_float32; - typedef float float32; - - typedef float lowp_float32_t; - typedef float mediump_float32_t; - typedef float highp_float32_t; - typedef float float32_t; - - - typedef double lowp_f64; - typedef double mediump_f64; - typedef double highp_f64; - typedef double f64; - - typedef double lowp_float64; - typedef double mediump_float64; - typedef double highp_float64; - typedef double float64; - - typedef double lowp_float64_t; - typedef double mediump_float64_t; - typedef double highp_float64_t; - typedef double float64_t; - - // Vector bool - - typedef vec<1, bool, lowp> lowp_bvec1; - typedef vec<2, bool, lowp> lowp_bvec2; - typedef vec<3, bool, lowp> lowp_bvec3; - typedef vec<4, bool, lowp> lowp_bvec4; - - typedef vec<1, bool, mediump> mediump_bvec1; - typedef vec<2, bool, mediump> mediump_bvec2; - typedef vec<3, bool, mediump> mediump_bvec3; - typedef vec<4, bool, mediump> mediump_bvec4; - - typedef vec<1, bool, highp> highp_bvec1; - typedef vec<2, bool, highp> highp_bvec2; - typedef vec<3, bool, highp> highp_bvec3; - typedef vec<4, bool, highp> highp_bvec4; - - typedef vec<1, bool, defaultp> bvec1; - typedef vec<2, bool, defaultp> bvec2; - typedef vec<3, bool, defaultp> bvec3; - typedef vec<4, bool, defaultp> bvec4; - - // Vector int - - typedef vec<1, int, lowp> lowp_ivec1; - typedef vec<2, int, lowp> lowp_ivec2; - typedef vec<3, int, lowp> lowp_ivec3; - typedef vec<4, int, lowp> lowp_ivec4; - - typedef vec<1, int, mediump> mediump_ivec1; - typedef vec<2, int, mediump> mediump_ivec2; - typedef vec<3, int, mediump> mediump_ivec3; - typedef vec<4, int, mediump> mediump_ivec4; - - typedef vec<1, int, highp> highp_ivec1; - typedef vec<2, int, highp> highp_ivec2; - typedef vec<3, int, highp> highp_ivec3; - typedef vec<4, int, highp> highp_ivec4; - - typedef vec<1, int, defaultp> ivec1; - typedef vec<2, int, defaultp> ivec2; - typedef vec<3, int, defaultp> ivec3; - typedef vec<4, int, defaultp> ivec4; - - typedef vec<1, i8, lowp> lowp_i8vec1; - typedef vec<2, i8, lowp> lowp_i8vec2; - typedef vec<3, i8, lowp> lowp_i8vec3; - typedef vec<4, i8, lowp> lowp_i8vec4; - - typedef vec<1, i8, mediump> mediump_i8vec1; - typedef vec<2, i8, mediump> mediump_i8vec2; - typedef vec<3, i8, mediump> mediump_i8vec3; - typedef vec<4, i8, mediump> mediump_i8vec4; - - typedef vec<1, i8, highp> highp_i8vec1; - typedef vec<2, i8, highp> highp_i8vec2; - typedef vec<3, i8, highp> highp_i8vec3; - typedef vec<4, i8, highp> highp_i8vec4; - - typedef vec<1, i8, defaultp> i8vec1; - typedef vec<2, i8, defaultp> i8vec2; - typedef vec<3, i8, defaultp> i8vec3; - typedef vec<4, i8, defaultp> i8vec4; - - typedef vec<1, i16, lowp> lowp_i16vec1; - typedef vec<2, i16, lowp> lowp_i16vec2; - typedef vec<3, i16, lowp> lowp_i16vec3; - typedef vec<4, i16, lowp> lowp_i16vec4; - - typedef vec<1, i16, mediump> mediump_i16vec1; - typedef vec<2, i16, mediump> mediump_i16vec2; - typedef vec<3, i16, mediump> mediump_i16vec3; - typedef vec<4, i16, mediump> mediump_i16vec4; - - typedef vec<1, i16, highp> highp_i16vec1; - typedef vec<2, i16, highp> highp_i16vec2; - typedef vec<3, i16, highp> highp_i16vec3; - typedef vec<4, i16, highp> highp_i16vec4; - - typedef vec<1, i16, defaultp> i16vec1; - typedef vec<2, i16, defaultp> i16vec2; - typedef vec<3, i16, defaultp> i16vec3; - typedef vec<4, i16, defaultp> i16vec4; - - typedef vec<1, i32, lowp> lowp_i32vec1; - typedef vec<2, i32, lowp> lowp_i32vec2; - typedef vec<3, i32, lowp> lowp_i32vec3; - typedef vec<4, i32, lowp> lowp_i32vec4; - - typedef vec<1, i32, mediump> mediump_i32vec1; - typedef vec<2, i32, mediump> mediump_i32vec2; - typedef vec<3, i32, mediump> mediump_i32vec3; - typedef vec<4, i32, mediump> mediump_i32vec4; - - typedef vec<1, i32, highp> highp_i32vec1; - typedef vec<2, i32, highp> highp_i32vec2; - typedef vec<3, i32, highp> highp_i32vec3; - typedef vec<4, i32, highp> highp_i32vec4; - - typedef vec<1, i32, defaultp> i32vec1; - typedef vec<2, i32, defaultp> i32vec2; - typedef vec<3, i32, defaultp> i32vec3; - typedef vec<4, i32, defaultp> i32vec4; - - typedef vec<1, i64, lowp> lowp_i64vec1; - typedef vec<2, i64, lowp> lowp_i64vec2; - typedef vec<3, i64, lowp> lowp_i64vec3; - typedef vec<4, i64, lowp> lowp_i64vec4; - - typedef vec<1, i64, mediump> mediump_i64vec1; - typedef vec<2, i64, mediump> mediump_i64vec2; - typedef vec<3, i64, mediump> mediump_i64vec3; - typedef vec<4, i64, mediump> mediump_i64vec4; - - typedef vec<1, i64, highp> highp_i64vec1; - typedef vec<2, i64, highp> highp_i64vec2; - typedef vec<3, i64, highp> highp_i64vec3; - typedef vec<4, i64, highp> highp_i64vec4; - - typedef vec<1, i64, defaultp> i64vec1; - typedef vec<2, i64, defaultp> i64vec2; - typedef vec<3, i64, defaultp> i64vec3; - typedef vec<4, i64, defaultp> i64vec4; - - // Vector uint - - typedef vec<1, uint, lowp> lowp_uvec1; - typedef vec<2, uint, lowp> lowp_uvec2; - typedef vec<3, uint, lowp> lowp_uvec3; - typedef vec<4, uint, lowp> lowp_uvec4; - - typedef vec<1, uint, mediump> mediump_uvec1; - typedef vec<2, uint, mediump> mediump_uvec2; - typedef vec<3, uint, mediump> mediump_uvec3; - typedef vec<4, uint, mediump> mediump_uvec4; - - typedef vec<1, uint, highp> highp_uvec1; - typedef vec<2, uint, highp> highp_uvec2; - typedef vec<3, uint, highp> highp_uvec3; - typedef vec<4, uint, highp> highp_uvec4; - - typedef vec<1, uint, defaultp> uvec1; - typedef vec<2, uint, defaultp> uvec2; - typedef vec<3, uint, defaultp> uvec3; - typedef vec<4, uint, defaultp> uvec4; - - typedef vec<1, u8, lowp> lowp_u8vec1; - typedef vec<2, u8, lowp> lowp_u8vec2; - typedef vec<3, u8, lowp> lowp_u8vec3; - typedef vec<4, u8, lowp> lowp_u8vec4; - - typedef vec<1, u8, mediump> mediump_u8vec1; - typedef vec<2, u8, mediump> mediump_u8vec2; - typedef vec<3, u8, mediump> mediump_u8vec3; - typedef vec<4, u8, mediump> mediump_u8vec4; - - typedef vec<1, u8, highp> highp_u8vec1; - typedef vec<2, u8, highp> highp_u8vec2; - typedef vec<3, u8, highp> highp_u8vec3; - typedef vec<4, u8, highp> highp_u8vec4; - - typedef vec<1, u8, defaultp> u8vec1; - typedef vec<2, u8, defaultp> u8vec2; - typedef vec<3, u8, defaultp> u8vec3; - typedef vec<4, u8, defaultp> u8vec4; - - typedef vec<1, u16, lowp> lowp_u16vec1; - typedef vec<2, u16, lowp> lowp_u16vec2; - typedef vec<3, u16, lowp> lowp_u16vec3; - typedef vec<4, u16, lowp> lowp_u16vec4; - - typedef vec<1, u16, mediump> mediump_u16vec1; - typedef vec<2, u16, mediump> mediump_u16vec2; - typedef vec<3, u16, mediump> mediump_u16vec3; - typedef vec<4, u16, mediump> mediump_u16vec4; - - typedef vec<1, u16, highp> highp_u16vec1; - typedef vec<2, u16, highp> highp_u16vec2; - typedef vec<3, u16, highp> highp_u16vec3; - typedef vec<4, u16, highp> highp_u16vec4; - - typedef vec<1, u16, defaultp> u16vec1; - typedef vec<2, u16, defaultp> u16vec2; - typedef vec<3, u16, defaultp> u16vec3; - typedef vec<4, u16, defaultp> u16vec4; - - typedef vec<1, u32, lowp> lowp_u32vec1; - typedef vec<2, u32, lowp> lowp_u32vec2; - typedef vec<3, u32, lowp> lowp_u32vec3; - typedef vec<4, u32, lowp> lowp_u32vec4; - - typedef vec<1, u32, mediump> mediump_u32vec1; - typedef vec<2, u32, mediump> mediump_u32vec2; - typedef vec<3, u32, mediump> mediump_u32vec3; - typedef vec<4, u32, mediump> mediump_u32vec4; - - typedef vec<1, u32, highp> highp_u32vec1; - typedef vec<2, u32, highp> highp_u32vec2; - typedef vec<3, u32, highp> highp_u32vec3; - typedef vec<4, u32, highp> highp_u32vec4; - - typedef vec<1, u32, defaultp> u32vec1; - typedef vec<2, u32, defaultp> u32vec2; - typedef vec<3, u32, defaultp> u32vec3; - typedef vec<4, u32, defaultp> u32vec4; - - typedef vec<1, u64, lowp> lowp_u64vec1; - typedef vec<2, u64, lowp> lowp_u64vec2; - typedef vec<3, u64, lowp> lowp_u64vec3; - typedef vec<4, u64, lowp> lowp_u64vec4; - - typedef vec<1, u64, mediump> mediump_u64vec1; - typedef vec<2, u64, mediump> mediump_u64vec2; - typedef vec<3, u64, mediump> mediump_u64vec3; - typedef vec<4, u64, mediump> mediump_u64vec4; - - typedef vec<1, u64, highp> highp_u64vec1; - typedef vec<2, u64, highp> highp_u64vec2; - typedef vec<3, u64, highp> highp_u64vec3; - typedef vec<4, u64, highp> highp_u64vec4; - - typedef vec<1, u64, defaultp> u64vec1; - typedef vec<2, u64, defaultp> u64vec2; - typedef vec<3, u64, defaultp> u64vec3; - typedef vec<4, u64, defaultp> u64vec4; - - // Vector float - - typedef vec<1, float, lowp> lowp_vec1; - typedef vec<2, float, lowp> lowp_vec2; - typedef vec<3, float, lowp> lowp_vec3; - typedef vec<4, float, lowp> lowp_vec4; - - typedef vec<1, float, mediump> mediump_vec1; - typedef vec<2, float, mediump> mediump_vec2; - typedef vec<3, float, mediump> mediump_vec3; - typedef vec<4, float, mediump> mediump_vec4; - - typedef vec<1, float, highp> highp_vec1; - typedef vec<2, float, highp> highp_vec2; - typedef vec<3, float, highp> highp_vec3; - typedef vec<4, float, highp> highp_vec4; - - typedef vec<1, float, defaultp> vec1; - typedef vec<2, float, defaultp> vec2; - typedef vec<3, float, defaultp> vec3; - typedef vec<4, float, defaultp> vec4; - - typedef vec<1, float, lowp> lowp_fvec1; - typedef vec<2, float, lowp> lowp_fvec2; - typedef vec<3, float, lowp> lowp_fvec3; - typedef vec<4, float, lowp> lowp_fvec4; - - typedef vec<1, float, mediump> mediump_fvec1; - typedef vec<2, float, mediump> mediump_fvec2; - typedef vec<3, float, mediump> mediump_fvec3; - typedef vec<4, float, mediump> mediump_fvec4; - - typedef vec<1, float, highp> highp_fvec1; - typedef vec<2, float, highp> highp_fvec2; - typedef vec<3, float, highp> highp_fvec3; - typedef vec<4, float, highp> highp_fvec4; - - typedef vec<1, f32, defaultp> fvec1; - typedef vec<2, f32, defaultp> fvec2; - typedef vec<3, f32, defaultp> fvec3; - typedef vec<4, f32, defaultp> fvec4; - - typedef vec<1, f32, lowp> lowp_f32vec1; - typedef vec<2, f32, lowp> lowp_f32vec2; - typedef vec<3, f32, lowp> lowp_f32vec3; - typedef vec<4, f32, lowp> lowp_f32vec4; - - typedef vec<1, f32, mediump> mediump_f32vec1; - typedef vec<2, f32, mediump> mediump_f32vec2; - typedef vec<3, f32, mediump> mediump_f32vec3; - typedef vec<4, f32, mediump> mediump_f32vec4; - - typedef vec<1, f32, highp> highp_f32vec1; - typedef vec<2, f32, highp> highp_f32vec2; - typedef vec<3, f32, highp> highp_f32vec3; - typedef vec<4, f32, highp> highp_f32vec4; - - typedef vec<1, f32, defaultp> f32vec1; - typedef vec<2, f32, defaultp> f32vec2; - typedef vec<3, f32, defaultp> f32vec3; - typedef vec<4, f32, defaultp> f32vec4; - - typedef vec<1, f64, lowp> lowp_dvec1; - typedef vec<2, f64, lowp> lowp_dvec2; - typedef vec<3, f64, lowp> lowp_dvec3; - typedef vec<4, f64, lowp> lowp_dvec4; - - typedef vec<1, f64, mediump> mediump_dvec1; - typedef vec<2, f64, mediump> mediump_dvec2; - typedef vec<3, f64, mediump> mediump_dvec3; - typedef vec<4, f64, mediump> mediump_dvec4; - - typedef vec<1, f64, highp> highp_dvec1; - typedef vec<2, f64, highp> highp_dvec2; - typedef vec<3, f64, highp> highp_dvec3; - typedef vec<4, f64, highp> highp_dvec4; - - typedef vec<1, f64, defaultp> dvec1; - typedef vec<2, f64, defaultp> dvec2; - typedef vec<3, f64, defaultp> dvec3; - typedef vec<4, f64, defaultp> dvec4; - - typedef vec<1, f64, lowp> lowp_f64vec1; - typedef vec<2, f64, lowp> lowp_f64vec2; - typedef vec<3, f64, lowp> lowp_f64vec3; - typedef vec<4, f64, lowp> lowp_f64vec4; - - typedef vec<1, f64, mediump> mediump_f64vec1; - typedef vec<2, f64, mediump> mediump_f64vec2; - typedef vec<3, f64, mediump> mediump_f64vec3; - typedef vec<4, f64, mediump> mediump_f64vec4; - - typedef vec<1, f64, highp> highp_f64vec1; - typedef vec<2, f64, highp> highp_f64vec2; - typedef vec<3, f64, highp> highp_f64vec3; - typedef vec<4, f64, highp> highp_f64vec4; - - typedef vec<1, f64, defaultp> f64vec1; - typedef vec<2, f64, defaultp> f64vec2; - typedef vec<3, f64, defaultp> f64vec3; - typedef vec<4, f64, defaultp> f64vec4; - - // Matrix NxN - - typedef mat<2, 2, f32, lowp> lowp_mat2; - typedef mat<3, 3, f32, lowp> lowp_mat3; - typedef mat<4, 4, f32, lowp> lowp_mat4; - - typedef mat<2, 2, f32, mediump> mediump_mat2; - typedef mat<3, 3, f32, mediump> mediump_mat3; - typedef mat<4, 4, f32, mediump> mediump_mat4; - - typedef mat<2, 2, f32, highp> highp_mat2; - typedef mat<3, 3, f32, highp> highp_mat3; - typedef mat<4, 4, f32, highp> highp_mat4; - - typedef mat<2, 2, f32, defaultp> mat2; - typedef mat<3, 3, f32, defaultp> mat3; - typedef mat<4, 4, f32, defaultp> mat4; - - typedef mat<2, 2, f32, lowp> lowp_fmat2; - typedef mat<3, 3, f32, lowp> lowp_fmat3; - typedef mat<4, 4, f32, lowp> lowp_fmat4; - - typedef mat<2, 2, f32, mediump> mediump_fmat2; - typedef mat<3, 3, f32, mediump> mediump_fmat3; - typedef mat<4, 4, f32, mediump> mediump_fmat4; - - typedef mat<2, 2, f32, highp> highp_fmat2; - typedef mat<3, 3, f32, highp> highp_fmat3; - typedef mat<4, 4, f32, highp> highp_fmat4; - - typedef mat<2, 2, f32, defaultp> fmat2; - typedef mat<3, 3, f32, defaultp> fmat3; - typedef mat<4, 4, f32, defaultp> fmat4; - - typedef mat<2, 2, f32, lowp> lowp_f32mat2; - typedef mat<3, 3, f32, lowp> lowp_f32mat3; - typedef mat<4, 4, f32, lowp> lowp_f32mat4; - - typedef mat<2, 2, f32, mediump> mediump_f32mat2; - typedef mat<3, 3, f32, mediump> mediump_f32mat3; - typedef mat<4, 4, f32, mediump> mediump_f32mat4; - - typedef mat<2, 2, f32, highp> highp_f32mat2; - typedef mat<3, 3, f32, highp> highp_f32mat3; - typedef mat<4, 4, f32, highp> highp_f32mat4; - - typedef mat<2, 2, f32, defaultp> f32mat2; - typedef mat<3, 3, f32, defaultp> f32mat3; - typedef mat<4, 4, f32, defaultp> f32mat4; - - typedef mat<2, 2, f64, lowp> lowp_dmat2; - typedef mat<3, 3, f64, lowp> lowp_dmat3; - typedef mat<4, 4, f64, lowp> lowp_dmat4; - - typedef mat<2, 2, f64, mediump> mediump_dmat2; - typedef mat<3, 3, f64, mediump> mediump_dmat3; - typedef mat<4, 4, f64, mediump> mediump_dmat4; - - typedef mat<2, 2, f64, highp> highp_dmat2; - typedef mat<3, 3, f64, highp> highp_dmat3; - typedef mat<4, 4, f64, highp> highp_dmat4; - - typedef mat<2, 2, f64, defaultp> dmat2; - typedef mat<3, 3, f64, defaultp> dmat3; - typedef mat<4, 4, f64, defaultp> dmat4; - - typedef mat<2, 2, f64, lowp> lowp_f64mat2; - typedef mat<3, 3, f64, lowp> lowp_f64mat3; - typedef mat<4, 4, f64, lowp> lowp_f64mat4; - - typedef mat<2, 2, f64, mediump> mediump_f64mat2; - typedef mat<3, 3, f64, mediump> mediump_f64mat3; - typedef mat<4, 4, f64, mediump> mediump_f64mat4; - - typedef mat<2, 2, f64, highp> highp_f64mat2; - typedef mat<3, 3, f64, highp> highp_f64mat3; - typedef mat<4, 4, f64, highp> highp_f64mat4; - - typedef mat<2, 2, f64, defaultp> f64mat2; - typedef mat<3, 3, f64, defaultp> f64mat3; - typedef mat<4, 4, f64, defaultp> f64mat4; - - // Matrix MxN - - typedef mat<2, 2, f32, lowp> lowp_mat2x2; - typedef mat<2, 3, f32, lowp> lowp_mat2x3; - typedef mat<2, 4, f32, lowp> lowp_mat2x4; - typedef mat<3, 2, f32, lowp> lowp_mat3x2; - typedef mat<3, 3, f32, lowp> lowp_mat3x3; - typedef mat<3, 4, f32, lowp> lowp_mat3x4; - typedef mat<4, 2, f32, lowp> lowp_mat4x2; - typedef mat<4, 3, f32, lowp> lowp_mat4x3; - typedef mat<4, 4, f32, lowp> lowp_mat4x4; - - typedef mat<2, 2, f32, mediump> mediump_mat2x2; - typedef mat<2, 3, f32, mediump> mediump_mat2x3; - typedef mat<2, 4, f32, mediump> mediump_mat2x4; - typedef mat<3, 2, f32, mediump> mediump_mat3x2; - typedef mat<3, 3, f32, mediump> mediump_mat3x3; - typedef mat<3, 4, f32, mediump> mediump_mat3x4; - typedef mat<4, 2, f32, mediump> mediump_mat4x2; - typedef mat<4, 3, f32, mediump> mediump_mat4x3; - typedef mat<4, 4, f32, mediump> mediump_mat4x4; - - typedef mat<2, 2, f32, highp> highp_mat2x2; - typedef mat<2, 3, f32, highp> highp_mat2x3; - typedef mat<2, 4, f32, highp> highp_mat2x4; - typedef mat<3, 2, f32, highp> highp_mat3x2; - typedef mat<3, 3, f32, highp> highp_mat3x3; - typedef mat<3, 4, f32, highp> highp_mat3x4; - typedef mat<4, 2, f32, highp> highp_mat4x2; - typedef mat<4, 3, f32, highp> highp_mat4x3; - typedef mat<4, 4, f32, highp> highp_mat4x4; - - typedef mat<2, 2, f32, defaultp> mat2x2; - typedef mat<3, 2, f32, defaultp> mat3x2; - typedef mat<4, 2, f32, defaultp> mat4x2; - typedef mat<2, 3, f32, defaultp> mat2x3; - typedef mat<3, 3, f32, defaultp> mat3x3; - typedef mat<4, 3, f32, defaultp> mat4x3; - typedef mat<2, 4, f32, defaultp> mat2x4; - typedef mat<3, 4, f32, defaultp> mat3x4; - typedef mat<4, 4, f32, defaultp> mat4x4; - - typedef mat<2, 2, f32, lowp> lowp_fmat2x2; - typedef mat<2, 3, f32, lowp> lowp_fmat2x3; - typedef mat<2, 4, f32, lowp> lowp_fmat2x4; - typedef mat<3, 2, f32, lowp> lowp_fmat3x2; - typedef mat<3, 3, f32, lowp> lowp_fmat3x3; - typedef mat<3, 4, f32, lowp> lowp_fmat3x4; - typedef mat<4, 2, f32, lowp> lowp_fmat4x2; - typedef mat<4, 3, f32, lowp> lowp_fmat4x3; - typedef mat<4, 4, f32, lowp> lowp_fmat4x4; - - typedef mat<2, 2, f32, mediump> mediump_fmat2x2; - typedef mat<2, 3, f32, mediump> mediump_fmat2x3; - typedef mat<2, 4, f32, mediump> mediump_fmat2x4; - typedef mat<3, 2, f32, mediump> mediump_fmat3x2; - typedef mat<3, 3, f32, mediump> mediump_fmat3x3; - typedef mat<3, 4, f32, mediump> mediump_fmat3x4; - typedef mat<4, 2, f32, mediump> mediump_fmat4x2; - typedef mat<4, 3, f32, mediump> mediump_fmat4x3; - typedef mat<4, 4, f32, mediump> mediump_fmat4x4; - - typedef mat<2, 2, f32, highp> highp_fmat2x2; - typedef mat<2, 3, f32, highp> highp_fmat2x3; - typedef mat<2, 4, f32, highp> highp_fmat2x4; - typedef mat<3, 2, f32, highp> highp_fmat3x2; - typedef mat<3, 3, f32, highp> highp_fmat3x3; - typedef mat<3, 4, f32, highp> highp_fmat3x4; - typedef mat<4, 2, f32, highp> highp_fmat4x2; - typedef mat<4, 3, f32, highp> highp_fmat4x3; - typedef mat<4, 4, f32, highp> highp_fmat4x4; - - typedef mat<2, 2, f32, defaultp> fmat2x2; - typedef mat<3, 2, f32, defaultp> fmat3x2; - typedef mat<4, 2, f32, defaultp> fmat4x2; - typedef mat<2, 3, f32, defaultp> fmat2x3; - typedef mat<3, 3, f32, defaultp> fmat3x3; - typedef mat<4, 3, f32, defaultp> fmat4x3; - typedef mat<2, 4, f32, defaultp> fmat2x4; - typedef mat<3, 4, f32, defaultp> fmat3x4; - typedef mat<4, 4, f32, defaultp> fmat4x4; - - typedef mat<2, 2, f32, lowp> lowp_f32mat2x2; - typedef mat<2, 3, f32, lowp> lowp_f32mat2x3; - typedef mat<2, 4, f32, lowp> lowp_f32mat2x4; - typedef mat<3, 2, f32, lowp> lowp_f32mat3x2; - typedef mat<3, 3, f32, lowp> lowp_f32mat3x3; - typedef mat<3, 4, f32, lowp> lowp_f32mat3x4; - typedef mat<4, 2, f32, lowp> lowp_f32mat4x2; - typedef mat<4, 3, f32, lowp> lowp_f32mat4x3; - typedef mat<4, 4, f32, lowp> lowp_f32mat4x4; - - typedef mat<2, 2, f32, mediump> mediump_f32mat2x2; - typedef mat<2, 3, f32, mediump> mediump_f32mat2x3; - typedef mat<2, 4, f32, mediump> mediump_f32mat2x4; - typedef mat<3, 2, f32, mediump> mediump_f32mat3x2; - typedef mat<3, 3, f32, mediump> mediump_f32mat3x3; - typedef mat<3, 4, f32, mediump> mediump_f32mat3x4; - typedef mat<4, 2, f32, mediump> mediump_f32mat4x2; - typedef mat<4, 3, f32, mediump> mediump_f32mat4x3; - typedef mat<4, 4, f32, mediump> mediump_f32mat4x4; - - typedef mat<2, 2, f32, highp> highp_f32mat2x2; - typedef mat<2, 3, f32, highp> highp_f32mat2x3; - typedef mat<2, 4, f32, highp> highp_f32mat2x4; - typedef mat<3, 2, f32, highp> highp_f32mat3x2; - typedef mat<3, 3, f32, highp> highp_f32mat3x3; - typedef mat<3, 4, f32, highp> highp_f32mat3x4; - typedef mat<4, 2, f32, highp> highp_f32mat4x2; - typedef mat<4, 3, f32, highp> highp_f32mat4x3; - typedef mat<4, 4, f32, highp> highp_f32mat4x4; - - typedef mat<2, 2, f32, defaultp> f32mat2x2; - typedef mat<3, 2, f32, defaultp> f32mat3x2; - typedef mat<4, 2, f32, defaultp> f32mat4x2; - typedef mat<2, 3, f32, defaultp> f32mat2x3; - typedef mat<3, 3, f32, defaultp> f32mat3x3; - typedef mat<4, 3, f32, defaultp> f32mat4x3; - typedef mat<2, 4, f32, defaultp> f32mat2x4; - typedef mat<3, 4, f32, defaultp> f32mat3x4; - typedef mat<4, 4, f32, defaultp> f32mat4x4; - - typedef mat<2, 2, double, lowp> lowp_dmat2x2; - typedef mat<2, 3, double, lowp> lowp_dmat2x3; - typedef mat<2, 4, double, lowp> lowp_dmat2x4; - typedef mat<3, 2, double, lowp> lowp_dmat3x2; - typedef mat<3, 3, double, lowp> lowp_dmat3x3; - typedef mat<3, 4, double, lowp> lowp_dmat3x4; - typedef mat<4, 2, double, lowp> lowp_dmat4x2; - typedef mat<4, 3, double, lowp> lowp_dmat4x3; - typedef mat<4, 4, double, lowp> lowp_dmat4x4; - - typedef mat<2, 2, double, mediump> mediump_dmat2x2; - typedef mat<2, 3, double, mediump> mediump_dmat2x3; - typedef mat<2, 4, double, mediump> mediump_dmat2x4; - typedef mat<3, 2, double, mediump> mediump_dmat3x2; - typedef mat<3, 3, double, mediump> mediump_dmat3x3; - typedef mat<3, 4, double, mediump> mediump_dmat3x4; - typedef mat<4, 2, double, mediump> mediump_dmat4x2; - typedef mat<4, 3, double, mediump> mediump_dmat4x3; - typedef mat<4, 4, double, mediump> mediump_dmat4x4; - - typedef mat<2, 2, double, highp> highp_dmat2x2; - typedef mat<2, 3, double, highp> highp_dmat2x3; - typedef mat<2, 4, double, highp> highp_dmat2x4; - typedef mat<3, 2, double, highp> highp_dmat3x2; - typedef mat<3, 3, double, highp> highp_dmat3x3; - typedef mat<3, 4, double, highp> highp_dmat3x4; - typedef mat<4, 2, double, highp> highp_dmat4x2; - typedef mat<4, 3, double, highp> highp_dmat4x3; - typedef mat<4, 4, double, highp> highp_dmat4x4; - - typedef mat<2, 2, double, defaultp> dmat2x2; - typedef mat<3, 2, double, defaultp> dmat3x2; - typedef mat<4, 2, double, defaultp> dmat4x2; - typedef mat<2, 3, double, defaultp> dmat2x3; - typedef mat<3, 3, double, defaultp> dmat3x3; - typedef mat<4, 3, double, defaultp> dmat4x3; - typedef mat<2, 4, double, defaultp> dmat2x4; - typedef mat<3, 4, double, defaultp> dmat3x4; - typedef mat<4, 4, double, defaultp> dmat4x4; - - typedef mat<2, 2, f64, lowp> lowp_f64mat2x2; - typedef mat<2, 3, f64, lowp> lowp_f64mat2x3; - typedef mat<2, 4, f64, lowp> lowp_f64mat2x4; - typedef mat<3, 2, f64, lowp> lowp_f64mat3x2; - typedef mat<3, 3, f64, lowp> lowp_f64mat3x3; - typedef mat<3, 4, f64, lowp> lowp_f64mat3x4; - typedef mat<4, 2, f64, lowp> lowp_f64mat4x2; - typedef mat<4, 3, f64, lowp> lowp_f64mat4x3; - typedef mat<4, 4, f64, lowp> lowp_f64mat4x4; - - typedef mat<2, 2, f64, mediump> mediump_f64mat2x2; - typedef mat<2, 3, f64, mediump> mediump_f64mat2x3; - typedef mat<2, 4, f64, mediump> mediump_f64mat2x4; - typedef mat<3, 2, f64, mediump> mediump_f64mat3x2; - typedef mat<3, 3, f64, mediump> mediump_f64mat3x3; - typedef mat<3, 4, f64, mediump> mediump_f64mat3x4; - typedef mat<4, 2, f64, mediump> mediump_f64mat4x2; - typedef mat<4, 3, f64, mediump> mediump_f64mat4x3; - typedef mat<4, 4, f64, mediump> mediump_f64mat4x4; - - typedef mat<2, 2, f64, highp> highp_f64mat2x2; - typedef mat<2, 3, f64, highp> highp_f64mat2x3; - typedef mat<2, 4, f64, highp> highp_f64mat2x4; - typedef mat<3, 2, f64, highp> highp_f64mat3x2; - typedef mat<3, 3, f64, highp> highp_f64mat3x3; - typedef mat<3, 4, f64, highp> highp_f64mat3x4; - typedef mat<4, 2, f64, highp> highp_f64mat4x2; - typedef mat<4, 3, f64, highp> highp_f64mat4x3; - typedef mat<4, 4, f64, highp> highp_f64mat4x4; - - typedef mat<2, 2, f64, defaultp> f64mat2x2; - typedef mat<3, 2, f64, defaultp> f64mat3x2; - typedef mat<4, 2, f64, defaultp> f64mat4x2; - typedef mat<2, 3, f64, defaultp> f64mat2x3; - typedef mat<3, 3, f64, defaultp> f64mat3x3; - typedef mat<4, 3, f64, defaultp> f64mat4x3; - typedef mat<2, 4, f64, defaultp> f64mat2x4; - typedef mat<3, 4, f64, defaultp> f64mat3x4; - typedef mat<4, 4, f64, defaultp> f64mat4x4; - - // Signed integer matrix MxN - - typedef mat<2, 2, int, lowp> lowp_imat2x2; - typedef mat<2, 3, int, lowp> lowp_imat2x3; - typedef mat<2, 4, int, lowp> lowp_imat2x4; - typedef mat<3, 2, int, lowp> lowp_imat3x2; - typedef mat<3, 3, int, lowp> lowp_imat3x3; - typedef mat<3, 4, int, lowp> lowp_imat3x4; - typedef mat<4, 2, int, lowp> lowp_imat4x2; - typedef mat<4, 3, int, lowp> lowp_imat4x3; - typedef mat<4, 4, int, lowp> lowp_imat4x4; - - typedef mat<2, 2, int, mediump> mediump_imat2x2; - typedef mat<2, 3, int, mediump> mediump_imat2x3; - typedef mat<2, 4, int, mediump> mediump_imat2x4; - typedef mat<3, 2, int, mediump> mediump_imat3x2; - typedef mat<3, 3, int, mediump> mediump_imat3x3; - typedef mat<3, 4, int, mediump> mediump_imat3x4; - typedef mat<4, 2, int, mediump> mediump_imat4x2; - typedef mat<4, 3, int, mediump> mediump_imat4x3; - typedef mat<4, 4, int, mediump> mediump_imat4x4; - - typedef mat<2, 2, int, highp> highp_imat2x2; - typedef mat<2, 3, int, highp> highp_imat2x3; - typedef mat<2, 4, int, highp> highp_imat2x4; - typedef mat<3, 2, int, highp> highp_imat3x2; - typedef mat<3, 3, int, highp> highp_imat3x3; - typedef mat<3, 4, int, highp> highp_imat3x4; - typedef mat<4, 2, int, highp> highp_imat4x2; - typedef mat<4, 3, int, highp> highp_imat4x3; - typedef mat<4, 4, int, highp> highp_imat4x4; - - typedef mat<2, 2, int, defaultp> imat2x2; - typedef mat<3, 2, int, defaultp> imat3x2; - typedef mat<4, 2, int, defaultp> imat4x2; - typedef mat<2, 3, int, defaultp> imat2x3; - typedef mat<3, 3, int, defaultp> imat3x3; - typedef mat<4, 3, int, defaultp> imat4x3; - typedef mat<2, 4, int, defaultp> imat2x4; - typedef mat<3, 4, int, defaultp> imat3x4; - typedef mat<4, 4, int, defaultp> imat4x4; - - - typedef mat<2, 2, int8, lowp> lowp_i8mat2x2; - typedef mat<2, 3, int8, lowp> lowp_i8mat2x3; - typedef mat<2, 4, int8, lowp> lowp_i8mat2x4; - typedef mat<3, 2, int8, lowp> lowp_i8mat3x2; - typedef mat<3, 3, int8, lowp> lowp_i8mat3x3; - typedef mat<3, 4, int8, lowp> lowp_i8mat3x4; - typedef mat<4, 2, int8, lowp> lowp_i8mat4x2; - typedef mat<4, 3, int8, lowp> lowp_i8mat4x3; - typedef mat<4, 4, int8, lowp> lowp_i8mat4x4; - - typedef mat<2, 2, int8, mediump> mediump_i8mat2x2; - typedef mat<2, 3, int8, mediump> mediump_i8mat2x3; - typedef mat<2, 4, int8, mediump> mediump_i8mat2x4; - typedef mat<3, 2, int8, mediump> mediump_i8mat3x2; - typedef mat<3, 3, int8, mediump> mediump_i8mat3x3; - typedef mat<3, 4, int8, mediump> mediump_i8mat3x4; - typedef mat<4, 2, int8, mediump> mediump_i8mat4x2; - typedef mat<4, 3, int8, mediump> mediump_i8mat4x3; - typedef mat<4, 4, int8, mediump> mediump_i8mat4x4; - - typedef mat<2, 2, int8, highp> highp_i8mat2x2; - typedef mat<2, 3, int8, highp> highp_i8mat2x3; - typedef mat<2, 4, int8, highp> highp_i8mat2x4; - typedef mat<3, 2, int8, highp> highp_i8mat3x2; - typedef mat<3, 3, int8, highp> highp_i8mat3x3; - typedef mat<3, 4, int8, highp> highp_i8mat3x4; - typedef mat<4, 2, int8, highp> highp_i8mat4x2; - typedef mat<4, 3, int8, highp> highp_i8mat4x3; - typedef mat<4, 4, int8, highp> highp_i8mat4x4; - - typedef mat<2, 2, int8, defaultp> i8mat2x2; - typedef mat<3, 2, int8, defaultp> i8mat3x2; - typedef mat<4, 2, int8, defaultp> i8mat4x2; - typedef mat<2, 3, int8, defaultp> i8mat2x3; - typedef mat<3, 3, int8, defaultp> i8mat3x3; - typedef mat<4, 3, int8, defaultp> i8mat4x3; - typedef mat<2, 4, int8, defaultp> i8mat2x4; - typedef mat<3, 4, int8, defaultp> i8mat3x4; - typedef mat<4, 4, int8, defaultp> i8mat4x4; - - - typedef mat<2, 2, int16, lowp> lowp_i16mat2x2; - typedef mat<2, 3, int16, lowp> lowp_i16mat2x3; - typedef mat<2, 4, int16, lowp> lowp_i16mat2x4; - typedef mat<3, 2, int16, lowp> lowp_i16mat3x2; - typedef mat<3, 3, int16, lowp> lowp_i16mat3x3; - typedef mat<3, 4, int16, lowp> lowp_i16mat3x4; - typedef mat<4, 2, int16, lowp> lowp_i16mat4x2; - typedef mat<4, 3, int16, lowp> lowp_i16mat4x3; - typedef mat<4, 4, int16, lowp> lowp_i16mat4x4; - - typedef mat<2, 2, int16, mediump> mediump_i16mat2x2; - typedef mat<2, 3, int16, mediump> mediump_i16mat2x3; - typedef mat<2, 4, int16, mediump> mediump_i16mat2x4; - typedef mat<3, 2, int16, mediump> mediump_i16mat3x2; - typedef mat<3, 3, int16, mediump> mediump_i16mat3x3; - typedef mat<3, 4, int16, mediump> mediump_i16mat3x4; - typedef mat<4, 2, int16, mediump> mediump_i16mat4x2; - typedef mat<4, 3, int16, mediump> mediump_i16mat4x3; - typedef mat<4, 4, int16, mediump> mediump_i16mat4x4; - - typedef mat<2, 2, int16, highp> highp_i16mat2x2; - typedef mat<2, 3, int16, highp> highp_i16mat2x3; - typedef mat<2, 4, int16, highp> highp_i16mat2x4; - typedef mat<3, 2, int16, highp> highp_i16mat3x2; - typedef mat<3, 3, int16, highp> highp_i16mat3x3; - typedef mat<3, 4, int16, highp> highp_i16mat3x4; - typedef mat<4, 2, int16, highp> highp_i16mat4x2; - typedef mat<4, 3, int16, highp> highp_i16mat4x3; - typedef mat<4, 4, int16, highp> highp_i16mat4x4; - - typedef mat<2, 2, int16, defaultp> i16mat2x2; - typedef mat<3, 2, int16, defaultp> i16mat3x2; - typedef mat<4, 2, int16, defaultp> i16mat4x2; - typedef mat<2, 3, int16, defaultp> i16mat2x3; - typedef mat<3, 3, int16, defaultp> i16mat3x3; - typedef mat<4, 3, int16, defaultp> i16mat4x3; - typedef mat<2, 4, int16, defaultp> i16mat2x4; - typedef mat<3, 4, int16, defaultp> i16mat3x4; - typedef mat<4, 4, int16, defaultp> i16mat4x4; - - - typedef mat<2, 2, int32, lowp> lowp_i32mat2x2; - typedef mat<2, 3, int32, lowp> lowp_i32mat2x3; - typedef mat<2, 4, int32, lowp> lowp_i32mat2x4; - typedef mat<3, 2, int32, lowp> lowp_i32mat3x2; - typedef mat<3, 3, int32, lowp> lowp_i32mat3x3; - typedef mat<3, 4, int32, lowp> lowp_i32mat3x4; - typedef mat<4, 2, int32, lowp> lowp_i32mat4x2; - typedef mat<4, 3, int32, lowp> lowp_i32mat4x3; - typedef mat<4, 4, int32, lowp> lowp_i32mat4x4; - - typedef mat<2, 2, int32, mediump> mediump_i32mat2x2; - typedef mat<2, 3, int32, mediump> mediump_i32mat2x3; - typedef mat<2, 4, int32, mediump> mediump_i32mat2x4; - typedef mat<3, 2, int32, mediump> mediump_i32mat3x2; - typedef mat<3, 3, int32, mediump> mediump_i32mat3x3; - typedef mat<3, 4, int32, mediump> mediump_i32mat3x4; - typedef mat<4, 2, int32, mediump> mediump_i32mat4x2; - typedef mat<4, 3, int32, mediump> mediump_i32mat4x3; - typedef mat<4, 4, int32, mediump> mediump_i32mat4x4; - - typedef mat<2, 2, int32, highp> highp_i32mat2x2; - typedef mat<2, 3, int32, highp> highp_i32mat2x3; - typedef mat<2, 4, int32, highp> highp_i32mat2x4; - typedef mat<3, 2, int32, highp> highp_i32mat3x2; - typedef mat<3, 3, int32, highp> highp_i32mat3x3; - typedef mat<3, 4, int32, highp> highp_i32mat3x4; - typedef mat<4, 2, int32, highp> highp_i32mat4x2; - typedef mat<4, 3, int32, highp> highp_i32mat4x3; - typedef mat<4, 4, int32, highp> highp_i32mat4x4; - - typedef mat<2, 2, int32, defaultp> i32mat2x2; - typedef mat<3, 2, int32, defaultp> i32mat3x2; - typedef mat<4, 2, int32, defaultp> i32mat4x2; - typedef mat<2, 3, int32, defaultp> i32mat2x3; - typedef mat<3, 3, int32, defaultp> i32mat3x3; - typedef mat<4, 3, int32, defaultp> i32mat4x3; - typedef mat<2, 4, int32, defaultp> i32mat2x4; - typedef mat<3, 4, int32, defaultp> i32mat3x4; - typedef mat<4, 4, int32, defaultp> i32mat4x4; - - - typedef mat<2, 2, int64, lowp> lowp_i64mat2x2; - typedef mat<2, 3, int64, lowp> lowp_i64mat2x3; - typedef mat<2, 4, int64, lowp> lowp_i64mat2x4; - typedef mat<3, 2, int64, lowp> lowp_i64mat3x2; - typedef mat<3, 3, int64, lowp> lowp_i64mat3x3; - typedef mat<3, 4, int64, lowp> lowp_i64mat3x4; - typedef mat<4, 2, int64, lowp> lowp_i64mat4x2; - typedef mat<4, 3, int64, lowp> lowp_i64mat4x3; - typedef mat<4, 4, int64, lowp> lowp_i64mat4x4; - - typedef mat<2, 2, int64, mediump> mediump_i64mat2x2; - typedef mat<2, 3, int64, mediump> mediump_i64mat2x3; - typedef mat<2, 4, int64, mediump> mediump_i64mat2x4; - typedef mat<3, 2, int64, mediump> mediump_i64mat3x2; - typedef mat<3, 3, int64, mediump> mediump_i64mat3x3; - typedef mat<3, 4, int64, mediump> mediump_i64mat3x4; - typedef mat<4, 2, int64, mediump> mediump_i64mat4x2; - typedef mat<4, 3, int64, mediump> mediump_i64mat4x3; - typedef mat<4, 4, int64, mediump> mediump_i64mat4x4; - - typedef mat<2, 2, int64, highp> highp_i64mat2x2; - typedef mat<2, 3, int64, highp> highp_i64mat2x3; - typedef mat<2, 4, int64, highp> highp_i64mat2x4; - typedef mat<3, 2, int64, highp> highp_i64mat3x2; - typedef mat<3, 3, int64, highp> highp_i64mat3x3; - typedef mat<3, 4, int64, highp> highp_i64mat3x4; - typedef mat<4, 2, int64, highp> highp_i64mat4x2; - typedef mat<4, 3, int64, highp> highp_i64mat4x3; - typedef mat<4, 4, int64, highp> highp_i64mat4x4; - - typedef mat<2, 2, int64, defaultp> i64mat2x2; - typedef mat<3, 2, int64, defaultp> i64mat3x2; - typedef mat<4, 2, int64, defaultp> i64mat4x2; - typedef mat<2, 3, int64, defaultp> i64mat2x3; - typedef mat<3, 3, int64, defaultp> i64mat3x3; - typedef mat<4, 3, int64, defaultp> i64mat4x3; - typedef mat<2, 4, int64, defaultp> i64mat2x4; - typedef mat<3, 4, int64, defaultp> i64mat3x4; - typedef mat<4, 4, int64, defaultp> i64mat4x4; - - - // Unsigned integer matrix MxN - - typedef mat<2, 2, uint, lowp> lowp_umat2x2; - typedef mat<2, 3, uint, lowp> lowp_umat2x3; - typedef mat<2, 4, uint, lowp> lowp_umat2x4; - typedef mat<3, 2, uint, lowp> lowp_umat3x2; - typedef mat<3, 3, uint, lowp> lowp_umat3x3; - typedef mat<3, 4, uint, lowp> lowp_umat3x4; - typedef mat<4, 2, uint, lowp> lowp_umat4x2; - typedef mat<4, 3, uint, lowp> lowp_umat4x3; - typedef mat<4, 4, uint, lowp> lowp_umat4x4; - - typedef mat<2, 2, uint, mediump> mediump_umat2x2; - typedef mat<2, 3, uint, mediump> mediump_umat2x3; - typedef mat<2, 4, uint, mediump> mediump_umat2x4; - typedef mat<3, 2, uint, mediump> mediump_umat3x2; - typedef mat<3, 3, uint, mediump> mediump_umat3x3; - typedef mat<3, 4, uint, mediump> mediump_umat3x4; - typedef mat<4, 2, uint, mediump> mediump_umat4x2; - typedef mat<4, 3, uint, mediump> mediump_umat4x3; - typedef mat<4, 4, uint, mediump> mediump_umat4x4; - - typedef mat<2, 2, uint, highp> highp_umat2x2; - typedef mat<2, 3, uint, highp> highp_umat2x3; - typedef mat<2, 4, uint, highp> highp_umat2x4; - typedef mat<3, 2, uint, highp> highp_umat3x2; - typedef mat<3, 3, uint, highp> highp_umat3x3; - typedef mat<3, 4, uint, highp> highp_umat3x4; - typedef mat<4, 2, uint, highp> highp_umat4x2; - typedef mat<4, 3, uint, highp> highp_umat4x3; - typedef mat<4, 4, uint, highp> highp_umat4x4; - - typedef mat<2, 2, uint, defaultp> umat2x2; - typedef mat<3, 2, uint, defaultp> umat3x2; - typedef mat<4, 2, uint, defaultp> umat4x2; - typedef mat<2, 3, uint, defaultp> umat2x3; - typedef mat<3, 3, uint, defaultp> umat3x3; - typedef mat<4, 3, uint, defaultp> umat4x3; - typedef mat<2, 4, uint, defaultp> umat2x4; - typedef mat<3, 4, uint, defaultp> umat3x4; - typedef mat<4, 4, uint, defaultp> umat4x4; - - - typedef mat<2, 2, uint8, lowp> lowp_u8mat2x2; - typedef mat<2, 3, uint8, lowp> lowp_u8mat2x3; - typedef mat<2, 4, uint8, lowp> lowp_u8mat2x4; - typedef mat<3, 2, uint8, lowp> lowp_u8mat3x2; - typedef mat<3, 3, uint8, lowp> lowp_u8mat3x3; - typedef mat<3, 4, uint8, lowp> lowp_u8mat3x4; - typedef mat<4, 2, uint8, lowp> lowp_u8mat4x2; - typedef mat<4, 3, uint8, lowp> lowp_u8mat4x3; - typedef mat<4, 4, uint8, lowp> lowp_u8mat4x4; - - typedef mat<2, 2, uint8, mediump> mediump_u8mat2x2; - typedef mat<2, 3, uint8, mediump> mediump_u8mat2x3; - typedef mat<2, 4, uint8, mediump> mediump_u8mat2x4; - typedef mat<3, 2, uint8, mediump> mediump_u8mat3x2; - typedef mat<3, 3, uint8, mediump> mediump_u8mat3x3; - typedef mat<3, 4, uint8, mediump> mediump_u8mat3x4; - typedef mat<4, 2, uint8, mediump> mediump_u8mat4x2; - typedef mat<4, 3, uint8, mediump> mediump_u8mat4x3; - typedef mat<4, 4, uint8, mediump> mediump_u8mat4x4; - - typedef mat<2, 2, uint8, highp> highp_u8mat2x2; - typedef mat<2, 3, uint8, highp> highp_u8mat2x3; - typedef mat<2, 4, uint8, highp> highp_u8mat2x4; - typedef mat<3, 2, uint8, highp> highp_u8mat3x2; - typedef mat<3, 3, uint8, highp> highp_u8mat3x3; - typedef mat<3, 4, uint8, highp> highp_u8mat3x4; - typedef mat<4, 2, uint8, highp> highp_u8mat4x2; - typedef mat<4, 3, uint8, highp> highp_u8mat4x3; - typedef mat<4, 4, uint8, highp> highp_u8mat4x4; - - typedef mat<2, 2, uint8, defaultp> u8mat2x2; - typedef mat<3, 2, uint8, defaultp> u8mat3x2; - typedef mat<4, 2, uint8, defaultp> u8mat4x2; - typedef mat<2, 3, uint8, defaultp> u8mat2x3; - typedef mat<3, 3, uint8, defaultp> u8mat3x3; - typedef mat<4, 3, uint8, defaultp> u8mat4x3; - typedef mat<2, 4, uint8, defaultp> u8mat2x4; - typedef mat<3, 4, uint8, defaultp> u8mat3x4; - typedef mat<4, 4, uint8, defaultp> u8mat4x4; - - - typedef mat<2, 2, uint16, lowp> lowp_u16mat2x2; - typedef mat<2, 3, uint16, lowp> lowp_u16mat2x3; - typedef mat<2, 4, uint16, lowp> lowp_u16mat2x4; - typedef mat<3, 2, uint16, lowp> lowp_u16mat3x2; - typedef mat<3, 3, uint16, lowp> lowp_u16mat3x3; - typedef mat<3, 4, uint16, lowp> lowp_u16mat3x4; - typedef mat<4, 2, uint16, lowp> lowp_u16mat4x2; - typedef mat<4, 3, uint16, lowp> lowp_u16mat4x3; - typedef mat<4, 4, uint16, lowp> lowp_u16mat4x4; - - typedef mat<2, 2, uint16, mediump> mediump_u16mat2x2; - typedef mat<2, 3, uint16, mediump> mediump_u16mat2x3; - typedef mat<2, 4, uint16, mediump> mediump_u16mat2x4; - typedef mat<3, 2, uint16, mediump> mediump_u16mat3x2; - typedef mat<3, 3, uint16, mediump> mediump_u16mat3x3; - typedef mat<3, 4, uint16, mediump> mediump_u16mat3x4; - typedef mat<4, 2, uint16, mediump> mediump_u16mat4x2; - typedef mat<4, 3, uint16, mediump> mediump_u16mat4x3; - typedef mat<4, 4, uint16, mediump> mediump_u16mat4x4; - - typedef mat<2, 2, uint16, highp> highp_u16mat2x2; - typedef mat<2, 3, uint16, highp> highp_u16mat2x3; - typedef mat<2, 4, uint16, highp> highp_u16mat2x4; - typedef mat<3, 2, uint16, highp> highp_u16mat3x2; - typedef mat<3, 3, uint16, highp> highp_u16mat3x3; - typedef mat<3, 4, uint16, highp> highp_u16mat3x4; - typedef mat<4, 2, uint16, highp> highp_u16mat4x2; - typedef mat<4, 3, uint16, highp> highp_u16mat4x3; - typedef mat<4, 4, uint16, highp> highp_u16mat4x4; - - typedef mat<2, 2, uint16, defaultp> u16mat2x2; - typedef mat<3, 2, uint16, defaultp> u16mat3x2; - typedef mat<4, 2, uint16, defaultp> u16mat4x2; - typedef mat<2, 3, uint16, defaultp> u16mat2x3; - typedef mat<3, 3, uint16, defaultp> u16mat3x3; - typedef mat<4, 3, uint16, defaultp> u16mat4x3; - typedef mat<2, 4, uint16, defaultp> u16mat2x4; - typedef mat<3, 4, uint16, defaultp> u16mat3x4; - typedef mat<4, 4, uint16, defaultp> u16mat4x4; - - - typedef mat<2, 2, uint32, lowp> lowp_u32mat2x2; - typedef mat<2, 3, uint32, lowp> lowp_u32mat2x3; - typedef mat<2, 4, uint32, lowp> lowp_u32mat2x4; - typedef mat<3, 2, uint32, lowp> lowp_u32mat3x2; - typedef mat<3, 3, uint32, lowp> lowp_u32mat3x3; - typedef mat<3, 4, uint32, lowp> lowp_u32mat3x4; - typedef mat<4, 2, uint32, lowp> lowp_u32mat4x2; - typedef mat<4, 3, uint32, lowp> lowp_u32mat4x3; - typedef mat<4, 4, uint32, lowp> lowp_u32mat4x4; - - typedef mat<2, 2, uint32, mediump> mediump_u32mat2x2; - typedef mat<2, 3, uint32, mediump> mediump_u32mat2x3; - typedef mat<2, 4, uint32, mediump> mediump_u32mat2x4; - typedef mat<3, 2, uint32, mediump> mediump_u32mat3x2; - typedef mat<3, 3, uint32, mediump> mediump_u32mat3x3; - typedef mat<3, 4, uint32, mediump> mediump_u32mat3x4; - typedef mat<4, 2, uint32, mediump> mediump_u32mat4x2; - typedef mat<4, 3, uint32, mediump> mediump_u32mat4x3; - typedef mat<4, 4, uint32, mediump> mediump_u32mat4x4; - - typedef mat<2, 2, uint32, highp> highp_u32mat2x2; - typedef mat<2, 3, uint32, highp> highp_u32mat2x3; - typedef mat<2, 4, uint32, highp> highp_u32mat2x4; - typedef mat<3, 2, uint32, highp> highp_u32mat3x2; - typedef mat<3, 3, uint32, highp> highp_u32mat3x3; - typedef mat<3, 4, uint32, highp> highp_u32mat3x4; - typedef mat<4, 2, uint32, highp> highp_u32mat4x2; - typedef mat<4, 3, uint32, highp> highp_u32mat4x3; - typedef mat<4, 4, uint32, highp> highp_u32mat4x4; - - typedef mat<2, 2, uint32, defaultp> u32mat2x2; - typedef mat<3, 2, uint32, defaultp> u32mat3x2; - typedef mat<4, 2, uint32, defaultp> u32mat4x2; - typedef mat<2, 3, uint32, defaultp> u32mat2x3; - typedef mat<3, 3, uint32, defaultp> u32mat3x3; - typedef mat<4, 3, uint32, defaultp> u32mat4x3; - typedef mat<2, 4, uint32, defaultp> u32mat2x4; - typedef mat<3, 4, uint32, defaultp> u32mat3x4; - typedef mat<4, 4, uint32, defaultp> u32mat4x4; - - - typedef mat<2, 2, uint64, lowp> lowp_u64mat2x2; - typedef mat<2, 3, uint64, lowp> lowp_u64mat2x3; - typedef mat<2, 4, uint64, lowp> lowp_u64mat2x4; - typedef mat<3, 2, uint64, lowp> lowp_u64mat3x2; - typedef mat<3, 3, uint64, lowp> lowp_u64mat3x3; - typedef mat<3, 4, uint64, lowp> lowp_u64mat3x4; - typedef mat<4, 2, uint64, lowp> lowp_u64mat4x2; - typedef mat<4, 3, uint64, lowp> lowp_u64mat4x3; - typedef mat<4, 4, uint64, lowp> lowp_u64mat4x4; - - typedef mat<2, 2, uint64, mediump> mediump_u64mat2x2; - typedef mat<2, 3, uint64, mediump> mediump_u64mat2x3; - typedef mat<2, 4, uint64, mediump> mediump_u64mat2x4; - typedef mat<3, 2, uint64, mediump> mediump_u64mat3x2; - typedef mat<3, 3, uint64, mediump> mediump_u64mat3x3; - typedef mat<3, 4, uint64, mediump> mediump_u64mat3x4; - typedef mat<4, 2, uint64, mediump> mediump_u64mat4x2; - typedef mat<4, 3, uint64, mediump> mediump_u64mat4x3; - typedef mat<4, 4, uint64, mediump> mediump_u64mat4x4; - - typedef mat<2, 2, uint64, highp> highp_u64mat2x2; - typedef mat<2, 3, uint64, highp> highp_u64mat2x3; - typedef mat<2, 4, uint64, highp> highp_u64mat2x4; - typedef mat<3, 2, uint64, highp> highp_u64mat3x2; - typedef mat<3, 3, uint64, highp> highp_u64mat3x3; - typedef mat<3, 4, uint64, highp> highp_u64mat3x4; - typedef mat<4, 2, uint64, highp> highp_u64mat4x2; - typedef mat<4, 3, uint64, highp> highp_u64mat4x3; - typedef mat<4, 4, uint64, highp> highp_u64mat4x4; - - typedef mat<2, 2, uint64, defaultp> u64mat2x2; - typedef mat<3, 2, uint64, defaultp> u64mat3x2; - typedef mat<4, 2, uint64, defaultp> u64mat4x2; - typedef mat<2, 3, uint64, defaultp> u64mat2x3; - typedef mat<3, 3, uint64, defaultp> u64mat3x3; - typedef mat<4, 3, uint64, defaultp> u64mat4x3; - typedef mat<2, 4, uint64, defaultp> u64mat2x4; - typedef mat<3, 4, uint64, defaultp> u64mat3x4; - typedef mat<4, 4, uint64, defaultp> u64mat4x4; - - // Quaternion - - typedef qua lowp_quat; - typedef qua mediump_quat; - typedef qua highp_quat; - typedef qua quat; - - typedef qua lowp_fquat; - typedef qua mediump_fquat; - typedef qua highp_fquat; - typedef qua fquat; - - typedef qua lowp_f32quat; - typedef qua mediump_f32quat; - typedef qua highp_f32quat; - typedef qua f32quat; - - typedef qua lowp_dquat; - typedef qua mediump_dquat; - typedef qua highp_dquat; - typedef qua dquat; - - typedef qua lowp_f64quat; - typedef qua mediump_f64quat; - typedef qua highp_f64quat; - typedef qua f64quat; -}//namespace glm - - diff --git a/src/vendor/glm/geometric.hpp b/src/vendor/glm/geometric.hpp deleted file mode 100755 index b704f25..0000000 --- a/src/vendor/glm/geometric.hpp +++ /dev/null @@ -1,116 +0,0 @@ -/// @ref core -/// @file glm/geometric.hpp -/// -/// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions -/// -/// @defgroup core_func_geometric Geometric functions -/// @ingroup core -/// -/// These operate on vectors as vectors, not component-wise. -/// -/// Include to use these core features. - -#pragma once - -#include "detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_func_geometric - /// @{ - - /// Returns the length of x, i.e., sqrt(x * x). - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL length man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - GLM_FUNC_DECL T length(vec const& x); - - /// Returns the distance betwwen p0 and p1, i.e., length(p0 - p1). - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL distance man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - GLM_FUNC_DECL T distance(vec const& p0, vec const& p1); - - /// Returns the dot product of x and y, i.e., result = x * y. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL dot man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR T dot(vec const& x, vec const& y); - - /// Returns the cross product of x and y. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL cross man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> cross(vec<3, T, Q> const& x, vec<3, T, Q> const& y); - - /// Returns a vector in the same direction as x but with length of 1. - /// According to issue 10 GLSL 1.10 specification, if length(x) == 0 then result is undefined and generate an error. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL normalize man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - GLM_FUNC_DECL vec normalize(vec const& x); - - /// If dot(Nref, I) < 0.0, return N, otherwise, return -N. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL faceforward man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - GLM_FUNC_DECL vec faceforward( - vec const& N, - vec const& I, - vec const& Nref); - - /// For the incident vector I and surface orientation N, - /// returns the reflection direction : result = I - 2.0 * dot(N, I) * N. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL reflect man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - GLM_FUNC_DECL vec reflect( - vec const& I, - vec const& N); - - /// For the incident vector I and surface normal N, - /// and the ratio of indices of refraction eta, - /// return the refraction vector. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL refract man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - GLM_FUNC_DECL vec refract( - vec const& I, - vec const& N, - T eta); - - /// @} -}//namespace glm - -#include "detail/func_geometric.inl" diff --git a/src/vendor/glm/glm.hpp b/src/vendor/glm/glm.hpp deleted file mode 100755 index 8b61064..0000000 --- a/src/vendor/glm/glm.hpp +++ /dev/null @@ -1,136 +0,0 @@ -/// @ref core -/// @file glm/glm.hpp -/// -/// @defgroup core Core features -/// -/// @brief Features that implement in C++ the GLSL specification as closely as possible. -/// -/// The GLM core consists of C++ types that mirror GLSL types and -/// C++ functions that mirror the GLSL functions. -/// -/// The best documentation for GLM Core is the current GLSL specification, -/// version 4.2 -/// (pdf file). -/// -/// GLM core functionalities require to be included to be used. -/// -/// -/// @defgroup core_vector Vector types -/// -/// Vector types of two to four components with an exhaustive set of operators. -/// -/// @ingroup core -/// -/// -/// @defgroup core_vector_precision Vector types with precision qualifiers -/// -/// @brief Vector types with precision qualifiers which may result in various precision in term of ULPs -/// -/// GLSL allows defining qualifiers for particular variables. -/// With OpenGL's GLSL, these qualifiers have no effect; they are there for compatibility, -/// with OpenGL ES's GLSL, these qualifiers do have an effect. -/// -/// C++ has no language equivalent to qualifier qualifiers. So GLM provides the next-best thing: -/// a number of typedefs that use a particular qualifier. -/// -/// None of these types make any guarantees about the actual qualifier used. -/// -/// @ingroup core -/// -/// -/// @defgroup core_matrix Matrix types -/// -/// Matrix types of with C columns and R rows where C and R are values between 2 to 4 included. -/// These types have exhaustive sets of operators. -/// -/// @ingroup core -/// -/// -/// @defgroup core_matrix_precision Matrix types with precision qualifiers -/// -/// @brief Matrix types with precision qualifiers which may result in various precision in term of ULPs -/// -/// GLSL allows defining qualifiers for particular variables. -/// With OpenGL's GLSL, these qualifiers have no effect; they are there for compatibility, -/// with OpenGL ES's GLSL, these qualifiers do have an effect. -/// -/// C++ has no language equivalent to qualifier qualifiers. So GLM provides the next-best thing: -/// a number of typedefs that use a particular qualifier. -/// -/// None of these types make any guarantees about the actual qualifier used. -/// -/// @ingroup core -/// -/// -/// @defgroup ext Stable extensions -/// -/// @brief Additional features not specified by GLSL specification. -/// -/// EXT extensions are fully tested and documented. -/// -/// Even if it's highly unrecommended, it's possible to include all the extensions at once by -/// including . Otherwise, each extension needs to be included a specific file. -/// -/// -/// @defgroup gtc Recommended extensions -/// -/// @brief Additional features not specified by GLSL specification. -/// -/// GTC extensions aim to be stable with tests and documentation. -/// -/// Even if it's highly unrecommended, it's possible to include all the extensions at once by -/// including . Otherwise, each extension needs to be included a specific file. -/// -/// -/// @defgroup gtx Experimental extensions -/// -/// @brief Experimental features not specified by GLSL specification. -/// -/// Experimental extensions are useful functions and types, but the development of -/// their API and functionality is not necessarily stable. They can change -/// substantially between versions. Backwards compatibility is not much of an issue -/// for them. -/// -/// Even if it's highly unrecommended, it's possible to include all the extensions -/// at once by including . Otherwise, each extension needs to be -/// included a specific file. -/// -/// @mainpage OpenGL Mathematics (GLM) -/// - Website: glm.g-truc.net -/// - GLM API documentation -/// - GLM Manual - -#include "detail/_fixes.hpp" - -#include "detail/setup.hpp" - -#pragma once - -#include -#include -#include -#include -#include -#include "fwd.hpp" - -#include "vec2.hpp" -#include "vec3.hpp" -#include "vec4.hpp" -#include "mat2x2.hpp" -#include "mat2x3.hpp" -#include "mat2x4.hpp" -#include "mat3x2.hpp" -#include "mat3x3.hpp" -#include "mat3x4.hpp" -#include "mat4x2.hpp" -#include "mat4x3.hpp" -#include "mat4x4.hpp" - -#include "trigonometric.hpp" -#include "exponential.hpp" -#include "common.hpp" -#include "packing.hpp" -#include "geometric.hpp" -#include "matrix.hpp" -#include "vector_relational.hpp" -#include "integer.hpp" diff --git a/src/vendor/glm/gtc/bitfield.hpp b/src/vendor/glm/gtc/bitfield.hpp deleted file mode 100755 index 084fbe7..0000000 --- a/src/vendor/glm/gtc/bitfield.hpp +++ /dev/null @@ -1,266 +0,0 @@ -/// @ref gtc_bitfield -/// @file glm/gtc/bitfield.hpp -/// -/// @see core (dependence) -/// @see gtc_bitfield (dependence) -/// -/// @defgroup gtc_bitfield GLM_GTC_bitfield -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Allow to perform bit operations on integer values - -#include "../detail/setup.hpp" - -#pragma once - -// Dependencies -#include "../ext/scalar_int_sized.hpp" -#include "../ext/scalar_uint_sized.hpp" -#include "../detail/qualifier.hpp" -#include "../detail/_vectorize.hpp" -#include "type_precision.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_bitfield extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_bitfield - /// @{ - - /// Build a mask of 'count' bits - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL genIUType mask(genIUType Bits); - - /// Build a mask of 'count' bits - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed and unsigned integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL vec mask(vec const& v); - - /// Rotate all bits to the right. All the bits dropped in the right side are inserted back on the left side. - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL genIUType bitfieldRotateRight(genIUType In, int Shift); - - /// Rotate all bits to the right. All the bits dropped in the right side are inserted back on the left side. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed and unsigned integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL vec bitfieldRotateRight(vec const& In, int Shift); - - /// Rotate all bits to the left. All the bits dropped in the left side are inserted back on the right side. - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL genIUType bitfieldRotateLeft(genIUType In, int Shift); - - /// Rotate all bits to the left. All the bits dropped in the left side are inserted back on the right side. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed and unsigned integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL vec bitfieldRotateLeft(vec const& In, int Shift); - - /// Set to 1 a range of bits. - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL genIUType bitfieldFillOne(genIUType Value, int FirstBit, int BitCount); - - /// Set to 1 a range of bits. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed and unsigned integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL vec bitfieldFillOne(vec const& Value, int FirstBit, int BitCount); - - /// Set to 0 a range of bits. - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL genIUType bitfieldFillZero(genIUType Value, int FirstBit, int BitCount); - - /// Set to 0 a range of bits. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed and unsigned integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL vec bitfieldFillZero(vec const& Value, int FirstBit, int BitCount); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of x followed by the first bit of y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL int16 bitfieldInterleave(int8 x, int8 y); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of x followed by the first bit of y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint16 bitfieldInterleave(uint8 x, uint8 y); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of v.x followed by the first bit of v.y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint16 bitfieldInterleave(u8vec2 const& v); - - /// Deinterleaves the bits of x. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL glm::u8vec2 bitfieldDeinterleave(glm::uint16 x); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of x followed by the first bit of y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL int32 bitfieldInterleave(int16 x, int16 y); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of x followed by the first bit of y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint32 bitfieldInterleave(uint16 x, uint16 y); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of v.x followed by the first bit of v.y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint32 bitfieldInterleave(u16vec2 const& v); - - /// Deinterleaves the bits of x. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL glm::u16vec2 bitfieldDeinterleave(glm::uint32 x); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of x followed by the first bit of y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL int64 bitfieldInterleave(int32 x, int32 y); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of x followed by the first bit of y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint64 bitfieldInterleave(uint32 x, uint32 y); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of v.x followed by the first bit of v.y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint64 bitfieldInterleave(u32vec2 const& v); - - /// Deinterleaves the bits of x. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL glm::u32vec2 bitfieldDeinterleave(glm::uint64 x); - - /// Interleaves the bits of x, y and z. - /// The first bit is the first bit of x followed by the first bit of y and the first bit of z. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL int32 bitfieldInterleave(int8 x, int8 y, int8 z); - - /// Interleaves the bits of x, y and z. - /// The first bit is the first bit of x followed by the first bit of y and the first bit of z. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z); - - /// Interleaves the bits of x, y and z. - /// The first bit is the first bit of x followed by the first bit of y and the first bit of z. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL int64 bitfieldInterleave(int16 x, int16 y, int16 z); - - /// Interleaves the bits of x, y and z. - /// The first bit is the first bit of x followed by the first bit of y and the first bit of z. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z); - - /// Interleaves the bits of x, y and z. - /// The first bit is the first bit of x followed by the first bit of y and the first bit of z. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL int64 bitfieldInterleave(int32 x, int32 y, int32 z); - - /// Interleaves the bits of x, y and z. - /// The first bit is the first bit of x followed by the first bit of y and the first bit of z. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint64 bitfieldInterleave(uint32 x, uint32 y, uint32 z); - - /// Interleaves the bits of x, y, z and w. - /// The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL int32 bitfieldInterleave(int8 x, int8 y, int8 z, int8 w); - - /// Interleaves the bits of x, y, z and w. - /// The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z, uint8 w); - - /// Interleaves the bits of x, y, z and w. - /// The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL int64 bitfieldInterleave(int16 x, int16 y, int16 z, int16 w); - - /// Interleaves the bits of x, y, z and w. - /// The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z, uint16 w); - - /// @} -} //namespace glm - -#include "bitfield.inl" diff --git a/src/vendor/glm/gtc/bitfield.inl b/src/vendor/glm/gtc/bitfield.inl deleted file mode 100755 index 06cf188..0000000 --- a/src/vendor/glm/gtc/bitfield.inl +++ /dev/null @@ -1,626 +0,0 @@ -/// @ref gtc_bitfield - -#include "../simd/integer.h" - -namespace glm{ -namespace detail -{ - template - GLM_FUNC_DECL RET bitfieldInterleave(PARAM x, PARAM y); - - template - GLM_FUNC_DECL RET bitfieldInterleave(PARAM x, PARAM y, PARAM z); - - template - GLM_FUNC_DECL RET bitfieldInterleave(PARAM x, PARAM y, PARAM z, PARAM w); - - template<> - GLM_FUNC_QUALIFIER glm::uint16 bitfieldInterleave(glm::uint8 x, glm::uint8 y) - { - glm::uint16 REG1(x); - glm::uint16 REG2(y); - - REG1 = ((REG1 << 4) | REG1) & static_cast(0x0F0F); - REG2 = ((REG2 << 4) | REG2) & static_cast(0x0F0F); - - REG1 = ((REG1 << 2) | REG1) & static_cast(0x3333); - REG2 = ((REG2 << 2) | REG2) & static_cast(0x3333); - - REG1 = ((REG1 << 1) | REG1) & static_cast(0x5555); - REG2 = ((REG2 << 1) | REG2) & static_cast(0x5555); - - return REG1 | static_cast(REG2 << 1); - } - - template<> - GLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave(glm::uint16 x, glm::uint16 y) - { - glm::uint32 REG1(x); - glm::uint32 REG2(y); - - REG1 = ((REG1 << 8) | REG1) & static_cast(0x00FF00FF); - REG2 = ((REG2 << 8) | REG2) & static_cast(0x00FF00FF); - - REG1 = ((REG1 << 4) | REG1) & static_cast(0x0F0F0F0F); - REG2 = ((REG2 << 4) | REG2) & static_cast(0x0F0F0F0F); - - REG1 = ((REG1 << 2) | REG1) & static_cast(0x33333333); - REG2 = ((REG2 << 2) | REG2) & static_cast(0x33333333); - - REG1 = ((REG1 << 1) | REG1) & static_cast(0x55555555); - REG2 = ((REG2 << 1) | REG2) & static_cast(0x55555555); - - return REG1 | (REG2 << 1); - } - - template<> - GLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(glm::uint32 x, glm::uint32 y) - { - glm::uint64 REG1(x); - glm::uint64 REG2(y); - - REG1 = ((REG1 << 16) | REG1) & static_cast(0x0000FFFF0000FFFFull); - REG2 = ((REG2 << 16) | REG2) & static_cast(0x0000FFFF0000FFFFull); - - REG1 = ((REG1 << 8) | REG1) & static_cast(0x00FF00FF00FF00FFull); - REG2 = ((REG2 << 8) | REG2) & static_cast(0x00FF00FF00FF00FFull); - - REG1 = ((REG1 << 4) | REG1) & static_cast(0x0F0F0F0F0F0F0F0Full); - REG2 = ((REG2 << 4) | REG2) & static_cast(0x0F0F0F0F0F0F0F0Full); - - REG1 = ((REG1 << 2) | REG1) & static_cast(0x3333333333333333ull); - REG2 = ((REG2 << 2) | REG2) & static_cast(0x3333333333333333ull); - - REG1 = ((REG1 << 1) | REG1) & static_cast(0x5555555555555555ull); - REG2 = ((REG2 << 1) | REG2) & static_cast(0x5555555555555555ull); - - return REG1 | (REG2 << 1); - } - - template<> - GLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave(glm::uint8 x, glm::uint8 y, glm::uint8 z) - { - glm::uint32 REG1(x); - glm::uint32 REG2(y); - glm::uint32 REG3(z); - - REG1 = ((REG1 << 16) | REG1) & static_cast(0xFF0000FFu); - REG2 = ((REG2 << 16) | REG2) & static_cast(0xFF0000FFu); - REG3 = ((REG3 << 16) | REG3) & static_cast(0xFF0000FFu); - - REG1 = ((REG1 << 8) | REG1) & static_cast(0x0F00F00Fu); - REG2 = ((REG2 << 8) | REG2) & static_cast(0x0F00F00Fu); - REG3 = ((REG3 << 8) | REG3) & static_cast(0x0F00F00Fu); - - REG1 = ((REG1 << 4) | REG1) & static_cast(0xC30C30C3u); - REG2 = ((REG2 << 4) | REG2) & static_cast(0xC30C30C3u); - REG3 = ((REG3 << 4) | REG3) & static_cast(0xC30C30C3u); - - REG1 = ((REG1 << 2) | REG1) & static_cast(0x49249249u); - REG2 = ((REG2 << 2) | REG2) & static_cast(0x49249249u); - REG3 = ((REG3 << 2) | REG3) & static_cast(0x49249249u); - - return REG1 | (REG2 << 1) | (REG3 << 2); - } - - template<> - GLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(glm::uint16 x, glm::uint16 y, glm::uint16 z) - { - glm::uint64 REG1(x); - glm::uint64 REG2(y); - glm::uint64 REG3(z); - - REG1 = ((REG1 << 32) | REG1) & static_cast(0xFFFF00000000FFFFull); - REG2 = ((REG2 << 32) | REG2) & static_cast(0xFFFF00000000FFFFull); - REG3 = ((REG3 << 32) | REG3) & static_cast(0xFFFF00000000FFFFull); - - REG1 = ((REG1 << 16) | REG1) & static_cast(0x00FF0000FF0000FFull); - REG2 = ((REG2 << 16) | REG2) & static_cast(0x00FF0000FF0000FFull); - REG3 = ((REG3 << 16) | REG3) & static_cast(0x00FF0000FF0000FFull); - - REG1 = ((REG1 << 8) | REG1) & static_cast(0xF00F00F00F00F00Full); - REG2 = ((REG2 << 8) | REG2) & static_cast(0xF00F00F00F00F00Full); - REG3 = ((REG3 << 8) | REG3) & static_cast(0xF00F00F00F00F00Full); - - REG1 = ((REG1 << 4) | REG1) & static_cast(0x30C30C30C30C30C3ull); - REG2 = ((REG2 << 4) | REG2) & static_cast(0x30C30C30C30C30C3ull); - REG3 = ((REG3 << 4) | REG3) & static_cast(0x30C30C30C30C30C3ull); - - REG1 = ((REG1 << 2) | REG1) & static_cast(0x9249249249249249ull); - REG2 = ((REG2 << 2) | REG2) & static_cast(0x9249249249249249ull); - REG3 = ((REG3 << 2) | REG3) & static_cast(0x9249249249249249ull); - - return REG1 | (REG2 << 1) | (REG3 << 2); - } - - template<> - GLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(glm::uint32 x, glm::uint32 y, glm::uint32 z) - { - glm::uint64 REG1(x); - glm::uint64 REG2(y); - glm::uint64 REG3(z); - - REG1 = ((REG1 << 32) | REG1) & static_cast(0xFFFF00000000FFFFull); - REG2 = ((REG2 << 32) | REG2) & static_cast(0xFFFF00000000FFFFull); - REG3 = ((REG3 << 32) | REG3) & static_cast(0xFFFF00000000FFFFull); - - REG1 = ((REG1 << 16) | REG1) & static_cast(0x00FF0000FF0000FFull); - REG2 = ((REG2 << 16) | REG2) & static_cast(0x00FF0000FF0000FFull); - REG3 = ((REG3 << 16) | REG3) & static_cast(0x00FF0000FF0000FFull); - - REG1 = ((REG1 << 8) | REG1) & static_cast(0xF00F00F00F00F00Full); - REG2 = ((REG2 << 8) | REG2) & static_cast(0xF00F00F00F00F00Full); - REG3 = ((REG3 << 8) | REG3) & static_cast(0xF00F00F00F00F00Full); - - REG1 = ((REG1 << 4) | REG1) & static_cast(0x30C30C30C30C30C3ull); - REG2 = ((REG2 << 4) | REG2) & static_cast(0x30C30C30C30C30C3ull); - REG3 = ((REG3 << 4) | REG3) & static_cast(0x30C30C30C30C30C3ull); - - REG1 = ((REG1 << 2) | REG1) & static_cast(0x9249249249249249ull); - REG2 = ((REG2 << 2) | REG2) & static_cast(0x9249249249249249ull); - REG3 = ((REG3 << 2) | REG3) & static_cast(0x9249249249249249ull); - - return REG1 | (REG2 << 1) | (REG3 << 2); - } - - template<> - GLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave(glm::uint8 x, glm::uint8 y, glm::uint8 z, glm::uint8 w) - { - glm::uint32 REG1(x); - glm::uint32 REG2(y); - glm::uint32 REG3(z); - glm::uint32 REG4(w); - - REG1 = ((REG1 << 12) | REG1) & static_cast(0x000F000Fu); - REG2 = ((REG2 << 12) | REG2) & static_cast(0x000F000Fu); - REG3 = ((REG3 << 12) | REG3) & static_cast(0x000F000Fu); - REG4 = ((REG4 << 12) | REG4) & static_cast(0x000F000Fu); - - REG1 = ((REG1 << 6) | REG1) & static_cast(0x03030303u); - REG2 = ((REG2 << 6) | REG2) & static_cast(0x03030303u); - REG3 = ((REG3 << 6) | REG3) & static_cast(0x03030303u); - REG4 = ((REG4 << 6) | REG4) & static_cast(0x03030303u); - - REG1 = ((REG1 << 3) | REG1) & static_cast(0x11111111u); - REG2 = ((REG2 << 3) | REG2) & static_cast(0x11111111u); - REG3 = ((REG3 << 3) | REG3) & static_cast(0x11111111u); - REG4 = ((REG4 << 3) | REG4) & static_cast(0x11111111u); - - return REG1 | (REG2 << 1) | (REG3 << 2) | (REG4 << 3); - } - - template<> - GLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(glm::uint16 x, glm::uint16 y, glm::uint16 z, glm::uint16 w) - { - glm::uint64 REG1(x); - glm::uint64 REG2(y); - glm::uint64 REG3(z); - glm::uint64 REG4(w); - - REG1 = ((REG1 << 24) | REG1) & static_cast(0x000000FF000000FFull); - REG2 = ((REG2 << 24) | REG2) & static_cast(0x000000FF000000FFull); - REG3 = ((REG3 << 24) | REG3) & static_cast(0x000000FF000000FFull); - REG4 = ((REG4 << 24) | REG4) & static_cast(0x000000FF000000FFull); - - REG1 = ((REG1 << 12) | REG1) & static_cast(0x000F000F000F000Full); - REG2 = ((REG2 << 12) | REG2) & static_cast(0x000F000F000F000Full); - REG3 = ((REG3 << 12) | REG3) & static_cast(0x000F000F000F000Full); - REG4 = ((REG4 << 12) | REG4) & static_cast(0x000F000F000F000Full); - - REG1 = ((REG1 << 6) | REG1) & static_cast(0x0303030303030303ull); - REG2 = ((REG2 << 6) | REG2) & static_cast(0x0303030303030303ull); - REG3 = ((REG3 << 6) | REG3) & static_cast(0x0303030303030303ull); - REG4 = ((REG4 << 6) | REG4) & static_cast(0x0303030303030303ull); - - REG1 = ((REG1 << 3) | REG1) & static_cast(0x1111111111111111ull); - REG2 = ((REG2 << 3) | REG2) & static_cast(0x1111111111111111ull); - REG3 = ((REG3 << 3) | REG3) & static_cast(0x1111111111111111ull); - REG4 = ((REG4 << 3) | REG4) & static_cast(0x1111111111111111ull); - - return REG1 | (REG2 << 1) | (REG3 << 2) | (REG4 << 3); - } -}//namespace detail - - template - GLM_FUNC_QUALIFIER genIUType mask(genIUType Bits) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'mask' accepts only integer values"); - - return Bits >= sizeof(genIUType) * 8 ? ~static_cast(0) : (static_cast(1) << Bits) - static_cast(1); - } - - template - GLM_FUNC_QUALIFIER vec mask(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'mask' accepts only integer values"); - - return detail::functor1::call(mask, v); - } - - template - GLM_FUNC_QUALIFIER genIType bitfieldRotateRight(genIType In, int Shift) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldRotateRight' accepts only integer values"); - - int const BitSize = static_cast(sizeof(genIType) * 8); - return (In << static_cast(Shift)) | (In >> static_cast(BitSize - Shift)); - } - - template - GLM_FUNC_QUALIFIER vec bitfieldRotateRight(vec const& In, int Shift) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldRotateRight' accepts only integer values"); - - int const BitSize = static_cast(sizeof(T) * 8); - return (In << static_cast(Shift)) | (In >> static_cast(BitSize - Shift)); - } - - template - GLM_FUNC_QUALIFIER genIType bitfieldRotateLeft(genIType In, int Shift) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldRotateLeft' accepts only integer values"); - - int const BitSize = static_cast(sizeof(genIType) * 8); - return (In >> static_cast(Shift)) | (In << static_cast(BitSize - Shift)); - } - - template - GLM_FUNC_QUALIFIER vec bitfieldRotateLeft(vec const& In, int Shift) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldRotateLeft' accepts only integer values"); - - int const BitSize = static_cast(sizeof(T) * 8); - return (In >> static_cast(Shift)) | (In << static_cast(BitSize - Shift)); - } - - template - GLM_FUNC_QUALIFIER genIUType bitfieldFillOne(genIUType Value, int FirstBit, int BitCount) - { - return Value | static_cast(mask(BitCount) << FirstBit); - } - - template - GLM_FUNC_QUALIFIER vec bitfieldFillOne(vec const& Value, int FirstBit, int BitCount) - { - return Value | static_cast(mask(BitCount) << FirstBit); - } - - template - GLM_FUNC_QUALIFIER genIUType bitfieldFillZero(genIUType Value, int FirstBit, int BitCount) - { - return Value & static_cast(~(mask(BitCount) << FirstBit)); - } - - template - GLM_FUNC_QUALIFIER vec bitfieldFillZero(vec const& Value, int FirstBit, int BitCount) - { - return Value & static_cast(~(mask(BitCount) << FirstBit)); - } - - GLM_FUNC_QUALIFIER int16 bitfieldInterleave(int8 x, int8 y) - { - union sign8 - { - int8 i; - uint8 u; - } sign_x, sign_y; - - union sign16 - { - int16 i; - uint16 u; - } result; - - sign_x.i = x; - sign_y.i = y; - result.u = bitfieldInterleave(sign_x.u, sign_y.u); - - return result.i; - } - - GLM_FUNC_QUALIFIER uint16 bitfieldInterleave(uint8 x, uint8 y) - { - return detail::bitfieldInterleave(x, y); - } - - GLM_FUNC_QUALIFIER uint16 bitfieldInterleave(u8vec2 const& v) - { - return detail::bitfieldInterleave(v.x, v.y); - } - - GLM_FUNC_QUALIFIER u8vec2 bitfieldDeinterleave(glm::uint16 x) - { - uint16 REG1(x); - uint16 REG2(x >>= 1); - - REG1 = REG1 & static_cast(0x5555); - REG2 = REG2 & static_cast(0x5555); - - REG1 = ((REG1 >> 1) | REG1) & static_cast(0x3333); - REG2 = ((REG2 >> 1) | REG2) & static_cast(0x3333); - - REG1 = ((REG1 >> 2) | REG1) & static_cast(0x0F0F); - REG2 = ((REG2 >> 2) | REG2) & static_cast(0x0F0F); - - REG1 = ((REG1 >> 4) | REG1) & static_cast(0x00FF); - REG2 = ((REG2 >> 4) | REG2) & static_cast(0x00FF); - - REG1 = ((REG1 >> 8) | REG1) & static_cast(0xFFFF); - REG2 = ((REG2 >> 8) | REG2) & static_cast(0xFFFF); - - return glm::u8vec2(REG1, REG2); - } - - GLM_FUNC_QUALIFIER int32 bitfieldInterleave(int16 x, int16 y) - { - union sign16 - { - int16 i; - uint16 u; - } sign_x, sign_y; - - union sign32 - { - int32 i; - uint32 u; - } result; - - sign_x.i = x; - sign_y.i = y; - result.u = bitfieldInterleave(sign_x.u, sign_y.u); - - return result.i; - } - - GLM_FUNC_QUALIFIER uint32 bitfieldInterleave(uint16 x, uint16 y) - { - return detail::bitfieldInterleave(x, y); - } - - GLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave(u16vec2 const& v) - { - return detail::bitfieldInterleave(v.x, v.y); - } - - GLM_FUNC_QUALIFIER glm::u16vec2 bitfieldDeinterleave(glm::uint32 x) - { - glm::uint32 REG1(x); - glm::uint32 REG2(x >>= 1); - - REG1 = REG1 & static_cast(0x55555555); - REG2 = REG2 & static_cast(0x55555555); - - REG1 = ((REG1 >> 1) | REG1) & static_cast(0x33333333); - REG2 = ((REG2 >> 1) | REG2) & static_cast(0x33333333); - - REG1 = ((REG1 >> 2) | REG1) & static_cast(0x0F0F0F0F); - REG2 = ((REG2 >> 2) | REG2) & static_cast(0x0F0F0F0F); - - REG1 = ((REG1 >> 4) | REG1) & static_cast(0x00FF00FF); - REG2 = ((REG2 >> 4) | REG2) & static_cast(0x00FF00FF); - - REG1 = ((REG1 >> 8) | REG1) & static_cast(0x0000FFFF); - REG2 = ((REG2 >> 8) | REG2) & static_cast(0x0000FFFF); - - return glm::u16vec2(REG1, REG2); - } - - GLM_FUNC_QUALIFIER int64 bitfieldInterleave(int32 x, int32 y) - { - union sign32 - { - int32 i; - uint32 u; - } sign_x, sign_y; - - union sign64 - { - int64 i; - uint64 u; - } result; - - sign_x.i = x; - sign_y.i = y; - result.u = bitfieldInterleave(sign_x.u, sign_y.u); - - return result.i; - } - - GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(uint32 x, uint32 y) - { - return detail::bitfieldInterleave(x, y); - } - - GLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(u32vec2 const& v) - { - return detail::bitfieldInterleave(v.x, v.y); - } - - GLM_FUNC_QUALIFIER glm::u32vec2 bitfieldDeinterleave(glm::uint64 x) - { - glm::uint64 REG1(x); - glm::uint64 REG2(x >>= 1); - - REG1 = REG1 & static_cast(0x5555555555555555ull); - REG2 = REG2 & static_cast(0x5555555555555555ull); - - REG1 = ((REG1 >> 1) | REG1) & static_cast(0x3333333333333333ull); - REG2 = ((REG2 >> 1) | REG2) & static_cast(0x3333333333333333ull); - - REG1 = ((REG1 >> 2) | REG1) & static_cast(0x0F0F0F0F0F0F0F0Full); - REG2 = ((REG2 >> 2) | REG2) & static_cast(0x0F0F0F0F0F0F0F0Full); - - REG1 = ((REG1 >> 4) | REG1) & static_cast(0x00FF00FF00FF00FFull); - REG2 = ((REG2 >> 4) | REG2) & static_cast(0x00FF00FF00FF00FFull); - - REG1 = ((REG1 >> 8) | REG1) & static_cast(0x0000FFFF0000FFFFull); - REG2 = ((REG2 >> 8) | REG2) & static_cast(0x0000FFFF0000FFFFull); - - REG1 = ((REG1 >> 16) | REG1) & static_cast(0x00000000FFFFFFFFull); - REG2 = ((REG2 >> 16) | REG2) & static_cast(0x00000000FFFFFFFFull); - - return glm::u32vec2(REG1, REG2); - } - - GLM_FUNC_QUALIFIER int32 bitfieldInterleave(int8 x, int8 y, int8 z) - { - union sign8 - { - int8 i; - uint8 u; - } sign_x, sign_y, sign_z; - - union sign32 - { - int32 i; - uint32 u; - } result; - - sign_x.i = x; - sign_y.i = y; - sign_z.i = z; - result.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u); - - return result.i; - } - - GLM_FUNC_QUALIFIER uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z) - { - return detail::bitfieldInterleave(x, y, z); - } - - GLM_FUNC_QUALIFIER uint32 bitfieldInterleave(u8vec3 const& v) - { - return detail::bitfieldInterleave(v.x, v.y, v.z); - } - - GLM_FUNC_QUALIFIER int64 bitfieldInterleave(int16 x, int16 y, int16 z) - { - union sign16 - { - int16 i; - uint16 u; - } sign_x, sign_y, sign_z; - - union sign64 - { - int64 i; - uint64 u; - } result; - - sign_x.i = x; - sign_y.i = y; - sign_z.i = z; - result.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u); - - return result.i; - } - - GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z) - { - return detail::bitfieldInterleave(x, y, z); - } - - GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(u16vec3 const& v) - { - return detail::bitfieldInterleave(v.x, v.y, v.z); - } - - GLM_FUNC_QUALIFIER int64 bitfieldInterleave(int32 x, int32 y, int32 z) - { - union sign16 - { - int32 i; - uint32 u; - } sign_x, sign_y, sign_z; - - union sign64 - { - int64 i; - uint64 u; - } result; - - sign_x.i = x; - sign_y.i = y; - sign_z.i = z; - result.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u); - - return result.i; - } - - GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(uint32 x, uint32 y, uint32 z) - { - return detail::bitfieldInterleave(x, y, z); - } - - GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(u32vec3 const& v) - { - return detail::bitfieldInterleave(v.x, v.y, v.z); - } - - GLM_FUNC_QUALIFIER int32 bitfieldInterleave(int8 x, int8 y, int8 z, int8 w) - { - union sign8 - { - int8 i; - uint8 u; - } sign_x, sign_y, sign_z, sign_w; - - union sign32 - { - int32 i; - uint32 u; - } result; - - sign_x.i = x; - sign_y.i = y; - sign_z.i = z; - sign_w.i = w; - result.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u, sign_w.u); - - return result.i; - } - - GLM_FUNC_QUALIFIER uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z, uint8 w) - { - return detail::bitfieldInterleave(x, y, z, w); - } - - GLM_FUNC_QUALIFIER uint32 bitfieldInterleave(u8vec4 const& v) - { - return detail::bitfieldInterleave(v.x, v.y, v.z, v.w); - } - - GLM_FUNC_QUALIFIER int64 bitfieldInterleave(int16 x, int16 y, int16 z, int16 w) - { - union sign16 - { - int16 i; - uint16 u; - } sign_x, sign_y, sign_z, sign_w; - - union sign64 - { - int64 i; - uint64 u; - } result; - - sign_x.i = x; - sign_y.i = y; - sign_z.i = z; - sign_w.i = w; - result.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u, sign_w.u); - - return result.i; - } - - GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z, uint16 w) - { - return detail::bitfieldInterleave(x, y, z, w); - } - - GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(u16vec4 const& v) - { - return detail::bitfieldInterleave(v.x, v.y, v.z, v.w); - } -}//namespace glm diff --git a/src/vendor/glm/gtc/color_space.hpp b/src/vendor/glm/gtc/color_space.hpp deleted file mode 100755 index cffd9f0..0000000 --- a/src/vendor/glm/gtc/color_space.hpp +++ /dev/null @@ -1,56 +0,0 @@ -/// @ref gtc_color_space -/// @file glm/gtc/color_space.hpp -/// -/// @see core (dependence) -/// @see gtc_color_space (dependence) -/// -/// @defgroup gtc_color_space GLM_GTC_color_space -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Allow to perform bit operations on integer values - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../exponential.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_color_space extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_color_space - /// @{ - - /// Convert a linear color to sRGB color using a standard gamma correction. - /// IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb - template - GLM_FUNC_DECL vec convertLinearToSRGB(vec const& ColorLinear); - - /// Convert a linear color to sRGB color using a custom gamma correction. - /// IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb - template - GLM_FUNC_DECL vec convertLinearToSRGB(vec const& ColorLinear, T Gamma); - - /// Convert a sRGB color to linear color using a standard gamma correction. - /// IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb - template - GLM_FUNC_DECL vec convertSRGBToLinear(vec const& ColorSRGB); - - /// Convert a sRGB color to linear color using a custom gamma correction. - // IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb - template - GLM_FUNC_DECL vec convertSRGBToLinear(vec const& ColorSRGB, T Gamma); - - /// @} -} //namespace glm - -#include "color_space.inl" diff --git a/src/vendor/glm/gtc/color_space.inl b/src/vendor/glm/gtc/color_space.inl deleted file mode 100755 index 2a90004..0000000 --- a/src/vendor/glm/gtc/color_space.inl +++ /dev/null @@ -1,84 +0,0 @@ -/// @ref gtc_color_space - -namespace glm{ -namespace detail -{ - template - struct compute_rgbToSrgb - { - GLM_FUNC_QUALIFIER static vec call(vec const& ColorRGB, T GammaCorrection) - { - vec const ClampedColor(clamp(ColorRGB, static_cast(0), static_cast(1))); - - return mix( - pow(ClampedColor, vec(GammaCorrection)) * static_cast(1.055) - static_cast(0.055), - ClampedColor * static_cast(12.92), - lessThan(ClampedColor, vec(static_cast(0.0031308)))); - } - }; - - template - struct compute_rgbToSrgb<4, T, Q> - { - GLM_FUNC_QUALIFIER static vec<4, T, Q> call(vec<4, T, Q> const& ColorRGB, T GammaCorrection) - { - return vec<4, T, Q>(compute_rgbToSrgb<3, T, Q>::call(vec<3, T, Q>(ColorRGB), GammaCorrection), ColorRGB.w); - } - }; - - template - struct compute_srgbToRgb - { - GLM_FUNC_QUALIFIER static vec call(vec const& ColorSRGB, T Gamma) - { - return mix( - pow((ColorSRGB + static_cast(0.055)) * static_cast(0.94786729857819905213270142180095), vec(Gamma)), - ColorSRGB * static_cast(0.07739938080495356037151702786378), - lessThanEqual(ColorSRGB, vec(static_cast(0.04045)))); - } - }; - - template - struct compute_srgbToRgb<4, T, Q> - { - GLM_FUNC_QUALIFIER static vec<4, T, Q> call(vec<4, T, Q> const& ColorSRGB, T Gamma) - { - return vec<4, T, Q>(compute_srgbToRgb<3, T, Q>::call(vec<3, T, Q>(ColorSRGB), Gamma), ColorSRGB.w); - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER vec convertLinearToSRGB(vec const& ColorLinear) - { - return detail::compute_rgbToSrgb::call(ColorLinear, static_cast(0.41666)); - } - - // Based on Ian Taylor http://chilliant.blogspot.fr/2012/08/srgb-approximations-for-hlsl.html - template<> - GLM_FUNC_QUALIFIER vec<3, float, lowp> convertLinearToSRGB(vec<3, float, lowp> const& ColorLinear) - { - vec<3, float, lowp> S1 = sqrt(ColorLinear); - vec<3, float, lowp> S2 = sqrt(S1); - vec<3, float, lowp> S3 = sqrt(S2); - return 0.662002687f * S1 + 0.684122060f * S2 - 0.323583601f * S3 - 0.0225411470f * ColorLinear; - } - - template - GLM_FUNC_QUALIFIER vec convertLinearToSRGB(vec const& ColorLinear, T Gamma) - { - return detail::compute_rgbToSrgb::call(ColorLinear, static_cast(1) / Gamma); - } - - template - GLM_FUNC_QUALIFIER vec convertSRGBToLinear(vec const& ColorSRGB) - { - return detail::compute_srgbToRgb::call(ColorSRGB, static_cast(2.4)); - } - - template - GLM_FUNC_QUALIFIER vec convertSRGBToLinear(vec const& ColorSRGB, T Gamma) - { - return detail::compute_srgbToRgb::call(ColorSRGB, Gamma); - } -}//namespace glm diff --git a/src/vendor/glm/gtc/constants.hpp b/src/vendor/glm/gtc/constants.hpp deleted file mode 100755 index 99f2128..0000000 --- a/src/vendor/glm/gtc/constants.hpp +++ /dev/null @@ -1,165 +0,0 @@ -/// @ref gtc_constants -/// @file glm/gtc/constants.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_constants GLM_GTC_constants -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Provide a list of constants and precomputed useful values. - -#pragma once - -// Dependencies -#include "../ext/scalar_constants.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_constants extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_constants - /// @{ - - /// Return 0. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType zero(); - - /// Return 1. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType one(); - - /// Return pi * 2. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType two_pi(); - - /// Return square root of pi. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType root_pi(); - - /// Return pi / 2. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType half_pi(); - - /// Return pi / 2 * 3. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType three_over_two_pi(); - - /// Return pi / 4. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType quarter_pi(); - - /// Return 1 / pi. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_pi(); - - /// Return 1 / (pi * 2). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_two_pi(); - - /// Return 2 / pi. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType two_over_pi(); - - /// Return 4 / pi. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType four_over_pi(); - - /// Return 2 / sqrt(pi). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType two_over_root_pi(); - - /// Return 1 / sqrt(2). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_root_two(); - - /// Return sqrt(pi / 2). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType root_half_pi(); - - /// Return sqrt(2 * pi). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType root_two_pi(); - - /// Return sqrt(ln(4)). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType root_ln_four(); - - /// Return e constant. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType e(); - - /// Return Euler's constant. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType euler(); - - /// Return sqrt(2). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType root_two(); - - /// Return sqrt(3). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType root_three(); - - /// Return sqrt(5). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType root_five(); - - /// Return ln(2). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType ln_two(); - - /// Return ln(10). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType ln_ten(); - - /// Return ln(ln(2)). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType ln_ln_two(); - - /// Return 1 / 3. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType third(); - - /// Return 2 / 3. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType two_thirds(); - - /// Return the golden ratio constant. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType golden_ratio(); - - /// @} -} //namespace glm - -#include "constants.inl" diff --git a/src/vendor/glm/gtc/constants.inl b/src/vendor/glm/gtc/constants.inl deleted file mode 100755 index bb98c6b..0000000 --- a/src/vendor/glm/gtc/constants.inl +++ /dev/null @@ -1,167 +0,0 @@ -/// @ref gtc_constants - -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType zero() - { - return genType(0); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one() - { - return genType(1); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_pi() - { - return genType(6.28318530717958647692528676655900576); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_pi() - { - return genType(1.772453850905516027); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType half_pi() - { - return genType(1.57079632679489661923132169163975144); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType three_over_two_pi() - { - return genType(4.71238898038468985769396507491925432); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType quarter_pi() - { - return genType(0.785398163397448309615660845819875721); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one_over_pi() - { - return genType(0.318309886183790671537767526745028724); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one_over_two_pi() - { - return genType(0.159154943091895335768883763372514362); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_over_pi() - { - return genType(0.636619772367581343075535053490057448); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType four_over_pi() - { - return genType(1.273239544735162686151070106980114898); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_over_root_pi() - { - return genType(1.12837916709551257389615890312154517); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one_over_root_two() - { - return genType(0.707106781186547524400844362104849039); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_half_pi() - { - return genType(1.253314137315500251); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_two_pi() - { - return genType(2.506628274631000502); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_ln_four() - { - return genType(1.17741002251547469); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType e() - { - return genType(2.71828182845904523536); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType euler() - { - return genType(0.577215664901532860606); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_two() - { - return genType(1.41421356237309504880168872420969808); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_three() - { - return genType(1.73205080756887729352744634150587236); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_five() - { - return genType(2.23606797749978969640917366873127623); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType ln_two() - { - return genType(0.693147180559945309417232121458176568); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType ln_ten() - { - return genType(2.30258509299404568401799145468436421); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType ln_ln_two() - { - return genType(-0.3665129205816643); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType third() - { - return genType(0.3333333333333333333333333333333333333333); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_thirds() - { - return genType(0.666666666666666666666666666666666666667); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType golden_ratio() - { - return genType(1.61803398874989484820458683436563811); - } - -} //namespace glm diff --git a/src/vendor/glm/gtc/epsilon.hpp b/src/vendor/glm/gtc/epsilon.hpp deleted file mode 100755 index 640439b..0000000 --- a/src/vendor/glm/gtc/epsilon.hpp +++ /dev/null @@ -1,60 +0,0 @@ -/// @ref gtc_epsilon -/// @file glm/gtc/epsilon.hpp -/// -/// @see core (dependence) -/// @see gtc_quaternion (dependence) -/// -/// @defgroup gtc_epsilon GLM_GTC_epsilon -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Comparison functions for a user defined epsilon values. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_epsilon extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_epsilon - /// @{ - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is satisfied. - /// - /// @see gtc_epsilon - template - GLM_FUNC_DECL vec epsilonEqual(vec const& x, vec const& y, T const& epsilon); - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is satisfied. - /// - /// @see gtc_epsilon - template - GLM_FUNC_DECL bool epsilonEqual(genType const& x, genType const& y, genType const& epsilon); - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is not satisfied. - /// - /// @see gtc_epsilon - template - GLM_FUNC_DECL vec epsilonNotEqual(vec const& x, vec const& y, T const& epsilon); - - /// Returns the component-wise comparison of |x - y| >= epsilon. - /// True if this expression is not satisfied. - /// - /// @see gtc_epsilon - template - GLM_FUNC_DECL bool epsilonNotEqual(genType const& x, genType const& y, genType const& epsilon); - - /// @} -}//namespace glm - -#include "epsilon.inl" diff --git a/src/vendor/glm/gtc/epsilon.inl b/src/vendor/glm/gtc/epsilon.inl deleted file mode 100755 index 508b9f8..0000000 --- a/src/vendor/glm/gtc/epsilon.inl +++ /dev/null @@ -1,80 +0,0 @@ -/// @ref gtc_epsilon - -// Dependency: -#include "../vector_relational.hpp" -#include "../common.hpp" - -namespace glm -{ - template<> - GLM_FUNC_QUALIFIER bool epsilonEqual - ( - float const& x, - float const& y, - float const& epsilon - ) - { - return abs(x - y) < epsilon; - } - - template<> - GLM_FUNC_QUALIFIER bool epsilonEqual - ( - double const& x, - double const& y, - double const& epsilon - ) - { - return abs(x - y) < epsilon; - } - - template - GLM_FUNC_QUALIFIER vec epsilonEqual(vec const& x, vec const& y, T const& epsilon) - { - return lessThan(abs(x - y), vec(epsilon)); - } - - template - GLM_FUNC_QUALIFIER vec epsilonEqual(vec const& x, vec const& y, vec const& epsilon) - { - return lessThan(abs(x - y), vec(epsilon)); - } - - template<> - GLM_FUNC_QUALIFIER bool epsilonNotEqual(float const& x, float const& y, float const& epsilon) - { - return abs(x - y) >= epsilon; - } - - template<> - GLM_FUNC_QUALIFIER bool epsilonNotEqual(double const& x, double const& y, double const& epsilon) - { - return abs(x - y) >= epsilon; - } - - template - GLM_FUNC_QUALIFIER vec epsilonNotEqual(vec const& x, vec const& y, T const& epsilon) - { - return greaterThanEqual(abs(x - y), vec(epsilon)); - } - - template - GLM_FUNC_QUALIFIER vec epsilonNotEqual(vec const& x, vec const& y, vec const& epsilon) - { - return greaterThanEqual(abs(x - y), vec(epsilon)); - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> epsilonEqual(qua const& x, qua const& y, T const& epsilon) - { - vec<4, T, Q> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w); - return lessThan(abs(v), vec<4, T, Q>(epsilon)); - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> epsilonNotEqual(qua const& x, qua const& y, T const& epsilon) - { - vec<4, T, Q> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w); - return greaterThanEqual(abs(v), vec<4, T, Q>(epsilon)); - } -}//namespace glm diff --git a/src/vendor/glm/gtc/integer.hpp b/src/vendor/glm/gtc/integer.hpp deleted file mode 100755 index a2a5bf6..0000000 --- a/src/vendor/glm/gtc/integer.hpp +++ /dev/null @@ -1,43 +0,0 @@ -/// @ref gtc_integer -/// @file glm/gtc/integer.hpp -/// -/// @see core (dependence) -/// @see gtc_integer (dependence) -/// -/// @defgroup gtc_integer GLM_GTC_integer -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// @brief Allow to perform bit operations on integer values - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../common.hpp" -#include "../integer.hpp" -#include "../exponential.hpp" -#include "../ext/scalar_common.hpp" -#include "../ext/vector_common.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_integer extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_integer - /// @{ - - /// Returns the log2 of x for integer values. Usefull to compute mipmap count from the texture size. - /// @see gtc_integer - template - GLM_FUNC_DECL genIUType log2(genIUType x); - - /// @} -} //namespace glm - -#include "integer.inl" diff --git a/src/vendor/glm/gtc/integer.inl b/src/vendor/glm/gtc/integer.inl deleted file mode 100755 index 5f66dfe..0000000 --- a/src/vendor/glm/gtc/integer.inl +++ /dev/null @@ -1,33 +0,0 @@ -/// @ref gtc_integer - -namespace glm{ -namespace detail -{ - template - struct compute_log2 - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - //Equivalent to return findMSB(vec); but save one function call in ASM with VC - //return findMSB(vec); - return vec(detail::compute_findMSB_vec::call(v)); - } - }; - -# if GLM_HAS_BITSCAN_WINDOWS - template - struct compute_log2<4, int, Q, false, Aligned> - { - GLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& v) - { - vec<4, int, Q> Result; - _BitScanReverse(reinterpret_cast(&Result.x), v.x); - _BitScanReverse(reinterpret_cast(&Result.y), v.y); - _BitScanReverse(reinterpret_cast(&Result.z), v.z); - _BitScanReverse(reinterpret_cast(&Result.w), v.w); - return Result; - } - }; -# endif//GLM_HAS_BITSCAN_WINDOWS -}//namespace detail -}//namespace glm diff --git a/src/vendor/glm/gtc/matrix_access.hpp b/src/vendor/glm/gtc/matrix_access.hpp deleted file mode 100755 index 4935ba7..0000000 --- a/src/vendor/glm/gtc/matrix_access.hpp +++ /dev/null @@ -1,60 +0,0 @@ -/// @ref gtc_matrix_access -/// @file glm/gtc/matrix_access.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_matrix_access GLM_GTC_matrix_access -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Defines functions to access rows or columns of a matrix easily. - -#pragma once - -// Dependency: -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_matrix_access extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_matrix_access - /// @{ - - /// Get a specific row of a matrix. - /// @see gtc_matrix_access - template - GLM_FUNC_DECL typename genType::row_type row( - genType const& m, - length_t index); - - /// Set a specific row to a matrix. - /// @see gtc_matrix_access - template - GLM_FUNC_DECL genType row( - genType const& m, - length_t index, - typename genType::row_type const& x); - - /// Get a specific column of a matrix. - /// @see gtc_matrix_access - template - GLM_FUNC_DECL typename genType::col_type column( - genType const& m, - length_t index); - - /// Set a specific column to a matrix. - /// @see gtc_matrix_access - template - GLM_FUNC_DECL genType column( - genType const& m, - length_t index, - typename genType::col_type const& x); - - /// @} -}//namespace glm - -#include "matrix_access.inl" diff --git a/src/vendor/glm/gtc/matrix_access.inl b/src/vendor/glm/gtc/matrix_access.inl deleted file mode 100755 index 09fcc10..0000000 --- a/src/vendor/glm/gtc/matrix_access.inl +++ /dev/null @@ -1,62 +0,0 @@ -/// @ref gtc_matrix_access - -namespace glm -{ - template - GLM_FUNC_QUALIFIER genType row - ( - genType const& m, - length_t index, - typename genType::row_type const& x - ) - { - assert(index >= 0 && index < m[0].length()); - - genType Result = m; - for(length_t i = 0; i < m.length(); ++i) - Result[i][index] = x[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER typename genType::row_type row - ( - genType const& m, - length_t index - ) - { - assert(index >= 0 && index < m[0].length()); - - typename genType::row_type Result(0); - for(length_t i = 0; i < m.length(); ++i) - Result[i] = m[i][index]; - return Result; - } - - template - GLM_FUNC_QUALIFIER genType column - ( - genType const& m, - length_t index, - typename genType::col_type const& x - ) - { - assert(index >= 0 && index < m.length()); - - genType Result = m; - Result[index] = x; - return Result; - } - - template - GLM_FUNC_QUALIFIER typename genType::col_type column - ( - genType const& m, - length_t index - ) - { - assert(index >= 0 && index < m.length()); - - return m[index]; - } -}//namespace glm diff --git a/src/vendor/glm/gtc/matrix_integer.hpp b/src/vendor/glm/gtc/matrix_integer.hpp deleted file mode 100755 index d7ebdc7..0000000 --- a/src/vendor/glm/gtc/matrix_integer.hpp +++ /dev/null @@ -1,433 +0,0 @@ -/// @ref gtc_matrix_integer -/// @file glm/gtc/matrix_integer.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_matrix_integer GLM_GTC_matrix_integer -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x2.hpp" -#include "../mat2x3.hpp" -#include "../mat2x4.hpp" -#include "../mat3x2.hpp" -#include "../mat3x3.hpp" -#include "../mat3x4.hpp" -#include "../mat4x2.hpp" -#include "../mat4x3.hpp" -#include "../mat4x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_matrix_integer extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_matrix_integer - /// @{ - - /// High-qualifier signed integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, int, highp> highp_imat2; - - /// High-qualifier signed integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, int, highp> highp_imat3; - - /// High-qualifier signed integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, int, highp> highp_imat4; - - /// High-qualifier signed integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, int, highp> highp_imat2x2; - - /// High-qualifier signed integer 2x3 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 3, int, highp> highp_imat2x3; - - /// High-qualifier signed integer 2x4 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 4, int, highp> highp_imat2x4; - - /// High-qualifier signed integer 3x2 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 2, int, highp> highp_imat3x2; - - /// High-qualifier signed integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, int, highp> highp_imat3x3; - - /// High-qualifier signed integer 3x4 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 4, int, highp> highp_imat3x4; - - /// High-qualifier signed integer 4x2 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 2, int, highp> highp_imat4x2; - - /// High-qualifier signed integer 4x3 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 3, int, highp> highp_imat4x3; - - /// High-qualifier signed integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, int, highp> highp_imat4x4; - - - /// Medium-qualifier signed integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, int, mediump> mediump_imat2; - - /// Medium-qualifier signed integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, int, mediump> mediump_imat3; - - /// Medium-qualifier signed integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, int, mediump> mediump_imat4; - - - /// Medium-qualifier signed integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, int, mediump> mediump_imat2x2; - - /// Medium-qualifier signed integer 2x3 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 3, int, mediump> mediump_imat2x3; - - /// Medium-qualifier signed integer 2x4 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 4, int, mediump> mediump_imat2x4; - - /// Medium-qualifier signed integer 3x2 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 2, int, mediump> mediump_imat3x2; - - /// Medium-qualifier signed integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, int, mediump> mediump_imat3x3; - - /// Medium-qualifier signed integer 3x4 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 4, int, mediump> mediump_imat3x4; - - /// Medium-qualifier signed integer 4x2 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 2, int, mediump> mediump_imat4x2; - - /// Medium-qualifier signed integer 4x3 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 3, int, mediump> mediump_imat4x3; - - /// Medium-qualifier signed integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, int, mediump> mediump_imat4x4; - - - /// Low-qualifier signed integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, int, lowp> lowp_imat2; - - /// Low-qualifier signed integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, int, lowp> lowp_imat3; - - /// Low-qualifier signed integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, int, lowp> lowp_imat4; - - - /// Low-qualifier signed integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, int, lowp> lowp_imat2x2; - - /// Low-qualifier signed integer 2x3 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 3, int, lowp> lowp_imat2x3; - - /// Low-qualifier signed integer 2x4 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 4, int, lowp> lowp_imat2x4; - - /// Low-qualifier signed integer 3x2 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 2, int, lowp> lowp_imat3x2; - - /// Low-qualifier signed integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, int, lowp> lowp_imat3x3; - - /// Low-qualifier signed integer 3x4 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 4, int, lowp> lowp_imat3x4; - - /// Low-qualifier signed integer 4x2 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 2, int, lowp> lowp_imat4x2; - - /// Low-qualifier signed integer 4x3 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 3, int, lowp> lowp_imat4x3; - - /// Low-qualifier signed integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, int, lowp> lowp_imat4x4; - - - /// High-qualifier unsigned integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, uint, highp> highp_umat2; - - /// High-qualifier unsigned integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, uint, highp> highp_umat3; - - /// High-qualifier unsigned integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, uint, highp> highp_umat4; - - /// High-qualifier unsigned integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, uint, highp> highp_umat2x2; - - /// High-qualifier unsigned integer 2x3 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 3, uint, highp> highp_umat2x3; - - /// High-qualifier unsigned integer 2x4 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 4, uint, highp> highp_umat2x4; - - /// High-qualifier unsigned integer 3x2 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 2, uint, highp> highp_umat3x2; - - /// High-qualifier unsigned integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, uint, highp> highp_umat3x3; - - /// High-qualifier unsigned integer 3x4 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 4, uint, highp> highp_umat3x4; - - /// High-qualifier unsigned integer 4x2 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 2, uint, highp> highp_umat4x2; - - /// High-qualifier unsigned integer 4x3 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 3, uint, highp> highp_umat4x3; - - /// High-qualifier unsigned integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, uint, highp> highp_umat4x4; - - - /// Medium-qualifier unsigned integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, uint, mediump> mediump_umat2; - - /// Medium-qualifier unsigned integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, uint, mediump> mediump_umat3; - - /// Medium-qualifier unsigned integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, uint, mediump> mediump_umat4; - - - /// Medium-qualifier unsigned integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, uint, mediump> mediump_umat2x2; - - /// Medium-qualifier unsigned integer 2x3 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 3, uint, mediump> mediump_umat2x3; - - /// Medium-qualifier unsigned integer 2x4 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 4, uint, mediump> mediump_umat2x4; - - /// Medium-qualifier unsigned integer 3x2 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 2, uint, mediump> mediump_umat3x2; - - /// Medium-qualifier unsigned integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, uint, mediump> mediump_umat3x3; - - /// Medium-qualifier unsigned integer 3x4 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 4, uint, mediump> mediump_umat3x4; - - /// Medium-qualifier unsigned integer 4x2 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 2, uint, mediump> mediump_umat4x2; - - /// Medium-qualifier unsigned integer 4x3 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 3, uint, mediump> mediump_umat4x3; - - /// Medium-qualifier unsigned integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, uint, mediump> mediump_umat4x4; - - - /// Low-qualifier unsigned integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, uint, lowp> lowp_umat2; - - /// Low-qualifier unsigned integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, uint, lowp> lowp_umat3; - - /// Low-qualifier unsigned integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, uint, lowp> lowp_umat4; - - - /// Low-qualifier unsigned integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, uint, lowp> lowp_umat2x2; - - /// Low-qualifier unsigned integer 2x3 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 3, uint, lowp> lowp_umat2x3; - - /// Low-qualifier unsigned integer 2x4 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 4, uint, lowp> lowp_umat2x4; - - /// Low-qualifier unsigned integer 3x2 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 2, uint, lowp> lowp_umat3x2; - - /// Low-qualifier unsigned integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, uint, lowp> lowp_umat3x3; - - /// Low-qualifier unsigned integer 3x4 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 4, uint, lowp> lowp_umat3x4; - - /// Low-qualifier unsigned integer 4x2 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 2, uint, lowp> lowp_umat4x2; - - /// Low-qualifier unsigned integer 4x3 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 3, uint, lowp> lowp_umat4x3; - - /// Low-qualifier unsigned integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, uint, lowp> lowp_umat4x4; - - - - /// Signed integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, int, defaultp> imat2; - - /// Signed integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, int, defaultp> imat3; - - /// Signed integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, int, defaultp> imat4; - - /// Signed integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, int, defaultp> imat2x2; - - /// Signed integer 2x3 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 3, int, defaultp> imat2x3; - - /// Signed integer 2x4 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 4, int, defaultp> imat2x4; - - /// Signed integer 3x2 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 2, int, defaultp> imat3x2; - - /// Signed integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, int, defaultp> imat3x3; - - /// Signed integer 3x4 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 4, int, defaultp> imat3x4; - - /// Signed integer 4x2 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 2, int, defaultp> imat4x2; - - /// Signed integer 4x3 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 3, int, defaultp> imat4x3; - - /// Signed integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, int, defaultp> imat4x4; - - - - /// Unsigned integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, uint, defaultp> umat2; - - /// Unsigned integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, uint, defaultp> umat3; - - /// Unsigned integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, uint, defaultp> umat4; - - /// Unsigned integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, uint, defaultp> umat2x2; - - /// Unsigned integer 2x3 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 3, uint, defaultp> umat2x3; - - /// Unsigned integer 2x4 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 4, uint, defaultp> umat2x4; - - /// Unsigned integer 3x2 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 2, uint, defaultp> umat3x2; - - /// Unsigned integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, uint, defaultp> umat3x3; - - /// Unsigned integer 3x4 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 4, uint, defaultp> umat3x4; - - /// Unsigned integer 4x2 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 2, uint, defaultp> umat4x2; - - /// Unsigned integer 4x3 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 3, uint, defaultp> umat4x3; - - /// Unsigned integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, uint, defaultp> umat4x4; - - /// @} -}//namespace glm diff --git a/src/vendor/glm/gtc/matrix_inverse.hpp b/src/vendor/glm/gtc/matrix_inverse.hpp deleted file mode 100755 index 8f77860..0000000 --- a/src/vendor/glm/gtc/matrix_inverse.hpp +++ /dev/null @@ -1,50 +0,0 @@ -/// @ref gtc_matrix_inverse -/// @file glm/gtc/matrix_inverse.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_matrix_inverse GLM_GTC_matrix_inverse -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Defines additional matrix inverting functions. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../matrix.hpp" -#include "../mat2x2.hpp" -#include "../mat3x3.hpp" -#include "../mat4x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_matrix_inverse extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_matrix_inverse - /// @{ - - /// Fast matrix inverse for affine matrix. - /// - /// @param m Input matrix to invert. - /// @tparam genType Squared floating-point matrix: half, float or double. Inverse of matrix based of half-qualifier floating point value is highly innacurate. - /// @see gtc_matrix_inverse - template - GLM_FUNC_DECL genType affineInverse(genType const& m); - - /// Compute the inverse transpose of a matrix. - /// - /// @param m Input matrix to invert transpose. - /// @tparam genType Squared floating-point matrix: half, float or double. Inverse of matrix based of half-qualifier floating point value is highly innacurate. - /// @see gtc_matrix_inverse - template - GLM_FUNC_DECL genType inverseTranspose(genType const& m); - - /// @} -}//namespace glm - -#include "matrix_inverse.inl" diff --git a/src/vendor/glm/gtc/matrix_inverse.inl b/src/vendor/glm/gtc/matrix_inverse.inl deleted file mode 100755 index c004b9e..0000000 --- a/src/vendor/glm/gtc/matrix_inverse.inl +++ /dev/null @@ -1,118 +0,0 @@ -/// @ref gtc_matrix_inverse - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> affineInverse(mat<3, 3, T, Q> const& m) - { - mat<2, 2, T, Q> const Inv(inverse(mat<2, 2, T, Q>(m))); - - return mat<3, 3, T, Q>( - vec<3, T, Q>(Inv[0], static_cast(0)), - vec<3, T, Q>(Inv[1], static_cast(0)), - vec<3, T, Q>(-Inv * vec<2, T, Q>(m[2]), static_cast(1))); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> affineInverse(mat<4, 4, T, Q> const& m) - { - mat<3, 3, T, Q> const Inv(inverse(mat<3, 3, T, Q>(m))); - - return mat<4, 4, T, Q>( - vec<4, T, Q>(Inv[0], static_cast(0)), - vec<4, T, Q>(Inv[1], static_cast(0)), - vec<4, T, Q>(Inv[2], static_cast(0)), - vec<4, T, Q>(-Inv * vec<3, T, Q>(m[3]), static_cast(1))); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> inverseTranspose(mat<2, 2, T, Q> const& m) - { - T Determinant = m[0][0] * m[1][1] - m[1][0] * m[0][1]; - - mat<2, 2, T, Q> Inverse( - + m[1][1] / Determinant, - - m[0][1] / Determinant, - - m[1][0] / Determinant, - + m[0][0] / Determinant); - - return Inverse; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> inverseTranspose(mat<3, 3, T, Q> const& m) - { - T Determinant = - + m[0][0] * (m[1][1] * m[2][2] - m[1][2] * m[2][1]) - - m[0][1] * (m[1][0] * m[2][2] - m[1][2] * m[2][0]) - + m[0][2] * (m[1][0] * m[2][1] - m[1][1] * m[2][0]); - - mat<3, 3, T, Q> Inverse; - Inverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]); - Inverse[0][1] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]); - Inverse[0][2] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]); - Inverse[1][0] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]); - Inverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]); - Inverse[1][2] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]); - Inverse[2][0] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]); - Inverse[2][1] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]); - Inverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]); - Inverse /= Determinant; - - return Inverse; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> inverseTranspose(mat<4, 4, T, Q> const& m) - { - T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - T SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; - T SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; - T SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; - T SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; - T SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; - T SubFactor11 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; - T SubFactor12 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; - T SubFactor13 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; - T SubFactor14 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; - T SubFactor15 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; - T SubFactor16 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; - T SubFactor17 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; - - mat<4, 4, T, Q> Inverse; - Inverse[0][0] = + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02); - Inverse[0][1] = - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04); - Inverse[0][2] = + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05); - Inverse[0][3] = - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05); - - Inverse[1][0] = - (m[0][1] * SubFactor00 - m[0][2] * SubFactor01 + m[0][3] * SubFactor02); - Inverse[1][1] = + (m[0][0] * SubFactor00 - m[0][2] * SubFactor03 + m[0][3] * SubFactor04); - Inverse[1][2] = - (m[0][0] * SubFactor01 - m[0][1] * SubFactor03 + m[0][3] * SubFactor05); - Inverse[1][3] = + (m[0][0] * SubFactor02 - m[0][1] * SubFactor04 + m[0][2] * SubFactor05); - - Inverse[2][0] = + (m[0][1] * SubFactor06 - m[0][2] * SubFactor07 + m[0][3] * SubFactor08); - Inverse[2][1] = - (m[0][0] * SubFactor06 - m[0][2] * SubFactor09 + m[0][3] * SubFactor10); - Inverse[2][2] = + (m[0][0] * SubFactor07 - m[0][1] * SubFactor09 + m[0][3] * SubFactor11); - Inverse[2][3] = - (m[0][0] * SubFactor08 - m[0][1] * SubFactor10 + m[0][2] * SubFactor11); - - Inverse[3][0] = - (m[0][1] * SubFactor12 - m[0][2] * SubFactor13 + m[0][3] * SubFactor14); - Inverse[3][1] = + (m[0][0] * SubFactor12 - m[0][2] * SubFactor15 + m[0][3] * SubFactor16); - Inverse[3][2] = - (m[0][0] * SubFactor13 - m[0][1] * SubFactor15 + m[0][3] * SubFactor17); - Inverse[3][3] = + (m[0][0] * SubFactor14 - m[0][1] * SubFactor16 + m[0][2] * SubFactor17); - - T Determinant = - + m[0][0] * Inverse[0][0] - + m[0][1] * Inverse[0][1] - + m[0][2] * Inverse[0][2] - + m[0][3] * Inverse[0][3]; - - Inverse /= Determinant; - - return Inverse; - } -}//namespace glm diff --git a/src/vendor/glm/gtc/matrix_transform.hpp b/src/vendor/glm/gtc/matrix_transform.hpp deleted file mode 100755 index 612418f..0000000 --- a/src/vendor/glm/gtc/matrix_transform.hpp +++ /dev/null @@ -1,36 +0,0 @@ -/// @ref gtc_matrix_transform -/// @file glm/gtc/matrix_transform.hpp -/// -/// @see core (dependence) -/// @see gtx_transform -/// @see gtx_transform2 -/// -/// @defgroup gtc_matrix_transform GLM_GTC_matrix_transform -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Defines functions that generate common transformation matrices. -/// -/// The matrices generated by this extension use standard OpenGL fixed-function -/// conventions. For example, the lookAt function generates a transform from world -/// space into the specific eye space that the projective matrix functions -/// (perspective, ortho, etc) are designed to expect. The OpenGL compatibility -/// specifications defines the particular layout of this eye space. - -#pragma once - -// Dependencies -#include "../mat4x4.hpp" -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include "../ext/matrix_projection.hpp" -#include "../ext/matrix_clip_space.hpp" -#include "../ext/matrix_transform.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_matrix_transform extension included") -#endif - -#include "matrix_transform.inl" diff --git a/src/vendor/glm/gtc/matrix_transform.inl b/src/vendor/glm/gtc/matrix_transform.inl deleted file mode 100755 index 15b46bc..0000000 --- a/src/vendor/glm/gtc/matrix_transform.inl +++ /dev/null @@ -1,3 +0,0 @@ -#include "../geometric.hpp" -#include "../trigonometric.hpp" -#include "../matrix.hpp" diff --git a/src/vendor/glm/gtc/noise.hpp b/src/vendor/glm/gtc/noise.hpp deleted file mode 100755 index ab1772e..0000000 --- a/src/vendor/glm/gtc/noise.hpp +++ /dev/null @@ -1,61 +0,0 @@ -/// @ref gtc_noise -/// @file glm/gtc/noise.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_noise GLM_GTC_noise -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Defines 2D, 3D and 4D procedural noise functions -/// Based on the work of Stefan Gustavson and Ashima Arts on "webgl-noise": -/// https://github.com/ashima/webgl-noise -/// Following Stefan Gustavson's paper "Simplex noise demystified": -/// http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../detail/_noise.hpp" -#include "../geometric.hpp" -#include "../common.hpp" -#include "../vector_relational.hpp" -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_noise extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_noise - /// @{ - - /// Classic perlin noise. - /// @see gtc_noise - template - GLM_FUNC_DECL T perlin( - vec const& p); - - /// Periodic perlin noise. - /// @see gtc_noise - template - GLM_FUNC_DECL T perlin( - vec const& p, - vec const& rep); - - /// Simplex noise. - /// @see gtc_noise - template - GLM_FUNC_DECL T simplex( - vec const& p); - - /// @} -}//namespace glm - -#include "noise.inl" diff --git a/src/vendor/glm/gtc/noise.inl b/src/vendor/glm/gtc/noise.inl deleted file mode 100755 index 30d0b27..0000000 --- a/src/vendor/glm/gtc/noise.inl +++ /dev/null @@ -1,807 +0,0 @@ -/// @ref gtc_noise -/// -// Based on the work of Stefan Gustavson and Ashima Arts on "webgl-noise": -// https://github.com/ashima/webgl-noise -// Following Stefan Gustavson's paper "Simplex noise demystified": -// http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf - -namespace glm{ -namespace gtc -{ - template - GLM_FUNC_QUALIFIER vec<4, T, Q> grad4(T const& j, vec<4, T, Q> const& ip) - { - vec<3, T, Q> pXYZ = floor(fract(vec<3, T, Q>(j) * vec<3, T, Q>(ip)) * T(7)) * ip[2] - T(1); - T pW = static_cast(1.5) - dot(abs(pXYZ), vec<3, T, Q>(1)); - vec<4, T, Q> s = vec<4, T, Q>(lessThan(vec<4, T, Q>(pXYZ, pW), vec<4, T, Q>(0.0))); - pXYZ = pXYZ + (vec<3, T, Q>(s) * T(2) - T(1)) * s.w; - return vec<4, T, Q>(pXYZ, pW); - } -}//namespace gtc - - // Classic Perlin noise - template - GLM_FUNC_QUALIFIER T perlin(vec<2, T, Q> const& Position) - { - vec<4, T, Q> Pi = glm::floor(vec<4, T, Q>(Position.x, Position.y, Position.x, Position.y)) + vec<4, T, Q>(0.0, 0.0, 1.0, 1.0); - vec<4, T, Q> Pf = glm::fract(vec<4, T, Q>(Position.x, Position.y, Position.x, Position.y)) - vec<4, T, Q>(0.0, 0.0, 1.0, 1.0); - Pi = mod(Pi, vec<4, T, Q>(289)); // To avoid truncation effects in permutation - vec<4, T, Q> ix(Pi.x, Pi.z, Pi.x, Pi.z); - vec<4, T, Q> iy(Pi.y, Pi.y, Pi.w, Pi.w); - vec<4, T, Q> fx(Pf.x, Pf.z, Pf.x, Pf.z); - vec<4, T, Q> fy(Pf.y, Pf.y, Pf.w, Pf.w); - - vec<4, T, Q> i = detail::permute(detail::permute(ix) + iy); - - vec<4, T, Q> gx = static_cast(2) * glm::fract(i / T(41)) - T(1); - vec<4, T, Q> gy = glm::abs(gx) - T(0.5); - vec<4, T, Q> tx = glm::floor(gx + T(0.5)); - gx = gx - tx; - - vec<2, T, Q> g00(gx.x, gy.x); - vec<2, T, Q> g10(gx.y, gy.y); - vec<2, T, Q> g01(gx.z, gy.z); - vec<2, T, Q> g11(gx.w, gy.w); - - vec<4, T, Q> norm = detail::taylorInvSqrt(vec<4, T, Q>(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11))); - g00 *= norm.x; - g01 *= norm.y; - g10 *= norm.z; - g11 *= norm.w; - - T n00 = dot(g00, vec<2, T, Q>(fx.x, fy.x)); - T n10 = dot(g10, vec<2, T, Q>(fx.y, fy.y)); - T n01 = dot(g01, vec<2, T, Q>(fx.z, fy.z)); - T n11 = dot(g11, vec<2, T, Q>(fx.w, fy.w)); - - vec<2, T, Q> fade_xy = detail::fade(vec<2, T, Q>(Pf.x, Pf.y)); - vec<2, T, Q> n_x = mix(vec<2, T, Q>(n00, n01), vec<2, T, Q>(n10, n11), fade_xy.x); - T n_xy = mix(n_x.x, n_x.y, fade_xy.y); - return T(2.3) * n_xy; - } - - // Classic Perlin noise - template - GLM_FUNC_QUALIFIER T perlin(vec<3, T, Q> const& Position) - { - vec<3, T, Q> Pi0 = floor(Position); // Integer part for indexing - vec<3, T, Q> Pi1 = Pi0 + T(1); // Integer part + 1 - Pi0 = detail::mod289(Pi0); - Pi1 = detail::mod289(Pi1); - vec<3, T, Q> Pf0 = fract(Position); // Fractional part for interpolation - vec<3, T, Q> Pf1 = Pf0 - T(1); // Fractional part - 1.0 - vec<4, T, Q> ix(Pi0.x, Pi1.x, Pi0.x, Pi1.x); - vec<4, T, Q> iy = vec<4, T, Q>(vec<2, T, Q>(Pi0.y), vec<2, T, Q>(Pi1.y)); - vec<4, T, Q> iz0(Pi0.z); - vec<4, T, Q> iz1(Pi1.z); - - vec<4, T, Q> ixy = detail::permute(detail::permute(ix) + iy); - vec<4, T, Q> ixy0 = detail::permute(ixy + iz0); - vec<4, T, Q> ixy1 = detail::permute(ixy + iz1); - - vec<4, T, Q> gx0 = ixy0 * T(1.0 / 7.0); - vec<4, T, Q> gy0 = fract(floor(gx0) * T(1.0 / 7.0)) - T(0.5); - gx0 = fract(gx0); - vec<4, T, Q> gz0 = vec<4, T, Q>(0.5) - abs(gx0) - abs(gy0); - vec<4, T, Q> sz0 = step(gz0, vec<4, T, Q>(0.0)); - gx0 -= sz0 * (step(T(0), gx0) - T(0.5)); - gy0 -= sz0 * (step(T(0), gy0) - T(0.5)); - - vec<4, T, Q> gx1 = ixy1 * T(1.0 / 7.0); - vec<4, T, Q> gy1 = fract(floor(gx1) * T(1.0 / 7.0)) - T(0.5); - gx1 = fract(gx1); - vec<4, T, Q> gz1 = vec<4, T, Q>(0.5) - abs(gx1) - abs(gy1); - vec<4, T, Q> sz1 = step(gz1, vec<4, T, Q>(0.0)); - gx1 -= sz1 * (step(T(0), gx1) - T(0.5)); - gy1 -= sz1 * (step(T(0), gy1) - T(0.5)); - - vec<3, T, Q> g000(gx0.x, gy0.x, gz0.x); - vec<3, T, Q> g100(gx0.y, gy0.y, gz0.y); - vec<3, T, Q> g010(gx0.z, gy0.z, gz0.z); - vec<3, T, Q> g110(gx0.w, gy0.w, gz0.w); - vec<3, T, Q> g001(gx1.x, gy1.x, gz1.x); - vec<3, T, Q> g101(gx1.y, gy1.y, gz1.y); - vec<3, T, Q> g011(gx1.z, gy1.z, gz1.z); - vec<3, T, Q> g111(gx1.w, gy1.w, gz1.w); - - vec<4, T, Q> norm0 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110))); - g000 *= norm0.x; - g010 *= norm0.y; - g100 *= norm0.z; - g110 *= norm0.w; - vec<4, T, Q> norm1 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111))); - g001 *= norm1.x; - g011 *= norm1.y; - g101 *= norm1.z; - g111 *= norm1.w; - - T n000 = dot(g000, Pf0); - T n100 = dot(g100, vec<3, T, Q>(Pf1.x, Pf0.y, Pf0.z)); - T n010 = dot(g010, vec<3, T, Q>(Pf0.x, Pf1.y, Pf0.z)); - T n110 = dot(g110, vec<3, T, Q>(Pf1.x, Pf1.y, Pf0.z)); - T n001 = dot(g001, vec<3, T, Q>(Pf0.x, Pf0.y, Pf1.z)); - T n101 = dot(g101, vec<3, T, Q>(Pf1.x, Pf0.y, Pf1.z)); - T n011 = dot(g011, vec<3, T, Q>(Pf0.x, Pf1.y, Pf1.z)); - T n111 = dot(g111, Pf1); - - vec<3, T, Q> fade_xyz = detail::fade(Pf0); - vec<4, T, Q> n_z = mix(vec<4, T, Q>(n000, n100, n010, n110), vec<4, T, Q>(n001, n101, n011, n111), fade_xyz.z); - vec<2, T, Q> n_yz = mix(vec<2, T, Q>(n_z.x, n_z.y), vec<2, T, Q>(n_z.z, n_z.w), fade_xyz.y); - T n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); - return T(2.2) * n_xyz; - } - /* - // Classic Perlin noise - template - GLM_FUNC_QUALIFIER T perlin(vec<3, T, Q> const& P) - { - vec<3, T, Q> Pi0 = floor(P); // Integer part for indexing - vec<3, T, Q> Pi1 = Pi0 + T(1); // Integer part + 1 - Pi0 = mod(Pi0, T(289)); - Pi1 = mod(Pi1, T(289)); - vec<3, T, Q> Pf0 = fract(P); // Fractional part for interpolation - vec<3, T, Q> Pf1 = Pf0 - T(1); // Fractional part - 1.0 - vec<4, T, Q> ix(Pi0.x, Pi1.x, Pi0.x, Pi1.x); - vec<4, T, Q> iy(Pi0.y, Pi0.y, Pi1.y, Pi1.y); - vec<4, T, Q> iz0(Pi0.z); - vec<4, T, Q> iz1(Pi1.z); - - vec<4, T, Q> ixy = permute(permute(ix) + iy); - vec<4, T, Q> ixy0 = permute(ixy + iz0); - vec<4, T, Q> ixy1 = permute(ixy + iz1); - - vec<4, T, Q> gx0 = ixy0 / T(7); - vec<4, T, Q> gy0 = fract(floor(gx0) / T(7)) - T(0.5); - gx0 = fract(gx0); - vec<4, T, Q> gz0 = vec<4, T, Q>(0.5) - abs(gx0) - abs(gy0); - vec<4, T, Q> sz0 = step(gz0, vec<4, T, Q>(0.0)); - gx0 -= sz0 * (step(0.0, gx0) - T(0.5)); - gy0 -= sz0 * (step(0.0, gy0) - T(0.5)); - - vec<4, T, Q> gx1 = ixy1 / T(7); - vec<4, T, Q> gy1 = fract(floor(gx1) / T(7)) - T(0.5); - gx1 = fract(gx1); - vec<4, T, Q> gz1 = vec<4, T, Q>(0.5) - abs(gx1) - abs(gy1); - vec<4, T, Q> sz1 = step(gz1, vec<4, T, Q>(0.0)); - gx1 -= sz1 * (step(T(0), gx1) - T(0.5)); - gy1 -= sz1 * (step(T(0), gy1) - T(0.5)); - - vec<3, T, Q> g000(gx0.x, gy0.x, gz0.x); - vec<3, T, Q> g100(gx0.y, gy0.y, gz0.y); - vec<3, T, Q> g010(gx0.z, gy0.z, gz0.z); - vec<3, T, Q> g110(gx0.w, gy0.w, gz0.w); - vec<3, T, Q> g001(gx1.x, gy1.x, gz1.x); - vec<3, T, Q> g101(gx1.y, gy1.y, gz1.y); - vec<3, T, Q> g011(gx1.z, gy1.z, gz1.z); - vec<3, T, Q> g111(gx1.w, gy1.w, gz1.w); - - vec<4, T, Q> norm0 = taylorInvSqrt(vec<4, T, Q>(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110))); - g000 *= norm0.x; - g010 *= norm0.y; - g100 *= norm0.z; - g110 *= norm0.w; - vec<4, T, Q> norm1 = taylorInvSqrt(vec<4, T, Q>(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111))); - g001 *= norm1.x; - g011 *= norm1.y; - g101 *= norm1.z; - g111 *= norm1.w; - - T n000 = dot(g000, Pf0); - T n100 = dot(g100, vec<3, T, Q>(Pf1.x, Pf0.y, Pf0.z)); - T n010 = dot(g010, vec<3, T, Q>(Pf0.x, Pf1.y, Pf0.z)); - T n110 = dot(g110, vec<3, T, Q>(Pf1.x, Pf1.y, Pf0.z)); - T n001 = dot(g001, vec<3, T, Q>(Pf0.x, Pf0.y, Pf1.z)); - T n101 = dot(g101, vec<3, T, Q>(Pf1.x, Pf0.y, Pf1.z)); - T n011 = dot(g011, vec<3, T, Q>(Pf0.x, Pf1.y, Pf1.z)); - T n111 = dot(g111, Pf1); - - vec<3, T, Q> fade_xyz = fade(Pf0); - vec<4, T, Q> n_z = mix(vec<4, T, Q>(n000, n100, n010, n110), vec<4, T, Q>(n001, n101, n011, n111), fade_xyz.z); - vec<2, T, Q> n_yz = mix( - vec<2, T, Q>(n_z.x, n_z.y), - vec<2, T, Q>(n_z.z, n_z.w), fade_xyz.y); - T n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); - return T(2.2) * n_xyz; - } - */ - // Classic Perlin noise - template - GLM_FUNC_QUALIFIER T perlin(vec<4, T, Q> const& Position) - { - vec<4, T, Q> Pi0 = floor(Position); // Integer part for indexing - vec<4, T, Q> Pi1 = Pi0 + T(1); // Integer part + 1 - Pi0 = mod(Pi0, vec<4, T, Q>(289)); - Pi1 = mod(Pi1, vec<4, T, Q>(289)); - vec<4, T, Q> Pf0 = fract(Position); // Fractional part for interpolation - vec<4, T, Q> Pf1 = Pf0 - T(1); // Fractional part - 1.0 - vec<4, T, Q> ix(Pi0.x, Pi1.x, Pi0.x, Pi1.x); - vec<4, T, Q> iy(Pi0.y, Pi0.y, Pi1.y, Pi1.y); - vec<4, T, Q> iz0(Pi0.z); - vec<4, T, Q> iz1(Pi1.z); - vec<4, T, Q> iw0(Pi0.w); - vec<4, T, Q> iw1(Pi1.w); - - vec<4, T, Q> ixy = detail::permute(detail::permute(ix) + iy); - vec<4, T, Q> ixy0 = detail::permute(ixy + iz0); - vec<4, T, Q> ixy1 = detail::permute(ixy + iz1); - vec<4, T, Q> ixy00 = detail::permute(ixy0 + iw0); - vec<4, T, Q> ixy01 = detail::permute(ixy0 + iw1); - vec<4, T, Q> ixy10 = detail::permute(ixy1 + iw0); - vec<4, T, Q> ixy11 = detail::permute(ixy1 + iw1); - - vec<4, T, Q> gx00 = ixy00 / T(7); - vec<4, T, Q> gy00 = floor(gx00) / T(7); - vec<4, T, Q> gz00 = floor(gy00) / T(6); - gx00 = fract(gx00) - T(0.5); - gy00 = fract(gy00) - T(0.5); - gz00 = fract(gz00) - T(0.5); - vec<4, T, Q> gw00 = vec<4, T, Q>(0.75) - abs(gx00) - abs(gy00) - abs(gz00); - vec<4, T, Q> sw00 = step(gw00, vec<4, T, Q>(0.0)); - gx00 -= sw00 * (step(T(0), gx00) - T(0.5)); - gy00 -= sw00 * (step(T(0), gy00) - T(0.5)); - - vec<4, T, Q> gx01 = ixy01 / T(7); - vec<4, T, Q> gy01 = floor(gx01) / T(7); - vec<4, T, Q> gz01 = floor(gy01) / T(6); - gx01 = fract(gx01) - T(0.5); - gy01 = fract(gy01) - T(0.5); - gz01 = fract(gz01) - T(0.5); - vec<4, T, Q> gw01 = vec<4, T, Q>(0.75) - abs(gx01) - abs(gy01) - abs(gz01); - vec<4, T, Q> sw01 = step(gw01, vec<4, T, Q>(0.0)); - gx01 -= sw01 * (step(T(0), gx01) - T(0.5)); - gy01 -= sw01 * (step(T(0), gy01) - T(0.5)); - - vec<4, T, Q> gx10 = ixy10 / T(7); - vec<4, T, Q> gy10 = floor(gx10) / T(7); - vec<4, T, Q> gz10 = floor(gy10) / T(6); - gx10 = fract(gx10) - T(0.5); - gy10 = fract(gy10) - T(0.5); - gz10 = fract(gz10) - T(0.5); - vec<4, T, Q> gw10 = vec<4, T, Q>(0.75) - abs(gx10) - abs(gy10) - abs(gz10); - vec<4, T, Q> sw10 = step(gw10, vec<4, T, Q>(0)); - gx10 -= sw10 * (step(T(0), gx10) - T(0.5)); - gy10 -= sw10 * (step(T(0), gy10) - T(0.5)); - - vec<4, T, Q> gx11 = ixy11 / T(7); - vec<4, T, Q> gy11 = floor(gx11) / T(7); - vec<4, T, Q> gz11 = floor(gy11) / T(6); - gx11 = fract(gx11) - T(0.5); - gy11 = fract(gy11) - T(0.5); - gz11 = fract(gz11) - T(0.5); - vec<4, T, Q> gw11 = vec<4, T, Q>(0.75) - abs(gx11) - abs(gy11) - abs(gz11); - vec<4, T, Q> sw11 = step(gw11, vec<4, T, Q>(0.0)); - gx11 -= sw11 * (step(T(0), gx11) - T(0.5)); - gy11 -= sw11 * (step(T(0), gy11) - T(0.5)); - - vec<4, T, Q> g0000(gx00.x, gy00.x, gz00.x, gw00.x); - vec<4, T, Q> g1000(gx00.y, gy00.y, gz00.y, gw00.y); - vec<4, T, Q> g0100(gx00.z, gy00.z, gz00.z, gw00.z); - vec<4, T, Q> g1100(gx00.w, gy00.w, gz00.w, gw00.w); - vec<4, T, Q> g0010(gx10.x, gy10.x, gz10.x, gw10.x); - vec<4, T, Q> g1010(gx10.y, gy10.y, gz10.y, gw10.y); - vec<4, T, Q> g0110(gx10.z, gy10.z, gz10.z, gw10.z); - vec<4, T, Q> g1110(gx10.w, gy10.w, gz10.w, gw10.w); - vec<4, T, Q> g0001(gx01.x, gy01.x, gz01.x, gw01.x); - vec<4, T, Q> g1001(gx01.y, gy01.y, gz01.y, gw01.y); - vec<4, T, Q> g0101(gx01.z, gy01.z, gz01.z, gw01.z); - vec<4, T, Q> g1101(gx01.w, gy01.w, gz01.w, gw01.w); - vec<4, T, Q> g0011(gx11.x, gy11.x, gz11.x, gw11.x); - vec<4, T, Q> g1011(gx11.y, gy11.y, gz11.y, gw11.y); - vec<4, T, Q> g0111(gx11.z, gy11.z, gz11.z, gw11.z); - vec<4, T, Q> g1111(gx11.w, gy11.w, gz11.w, gw11.w); - - vec<4, T, Q> norm00 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0000, g0000), dot(g0100, g0100), dot(g1000, g1000), dot(g1100, g1100))); - g0000 *= norm00.x; - g0100 *= norm00.y; - g1000 *= norm00.z; - g1100 *= norm00.w; - - vec<4, T, Q> norm01 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0001, g0001), dot(g0101, g0101), dot(g1001, g1001), dot(g1101, g1101))); - g0001 *= norm01.x; - g0101 *= norm01.y; - g1001 *= norm01.z; - g1101 *= norm01.w; - - vec<4, T, Q> norm10 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0010, g0010), dot(g0110, g0110), dot(g1010, g1010), dot(g1110, g1110))); - g0010 *= norm10.x; - g0110 *= norm10.y; - g1010 *= norm10.z; - g1110 *= norm10.w; - - vec<4, T, Q> norm11 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0011, g0011), dot(g0111, g0111), dot(g1011, g1011), dot(g1111, g1111))); - g0011 *= norm11.x; - g0111 *= norm11.y; - g1011 *= norm11.z; - g1111 *= norm11.w; - - T n0000 = dot(g0000, Pf0); - T n1000 = dot(g1000, vec<4, T, Q>(Pf1.x, Pf0.y, Pf0.z, Pf0.w)); - T n0100 = dot(g0100, vec<4, T, Q>(Pf0.x, Pf1.y, Pf0.z, Pf0.w)); - T n1100 = dot(g1100, vec<4, T, Q>(Pf1.x, Pf1.y, Pf0.z, Pf0.w)); - T n0010 = dot(g0010, vec<4, T, Q>(Pf0.x, Pf0.y, Pf1.z, Pf0.w)); - T n1010 = dot(g1010, vec<4, T, Q>(Pf1.x, Pf0.y, Pf1.z, Pf0.w)); - T n0110 = dot(g0110, vec<4, T, Q>(Pf0.x, Pf1.y, Pf1.z, Pf0.w)); - T n1110 = dot(g1110, vec<4, T, Q>(Pf1.x, Pf1.y, Pf1.z, Pf0.w)); - T n0001 = dot(g0001, vec<4, T, Q>(Pf0.x, Pf0.y, Pf0.z, Pf1.w)); - T n1001 = dot(g1001, vec<4, T, Q>(Pf1.x, Pf0.y, Pf0.z, Pf1.w)); - T n0101 = dot(g0101, vec<4, T, Q>(Pf0.x, Pf1.y, Pf0.z, Pf1.w)); - T n1101 = dot(g1101, vec<4, T, Q>(Pf1.x, Pf1.y, Pf0.z, Pf1.w)); - T n0011 = dot(g0011, vec<4, T, Q>(Pf0.x, Pf0.y, Pf1.z, Pf1.w)); - T n1011 = dot(g1011, vec<4, T, Q>(Pf1.x, Pf0.y, Pf1.z, Pf1.w)); - T n0111 = dot(g0111, vec<4, T, Q>(Pf0.x, Pf1.y, Pf1.z, Pf1.w)); - T n1111 = dot(g1111, Pf1); - - vec<4, T, Q> fade_xyzw = detail::fade(Pf0); - vec<4, T, Q> n_0w = mix(vec<4, T, Q>(n0000, n1000, n0100, n1100), vec<4, T, Q>(n0001, n1001, n0101, n1101), fade_xyzw.w); - vec<4, T, Q> n_1w = mix(vec<4, T, Q>(n0010, n1010, n0110, n1110), vec<4, T, Q>(n0011, n1011, n0111, n1111), fade_xyzw.w); - vec<4, T, Q> n_zw = mix(n_0w, n_1w, fade_xyzw.z); - vec<2, T, Q> n_yzw = mix(vec<2, T, Q>(n_zw.x, n_zw.y), vec<2, T, Q>(n_zw.z, n_zw.w), fade_xyzw.y); - T n_xyzw = mix(n_yzw.x, n_yzw.y, fade_xyzw.x); - return T(2.2) * n_xyzw; - } - - // Classic Perlin noise, periodic variant - template - GLM_FUNC_QUALIFIER T perlin(vec<2, T, Q> const& Position, vec<2, T, Q> const& rep) - { - vec<4, T, Q> Pi = floor(vec<4, T, Q>(Position.x, Position.y, Position.x, Position.y)) + vec<4, T, Q>(0.0, 0.0, 1.0, 1.0); - vec<4, T, Q> Pf = fract(vec<4, T, Q>(Position.x, Position.y, Position.x, Position.y)) - vec<4, T, Q>(0.0, 0.0, 1.0, 1.0); - Pi = mod(Pi, vec<4, T, Q>(rep.x, rep.y, rep.x, rep.y)); // To create noise with explicit period - Pi = mod(Pi, vec<4, T, Q>(289)); // To avoid truncation effects in permutation - vec<4, T, Q> ix(Pi.x, Pi.z, Pi.x, Pi.z); - vec<4, T, Q> iy(Pi.y, Pi.y, Pi.w, Pi.w); - vec<4, T, Q> fx(Pf.x, Pf.z, Pf.x, Pf.z); - vec<4, T, Q> fy(Pf.y, Pf.y, Pf.w, Pf.w); - - vec<4, T, Q> i = detail::permute(detail::permute(ix) + iy); - - vec<4, T, Q> gx = static_cast(2) * fract(i / T(41)) - T(1); - vec<4, T, Q> gy = abs(gx) - T(0.5); - vec<4, T, Q> tx = floor(gx + T(0.5)); - gx = gx - tx; - - vec<2, T, Q> g00(gx.x, gy.x); - vec<2, T, Q> g10(gx.y, gy.y); - vec<2, T, Q> g01(gx.z, gy.z); - vec<2, T, Q> g11(gx.w, gy.w); - - vec<4, T, Q> norm = detail::taylorInvSqrt(vec<4, T, Q>(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11))); - g00 *= norm.x; - g01 *= norm.y; - g10 *= norm.z; - g11 *= norm.w; - - T n00 = dot(g00, vec<2, T, Q>(fx.x, fy.x)); - T n10 = dot(g10, vec<2, T, Q>(fx.y, fy.y)); - T n01 = dot(g01, vec<2, T, Q>(fx.z, fy.z)); - T n11 = dot(g11, vec<2, T, Q>(fx.w, fy.w)); - - vec<2, T, Q> fade_xy = detail::fade(vec<2, T, Q>(Pf.x, Pf.y)); - vec<2, T, Q> n_x = mix(vec<2, T, Q>(n00, n01), vec<2, T, Q>(n10, n11), fade_xy.x); - T n_xy = mix(n_x.x, n_x.y, fade_xy.y); - return T(2.3) * n_xy; - } - - // Classic Perlin noise, periodic variant - template - GLM_FUNC_QUALIFIER T perlin(vec<3, T, Q> const& Position, vec<3, T, Q> const& rep) - { - vec<3, T, Q> Pi0 = mod(floor(Position), rep); // Integer part, modulo period - vec<3, T, Q> Pi1 = mod(Pi0 + vec<3, T, Q>(T(1)), rep); // Integer part + 1, mod period - Pi0 = mod(Pi0, vec<3, T, Q>(289)); - Pi1 = mod(Pi1, vec<3, T, Q>(289)); - vec<3, T, Q> Pf0 = fract(Position); // Fractional part for interpolation - vec<3, T, Q> Pf1 = Pf0 - vec<3, T, Q>(T(1)); // Fractional part - 1.0 - vec<4, T, Q> ix = vec<4, T, Q>(Pi0.x, Pi1.x, Pi0.x, Pi1.x); - vec<4, T, Q> iy = vec<4, T, Q>(Pi0.y, Pi0.y, Pi1.y, Pi1.y); - vec<4, T, Q> iz0(Pi0.z); - vec<4, T, Q> iz1(Pi1.z); - - vec<4, T, Q> ixy = detail::permute(detail::permute(ix) + iy); - vec<4, T, Q> ixy0 = detail::permute(ixy + iz0); - vec<4, T, Q> ixy1 = detail::permute(ixy + iz1); - - vec<4, T, Q> gx0 = ixy0 / T(7); - vec<4, T, Q> gy0 = fract(floor(gx0) / T(7)) - T(0.5); - gx0 = fract(gx0); - vec<4, T, Q> gz0 = vec<4, T, Q>(0.5) - abs(gx0) - abs(gy0); - vec<4, T, Q> sz0 = step(gz0, vec<4, T, Q>(0)); - gx0 -= sz0 * (step(T(0), gx0) - T(0.5)); - gy0 -= sz0 * (step(T(0), gy0) - T(0.5)); - - vec<4, T, Q> gx1 = ixy1 / T(7); - vec<4, T, Q> gy1 = fract(floor(gx1) / T(7)) - T(0.5); - gx1 = fract(gx1); - vec<4, T, Q> gz1 = vec<4, T, Q>(0.5) - abs(gx1) - abs(gy1); - vec<4, T, Q> sz1 = step(gz1, vec<4, T, Q>(T(0))); - gx1 -= sz1 * (step(T(0), gx1) - T(0.5)); - gy1 -= sz1 * (step(T(0), gy1) - T(0.5)); - - vec<3, T, Q> g000 = vec<3, T, Q>(gx0.x, gy0.x, gz0.x); - vec<3, T, Q> g100 = vec<3, T, Q>(gx0.y, gy0.y, gz0.y); - vec<3, T, Q> g010 = vec<3, T, Q>(gx0.z, gy0.z, gz0.z); - vec<3, T, Q> g110 = vec<3, T, Q>(gx0.w, gy0.w, gz0.w); - vec<3, T, Q> g001 = vec<3, T, Q>(gx1.x, gy1.x, gz1.x); - vec<3, T, Q> g101 = vec<3, T, Q>(gx1.y, gy1.y, gz1.y); - vec<3, T, Q> g011 = vec<3, T, Q>(gx1.z, gy1.z, gz1.z); - vec<3, T, Q> g111 = vec<3, T, Q>(gx1.w, gy1.w, gz1.w); - - vec<4, T, Q> norm0 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110))); - g000 *= norm0.x; - g010 *= norm0.y; - g100 *= norm0.z; - g110 *= norm0.w; - vec<4, T, Q> norm1 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111))); - g001 *= norm1.x; - g011 *= norm1.y; - g101 *= norm1.z; - g111 *= norm1.w; - - T n000 = dot(g000, Pf0); - T n100 = dot(g100, vec<3, T, Q>(Pf1.x, Pf0.y, Pf0.z)); - T n010 = dot(g010, vec<3, T, Q>(Pf0.x, Pf1.y, Pf0.z)); - T n110 = dot(g110, vec<3, T, Q>(Pf1.x, Pf1.y, Pf0.z)); - T n001 = dot(g001, vec<3, T, Q>(Pf0.x, Pf0.y, Pf1.z)); - T n101 = dot(g101, vec<3, T, Q>(Pf1.x, Pf0.y, Pf1.z)); - T n011 = dot(g011, vec<3, T, Q>(Pf0.x, Pf1.y, Pf1.z)); - T n111 = dot(g111, Pf1); - - vec<3, T, Q> fade_xyz = detail::fade(Pf0); - vec<4, T, Q> n_z = mix(vec<4, T, Q>(n000, n100, n010, n110), vec<4, T, Q>(n001, n101, n011, n111), fade_xyz.z); - vec<2, T, Q> n_yz = mix(vec<2, T, Q>(n_z.x, n_z.y), vec<2, T, Q>(n_z.z, n_z.w), fade_xyz.y); - T n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); - return T(2.2) * n_xyz; - } - - // Classic Perlin noise, periodic version - template - GLM_FUNC_QUALIFIER T perlin(vec<4, T, Q> const& Position, vec<4, T, Q> const& rep) - { - vec<4, T, Q> Pi0 = mod(floor(Position), rep); // Integer part modulo rep - vec<4, T, Q> Pi1 = mod(Pi0 + T(1), rep); // Integer part + 1 mod rep - vec<4, T, Q> Pf0 = fract(Position); // Fractional part for interpolation - vec<4, T, Q> Pf1 = Pf0 - T(1); // Fractional part - 1.0 - vec<4, T, Q> ix = vec<4, T, Q>(Pi0.x, Pi1.x, Pi0.x, Pi1.x); - vec<4, T, Q> iy = vec<4, T, Q>(Pi0.y, Pi0.y, Pi1.y, Pi1.y); - vec<4, T, Q> iz0(Pi0.z); - vec<4, T, Q> iz1(Pi1.z); - vec<4, T, Q> iw0(Pi0.w); - vec<4, T, Q> iw1(Pi1.w); - - vec<4, T, Q> ixy = detail::permute(detail::permute(ix) + iy); - vec<4, T, Q> ixy0 = detail::permute(ixy + iz0); - vec<4, T, Q> ixy1 = detail::permute(ixy + iz1); - vec<4, T, Q> ixy00 = detail::permute(ixy0 + iw0); - vec<4, T, Q> ixy01 = detail::permute(ixy0 + iw1); - vec<4, T, Q> ixy10 = detail::permute(ixy1 + iw0); - vec<4, T, Q> ixy11 = detail::permute(ixy1 + iw1); - - vec<4, T, Q> gx00 = ixy00 / T(7); - vec<4, T, Q> gy00 = floor(gx00) / T(7); - vec<4, T, Q> gz00 = floor(gy00) / T(6); - gx00 = fract(gx00) - T(0.5); - gy00 = fract(gy00) - T(0.5); - gz00 = fract(gz00) - T(0.5); - vec<4, T, Q> gw00 = vec<4, T, Q>(0.75) - abs(gx00) - abs(gy00) - abs(gz00); - vec<4, T, Q> sw00 = step(gw00, vec<4, T, Q>(0)); - gx00 -= sw00 * (step(T(0), gx00) - T(0.5)); - gy00 -= sw00 * (step(T(0), gy00) - T(0.5)); - - vec<4, T, Q> gx01 = ixy01 / T(7); - vec<4, T, Q> gy01 = floor(gx01) / T(7); - vec<4, T, Q> gz01 = floor(gy01) / T(6); - gx01 = fract(gx01) - T(0.5); - gy01 = fract(gy01) - T(0.5); - gz01 = fract(gz01) - T(0.5); - vec<4, T, Q> gw01 = vec<4, T, Q>(0.75) - abs(gx01) - abs(gy01) - abs(gz01); - vec<4, T, Q> sw01 = step(gw01, vec<4, T, Q>(0.0)); - gx01 -= sw01 * (step(T(0), gx01) - T(0.5)); - gy01 -= sw01 * (step(T(0), gy01) - T(0.5)); - - vec<4, T, Q> gx10 = ixy10 / T(7); - vec<4, T, Q> gy10 = floor(gx10) / T(7); - vec<4, T, Q> gz10 = floor(gy10) / T(6); - gx10 = fract(gx10) - T(0.5); - gy10 = fract(gy10) - T(0.5); - gz10 = fract(gz10) - T(0.5); - vec<4, T, Q> gw10 = vec<4, T, Q>(0.75) - abs(gx10) - abs(gy10) - abs(gz10); - vec<4, T, Q> sw10 = step(gw10, vec<4, T, Q>(0.0)); - gx10 -= sw10 * (step(T(0), gx10) - T(0.5)); - gy10 -= sw10 * (step(T(0), gy10) - T(0.5)); - - vec<4, T, Q> gx11 = ixy11 / T(7); - vec<4, T, Q> gy11 = floor(gx11) / T(7); - vec<4, T, Q> gz11 = floor(gy11) / T(6); - gx11 = fract(gx11) - T(0.5); - gy11 = fract(gy11) - T(0.5); - gz11 = fract(gz11) - T(0.5); - vec<4, T, Q> gw11 = vec<4, T, Q>(0.75) - abs(gx11) - abs(gy11) - abs(gz11); - vec<4, T, Q> sw11 = step(gw11, vec<4, T, Q>(T(0))); - gx11 -= sw11 * (step(T(0), gx11) - T(0.5)); - gy11 -= sw11 * (step(T(0), gy11) - T(0.5)); - - vec<4, T, Q> g0000(gx00.x, gy00.x, gz00.x, gw00.x); - vec<4, T, Q> g1000(gx00.y, gy00.y, gz00.y, gw00.y); - vec<4, T, Q> g0100(gx00.z, gy00.z, gz00.z, gw00.z); - vec<4, T, Q> g1100(gx00.w, gy00.w, gz00.w, gw00.w); - vec<4, T, Q> g0010(gx10.x, gy10.x, gz10.x, gw10.x); - vec<4, T, Q> g1010(gx10.y, gy10.y, gz10.y, gw10.y); - vec<4, T, Q> g0110(gx10.z, gy10.z, gz10.z, gw10.z); - vec<4, T, Q> g1110(gx10.w, gy10.w, gz10.w, gw10.w); - vec<4, T, Q> g0001(gx01.x, gy01.x, gz01.x, gw01.x); - vec<4, T, Q> g1001(gx01.y, gy01.y, gz01.y, gw01.y); - vec<4, T, Q> g0101(gx01.z, gy01.z, gz01.z, gw01.z); - vec<4, T, Q> g1101(gx01.w, gy01.w, gz01.w, gw01.w); - vec<4, T, Q> g0011(gx11.x, gy11.x, gz11.x, gw11.x); - vec<4, T, Q> g1011(gx11.y, gy11.y, gz11.y, gw11.y); - vec<4, T, Q> g0111(gx11.z, gy11.z, gz11.z, gw11.z); - vec<4, T, Q> g1111(gx11.w, gy11.w, gz11.w, gw11.w); - - vec<4, T, Q> norm00 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0000, g0000), dot(g0100, g0100), dot(g1000, g1000), dot(g1100, g1100))); - g0000 *= norm00.x; - g0100 *= norm00.y; - g1000 *= norm00.z; - g1100 *= norm00.w; - - vec<4, T, Q> norm01 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0001, g0001), dot(g0101, g0101), dot(g1001, g1001), dot(g1101, g1101))); - g0001 *= norm01.x; - g0101 *= norm01.y; - g1001 *= norm01.z; - g1101 *= norm01.w; - - vec<4, T, Q> norm10 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0010, g0010), dot(g0110, g0110), dot(g1010, g1010), dot(g1110, g1110))); - g0010 *= norm10.x; - g0110 *= norm10.y; - g1010 *= norm10.z; - g1110 *= norm10.w; - - vec<4, T, Q> norm11 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0011, g0011), dot(g0111, g0111), dot(g1011, g1011), dot(g1111, g1111))); - g0011 *= norm11.x; - g0111 *= norm11.y; - g1011 *= norm11.z; - g1111 *= norm11.w; - - T n0000 = dot(g0000, Pf0); - T n1000 = dot(g1000, vec<4, T, Q>(Pf1.x, Pf0.y, Pf0.z, Pf0.w)); - T n0100 = dot(g0100, vec<4, T, Q>(Pf0.x, Pf1.y, Pf0.z, Pf0.w)); - T n1100 = dot(g1100, vec<4, T, Q>(Pf1.x, Pf1.y, Pf0.z, Pf0.w)); - T n0010 = dot(g0010, vec<4, T, Q>(Pf0.x, Pf0.y, Pf1.z, Pf0.w)); - T n1010 = dot(g1010, vec<4, T, Q>(Pf1.x, Pf0.y, Pf1.z, Pf0.w)); - T n0110 = dot(g0110, vec<4, T, Q>(Pf0.x, Pf1.y, Pf1.z, Pf0.w)); - T n1110 = dot(g1110, vec<4, T, Q>(Pf1.x, Pf1.y, Pf1.z, Pf0.w)); - T n0001 = dot(g0001, vec<4, T, Q>(Pf0.x, Pf0.y, Pf0.z, Pf1.w)); - T n1001 = dot(g1001, vec<4, T, Q>(Pf1.x, Pf0.y, Pf0.z, Pf1.w)); - T n0101 = dot(g0101, vec<4, T, Q>(Pf0.x, Pf1.y, Pf0.z, Pf1.w)); - T n1101 = dot(g1101, vec<4, T, Q>(Pf1.x, Pf1.y, Pf0.z, Pf1.w)); - T n0011 = dot(g0011, vec<4, T, Q>(Pf0.x, Pf0.y, Pf1.z, Pf1.w)); - T n1011 = dot(g1011, vec<4, T, Q>(Pf1.x, Pf0.y, Pf1.z, Pf1.w)); - T n0111 = dot(g0111, vec<4, T, Q>(Pf0.x, Pf1.y, Pf1.z, Pf1.w)); - T n1111 = dot(g1111, Pf1); - - vec<4, T, Q> fade_xyzw = detail::fade(Pf0); - vec<4, T, Q> n_0w = mix(vec<4, T, Q>(n0000, n1000, n0100, n1100), vec<4, T, Q>(n0001, n1001, n0101, n1101), fade_xyzw.w); - vec<4, T, Q> n_1w = mix(vec<4, T, Q>(n0010, n1010, n0110, n1110), vec<4, T, Q>(n0011, n1011, n0111, n1111), fade_xyzw.w); - vec<4, T, Q> n_zw = mix(n_0w, n_1w, fade_xyzw.z); - vec<2, T, Q> n_yzw = mix(vec<2, T, Q>(n_zw.x, n_zw.y), vec<2, T, Q>(n_zw.z, n_zw.w), fade_xyzw.y); - T n_xyzw = mix(n_yzw.x, n_yzw.y, fade_xyzw.x); - return T(2.2) * n_xyzw; - } - - template - GLM_FUNC_QUALIFIER T simplex(glm::vec<2, T, Q> const& v) - { - vec<4, T, Q> const C = vec<4, T, Q>( - T( 0.211324865405187), // (3.0 - sqrt(3.0)) / 6.0 - T( 0.366025403784439), // 0.5 * (sqrt(3.0) - 1.0) - T(-0.577350269189626), // -1.0 + 2.0 * C.x - T( 0.024390243902439)); // 1.0 / 41.0 - - // First corner - vec<2, T, Q> i = floor(v + dot(v, vec<2, T, Q>(C[1]))); - vec<2, T, Q> x0 = v - i + dot(i, vec<2, T, Q>(C[0])); - - // Other corners - //i1.x = step( x0.y, x0.x ); // x0.x > x0.y ? 1.0 : 0.0 - //i1.y = 1.0 - i1.x; - vec<2, T, Q> i1 = (x0.x > x0.y) ? vec<2, T, Q>(1, 0) : vec<2, T, Q>(0, 1); - // x0 = x0 - 0.0 + 0.0 * C.xx ; - // x1 = x0 - i1 + 1.0 * C.xx ; - // x2 = x0 - 1.0 + 2.0 * C.xx ; - vec<4, T, Q> x12 = vec<4, T, Q>(x0.x, x0.y, x0.x, x0.y) + vec<4, T, Q>(C.x, C.x, C.z, C.z); - x12 = vec<4, T, Q>(vec<2, T, Q>(x12) - i1, x12.z, x12.w); - - // Permutations - i = mod(i, vec<2, T, Q>(289)); // Avoid truncation effects in permutation - vec<3, T, Q> p = detail::permute( - detail::permute(i.y + vec<3, T, Q>(T(0), i1.y, T(1))) - + i.x + vec<3, T, Q>(T(0), i1.x, T(1))); - - vec<3, T, Q> m = max(vec<3, T, Q>(0.5) - vec<3, T, Q>( - dot(x0, x0), - dot(vec<2, T, Q>(x12.x, x12.y), vec<2, T, Q>(x12.x, x12.y)), - dot(vec<2, T, Q>(x12.z, x12.w), vec<2, T, Q>(x12.z, x12.w))), vec<3, T, Q>(0)); - m = m * m ; - m = m * m ; - - // Gradients: 41 points uniformly over a line, mapped onto a diamond. - // The ring size 17*17 = 289 is close to a multiple of 41 (41*7 = 287) - - vec<3, T, Q> x = static_cast(2) * fract(p * C.w) - T(1); - vec<3, T, Q> h = abs(x) - T(0.5); - vec<3, T, Q> ox = floor(x + T(0.5)); - vec<3, T, Q> a0 = x - ox; - - // Normalise gradients implicitly by scaling m - // Inlined for speed: m *= taylorInvSqrt( a0*a0 + h*h ); - m *= static_cast(1.79284291400159) - T(0.85373472095314) * (a0 * a0 + h * h); - - // Compute final noise value at P - vec<3, T, Q> g; - g.x = a0.x * x0.x + h.x * x0.y; - //g.yz = a0.yz * x12.xz + h.yz * x12.yw; - g.y = a0.y * x12.x + h.y * x12.y; - g.z = a0.z * x12.z + h.z * x12.w; - return T(130) * dot(m, g); - } - - template - GLM_FUNC_QUALIFIER T simplex(vec<3, T, Q> const& v) - { - vec<2, T, Q> const C(1.0 / 6.0, 1.0 / 3.0); - vec<4, T, Q> const D(0.0, 0.5, 1.0, 2.0); - - // First corner - vec<3, T, Q> i(floor(v + dot(v, vec<3, T, Q>(C.y)))); - vec<3, T, Q> x0(v - i + dot(i, vec<3, T, Q>(C.x))); - - // Other corners - vec<3, T, Q> g(step(vec<3, T, Q>(x0.y, x0.z, x0.x), x0)); - vec<3, T, Q> l(T(1) - g); - vec<3, T, Q> i1(min(g, vec<3, T, Q>(l.z, l.x, l.y))); - vec<3, T, Q> i2(max(g, vec<3, T, Q>(l.z, l.x, l.y))); - - // x0 = x0 - 0.0 + 0.0 * C.xxx; - // x1 = x0 - i1 + 1.0 * C.xxx; - // x2 = x0 - i2 + 2.0 * C.xxx; - // x3 = x0 - 1.0 + 3.0 * C.xxx; - vec<3, T, Q> x1(x0 - i1 + C.x); - vec<3, T, Q> x2(x0 - i2 + C.y); // 2.0*C.x = 1/3 = C.y - vec<3, T, Q> x3(x0 - D.y); // -1.0+3.0*C.x = -0.5 = -D.y - - // Permutations - i = detail::mod289(i); - vec<4, T, Q> p(detail::permute(detail::permute(detail::permute( - i.z + vec<4, T, Q>(T(0), i1.z, i2.z, T(1))) + - i.y + vec<4, T, Q>(T(0), i1.y, i2.y, T(1))) + - i.x + vec<4, T, Q>(T(0), i1.x, i2.x, T(1)))); - - // Gradients: 7x7 points over a square, mapped onto an octahedron. - // The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294) - T n_ = static_cast(0.142857142857); // 1.0/7.0 - vec<3, T, Q> ns(n_ * vec<3, T, Q>(D.w, D.y, D.z) - vec<3, T, Q>(D.x, D.z, D.x)); - - vec<4, T, Q> j(p - T(49) * floor(p * ns.z * ns.z)); // mod(p,7*7) - - vec<4, T, Q> x_(floor(j * ns.z)); - vec<4, T, Q> y_(floor(j - T(7) * x_)); // mod(j,N) - - vec<4, T, Q> x(x_ * ns.x + ns.y); - vec<4, T, Q> y(y_ * ns.x + ns.y); - vec<4, T, Q> h(T(1) - abs(x) - abs(y)); - - vec<4, T, Q> b0(x.x, x.y, y.x, y.y); - vec<4, T, Q> b1(x.z, x.w, y.z, y.w); - - // vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0; - // vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0; - vec<4, T, Q> s0(floor(b0) * T(2) + T(1)); - vec<4, T, Q> s1(floor(b1) * T(2) + T(1)); - vec<4, T, Q> sh(-step(h, vec<4, T, Q>(0.0))); - - vec<4, T, Q> a0 = vec<4, T, Q>(b0.x, b0.z, b0.y, b0.w) + vec<4, T, Q>(s0.x, s0.z, s0.y, s0.w) * vec<4, T, Q>(sh.x, sh.x, sh.y, sh.y); - vec<4, T, Q> a1 = vec<4, T, Q>(b1.x, b1.z, b1.y, b1.w) + vec<4, T, Q>(s1.x, s1.z, s1.y, s1.w) * vec<4, T, Q>(sh.z, sh.z, sh.w, sh.w); - - vec<3, T, Q> p0(a0.x, a0.y, h.x); - vec<3, T, Q> p1(a0.z, a0.w, h.y); - vec<3, T, Q> p2(a1.x, a1.y, h.z); - vec<3, T, Q> p3(a1.z, a1.w, h.w); - - // Normalise gradients - vec<4, T, Q> norm = detail::taylorInvSqrt(vec<4, T, Q>(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3))); - p0 *= norm.x; - p1 *= norm.y; - p2 *= norm.z; - p3 *= norm.w; - - // Mix final noise value - vec<4, T, Q> m = max(T(0.6) - vec<4, T, Q>(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), vec<4, T, Q>(0)); - m = m * m; - return T(42) * dot(m * m, vec<4, T, Q>(dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3))); - } - - template - GLM_FUNC_QUALIFIER T simplex(vec<4, T, Q> const& v) - { - vec<4, T, Q> const C( - 0.138196601125011, // (5 - sqrt(5))/20 G4 - 0.276393202250021, // 2 * G4 - 0.414589803375032, // 3 * G4 - -0.447213595499958); // -1 + 4 * G4 - - // (sqrt(5) - 1)/4 = F4, used once below - T const F4 = static_cast(0.309016994374947451); - - // First corner - vec<4, T, Q> i = floor(v + dot(v, vec<4, T, Q>(F4))); - vec<4, T, Q> x0 = v - i + dot(i, vec<4, T, Q>(C.x)); - - // Other corners - - // Rank sorting originally contributed by Bill Licea-Kane, AMD (formerly ATI) - vec<4, T, Q> i0; - vec<3, T, Q> isX = step(vec<3, T, Q>(x0.y, x0.z, x0.w), vec<3, T, Q>(x0.x)); - vec<3, T, Q> isYZ = step(vec<3, T, Q>(x0.z, x0.w, x0.w), vec<3, T, Q>(x0.y, x0.y, x0.z)); - // i0.x = dot(isX, vec3(1.0)); - //i0.x = isX.x + isX.y + isX.z; - //i0.yzw = static_cast(1) - isX; - i0 = vec<4, T, Q>(isX.x + isX.y + isX.z, T(1) - isX); - // i0.y += dot(isYZ.xy, vec2(1.0)); - i0.y += isYZ.x + isYZ.y; - //i0.zw += 1.0 - vec<2, T, Q>(isYZ.x, isYZ.y); - i0.z += static_cast(1) - isYZ.x; - i0.w += static_cast(1) - isYZ.y; - i0.z += isYZ.z; - i0.w += static_cast(1) - isYZ.z; - - // i0 now contains the unique values 0,1,2,3 in each channel - vec<4, T, Q> i3 = clamp(i0, T(0), T(1)); - vec<4, T, Q> i2 = clamp(i0 - T(1), T(0), T(1)); - vec<4, T, Q> i1 = clamp(i0 - T(2), T(0), T(1)); - - // x0 = x0 - 0.0 + 0.0 * C.xxxx - // x1 = x0 - i1 + 0.0 * C.xxxx - // x2 = x0 - i2 + 0.0 * C.xxxx - // x3 = x0 - i3 + 0.0 * C.xxxx - // x4 = x0 - 1.0 + 4.0 * C.xxxx - vec<4, T, Q> x1 = x0 - i1 + C.x; - vec<4, T, Q> x2 = x0 - i2 + C.y; - vec<4, T, Q> x3 = x0 - i3 + C.z; - vec<4, T, Q> x4 = x0 + C.w; - - // Permutations - i = mod(i, vec<4, T, Q>(289)); - T j0 = detail::permute(detail::permute(detail::permute(detail::permute(i.w) + i.z) + i.y) + i.x); - vec<4, T, Q> j1 = detail::permute(detail::permute(detail::permute(detail::permute( - i.w + vec<4, T, Q>(i1.w, i2.w, i3.w, T(1))) + - i.z + vec<4, T, Q>(i1.z, i2.z, i3.z, T(1))) + - i.y + vec<4, T, Q>(i1.y, i2.y, i3.y, T(1))) + - i.x + vec<4, T, Q>(i1.x, i2.x, i3.x, T(1))); - - // Gradients: 7x7x6 points over a cube, mapped onto a 4-cross polytope - // 7*7*6 = 294, which is close to the ring size 17*17 = 289. - vec<4, T, Q> ip = vec<4, T, Q>(T(1) / T(294), T(1) / T(49), T(1) / T(7), T(0)); - - vec<4, T, Q> p0 = gtc::grad4(j0, ip); - vec<4, T, Q> p1 = gtc::grad4(j1.x, ip); - vec<4, T, Q> p2 = gtc::grad4(j1.y, ip); - vec<4, T, Q> p3 = gtc::grad4(j1.z, ip); - vec<4, T, Q> p4 = gtc::grad4(j1.w, ip); - - // Normalise gradients - vec<4, T, Q> norm = detail::taylorInvSqrt(vec<4, T, Q>(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3))); - p0 *= norm.x; - p1 *= norm.y; - p2 *= norm.z; - p3 *= norm.w; - p4 *= detail::taylorInvSqrt(dot(p4, p4)); - - // Mix contributions from the five corners - vec<3, T, Q> m0 = max(T(0.6) - vec<3, T, Q>(dot(x0, x0), dot(x1, x1), dot(x2, x2)), vec<3, T, Q>(0)); - vec<2, T, Q> m1 = max(T(0.6) - vec<2, T, Q>(dot(x3, x3), dot(x4, x4) ), vec<2, T, Q>(0)); - m0 = m0 * m0; - m1 = m1 * m1; - return T(49) * - (dot(m0 * m0, vec<3, T, Q>(dot(p0, x0), dot(p1, x1), dot(p2, x2))) + - dot(m1 * m1, vec<2, T, Q>(dot(p3, x3), dot(p4, x4)))); - } -}//namespace glm diff --git a/src/vendor/glm/gtc/packing.hpp b/src/vendor/glm/gtc/packing.hpp deleted file mode 100755 index 8e416b3..0000000 --- a/src/vendor/glm/gtc/packing.hpp +++ /dev/null @@ -1,728 +0,0 @@ -/// @ref gtc_packing -/// @file glm/gtc/packing.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_packing GLM_GTC_packing -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// This extension provides a set of function to convert vertors to packed -/// formats. - -#pragma once - -// Dependency: -#include "type_precision.hpp" -#include "../ext/vector_packing.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_packing extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_packing - /// @{ - - /// First, converts the normalized floating-point value v into a 8-bit integer value. - /// Then, the results are packed into the returned 8-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packUnorm1x8: round(clamp(c, 0, +1) * 255.0) - /// - /// @see gtc_packing - /// @see uint16 packUnorm2x8(vec2 const& v) - /// @see uint32 packUnorm4x8(vec4 const& v) - /// @see GLSL packUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint8 packUnorm1x8(float v); - - /// Convert a single 8-bit integer to a normalized floating-point value. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackUnorm4x8: f / 255.0 - /// - /// @see gtc_packing - /// @see vec2 unpackUnorm2x8(uint16 p) - /// @see vec4 unpackUnorm4x8(uint32 p) - /// @see GLSL unpackUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL float unpackUnorm1x8(uint8 p); - - /// First, converts each component of the normalized floating-point value v into 8-bit integer values. - /// Then, the results are packed into the returned 16-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packUnorm2x8: round(clamp(c, 0, +1) * 255.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see gtc_packing - /// @see uint8 packUnorm1x8(float const& v) - /// @see uint32 packUnorm4x8(vec4 const& v) - /// @see GLSL packUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint16 packUnorm2x8(vec2 const& v); - - /// First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit unsigned integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned two-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackUnorm4x8: f / 255.0 - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see float unpackUnorm1x8(uint8 v) - /// @see vec4 unpackUnorm4x8(uint32 p) - /// @see GLSL unpackUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec2 unpackUnorm2x8(uint16 p); - - /// First, converts the normalized floating-point value v into 8-bit integer value. - /// Then, the results are packed into the returned 8-bit unsigned integer. - /// - /// The conversion to fixed point is done as follows: - /// packSnorm1x8: round(clamp(s, -1, +1) * 127.0) - /// - /// @see gtc_packing - /// @see uint16 packSnorm2x8(vec2 const& v) - /// @see uint32 packSnorm4x8(vec4 const& v) - /// @see GLSL packSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint8 packSnorm1x8(float s); - - /// First, unpacks a single 8-bit unsigned integer p into a single 8-bit signed integers. - /// Then, the value is converted to a normalized floating-point value to generate the returned scalar. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm1x8: clamp(f / 127.0, -1, +1) - /// - /// @see gtc_packing - /// @see vec2 unpackSnorm2x8(uint16 p) - /// @see vec4 unpackSnorm4x8(uint32 p) - /// @see GLSL unpackSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL float unpackSnorm1x8(uint8 p); - - /// First, converts each component of the normalized floating-point value v into 8-bit integer values. - /// Then, the results are packed into the returned 16-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packSnorm2x8: round(clamp(c, -1, +1) * 127.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see gtc_packing - /// @see uint8 packSnorm1x8(float const& v) - /// @see uint32 packSnorm4x8(vec4 const& v) - /// @see GLSL packSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint16 packSnorm2x8(vec2 const& v); - - /// First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned two-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm2x8: clamp(f / 127.0, -1, +1) - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see float unpackSnorm1x8(uint8 p) - /// @see vec4 unpackSnorm4x8(uint32 p) - /// @see GLSL unpackSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec2 unpackSnorm2x8(uint16 p); - - /// First, converts the normalized floating-point value v into a 16-bit integer value. - /// Then, the results are packed into the returned 16-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packUnorm1x16: round(clamp(c, 0, +1) * 65535.0) - /// - /// @see gtc_packing - /// @see uint16 packSnorm1x16(float const& v) - /// @see uint64 packSnorm4x16(vec4 const& v) - /// @see GLSL packUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint16 packUnorm1x16(float v); - - /// First, unpacks a single 16-bit unsigned integer p into a of 16-bit unsigned integers. - /// Then, the value is converted to a normalized floating-point value to generate the returned scalar. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackUnorm1x16: f / 65535.0 - /// - /// @see gtc_packing - /// @see vec2 unpackUnorm2x16(uint32 p) - /// @see vec4 unpackUnorm4x16(uint64 p) - /// @see GLSL unpackUnorm2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL float unpackUnorm1x16(uint16 p); - - /// First, converts each component of the normalized floating-point value v into 16-bit integer values. - /// Then, the results are packed into the returned 64-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packUnorm4x16: round(clamp(c, 0, +1) * 65535.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see gtc_packing - /// @see uint16 packUnorm1x16(float const& v) - /// @see uint32 packUnorm2x16(vec2 const& v) - /// @see GLSL packUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint64 packUnorm4x16(vec4 const& v); - - /// First, unpacks a single 64-bit unsigned integer p into four 16-bit unsigned integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackUnormx4x16: f / 65535.0 - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see float unpackUnorm1x16(uint16 p) - /// @see vec2 unpackUnorm2x16(uint32 p) - /// @see GLSL unpackUnorm2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec4 unpackUnorm4x16(uint64 p); - - /// First, converts the normalized floating-point value v into 16-bit integer value. - /// Then, the results are packed into the returned 16-bit unsigned integer. - /// - /// The conversion to fixed point is done as follows: - /// packSnorm1x8: round(clamp(s, -1, +1) * 32767.0) - /// - /// @see gtc_packing - /// @see uint32 packSnorm2x16(vec2 const& v) - /// @see uint64 packSnorm4x16(vec4 const& v) - /// @see GLSL packSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint16 packSnorm1x16(float v); - - /// First, unpacks a single 16-bit unsigned integer p into a single 16-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned scalar. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm1x16: clamp(f / 32767.0, -1, +1) - /// - /// @see gtc_packing - /// @see vec2 unpackSnorm2x16(uint32 p) - /// @see vec4 unpackSnorm4x16(uint64 p) - /// @see GLSL unpackSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL float unpackSnorm1x16(uint16 p); - - /// First, converts each component of the normalized floating-point value v into 16-bit integer values. - /// Then, the results are packed into the returned 64-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packSnorm2x8: round(clamp(c, -1, +1) * 32767.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see gtc_packing - /// @see uint16 packSnorm1x16(float const& v) - /// @see uint32 packSnorm2x16(vec2 const& v) - /// @see GLSL packSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint64 packSnorm4x16(vec4 const& v); - - /// First, unpacks a single 64-bit unsigned integer p into four 16-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm4x16: clamp(f / 32767.0, -1, +1) - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see float unpackSnorm1x16(uint16 p) - /// @see vec2 unpackSnorm2x16(uint32 p) - /// @see GLSL unpackSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec4 unpackSnorm4x16(uint64 p); - - /// Returns an unsigned integer obtained by converting the components of a floating-point scalar - /// to the 16-bit floating-point representation found in the OpenGL Specification, - /// and then packing this 16-bit value into a 16-bit unsigned integer. - /// - /// @see gtc_packing - /// @see uint32 packHalf2x16(vec2 const& v) - /// @see uint64 packHalf4x16(vec4 const& v) - /// @see GLSL packHalf2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint16 packHalf1x16(float v); - - /// Returns a floating-point scalar with components obtained by unpacking a 16-bit unsigned integer into a 16-bit value, - /// interpreted as a 16-bit floating-point number according to the OpenGL Specification, - /// and converting it to 32-bit floating-point values. - /// - /// @see gtc_packing - /// @see vec2 unpackHalf2x16(uint32 const& v) - /// @see vec4 unpackHalf4x16(uint64 const& v) - /// @see GLSL unpackHalf2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL float unpackHalf1x16(uint16 v); - - /// Returns an unsigned integer obtained by converting the components of a four-component floating-point vector - /// to the 16-bit floating-point representation found in the OpenGL Specification, - /// and then packing these four 16-bit values into a 64-bit unsigned integer. - /// The first vector component specifies the 16 least-significant bits of the result; - /// the forth component specifies the 16 most-significant bits. - /// - /// @see gtc_packing - /// @see uint16 packHalf1x16(float const& v) - /// @see uint32 packHalf2x16(vec2 const& v) - /// @see GLSL packHalf2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint64 packHalf4x16(vec4 const& v); - - /// Returns a four-component floating-point vector with components obtained by unpacking a 64-bit unsigned integer into four 16-bit values, - /// interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, - /// and converting them to 32-bit floating-point values. - /// The first component of the vector is obtained from the 16 least-significant bits of v; - /// the forth component is obtained from the 16 most-significant bits of v. - /// - /// @see gtc_packing - /// @see float unpackHalf1x16(uint16 const& v) - /// @see vec2 unpackHalf2x16(uint32 const& v) - /// @see GLSL unpackHalf2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec4 unpackHalf4x16(uint64 p); - - /// Returns an unsigned integer obtained by converting the components of a four-component signed integer vector - /// to the 10-10-10-2-bit signed integer representation found in the OpenGL Specification, - /// and then packing these four values into a 32-bit unsigned integer. - /// The first vector component specifies the 10 least-significant bits of the result; - /// the forth component specifies the 2 most-significant bits. - /// - /// @see gtc_packing - /// @see uint32 packI3x10_1x2(uvec4 const& v) - /// @see uint32 packSnorm3x10_1x2(vec4 const& v) - /// @see uint32 packUnorm3x10_1x2(vec4 const& v) - /// @see ivec4 unpackI3x10_1x2(uint32 const& p) - GLM_FUNC_DECL uint32 packI3x10_1x2(ivec4 const& v); - - /// Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit signed integers. - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see uint32 packU3x10_1x2(uvec4 const& v) - /// @see vec4 unpackSnorm3x10_1x2(uint32 const& p); - /// @see uvec4 unpackI3x10_1x2(uint32 const& p); - GLM_FUNC_DECL ivec4 unpackI3x10_1x2(uint32 p); - - /// Returns an unsigned integer obtained by converting the components of a four-component unsigned integer vector - /// to the 10-10-10-2-bit unsigned integer representation found in the OpenGL Specification, - /// and then packing these four values into a 32-bit unsigned integer. - /// The first vector component specifies the 10 least-significant bits of the result; - /// the forth component specifies the 2 most-significant bits. - /// - /// @see gtc_packing - /// @see uint32 packI3x10_1x2(ivec4 const& v) - /// @see uint32 packSnorm3x10_1x2(vec4 const& v) - /// @see uint32 packUnorm3x10_1x2(vec4 const& v) - /// @see ivec4 unpackU3x10_1x2(uint32 const& p) - GLM_FUNC_DECL uint32 packU3x10_1x2(uvec4 const& v); - - /// Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit unsigned integers. - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see uint32 packU3x10_1x2(uvec4 const& v) - /// @see vec4 unpackSnorm3x10_1x2(uint32 const& p); - /// @see uvec4 unpackI3x10_1x2(uint32 const& p); - GLM_FUNC_DECL uvec4 unpackU3x10_1x2(uint32 p); - - /// First, converts the first three components of the normalized floating-point value v into 10-bit signed integer values. - /// Then, converts the forth component of the normalized floating-point value v into 2-bit signed integer values. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packSnorm3x10_1x2(xyz): round(clamp(c, -1, +1) * 511.0) - /// packSnorm3x10_1x2(w): round(clamp(c, -1, +1) * 1.0) - /// - /// The first vector component specifies the 10 least-significant bits of the result; - /// the forth component specifies the 2 most-significant bits. - /// - /// @see gtc_packing - /// @see vec4 unpackSnorm3x10_1x2(uint32 const& p) - /// @see uint32 packUnorm3x10_1x2(vec4 const& v) - /// @see uint32 packU3x10_1x2(uvec4 const& v) - /// @see uint32 packI3x10_1x2(ivec4 const& v) - GLM_FUNC_DECL uint32 packSnorm3x10_1x2(vec4 const& v); - - /// First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm3x10_1x2(xyz): clamp(f / 511.0, -1, +1) - /// unpackSnorm3x10_1x2(w): clamp(f / 511.0, -1, +1) - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see uint32 packSnorm3x10_1x2(vec4 const& v) - /// @see vec4 unpackUnorm3x10_1x2(uint32 const& p)) - /// @see uvec4 unpackI3x10_1x2(uint32 const& p) - /// @see uvec4 unpackU3x10_1x2(uint32 const& p) - GLM_FUNC_DECL vec4 unpackSnorm3x10_1x2(uint32 p); - - /// First, converts the first three components of the normalized floating-point value v into 10-bit unsigned integer values. - /// Then, converts the forth component of the normalized floating-point value v into 2-bit signed uninteger values. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packUnorm3x10_1x2(xyz): round(clamp(c, 0, +1) * 1023.0) - /// packUnorm3x10_1x2(w): round(clamp(c, 0, +1) * 3.0) - /// - /// The first vector component specifies the 10 least-significant bits of the result; - /// the forth component specifies the 2 most-significant bits. - /// - /// @see gtc_packing - /// @see vec4 unpackUnorm3x10_1x2(uint32 const& p) - /// @see uint32 packUnorm3x10_1x2(vec4 const& v) - /// @see uint32 packU3x10_1x2(uvec4 const& v) - /// @see uint32 packI3x10_1x2(ivec4 const& v) - GLM_FUNC_DECL uint32 packUnorm3x10_1x2(vec4 const& v); - - /// First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm3x10_1x2(xyz): clamp(f / 1023.0, 0, +1) - /// unpackSnorm3x10_1x2(w): clamp(f / 3.0, 0, +1) - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see uint32 packSnorm3x10_1x2(vec4 const& v) - /// @see vec4 unpackInorm3x10_1x2(uint32 const& p)) - /// @see uvec4 unpackI3x10_1x2(uint32 const& p) - /// @see uvec4 unpackU3x10_1x2(uint32 const& p) - GLM_FUNC_DECL vec4 unpackUnorm3x10_1x2(uint32 p); - - /// First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values. - /// Then, converts the third component of the normalized floating-point value v into a 10-bit signless floating-point value. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The first vector component specifies the 11 least-significant bits of the result; - /// the last component specifies the 10 most-significant bits. - /// - /// @see gtc_packing - /// @see vec3 unpackF2x11_1x10(uint32 const& p) - GLM_FUNC_DECL uint32 packF2x11_1x10(vec3 const& v); - - /// First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value . - /// Then, each component is converted to a normalized floating-point value to generate the returned three-component vector. - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see uint32 packF2x11_1x10(vec3 const& v) - GLM_FUNC_DECL vec3 unpackF2x11_1x10(uint32 p); - - - /// First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values. - /// Then, converts the third component of the normalized floating-point value v into a 10-bit signless floating-point value. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The first vector component specifies the 11 least-significant bits of the result; - /// the last component specifies the 10 most-significant bits. - /// - /// packF3x9_E1x5 allows encoding into RGBE / RGB9E5 format - /// - /// @see gtc_packing - /// @see vec3 unpackF3x9_E1x5(uint32 const& p) - GLM_FUNC_DECL uint32 packF3x9_E1x5(vec3 const& v); - - /// First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value . - /// Then, each component is converted to a normalized floating-point value to generate the returned three-component vector. - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// unpackF3x9_E1x5 allows decoding RGBE / RGB9E5 data - /// - /// @see gtc_packing - /// @see uint32 packF3x9_E1x5(vec3 const& v) - GLM_FUNC_DECL vec3 unpackF3x9_E1x5(uint32 p); - - /// Returns an unsigned integer vector obtained by converting the components of a floating-point vector - /// to the 16-bit floating-point representation found in the OpenGL Specification. - /// The first vector component specifies the 16 least-significant bits of the result; - /// the forth component specifies the 16 most-significant bits. - /// - /// @see gtc_packing - /// @see vec<3, T, Q> unpackRGBM(vec<4, T, Q> const& p) - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - template - GLM_FUNC_DECL vec<4, T, Q> packRGBM(vec<3, T, Q> const& rgb); - - /// Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values. - /// The first component of the vector is obtained from the 16 least-significant bits of v; - /// the forth component is obtained from the 16 most-significant bits of v. - /// - /// @see gtc_packing - /// @see vec<4, T, Q> packRGBM(vec<3, float, Q> const& v) - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - template - GLM_FUNC_DECL vec<3, T, Q> unpackRGBM(vec<4, T, Q> const& rgbm); - - /// Returns an unsigned integer vector obtained by converting the components of a floating-point vector - /// to the 16-bit floating-point representation found in the OpenGL Specification. - /// The first vector component specifies the 16 least-significant bits of the result; - /// the forth component specifies the 16 most-significant bits. - /// - /// @see gtc_packing - /// @see vec unpackHalf(vec const& p) - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - template - GLM_FUNC_DECL vec packHalf(vec const& v); - - /// Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values. - /// The first component of the vector is obtained from the 16 least-significant bits of v; - /// the forth component is obtained from the 16 most-significant bits of v. - /// - /// @see gtc_packing - /// @see vec packHalf(vec const& v) - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - template - GLM_FUNC_DECL vec unpackHalf(vec const& p); - - /// Convert each component of the normalized floating-point vector into unsigned integer values. - /// - /// @see gtc_packing - /// @see vec unpackUnorm(vec const& p); - template - GLM_FUNC_DECL vec packUnorm(vec const& v); - - /// Convert a packed integer to a normalized floating-point vector. - /// - /// @see gtc_packing - /// @see vec packUnorm(vec const& v) - template - GLM_FUNC_DECL vec unpackUnorm(vec const& v); - - /// Convert each component of the normalized floating-point vector into signed integer values. - /// - /// @see gtc_packing - /// @see vec unpackSnorm(vec const& p); - template - GLM_FUNC_DECL vec packSnorm(vec const& v); - - /// Convert a packed integer to a normalized floating-point vector. - /// - /// @see gtc_packing - /// @see vec packSnorm(vec const& v) - template - GLM_FUNC_DECL vec unpackSnorm(vec const& v); - - /// Convert each component of the normalized floating-point vector into unsigned integer values. - /// - /// @see gtc_packing - /// @see vec2 unpackUnorm2x4(uint8 p) - GLM_FUNC_DECL uint8 packUnorm2x4(vec2 const& v); - - /// Convert a packed integer to a normalized floating-point vector. - /// - /// @see gtc_packing - /// @see uint8 packUnorm2x4(vec2 const& v) - GLM_FUNC_DECL vec2 unpackUnorm2x4(uint8 p); - - /// Convert each component of the normalized floating-point vector into unsigned integer values. - /// - /// @see gtc_packing - /// @see vec4 unpackUnorm4x4(uint16 p) - GLM_FUNC_DECL uint16 packUnorm4x4(vec4 const& v); - - /// Convert a packed integer to a normalized floating-point vector. - /// - /// @see gtc_packing - /// @see uint16 packUnorm4x4(vec4 const& v) - GLM_FUNC_DECL vec4 unpackUnorm4x4(uint16 p); - - /// Convert each component of the normalized floating-point vector into unsigned integer values. - /// - /// @see gtc_packing - /// @see vec3 unpackUnorm1x5_1x6_1x5(uint16 p) - GLM_FUNC_DECL uint16 packUnorm1x5_1x6_1x5(vec3 const& v); - - /// Convert a packed integer to a normalized floating-point vector. - /// - /// @see gtc_packing - /// @see uint16 packUnorm1x5_1x6_1x5(vec3 const& v) - GLM_FUNC_DECL vec3 unpackUnorm1x5_1x6_1x5(uint16 p); - - /// Convert each component of the normalized floating-point vector into unsigned integer values. - /// - /// @see gtc_packing - /// @see vec4 unpackUnorm3x5_1x1(uint16 p) - GLM_FUNC_DECL uint16 packUnorm3x5_1x1(vec4 const& v); - - /// Convert a packed integer to a normalized floating-point vector. - /// - /// @see gtc_packing - /// @see uint16 packUnorm3x5_1x1(vec4 const& v) - GLM_FUNC_DECL vec4 unpackUnorm3x5_1x1(uint16 p); - - /// Convert each component of the normalized floating-point vector into unsigned integer values. - /// - /// @see gtc_packing - /// @see vec3 unpackUnorm2x3_1x2(uint8 p) - GLM_FUNC_DECL uint8 packUnorm2x3_1x2(vec3 const& v); - - /// Convert a packed integer to a normalized floating-point vector. - /// - /// @see gtc_packing - /// @see uint8 packUnorm2x3_1x2(vec3 const& v) - GLM_FUNC_DECL vec3 unpackUnorm2x3_1x2(uint8 p); - - - - /// Convert each component from an integer vector into a packed integer. - /// - /// @see gtc_packing - /// @see i8vec2 unpackInt2x8(int16 p) - GLM_FUNC_DECL int16 packInt2x8(i8vec2 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see int16 packInt2x8(i8vec2 const& v) - GLM_FUNC_DECL i8vec2 unpackInt2x8(int16 p); - - /// Convert each component from an integer vector into a packed unsigned integer. - /// - /// @see gtc_packing - /// @see u8vec2 unpackInt2x8(uint16 p) - GLM_FUNC_DECL uint16 packUint2x8(u8vec2 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see uint16 packInt2x8(u8vec2 const& v) - GLM_FUNC_DECL u8vec2 unpackUint2x8(uint16 p); - - /// Convert each component from an integer vector into a packed integer. - /// - /// @see gtc_packing - /// @see i8vec4 unpackInt4x8(int32 p) - GLM_FUNC_DECL int32 packInt4x8(i8vec4 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see int32 packInt2x8(i8vec4 const& v) - GLM_FUNC_DECL i8vec4 unpackInt4x8(int32 p); - - /// Convert each component from an integer vector into a packed unsigned integer. - /// - /// @see gtc_packing - /// @see u8vec4 unpackUint4x8(uint32 p) - GLM_FUNC_DECL uint32 packUint4x8(u8vec4 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see uint32 packUint4x8(u8vec2 const& v) - GLM_FUNC_DECL u8vec4 unpackUint4x8(uint32 p); - - /// Convert each component from an integer vector into a packed integer. - /// - /// @see gtc_packing - /// @see i16vec2 unpackInt2x16(int p) - GLM_FUNC_DECL int packInt2x16(i16vec2 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see int packInt2x16(i16vec2 const& v) - GLM_FUNC_DECL i16vec2 unpackInt2x16(int p); - - /// Convert each component from an integer vector into a packed integer. - /// - /// @see gtc_packing - /// @see i16vec4 unpackInt4x16(int64 p) - GLM_FUNC_DECL int64 packInt4x16(i16vec4 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see int64 packInt4x16(i16vec4 const& v) - GLM_FUNC_DECL i16vec4 unpackInt4x16(int64 p); - - /// Convert each component from an integer vector into a packed unsigned integer. - /// - /// @see gtc_packing - /// @see u16vec2 unpackUint2x16(uint p) - GLM_FUNC_DECL uint packUint2x16(u16vec2 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see uint packUint2x16(u16vec2 const& v) - GLM_FUNC_DECL u16vec2 unpackUint2x16(uint p); - - /// Convert each component from an integer vector into a packed unsigned integer. - /// - /// @see gtc_packing - /// @see u16vec4 unpackUint4x16(uint64 p) - GLM_FUNC_DECL uint64 packUint4x16(u16vec4 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see uint64 packUint4x16(u16vec4 const& v) - GLM_FUNC_DECL u16vec4 unpackUint4x16(uint64 p); - - /// Convert each component from an integer vector into a packed integer. - /// - /// @see gtc_packing - /// @see i32vec2 unpackInt2x32(int p) - GLM_FUNC_DECL int64 packInt2x32(i32vec2 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see int packInt2x16(i32vec2 const& v) - GLM_FUNC_DECL i32vec2 unpackInt2x32(int64 p); - - /// Convert each component from an integer vector into a packed unsigned integer. - /// - /// @see gtc_packing - /// @see u32vec2 unpackUint2x32(int p) - GLM_FUNC_DECL uint64 packUint2x32(u32vec2 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see int packUint2x16(u32vec2 const& v) - GLM_FUNC_DECL u32vec2 unpackUint2x32(uint64 p); - - /// @} -}// namespace glm - -#include "packing.inl" diff --git a/src/vendor/glm/gtc/packing.inl b/src/vendor/glm/gtc/packing.inl deleted file mode 100755 index 84ad60c..0000000 --- a/src/vendor/glm/gtc/packing.inl +++ /dev/null @@ -1,938 +0,0 @@ -/// @ref gtc_packing - -#include "../ext/scalar_relational.hpp" -#include "../ext/vector_relational.hpp" -#include "../common.hpp" -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include "../detail/type_half.hpp" -#include -#include - -namespace glm{ -namespace detail -{ - GLM_FUNC_QUALIFIER glm::uint16 float2half(glm::uint32 f) - { - // 10 bits => EE EEEFFFFF - // 11 bits => EEE EEFFFFFF - // Half bits => SEEEEEFF FFFFFFFF - // Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF - - // 0x00007c00 => 00000000 00000000 01111100 00000000 - // 0x000003ff => 00000000 00000000 00000011 11111111 - // 0x38000000 => 00111000 00000000 00000000 00000000 - // 0x7f800000 => 01111111 10000000 00000000 00000000 - // 0x00008000 => 00000000 00000000 10000000 00000000 - return - ((f >> 16) & 0x8000) | // sign - ((((f & 0x7f800000) - 0x38000000) >> 13) & 0x7c00) | // exponential - ((f >> 13) & 0x03ff); // Mantissa - } - - GLM_FUNC_QUALIFIER glm::uint32 float2packed11(glm::uint32 f) - { - // 10 bits => EE EEEFFFFF - // 11 bits => EEE EEFFFFFF - // Half bits => SEEEEEFF FFFFFFFF - // Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF - - // 0x000007c0 => 00000000 00000000 00000111 11000000 - // 0x00007c00 => 00000000 00000000 01111100 00000000 - // 0x000003ff => 00000000 00000000 00000011 11111111 - // 0x38000000 => 00111000 00000000 00000000 00000000 - // 0x7f800000 => 01111111 10000000 00000000 00000000 - // 0x00008000 => 00000000 00000000 10000000 00000000 - return - ((((f & 0x7f800000) - 0x38000000) >> 17) & 0x07c0) | // exponential - ((f >> 17) & 0x003f); // Mantissa - } - - GLM_FUNC_QUALIFIER glm::uint32 packed11ToFloat(glm::uint32 p) - { - // 10 bits => EE EEEFFFFF - // 11 bits => EEE EEFFFFFF - // Half bits => SEEEEEFF FFFFFFFF - // Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF - - // 0x000007c0 => 00000000 00000000 00000111 11000000 - // 0x00007c00 => 00000000 00000000 01111100 00000000 - // 0x000003ff => 00000000 00000000 00000011 11111111 - // 0x38000000 => 00111000 00000000 00000000 00000000 - // 0x7f800000 => 01111111 10000000 00000000 00000000 - // 0x00008000 => 00000000 00000000 10000000 00000000 - return - ((((p & 0x07c0) << 17) + 0x38000000) & 0x7f800000) | // exponential - ((p & 0x003f) << 17); // Mantissa - } - - GLM_FUNC_QUALIFIER glm::uint32 float2packed10(glm::uint32 f) - { - // 10 bits => EE EEEFFFFF - // 11 bits => EEE EEFFFFFF - // Half bits => SEEEEEFF FFFFFFFF - // Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF - - // 0x0000001F => 00000000 00000000 00000000 00011111 - // 0x0000003F => 00000000 00000000 00000000 00111111 - // 0x000003E0 => 00000000 00000000 00000011 11100000 - // 0x000007C0 => 00000000 00000000 00000111 11000000 - // 0x00007C00 => 00000000 00000000 01111100 00000000 - // 0x000003FF => 00000000 00000000 00000011 11111111 - // 0x38000000 => 00111000 00000000 00000000 00000000 - // 0x7f800000 => 01111111 10000000 00000000 00000000 - // 0x00008000 => 00000000 00000000 10000000 00000000 - return - ((((f & 0x7f800000) - 0x38000000) >> 18) & 0x03E0) | // exponential - ((f >> 18) & 0x001f); // Mantissa - } - - GLM_FUNC_QUALIFIER glm::uint32 packed10ToFloat(glm::uint32 p) - { - // 10 bits => EE EEEFFFFF - // 11 bits => EEE EEFFFFFF - // Half bits => SEEEEEFF FFFFFFFF - // Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF - - // 0x0000001F => 00000000 00000000 00000000 00011111 - // 0x0000003F => 00000000 00000000 00000000 00111111 - // 0x000003E0 => 00000000 00000000 00000011 11100000 - // 0x000007C0 => 00000000 00000000 00000111 11000000 - // 0x00007C00 => 00000000 00000000 01111100 00000000 - // 0x000003FF => 00000000 00000000 00000011 11111111 - // 0x38000000 => 00111000 00000000 00000000 00000000 - // 0x7f800000 => 01111111 10000000 00000000 00000000 - // 0x00008000 => 00000000 00000000 10000000 00000000 - return - ((((p & 0x03E0) << 18) + 0x38000000) & 0x7f800000) | // exponential - ((p & 0x001f) << 18); // Mantissa - } - - GLM_FUNC_QUALIFIER glm::uint half2float(glm::uint h) - { - return ((h & 0x8000) << 16) | ((( h & 0x7c00) + 0x1C000) << 13) | ((h & 0x03FF) << 13); - } - - GLM_FUNC_QUALIFIER glm::uint floatTo11bit(float x) - { - if(x == 0.0f) - return 0u; - else if(glm::isnan(x)) - return ~0u; - else if(glm::isinf(x)) - return 0x1Fu << 6u; - - uint Pack = 0u; - memcpy(&Pack, &x, sizeof(Pack)); - return float2packed11(Pack); - } - - GLM_FUNC_QUALIFIER float packed11bitToFloat(glm::uint x) - { - if(x == 0) - return 0.0f; - else if(x == ((1 << 11) - 1)) - return ~0;//NaN - else if(x == (0x1f << 6)) - return ~0;//Inf - - uint Result = packed11ToFloat(x); - - float Temp = 0; - memcpy(&Temp, &Result, sizeof(Temp)); - return Temp; - } - - GLM_FUNC_QUALIFIER glm::uint floatTo10bit(float x) - { - if(x == 0.0f) - return 0u; - else if(glm::isnan(x)) - return ~0u; - else if(glm::isinf(x)) - return 0x1Fu << 5u; - - uint Pack = 0; - memcpy(&Pack, &x, sizeof(Pack)); - return float2packed10(Pack); - } - - GLM_FUNC_QUALIFIER float packed10bitToFloat(glm::uint x) - { - if(x == 0) - return 0.0f; - else if(x == ((1 << 10) - 1)) - return ~0;//NaN - else if(x == (0x1f << 5)) - return ~0;//Inf - - uint Result = packed10ToFloat(x); - - float Temp = 0; - memcpy(&Temp, &Result, sizeof(Temp)); - return Temp; - } - -// GLM_FUNC_QUALIFIER glm::uint f11_f11_f10(float x, float y, float z) -// { -// return ((floatTo11bit(x) & ((1 << 11) - 1)) << 0) | ((floatTo11bit(y) & ((1 << 11) - 1)) << 11) | ((floatTo10bit(z) & ((1 << 10) - 1)) << 22); -// } - - union u3u3u2 - { - struct - { - uint x : 3; - uint y : 3; - uint z : 2; - } data; - uint8 pack; - }; - - union u4u4 - { - struct - { - uint x : 4; - uint y : 4; - } data; - uint8 pack; - }; - - union u4u4u4u4 - { - struct - { - uint x : 4; - uint y : 4; - uint z : 4; - uint w : 4; - } data; - uint16 pack; - }; - - union u5u6u5 - { - struct - { - uint x : 5; - uint y : 6; - uint z : 5; - } data; - uint16 pack; - }; - - union u5u5u5u1 - { - struct - { - uint x : 5; - uint y : 5; - uint z : 5; - uint w : 1; - } data; - uint16 pack; - }; - - union u10u10u10u2 - { - struct - { - uint x : 10; - uint y : 10; - uint z : 10; - uint w : 2; - } data; - uint32 pack; - }; - - union i10i10i10i2 - { - struct - { - int x : 10; - int y : 10; - int z : 10; - int w : 2; - } data; - uint32 pack; - }; - - union u9u9u9e5 - { - struct - { - uint x : 9; - uint y : 9; - uint z : 9; - uint w : 5; - } data; - uint32 pack; - }; - - template - struct compute_half - {}; - - template - struct compute_half<1, Q> - { - GLM_FUNC_QUALIFIER static vec<1, uint16, Q> pack(vec<1, float, Q> const& v) - { - int16 const Unpack(detail::toFloat16(v.x)); - u16vec1 Packed; - memcpy(&Packed, &Unpack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER static vec<1, float, Q> unpack(vec<1, uint16, Q> const& v) - { - i16vec1 Unpack; - memcpy(&Unpack, &v, sizeof(Unpack)); - return vec<1, float, Q>(detail::toFloat32(v.x)); - } - }; - - template - struct compute_half<2, Q> - { - GLM_FUNC_QUALIFIER static vec<2, uint16, Q> pack(vec<2, float, Q> const& v) - { - vec<2, int16, Q> const Unpack(detail::toFloat16(v.x), detail::toFloat16(v.y)); - u16vec2 Packed; - memcpy(&Packed, &Unpack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER static vec<2, float, Q> unpack(vec<2, uint16, Q> const& v) - { - i16vec2 Unpack; - memcpy(&Unpack, &v, sizeof(Unpack)); - return vec<2, float, Q>(detail::toFloat32(v.x), detail::toFloat32(v.y)); - } - }; - - template - struct compute_half<3, Q> - { - GLM_FUNC_QUALIFIER static vec<3, uint16, Q> pack(vec<3, float, Q> const& v) - { - vec<3, int16, Q> const Unpack(detail::toFloat16(v.x), detail::toFloat16(v.y), detail::toFloat16(v.z)); - u16vec3 Packed; - memcpy(&Packed, &Unpack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER static vec<3, float, Q> unpack(vec<3, uint16, Q> const& v) - { - i16vec3 Unpack; - memcpy(&Unpack, &v, sizeof(Unpack)); - return vec<3, float, Q>(detail::toFloat32(v.x), detail::toFloat32(v.y), detail::toFloat32(v.z)); - } - }; - - template - struct compute_half<4, Q> - { - GLM_FUNC_QUALIFIER static vec<4, uint16, Q> pack(vec<4, float, Q> const& v) - { - vec<4, int16, Q> const Unpack(detail::toFloat16(v.x), detail::toFloat16(v.y), detail::toFloat16(v.z), detail::toFloat16(v.w)); - u16vec4 Packed; - memcpy(&Packed, &Unpack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER static vec<4, float, Q> unpack(vec<4, uint16, Q> const& v) - { - i16vec4 Unpack; - memcpy(&Unpack, &v, sizeof(Unpack)); - return vec<4, float, Q>(detail::toFloat32(v.x), detail::toFloat32(v.y), detail::toFloat32(v.z), detail::toFloat32(v.w)); - } - }; -}//namespace detail - - GLM_FUNC_QUALIFIER uint8 packUnorm1x8(float v) - { - return static_cast(round(clamp(v, 0.0f, 1.0f) * 255.0f)); - } - - GLM_FUNC_QUALIFIER float unpackUnorm1x8(uint8 p) - { - float const Unpack(p); - return Unpack * static_cast(0.0039215686274509803921568627451); // 1 / 255 - } - - GLM_FUNC_QUALIFIER uint16 packUnorm2x8(vec2 const& v) - { - u8vec2 const Topack(round(clamp(v, 0.0f, 1.0f) * 255.0f)); - - uint16 Unpack = 0; - memcpy(&Unpack, &Topack, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER vec2 unpackUnorm2x8(uint16 p) - { - u8vec2 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return vec2(Unpack) * float(0.0039215686274509803921568627451); // 1 / 255 - } - - GLM_FUNC_QUALIFIER uint8 packSnorm1x8(float v) - { - int8 const Topack(static_cast(round(clamp(v ,-1.0f, 1.0f) * 127.0f))); - uint8 Packed = 0; - memcpy(&Packed, &Topack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER float unpackSnorm1x8(uint8 p) - { - int8 Unpack = 0; - memcpy(&Unpack, &p, sizeof(Unpack)); - return clamp( - static_cast(Unpack) * 0.00787401574803149606299212598425f, // 1.0f / 127.0f - -1.0f, 1.0f); - } - - GLM_FUNC_QUALIFIER uint16 packSnorm2x8(vec2 const& v) - { - i8vec2 const Topack(round(clamp(v, -1.0f, 1.0f) * 127.0f)); - uint16 Packed = 0; - memcpy(&Packed, &Topack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER vec2 unpackSnorm2x8(uint16 p) - { - i8vec2 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return clamp( - vec2(Unpack) * 0.00787401574803149606299212598425f, // 1.0f / 127.0f - -1.0f, 1.0f); - } - - GLM_FUNC_QUALIFIER uint16 packUnorm1x16(float s) - { - return static_cast(round(clamp(s, 0.0f, 1.0f) * 65535.0f)); - } - - GLM_FUNC_QUALIFIER float unpackUnorm1x16(uint16 p) - { - float const Unpack(p); - return Unpack * 1.5259021896696421759365224689097e-5f; // 1.0 / 65535.0 - } - - GLM_FUNC_QUALIFIER uint64 packUnorm4x16(vec4 const& v) - { - u16vec4 const Topack(round(clamp(v , 0.0f, 1.0f) * 65535.0f)); - uint64 Packed = 0; - memcpy(&Packed, &Topack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER vec4 unpackUnorm4x16(uint64 p) - { - u16vec4 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return vec4(Unpack) * 1.5259021896696421759365224689097e-5f; // 1.0 / 65535.0 - } - - GLM_FUNC_QUALIFIER uint16 packSnorm1x16(float v) - { - int16 const Topack = static_cast(round(clamp(v ,-1.0f, 1.0f) * 32767.0f)); - uint16 Packed = 0; - memcpy(&Packed, &Topack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER float unpackSnorm1x16(uint16 p) - { - int16 Unpack = 0; - memcpy(&Unpack, &p, sizeof(Unpack)); - return clamp( - static_cast(Unpack) * 3.0518509475997192297128208258309e-5f, //1.0f / 32767.0f, - -1.0f, 1.0f); - } - - GLM_FUNC_QUALIFIER uint64 packSnorm4x16(vec4 const& v) - { - i16vec4 const Topack(round(clamp(v ,-1.0f, 1.0f) * 32767.0f)); - uint64 Packed = 0; - memcpy(&Packed, &Topack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER vec4 unpackSnorm4x16(uint64 p) - { - i16vec4 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return clamp( - vec4(Unpack) * 3.0518509475997192297128208258309e-5f, //1.0f / 32767.0f, - -1.0f, 1.0f); - } - - GLM_FUNC_QUALIFIER uint16 packHalf1x16(float v) - { - int16 const Topack(detail::toFloat16(v)); - uint16 Packed = 0; - memcpy(&Packed, &Topack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER float unpackHalf1x16(uint16 v) - { - int16 Unpack = 0; - memcpy(&Unpack, &v, sizeof(Unpack)); - return detail::toFloat32(Unpack); - } - - GLM_FUNC_QUALIFIER uint64 packHalf4x16(glm::vec4 const& v) - { - i16vec4 const Unpack( - detail::toFloat16(v.x), - detail::toFloat16(v.y), - detail::toFloat16(v.z), - detail::toFloat16(v.w)); - uint64 Packed = 0; - memcpy(&Packed, &Unpack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER glm::vec4 unpackHalf4x16(uint64 v) - { - i16vec4 Unpack; - memcpy(&Unpack, &v, sizeof(Unpack)); - return vec4( - detail::toFloat32(Unpack.x), - detail::toFloat32(Unpack.y), - detail::toFloat32(Unpack.z), - detail::toFloat32(Unpack.w)); - } - - GLM_FUNC_QUALIFIER uint32 packI3x10_1x2(ivec4 const& v) - { - detail::i10i10i10i2 Result; - Result.data.x = v.x; - Result.data.y = v.y; - Result.data.z = v.z; - Result.data.w = v.w; - return Result.pack; - } - - GLM_FUNC_QUALIFIER ivec4 unpackI3x10_1x2(uint32 v) - { - detail::i10i10i10i2 Unpack; - Unpack.pack = v; - return ivec4( - Unpack.data.x, - Unpack.data.y, - Unpack.data.z, - Unpack.data.w); - } - - GLM_FUNC_QUALIFIER uint32 packU3x10_1x2(uvec4 const& v) - { - detail::u10u10u10u2 Result; - Result.data.x = v.x; - Result.data.y = v.y; - Result.data.z = v.z; - Result.data.w = v.w; - return Result.pack; - } - - GLM_FUNC_QUALIFIER uvec4 unpackU3x10_1x2(uint32 v) - { - detail::u10u10u10u2 Unpack; - Unpack.pack = v; - return uvec4( - Unpack.data.x, - Unpack.data.y, - Unpack.data.z, - Unpack.data.w); - } - - GLM_FUNC_QUALIFIER uint32 packSnorm3x10_1x2(vec4 const& v) - { - ivec4 const Pack(round(clamp(v,-1.0f, 1.0f) * vec4(511.f, 511.f, 511.f, 1.f))); - - detail::i10i10i10i2 Result; - Result.data.x = Pack.x; - Result.data.y = Pack.y; - Result.data.z = Pack.z; - Result.data.w = Pack.w; - return Result.pack; - } - - GLM_FUNC_QUALIFIER vec4 unpackSnorm3x10_1x2(uint32 v) - { - detail::i10i10i10i2 Unpack; - Unpack.pack = v; - - vec4 const Result(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w); - - return clamp(Result * vec4(1.f / 511.f, 1.f / 511.f, 1.f / 511.f, 1.f), -1.0f, 1.0f); - } - - GLM_FUNC_QUALIFIER uint32 packUnorm3x10_1x2(vec4 const& v) - { - uvec4 const Unpack(round(clamp(v, 0.0f, 1.0f) * vec4(1023.f, 1023.f, 1023.f, 3.f))); - - detail::u10u10u10u2 Result; - Result.data.x = Unpack.x; - Result.data.y = Unpack.y; - Result.data.z = Unpack.z; - Result.data.w = Unpack.w; - return Result.pack; - } - - GLM_FUNC_QUALIFIER vec4 unpackUnorm3x10_1x2(uint32 v) - { - vec4 const ScaleFactors(1.0f / 1023.f, 1.0f / 1023.f, 1.0f / 1023.f, 1.0f / 3.f); - - detail::u10u10u10u2 Unpack; - Unpack.pack = v; - return vec4(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w) * ScaleFactors; - } - - GLM_FUNC_QUALIFIER uint32 packF2x11_1x10(vec3 const& v) - { - return - ((detail::floatTo11bit(v.x) & ((1 << 11) - 1)) << 0) | - ((detail::floatTo11bit(v.y) & ((1 << 11) - 1)) << 11) | - ((detail::floatTo10bit(v.z) & ((1 << 10) - 1)) << 22); - } - - GLM_FUNC_QUALIFIER vec3 unpackF2x11_1x10(uint32 v) - { - return vec3( - detail::packed11bitToFloat(v >> 0), - detail::packed11bitToFloat(v >> 11), - detail::packed10bitToFloat(v >> 22)); - } - - GLM_FUNC_QUALIFIER uint32 packF3x9_E1x5(vec3 const& v) - { - float const SharedExpMax = (pow(2.0f, 9.0f - 1.0f) / pow(2.0f, 9.0f)) * pow(2.0f, 31.f - 15.f); - vec3 const Color = clamp(v, 0.0f, SharedExpMax); - float const MaxColor = max(Color.x, max(Color.y, Color.z)); - - float const ExpSharedP = max(-15.f - 1.f, floor(log2(MaxColor))) + 1.0f + 15.f; - float const MaxShared = floor(MaxColor / pow(2.0f, (ExpSharedP - 15.f - 9.f)) + 0.5f); - float const ExpShared = equal(MaxShared, pow(2.0f, 9.0f), epsilon()) ? ExpSharedP + 1.0f : ExpSharedP; - - uvec3 const ColorComp(floor(Color / pow(2.f, (ExpShared - 15.f - 9.f)) + 0.5f)); - - detail::u9u9u9e5 Unpack; - Unpack.data.x = ColorComp.x; - Unpack.data.y = ColorComp.y; - Unpack.data.z = ColorComp.z; - Unpack.data.w = uint(ExpShared); - return Unpack.pack; - } - - GLM_FUNC_QUALIFIER vec3 unpackF3x9_E1x5(uint32 v) - { - detail::u9u9u9e5 Unpack; - Unpack.pack = v; - - return vec3(Unpack.data.x, Unpack.data.y, Unpack.data.z) * pow(2.0f, Unpack.data.w - 15.f - 9.f); - } - - // Based on Brian Karis http://graphicrants.blogspot.fr/2009/04/rgbm-color-encoding.html - template - GLM_FUNC_QUALIFIER vec<4, T, Q> packRGBM(vec<3, T, Q> const& rgb) - { - vec<3, T, Q> const Color(rgb * static_cast(1.0 / 6.0)); - T Alpha = clamp(max(max(Color.x, Color.y), max(Color.z, static_cast(1e-6))), static_cast(0), static_cast(1)); - Alpha = ceil(Alpha * static_cast(255.0)) / static_cast(255.0); - return vec<4, T, Q>(Color / Alpha, Alpha); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> unpackRGBM(vec<4, T, Q> const& rgbm) - { - return vec<3, T, Q>(rgbm.x, rgbm.y, rgbm.z) * rgbm.w * static_cast(6); - } - - template - GLM_FUNC_QUALIFIER vec packHalf(vec const& v) - { - return detail::compute_half::pack(v); - } - - template - GLM_FUNC_QUALIFIER vec unpackHalf(vec const& v) - { - return detail::compute_half::unpack(v); - } - - template - GLM_FUNC_QUALIFIER vec packUnorm(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "uintType must be an integer type"); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "floatType must be a floating point type"); - - return vec(round(clamp(v, static_cast(0), static_cast(1)) * static_cast(std::numeric_limits::max()))); - } - - template - GLM_FUNC_QUALIFIER vec unpackUnorm(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "uintType must be an integer type"); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "floatType must be a floating point type"); - - return vec(v) * (static_cast(1) / static_cast(std::numeric_limits::max())); - } - - template - GLM_FUNC_QUALIFIER vec packSnorm(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "uintType must be an integer type"); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "floatType must be a floating point type"); - - return vec(round(clamp(v , static_cast(-1), static_cast(1)) * static_cast(std::numeric_limits::max()))); - } - - template - GLM_FUNC_QUALIFIER vec unpackSnorm(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "uintType must be an integer type"); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "floatType must be a floating point type"); - - return clamp(vec(v) * (static_cast(1) / static_cast(std::numeric_limits::max())), static_cast(-1), static_cast(1)); - } - - GLM_FUNC_QUALIFIER uint8 packUnorm2x4(vec2 const& v) - { - u32vec2 const Unpack(round(clamp(v, 0.0f, 1.0f) * 15.0f)); - detail::u4u4 Result; - Result.data.x = Unpack.x; - Result.data.y = Unpack.y; - return Result.pack; - } - - GLM_FUNC_QUALIFIER vec2 unpackUnorm2x4(uint8 v) - { - float const ScaleFactor(1.f / 15.f); - detail::u4u4 Unpack; - Unpack.pack = v; - return vec2(Unpack.data.x, Unpack.data.y) * ScaleFactor; - } - - GLM_FUNC_QUALIFIER uint16 packUnorm4x4(vec4 const& v) - { - u32vec4 const Unpack(round(clamp(v, 0.0f, 1.0f) * 15.0f)); - detail::u4u4u4u4 Result; - Result.data.x = Unpack.x; - Result.data.y = Unpack.y; - Result.data.z = Unpack.z; - Result.data.w = Unpack.w; - return Result.pack; - } - - GLM_FUNC_QUALIFIER vec4 unpackUnorm4x4(uint16 v) - { - float const ScaleFactor(1.f / 15.f); - detail::u4u4u4u4 Unpack; - Unpack.pack = v; - return vec4(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w) * ScaleFactor; - } - - GLM_FUNC_QUALIFIER uint16 packUnorm1x5_1x6_1x5(vec3 const& v) - { - u32vec3 const Unpack(round(clamp(v, 0.0f, 1.0f) * vec3(31.f, 63.f, 31.f))); - detail::u5u6u5 Result; - Result.data.x = Unpack.x; - Result.data.y = Unpack.y; - Result.data.z = Unpack.z; - return Result.pack; - } - - GLM_FUNC_QUALIFIER vec3 unpackUnorm1x5_1x6_1x5(uint16 v) - { - vec3 const ScaleFactor(1.f / 31.f, 1.f / 63.f, 1.f / 31.f); - detail::u5u6u5 Unpack; - Unpack.pack = v; - return vec3(Unpack.data.x, Unpack.data.y, Unpack.data.z) * ScaleFactor; - } - - GLM_FUNC_QUALIFIER uint16 packUnorm3x5_1x1(vec4 const& v) - { - u32vec4 const Unpack(round(clamp(v, 0.0f, 1.0f) * vec4(31.f, 31.f, 31.f, 1.f))); - detail::u5u5u5u1 Result; - Result.data.x = Unpack.x; - Result.data.y = Unpack.y; - Result.data.z = Unpack.z; - Result.data.w = Unpack.w; - return Result.pack; - } - - GLM_FUNC_QUALIFIER vec4 unpackUnorm3x5_1x1(uint16 v) - { - vec4 const ScaleFactor(1.f / 31.f, 1.f / 31.f, 1.f / 31.f, 1.f); - detail::u5u5u5u1 Unpack; - Unpack.pack = v; - return vec4(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w) * ScaleFactor; - } - - GLM_FUNC_QUALIFIER uint8 packUnorm2x3_1x2(vec3 const& v) - { - u32vec3 const Unpack(round(clamp(v, 0.0f, 1.0f) * vec3(7.f, 7.f, 3.f))); - detail::u3u3u2 Result; - Result.data.x = Unpack.x; - Result.data.y = Unpack.y; - Result.data.z = Unpack.z; - return Result.pack; - } - - GLM_FUNC_QUALIFIER vec3 unpackUnorm2x3_1x2(uint8 v) - { - vec3 const ScaleFactor(1.f / 7.f, 1.f / 7.f, 1.f / 3.f); - detail::u3u3u2 Unpack; - Unpack.pack = v; - return vec3(Unpack.data.x, Unpack.data.y, Unpack.data.z) * ScaleFactor; - } - - GLM_FUNC_QUALIFIER int16 packInt2x8(i8vec2 const& v) - { - int16 Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER i8vec2 unpackInt2x8(int16 p) - { - i8vec2 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER uint16 packUint2x8(u8vec2 const& v) - { - uint16 Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER u8vec2 unpackUint2x8(uint16 p) - { - u8vec2 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER int32 packInt4x8(i8vec4 const& v) - { - int32 Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER i8vec4 unpackInt4x8(int32 p) - { - i8vec4 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER uint32 packUint4x8(u8vec4 const& v) - { - uint32 Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER u8vec4 unpackUint4x8(uint32 p) - { - u8vec4 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER int packInt2x16(i16vec2 const& v) - { - int Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER i16vec2 unpackInt2x16(int p) - { - i16vec2 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER int64 packInt4x16(i16vec4 const& v) - { - int64 Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER i16vec4 unpackInt4x16(int64 p) - { - i16vec4 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER uint packUint2x16(u16vec2 const& v) - { - uint Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER u16vec2 unpackUint2x16(uint p) - { - u16vec2 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER uint64 packUint4x16(u16vec4 const& v) - { - uint64 Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER u16vec4 unpackUint4x16(uint64 p) - { - u16vec4 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER int64 packInt2x32(i32vec2 const& v) - { - int64 Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER i32vec2 unpackInt2x32(int64 p) - { - i32vec2 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER uint64 packUint2x32(u32vec2 const& v) - { - uint64 Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER u32vec2 unpackUint2x32(uint64 p) - { - u32vec2 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } -}//namespace glm - diff --git a/src/vendor/glm/gtc/quaternion.hpp b/src/vendor/glm/gtc/quaternion.hpp deleted file mode 100755 index 359e072..0000000 --- a/src/vendor/glm/gtc/quaternion.hpp +++ /dev/null @@ -1,173 +0,0 @@ -/// @ref gtc_quaternion -/// @file glm/gtc/quaternion.hpp -/// -/// @see core (dependence) -/// @see gtc_constants (dependence) -/// -/// @defgroup gtc_quaternion GLM_GTC_quaternion -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Defines a templated quaternion type and several quaternion operations. - -#pragma once - -// Dependency: -#include "../gtc/constants.hpp" -#include "../gtc/matrix_transform.hpp" -#include "../ext/vector_relational.hpp" -#include "../ext/quaternion_common.hpp" -#include "../ext/quaternion_float.hpp" -#include "../ext/quaternion_float_precision.hpp" -#include "../ext/quaternion_double.hpp" -#include "../ext/quaternion_double_precision.hpp" -#include "../ext/quaternion_relational.hpp" -#include "../ext/quaternion_geometric.hpp" -#include "../ext/quaternion_trigonometric.hpp" -#include "../ext/quaternion_transform.hpp" -#include "../detail/type_mat3x3.hpp" -#include "../detail/type_mat4x4.hpp" -#include "../detail/type_vec3.hpp" -#include "../detail/type_vec4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_quaternion extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_quaternion - /// @{ - - /// Returns euler angles, pitch as x, yaw as y, roll as z. - /// The result is expressed in radians. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see gtc_quaternion - template - GLM_FUNC_DECL vec<3, T, Q> eulerAngles(qua const& x); - - /// Returns roll value of euler angles expressed in radians. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see gtc_quaternion - template - GLM_FUNC_DECL T roll(qua const& x); - - /// Returns pitch value of euler angles expressed in radians. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see gtc_quaternion - template - GLM_FUNC_DECL T pitch(qua const& x); - - /// Returns yaw value of euler angles expressed in radians. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see gtc_quaternion - template - GLM_FUNC_DECL T yaw(qua const& x); - - /// Converts a quaternion to a 3 * 3 matrix. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see gtc_quaternion - template - GLM_FUNC_DECL mat<3, 3, T, Q> mat3_cast(qua const& x); - - /// Converts a quaternion to a 4 * 4 matrix. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see gtc_quaternion - template - GLM_FUNC_DECL mat<4, 4, T, Q> mat4_cast(qua const& x); - - /// Converts a pure rotation 3 * 3 matrix to a quaternion. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see gtc_quaternion - template - GLM_FUNC_DECL qua quat_cast(mat<3, 3, T, Q> const& x); - - /// Converts a pure rotation 4 * 4 matrix to a quaternion. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see gtc_quaternion - template - GLM_FUNC_DECL qua quat_cast(mat<4, 4, T, Q> const& x); - - /// Returns the component-wise comparison result of x < y. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_quaternion_relational - template - GLM_FUNC_DECL vec<4, bool, Q> lessThan(qua const& x, qua const& y); - - /// Returns the component-wise comparison of result x <= y. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_quaternion_relational - template - GLM_FUNC_DECL vec<4, bool, Q> lessThanEqual(qua const& x, qua const& y); - - /// Returns the component-wise comparison of result x > y. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_quaternion_relational - template - GLM_FUNC_DECL vec<4, bool, Q> greaterThan(qua const& x, qua const& y); - - /// Returns the component-wise comparison of result x >= y. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_quaternion_relational - template - GLM_FUNC_DECL vec<4, bool, Q> greaterThanEqual(qua const& x, qua const& y); - - /// Build a look at quaternion based on the default handedness. - /// - /// @param direction Desired forward direction. Needs to be normalized. - /// @param up Up vector, how the camera is oriented. Typically (0, 1, 0). - template - GLM_FUNC_DECL qua quatLookAt( - vec<3, T, Q> const& direction, - vec<3, T, Q> const& up); - - /// Build a right-handed look at quaternion. - /// - /// @param direction Desired forward direction onto which the -z-axis gets mapped. Needs to be normalized. - /// @param up Up vector, how the camera is oriented. Typically (0, 1, 0). - template - GLM_FUNC_DECL qua quatLookAtRH( - vec<3, T, Q> const& direction, - vec<3, T, Q> const& up); - - /// Build a left-handed look at quaternion. - /// - /// @param direction Desired forward direction onto which the +z-axis gets mapped. Needs to be normalized. - /// @param up Up vector, how the camera is oriented. Typically (0, 1, 0). - template - GLM_FUNC_DECL qua quatLookAtLH( - vec<3, T, Q> const& direction, - vec<3, T, Q> const& up); - /// @} -} //namespace glm - -#include "quaternion.inl" diff --git a/src/vendor/glm/gtc/quaternion.inl b/src/vendor/glm/gtc/quaternion.inl deleted file mode 100755 index e1ef032..0000000 --- a/src/vendor/glm/gtc/quaternion.inl +++ /dev/null @@ -1,208 +0,0 @@ -#include "../trigonometric.hpp" -#include "../geometric.hpp" -#include "../exponential.hpp" -#include "epsilon.hpp" -#include - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> eulerAngles(qua const& x) - { - return vec<3, T, Q>(pitch(x), yaw(x), roll(x)); - } - - template - GLM_FUNC_QUALIFIER T roll(qua const& q) - { - T const y = static_cast(2) * (q.x * q.y + q.w * q.z); - T const x = q.w * q.w + q.x * q.x - q.y * q.y - q.z * q.z; - - if(all(equal(vec<2, T, Q>(x, y), vec<2, T, Q>(0), epsilon()))) //avoid atan2(0,0) - handle singularity - Matiis - return static_cast(0); - - return static_cast(atan(y, x)); - } - - template - GLM_FUNC_QUALIFIER T pitch(qua const& q) - { - //return T(atan(T(2) * (q.y * q.z + q.w * q.x), q.w * q.w - q.x * q.x - q.y * q.y + q.z * q.z)); - T const y = static_cast(2) * (q.y * q.z + q.w * q.x); - T const x = q.w * q.w - q.x * q.x - q.y * q.y + q.z * q.z; - - if(all(equal(vec<2, T, Q>(x, y), vec<2, T, Q>(0), epsilon()))) //avoid atan2(0,0) - handle singularity - Matiis - return static_cast(static_cast(2) * atan(q.x, q.w)); - - return static_cast(atan(y, x)); - } - - template - GLM_FUNC_QUALIFIER T yaw(qua const& q) - { - return asin(clamp(static_cast(-2) * (q.x * q.z - q.w * q.y), static_cast(-1), static_cast(1))); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> mat3_cast(qua const& q) - { - mat<3, 3, T, Q> Result(T(1)); - T qxx(q.x * q.x); - T qyy(q.y * q.y); - T qzz(q.z * q.z); - T qxz(q.x * q.z); - T qxy(q.x * q.y); - T qyz(q.y * q.z); - T qwx(q.w * q.x); - T qwy(q.w * q.y); - T qwz(q.w * q.z); - - Result[0][0] = T(1) - T(2) * (qyy + qzz); - Result[0][1] = T(2) * (qxy + qwz); - Result[0][2] = T(2) * (qxz - qwy); - - Result[1][0] = T(2) * (qxy - qwz); - Result[1][1] = T(1) - T(2) * (qxx + qzz); - Result[1][2] = T(2) * (qyz + qwx); - - Result[2][0] = T(2) * (qxz + qwy); - Result[2][1] = T(2) * (qyz - qwx); - Result[2][2] = T(1) - T(2) * (qxx + qyy); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> mat4_cast(qua const& q) - { - return mat<4, 4, T, Q>(mat3_cast(q)); - } - - template - GLM_FUNC_QUALIFIER qua quat_cast(mat<3, 3, T, Q> const& m) - { - T fourXSquaredMinus1 = m[0][0] - m[1][1] - m[2][2]; - T fourYSquaredMinus1 = m[1][1] - m[0][0] - m[2][2]; - T fourZSquaredMinus1 = m[2][2] - m[0][0] - m[1][1]; - T fourWSquaredMinus1 = m[0][0] + m[1][1] + m[2][2]; - - int biggestIndex = 0; - T fourBiggestSquaredMinus1 = fourWSquaredMinus1; - if(fourXSquaredMinus1 > fourBiggestSquaredMinus1) - { - fourBiggestSquaredMinus1 = fourXSquaredMinus1; - biggestIndex = 1; - } - if(fourYSquaredMinus1 > fourBiggestSquaredMinus1) - { - fourBiggestSquaredMinus1 = fourYSquaredMinus1; - biggestIndex = 2; - } - if(fourZSquaredMinus1 > fourBiggestSquaredMinus1) - { - fourBiggestSquaredMinus1 = fourZSquaredMinus1; - biggestIndex = 3; - } - - T biggestVal = sqrt(fourBiggestSquaredMinus1 + static_cast(1)) * static_cast(0.5); - T mult = static_cast(0.25) / biggestVal; - - switch(biggestIndex) - { - case 0: - return qua(biggestVal, (m[1][2] - m[2][1]) * mult, (m[2][0] - m[0][2]) * mult, (m[0][1] - m[1][0]) * mult); - case 1: - return qua((m[1][2] - m[2][1]) * mult, biggestVal, (m[0][1] + m[1][0]) * mult, (m[2][0] + m[0][2]) * mult); - case 2: - return qua((m[2][0] - m[0][2]) * mult, (m[0][1] + m[1][0]) * mult, biggestVal, (m[1][2] + m[2][1]) * mult); - case 3: - return qua((m[0][1] - m[1][0]) * mult, (m[2][0] + m[0][2]) * mult, (m[1][2] + m[2][1]) * mult, biggestVal); - default: // Silence a -Wswitch-default warning in GCC. Should never actually get here. Assert is just for sanity. - assert(false); - return qua(1, 0, 0, 0); - } - } - - template - GLM_FUNC_QUALIFIER qua quat_cast(mat<4, 4, T, Q> const& m4) - { - return quat_cast(mat<3, 3, T, Q>(m4)); - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> lessThan(qua const& x, qua const& y) - { - vec<4, bool, Q> Result; - for(length_t i = 0; i < x.length(); ++i) - Result[i] = x[i] < y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> lessThanEqual(qua const& x, qua const& y) - { - vec<4, bool, Q> Result; - for(length_t i = 0; i < x.length(); ++i) - Result[i] = x[i] <= y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> greaterThan(qua const& x, qua const& y) - { - vec<4, bool, Q> Result; - for(length_t i = 0; i < x.length(); ++i) - Result[i] = x[i] > y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> greaterThanEqual(qua const& x, qua const& y) - { - vec<4, bool, Q> Result; - for(length_t i = 0; i < x.length(); ++i) - Result[i] = x[i] >= y[i]; - return Result; - } - - - template - GLM_FUNC_QUALIFIER qua quatLookAt(vec<3, T, Q> const& direction, vec<3, T, Q> const& up) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return quatLookAtLH(direction, up); -# else - return quatLookAtRH(direction, up); -# endif - } - - template - GLM_FUNC_QUALIFIER qua quatLookAtRH(vec<3, T, Q> const& direction, vec<3, T, Q> const& up) - { - mat<3, 3, T, Q> Result; - - Result[2] = -direction; - vec<3, T, Q> const& Right = cross(up, Result[2]); - Result[0] = Right * inversesqrt(max(static_cast(0.00001), dot(Right, Right))); - Result[1] = cross(Result[2], Result[0]); - - return quat_cast(Result); - } - - template - GLM_FUNC_QUALIFIER qua quatLookAtLH(vec<3, T, Q> const& direction, vec<3, T, Q> const& up) - { - mat<3, 3, T, Q> Result; - - Result[2] = direction; - vec<3, T, Q> const& Right = cross(up, Result[2]); - Result[0] = Right * inversesqrt(max(static_cast(0.00001), dot(Right, Right))); - Result[1] = cross(Result[2], Result[0]); - - return quat_cast(Result); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "quaternion_simd.inl" -#endif - diff --git a/src/vendor/glm/gtc/quaternion_simd.inl b/src/vendor/glm/gtc/quaternion_simd.inl deleted file mode 100755 index e69de29..0000000 diff --git a/src/vendor/glm/gtc/random.hpp b/src/vendor/glm/gtc/random.hpp deleted file mode 100755 index 9a85958..0000000 --- a/src/vendor/glm/gtc/random.hpp +++ /dev/null @@ -1,82 +0,0 @@ -/// @ref gtc_random -/// @file glm/gtc/random.hpp -/// -/// @see core (dependence) -/// @see gtx_random (extended) -/// -/// @defgroup gtc_random GLM_GTC_random -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Generate random number from various distribution methods. - -#pragma once - -// Dependency: -#include "../ext/scalar_int_sized.hpp" -#include "../ext/scalar_uint_sized.hpp" -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_random extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_random - /// @{ - - /// Generate random numbers in the interval [Min, Max], according a linear distribution - /// - /// @param Min Minimum value included in the sampling - /// @param Max Maximum value included in the sampling - /// @tparam genType Value type. Currently supported: float or double scalars. - /// @see gtc_random - template - GLM_FUNC_DECL genType linearRand(genType Min, genType Max); - - /// Generate random numbers in the interval [Min, Max], according a linear distribution - /// - /// @param Min Minimum value included in the sampling - /// @param Max Maximum value included in the sampling - /// @tparam T Value type. Currently supported: float or double. - /// - /// @see gtc_random - template - GLM_FUNC_DECL vec linearRand(vec const& Min, vec const& Max); - - /// Generate random numbers in the interval [Min, Max], according a gaussian distribution - /// - /// @see gtc_random - template - GLM_FUNC_DECL genType gaussRand(genType Mean, genType Deviation); - - /// Generate a random 2D vector which coordinates are regulary distributed on a circle of a given radius - /// - /// @see gtc_random - template - GLM_FUNC_DECL vec<2, T, defaultp> circularRand(T Radius); - - /// Generate a random 3D vector which coordinates are regulary distributed on a sphere of a given radius - /// - /// @see gtc_random - template - GLM_FUNC_DECL vec<3, T, defaultp> sphericalRand(T Radius); - - /// Generate a random 2D vector which coordinates are regulary distributed within the area of a disk of a given radius - /// - /// @see gtc_random - template - GLM_FUNC_DECL vec<2, T, defaultp> diskRand(T Radius); - - /// Generate a random 3D vector which coordinates are regulary distributed within the volume of a ball of a given radius - /// - /// @see gtc_random - template - GLM_FUNC_DECL vec<3, T, defaultp> ballRand(T Radius); - - /// @} -}//namespace glm - -#include "random.inl" diff --git a/src/vendor/glm/gtc/random.inl b/src/vendor/glm/gtc/random.inl deleted file mode 100755 index 7048509..0000000 --- a/src/vendor/glm/gtc/random.inl +++ /dev/null @@ -1,303 +0,0 @@ -#include "../geometric.hpp" -#include "../exponential.hpp" -#include "../trigonometric.hpp" -#include "../detail/type_vec1.hpp" -#include -#include -#include -#include - -namespace glm{ -namespace detail -{ - template - struct compute_rand - { - GLM_FUNC_QUALIFIER static vec call(); - }; - - template - struct compute_rand<1, uint8, P> - { - GLM_FUNC_QUALIFIER static vec<1, uint8, P> call() - { - return vec<1, uint8, P>( - std::rand() % std::numeric_limits::max()); - } - }; - - template - struct compute_rand<2, uint8, P> - { - GLM_FUNC_QUALIFIER static vec<2, uint8, P> call() - { - return vec<2, uint8, P>( - std::rand() % std::numeric_limits::max(), - std::rand() % std::numeric_limits::max()); - } - }; - - template - struct compute_rand<3, uint8, P> - { - GLM_FUNC_QUALIFIER static vec<3, uint8, P> call() - { - return vec<3, uint8, P>( - std::rand() % std::numeric_limits::max(), - std::rand() % std::numeric_limits::max(), - std::rand() % std::numeric_limits::max()); - } - }; - - template - struct compute_rand<4, uint8, P> - { - GLM_FUNC_QUALIFIER static vec<4, uint8, P> call() - { - return vec<4, uint8, P>( - std::rand() % std::numeric_limits::max(), - std::rand() % std::numeric_limits::max(), - std::rand() % std::numeric_limits::max(), - std::rand() % std::numeric_limits::max()); - } - }; - - template - struct compute_rand - { - GLM_FUNC_QUALIFIER static vec call() - { - return - (vec(compute_rand::call()) << static_cast(8)) | - (vec(compute_rand::call()) << static_cast(0)); - } - }; - - template - struct compute_rand - { - GLM_FUNC_QUALIFIER static vec call() - { - return - (vec(compute_rand::call()) << static_cast(16)) | - (vec(compute_rand::call()) << static_cast(0)); - } - }; - - template - struct compute_rand - { - GLM_FUNC_QUALIFIER static vec call() - { - return - (vec(compute_rand::call()) << static_cast(32)) | - (vec(compute_rand::call()) << static_cast(0)); - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max); - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return (vec(compute_rand::call() % vec(Max + static_cast(1) - Min))) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return (compute_rand::call() % (Max + static_cast(1) - Min)) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return (vec(compute_rand::call() % vec(Max + static_cast(1) - Min))) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return (compute_rand::call() % (Max + static_cast(1) - Min)) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return (vec(compute_rand::call() % vec(Max + static_cast(1) - Min))) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return (compute_rand::call() % (Max + static_cast(1) - Min)) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return (vec(compute_rand::call() % vec(Max + static_cast(1) - Min))) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return (compute_rand::call() % (Max + static_cast(1) - Min)) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return vec(compute_rand::call()) / static_cast(std::numeric_limits::max()) * (Max - Min) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return vec(compute_rand::call()) / static_cast(std::numeric_limits::max()) * (Max - Min) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return vec(compute_rand::call()) / static_cast(std::numeric_limits::max()) * (Max - Min) + Min; - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER genType linearRand(genType Min, genType Max) - { - return detail::compute_linearRand<1, genType, highp>::call( - vec<1, genType, highp>(Min), - vec<1, genType, highp>(Max)).x; - } - - template - GLM_FUNC_QUALIFIER vec linearRand(vec const& Min, vec const& Max) - { - return detail::compute_linearRand::call(Min, Max); - } - - template - GLM_FUNC_QUALIFIER genType gaussRand(genType Mean, genType Deviation) - { - genType w, x1, x2; - - do - { - x1 = linearRand(genType(-1), genType(1)); - x2 = linearRand(genType(-1), genType(1)); - - w = x1 * x1 + x2 * x2; - } while(w > genType(1)); - - return static_cast(x2 * Deviation * Deviation * sqrt((genType(-2) * log(w)) / w) + Mean); - } - - template - GLM_FUNC_QUALIFIER vec gaussRand(vec const& Mean, vec const& Deviation) - { - return detail::functor2::call(gaussRand, Mean, Deviation); - } - - template - GLM_FUNC_QUALIFIER vec<2, T, defaultp> diskRand(T Radius) - { - assert(Radius > static_cast(0)); - - vec<2, T, defaultp> Result(T(0)); - T LenRadius(T(0)); - - do - { - Result = linearRand( - vec<2, T, defaultp>(-Radius), - vec<2, T, defaultp>(Radius)); - LenRadius = length(Result); - } - while(LenRadius > Radius); - - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, defaultp> ballRand(T Radius) - { - assert(Radius > static_cast(0)); - - vec<3, T, defaultp> Result(T(0)); - T LenRadius(T(0)); - - do - { - Result = linearRand( - vec<3, T, defaultp>(-Radius), - vec<3, T, defaultp>(Radius)); - LenRadius = length(Result); - } - while(LenRadius > Radius); - - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<2, T, defaultp> circularRand(T Radius) - { - assert(Radius > static_cast(0)); - - T a = linearRand(T(0), static_cast(6.283185307179586476925286766559)); - return vec<2, T, defaultp>(glm::cos(a), glm::sin(a)) * Radius; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, defaultp> sphericalRand(T Radius) - { - assert(Radius > static_cast(0)); - - T theta = linearRand(T(0), T(6.283185307179586476925286766559f)); - T phi = std::acos(linearRand(T(-1.0f), T(1.0f))); - - T x = std::sin(phi) * std::cos(theta); - T y = std::sin(phi) * std::sin(theta); - T z = std::cos(phi); - - return vec<3, T, defaultp>(x, y, z) * Radius; - } -}//namespace glm diff --git a/src/vendor/glm/gtc/reciprocal.hpp b/src/vendor/glm/gtc/reciprocal.hpp deleted file mode 100755 index 4d0fc91..0000000 --- a/src/vendor/glm/gtc/reciprocal.hpp +++ /dev/null @@ -1,24 +0,0 @@ -/// @ref gtc_reciprocal -/// @file glm/gtc/reciprocal.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_reciprocal GLM_GTC_reciprocal -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Define secant, cosecant and cotangent functions. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_reciprocal extension included") -#endif - -#include "../ext/scalar_reciprocal.hpp" -#include "../ext/vector_reciprocal.hpp" - diff --git a/src/vendor/glm/gtc/round.hpp b/src/vendor/glm/gtc/round.hpp deleted file mode 100755 index 56edbbc..0000000 --- a/src/vendor/glm/gtc/round.hpp +++ /dev/null @@ -1,160 +0,0 @@ -/// @ref gtc_round -/// @file glm/gtc/round.hpp -/// -/// @see core (dependence) -/// @see gtc_round (dependence) -/// -/// @defgroup gtc_round GLM_GTC_round -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Rounding value to specific boundings - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../detail/_vectorize.hpp" -#include "../vector_relational.hpp" -#include "../common.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_round extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_round - /// @{ - - /// Return the power of two number which value is just higher the input value, - /// round up to a power of two. - /// - /// @see gtc_round - template - GLM_FUNC_DECL genIUType ceilPowerOfTwo(genIUType v); - - /// Return the power of two number which value is just higher the input value, - /// round up to a power of two. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_round - template - GLM_FUNC_DECL vec ceilPowerOfTwo(vec const& v); - - /// Return the power of two number which value is just lower the input value, - /// round down to a power of two. - /// - /// @see gtc_round - template - GLM_FUNC_DECL genIUType floorPowerOfTwo(genIUType v); - - /// Return the power of two number which value is just lower the input value, - /// round down to a power of two. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_round - template - GLM_FUNC_DECL vec floorPowerOfTwo(vec const& v); - - /// Return the power of two number which value is the closet to the input value. - /// - /// @see gtc_round - template - GLM_FUNC_DECL genIUType roundPowerOfTwo(genIUType v); - - /// Return the power of two number which value is the closet to the input value. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_round - template - GLM_FUNC_DECL vec roundPowerOfTwo(vec const& v); - - /// Higher multiple number of Source. - /// - /// @tparam genType Floating-point or integer scalar or vector types. - /// - /// @param v Source value to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see gtc_round - template - GLM_FUNC_DECL genType ceilMultiple(genType v, genType Multiple); - - /// Higher multiple number of Source. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @param v Source values to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see gtc_round - template - GLM_FUNC_DECL vec ceilMultiple(vec const& v, vec const& Multiple); - - /// Lower multiple number of Source. - /// - /// @tparam genType Floating-point or integer scalar or vector types. - /// - /// @param v Source value to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see gtc_round - template - GLM_FUNC_DECL genType floorMultiple(genType v, genType Multiple); - - /// Lower multiple number of Source. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @param v Source values to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see gtc_round - template - GLM_FUNC_DECL vec floorMultiple(vec const& v, vec const& Multiple); - - /// Lower multiple number of Source. - /// - /// @tparam genType Floating-point or integer scalar or vector types. - /// - /// @param v Source value to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see gtc_round - template - GLM_FUNC_DECL genType roundMultiple(genType v, genType Multiple); - - /// Lower multiple number of Source. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @param v Source values to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see gtc_round - template - GLM_FUNC_DECL vec roundMultiple(vec const& v, vec const& Multiple); - - /// @} -} //namespace glm - -#include "round.inl" diff --git a/src/vendor/glm/gtc/round.inl b/src/vendor/glm/gtc/round.inl deleted file mode 100755 index 48411e4..0000000 --- a/src/vendor/glm/gtc/round.inl +++ /dev/null @@ -1,155 +0,0 @@ -/// @ref gtc_round - -#include "../integer.hpp" -#include "../ext/vector_integer.hpp" - -namespace glm{ -namespace detail -{ - template - struct compute_roundMultiple {}; - - template<> - struct compute_roundMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - if (Source >= genType(0)) - return Source - std::fmod(Source, Multiple); - else - { - genType Tmp = Source + genType(1); - return Tmp - std::fmod(Tmp, Multiple) - Multiple; - } - } - }; - - template<> - struct compute_roundMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - if (Source >= genType(0)) - return Source - Source % Multiple; - else - { - genType Tmp = Source + genType(1); - return Tmp - Tmp % Multiple - Multiple; - } - } - }; - - template<> - struct compute_roundMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - if (Source >= genType(0)) - return Source - Source % Multiple; - else - { - genType Tmp = Source + genType(1); - return Tmp - Tmp % Multiple - Multiple; - } - } - }; -}//namespace detail - - ////////////////// - // ceilPowerOfTwo - - template - GLM_FUNC_QUALIFIER genType ceilPowerOfTwo(genType value) - { - return detail::compute_ceilPowerOfTwo<1, genType, defaultp, std::numeric_limits::is_signed>::call(vec<1, genType, defaultp>(value)).x; - } - - template - GLM_FUNC_QUALIFIER vec ceilPowerOfTwo(vec const& v) - { - return detail::compute_ceilPowerOfTwo::is_signed>::call(v); - } - - /////////////////// - // floorPowerOfTwo - - template - GLM_FUNC_QUALIFIER genType floorPowerOfTwo(genType value) - { - return isPowerOfTwo(value) ? value : static_cast(1) << findMSB(value); - } - - template - GLM_FUNC_QUALIFIER vec floorPowerOfTwo(vec const& v) - { - return detail::functor1::call(floorPowerOfTwo, v); - } - - /////////////////// - // roundPowerOfTwo - - template - GLM_FUNC_QUALIFIER genIUType roundPowerOfTwo(genIUType value) - { - if(isPowerOfTwo(value)) - return value; - - genIUType const prev = static_cast(1) << findMSB(value); - genIUType const next = prev << static_cast(1); - return (next - value) < (value - prev) ? next : prev; - } - - template - GLM_FUNC_QUALIFIER vec roundPowerOfTwo(vec const& v) - { - return detail::functor1::call(roundPowerOfTwo, v); - } - - ////////////////////// - // ceilMultiple - - template - GLM_FUNC_QUALIFIER genType ceilMultiple(genType Source, genType Multiple) - { - return detail::compute_ceilMultiple::is_iec559, std::numeric_limits::is_signed>::call(Source, Multiple); - } - - template - GLM_FUNC_QUALIFIER vec ceilMultiple(vec const& Source, vec const& Multiple) - { - return detail::functor2::call(ceilMultiple, Source, Multiple); - } - - ////////////////////// - // floorMultiple - - template - GLM_FUNC_QUALIFIER genType floorMultiple(genType Source, genType Multiple) - { - return detail::compute_floorMultiple::is_iec559, std::numeric_limits::is_signed>::call(Source, Multiple); - } - - template - GLM_FUNC_QUALIFIER vec floorMultiple(vec const& Source, vec const& Multiple) - { - return detail::functor2::call(floorMultiple, Source, Multiple); - } - - ////////////////////// - // roundMultiple - - template - GLM_FUNC_QUALIFIER genType roundMultiple(genType Source, genType Multiple) - { - return detail::compute_roundMultiple::is_iec559, std::numeric_limits::is_signed>::call(Source, Multiple); - } - - template - GLM_FUNC_QUALIFIER vec roundMultiple(vec const& Source, vec const& Multiple) - { - return detail::functor2::call(roundMultiple, Source, Multiple); - } -}//namespace glm diff --git a/src/vendor/glm/gtc/type_aligned.hpp b/src/vendor/glm/gtc/type_aligned.hpp deleted file mode 100755 index 5403abf..0000000 --- a/src/vendor/glm/gtc/type_aligned.hpp +++ /dev/null @@ -1,1315 +0,0 @@ -/// @ref gtc_type_aligned -/// @file glm/gtc/type_aligned.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_type_aligned GLM_GTC_type_aligned -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Aligned types allowing SIMD optimizations of vectors and matrices types - -#pragma once - -#if (GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE) -# error "GLM: Aligned gentypes require to enable C++ language extensions. Define GLM_FORCE_ALIGNED_GENTYPES before including GLM headers to use aligned types." -#endif - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_type_aligned extension included") -#endif - -#include "../mat4x4.hpp" -#include "../mat4x3.hpp" -#include "../mat4x2.hpp" -#include "../mat3x4.hpp" -#include "../mat3x3.hpp" -#include "../mat3x2.hpp" -#include "../mat2x4.hpp" -#include "../mat2x3.hpp" -#include "../mat2x2.hpp" -#include "../gtc/vec1.hpp" -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" - -namespace glm -{ - /// @addtogroup gtc_type_aligned - /// @{ - - // -- *vec1 -- - - /// 1 component vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<1, float, aligned_highp> aligned_highp_vec1; - - /// 1 component vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<1, float, aligned_mediump> aligned_mediump_vec1; - - /// 1 component vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<1, float, aligned_lowp> aligned_lowp_vec1; - - /// 1 component vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<1, double, aligned_highp> aligned_highp_dvec1; - - /// 1 component vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<1, double, aligned_mediump> aligned_mediump_dvec1; - - /// 1 component vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<1, double, aligned_lowp> aligned_lowp_dvec1; - - /// 1 component vector aligned in memory of signed integer numbers. - typedef vec<1, int, aligned_highp> aligned_highp_ivec1; - - /// 1 component vector aligned in memory of signed integer numbers. - typedef vec<1, int, aligned_mediump> aligned_mediump_ivec1; - - /// 1 component vector aligned in memory of signed integer numbers. - typedef vec<1, int, aligned_lowp> aligned_lowp_ivec1; - - /// 1 component vector aligned in memory of unsigned integer numbers. - typedef vec<1, uint, aligned_highp> aligned_highp_uvec1; - - /// 1 component vector aligned in memory of unsigned integer numbers. - typedef vec<1, uint, aligned_mediump> aligned_mediump_uvec1; - - /// 1 component vector aligned in memory of unsigned integer numbers. - typedef vec<1, uint, aligned_lowp> aligned_lowp_uvec1; - - /// 1 component vector aligned in memory of bool values. - typedef vec<1, bool, aligned_highp> aligned_highp_bvec1; - - /// 1 component vector aligned in memory of bool values. - typedef vec<1, bool, aligned_mediump> aligned_mediump_bvec1; - - /// 1 component vector aligned in memory of bool values. - typedef vec<1, bool, aligned_lowp> aligned_lowp_bvec1; - - /// 1 component vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<1, float, packed_highp> packed_highp_vec1; - - /// 1 component vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<1, float, packed_mediump> packed_mediump_vec1; - - /// 1 component vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<1, float, packed_lowp> packed_lowp_vec1; - - /// 1 component vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<1, double, packed_highp> packed_highp_dvec1; - - /// 1 component vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<1, double, packed_mediump> packed_mediump_dvec1; - - /// 1 component vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<1, double, packed_lowp> packed_lowp_dvec1; - - /// 1 component vector tightly packed in memory of signed integer numbers. - typedef vec<1, int, packed_highp> packed_highp_ivec1; - - /// 1 component vector tightly packed in memory of signed integer numbers. - typedef vec<1, int, packed_mediump> packed_mediump_ivec1; - - /// 1 component vector tightly packed in memory of signed integer numbers. - typedef vec<1, int, packed_lowp> packed_lowp_ivec1; - - /// 1 component vector tightly packed in memory of unsigned integer numbers. - typedef vec<1, uint, packed_highp> packed_highp_uvec1; - - /// 1 component vector tightly packed in memory of unsigned integer numbers. - typedef vec<1, uint, packed_mediump> packed_mediump_uvec1; - - /// 1 component vector tightly packed in memory of unsigned integer numbers. - typedef vec<1, uint, packed_lowp> packed_lowp_uvec1; - - /// 1 component vector tightly packed in memory of bool values. - typedef vec<1, bool, packed_highp> packed_highp_bvec1; - - /// 1 component vector tightly packed in memory of bool values. - typedef vec<1, bool, packed_mediump> packed_mediump_bvec1; - - /// 1 component vector tightly packed in memory of bool values. - typedef vec<1, bool, packed_lowp> packed_lowp_bvec1; - - // -- *vec2 -- - - /// 2 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<2, float, aligned_highp> aligned_highp_vec2; - - /// 2 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<2, float, aligned_mediump> aligned_mediump_vec2; - - /// 2 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<2, float, aligned_lowp> aligned_lowp_vec2; - - /// 2 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<2, double, aligned_highp> aligned_highp_dvec2; - - /// 2 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<2, double, aligned_mediump> aligned_mediump_dvec2; - - /// 2 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<2, double, aligned_lowp> aligned_lowp_dvec2; - - /// 2 components vector aligned in memory of signed integer numbers. - typedef vec<2, int, aligned_highp> aligned_highp_ivec2; - - /// 2 components vector aligned in memory of signed integer numbers. - typedef vec<2, int, aligned_mediump> aligned_mediump_ivec2; - - /// 2 components vector aligned in memory of signed integer numbers. - typedef vec<2, int, aligned_lowp> aligned_lowp_ivec2; - - /// 2 components vector aligned in memory of unsigned integer numbers. - typedef vec<2, uint, aligned_highp> aligned_highp_uvec2; - - /// 2 components vector aligned in memory of unsigned integer numbers. - typedef vec<2, uint, aligned_mediump> aligned_mediump_uvec2; - - /// 2 components vector aligned in memory of unsigned integer numbers. - typedef vec<2, uint, aligned_lowp> aligned_lowp_uvec2; - - /// 2 components vector aligned in memory of bool values. - typedef vec<2, bool, aligned_highp> aligned_highp_bvec2; - - /// 2 components vector aligned in memory of bool values. - typedef vec<2, bool, aligned_mediump> aligned_mediump_bvec2; - - /// 2 components vector aligned in memory of bool values. - typedef vec<2, bool, aligned_lowp> aligned_lowp_bvec2; - - /// 2 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<2, float, packed_highp> packed_highp_vec2; - - /// 2 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<2, float, packed_mediump> packed_mediump_vec2; - - /// 2 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<2, float, packed_lowp> packed_lowp_vec2; - - /// 2 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<2, double, packed_highp> packed_highp_dvec2; - - /// 2 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<2, double, packed_mediump> packed_mediump_dvec2; - - /// 2 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<2, double, packed_lowp> packed_lowp_dvec2; - - /// 2 components vector tightly packed in memory of signed integer numbers. - typedef vec<2, int, packed_highp> packed_highp_ivec2; - - /// 2 components vector tightly packed in memory of signed integer numbers. - typedef vec<2, int, packed_mediump> packed_mediump_ivec2; - - /// 2 components vector tightly packed in memory of signed integer numbers. - typedef vec<2, int, packed_lowp> packed_lowp_ivec2; - - /// 2 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<2, uint, packed_highp> packed_highp_uvec2; - - /// 2 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<2, uint, packed_mediump> packed_mediump_uvec2; - - /// 2 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<2, uint, packed_lowp> packed_lowp_uvec2; - - /// 2 components vector tightly packed in memory of bool values. - typedef vec<2, bool, packed_highp> packed_highp_bvec2; - - /// 2 components vector tightly packed in memory of bool values. - typedef vec<2, bool, packed_mediump> packed_mediump_bvec2; - - /// 2 components vector tightly packed in memory of bool values. - typedef vec<2, bool, packed_lowp> packed_lowp_bvec2; - - // -- *vec3 -- - - /// 3 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<3, float, aligned_highp> aligned_highp_vec3; - - /// 3 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<3, float, aligned_mediump> aligned_mediump_vec3; - - /// 3 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<3, float, aligned_lowp> aligned_lowp_vec3; - - /// 3 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<3, double, aligned_highp> aligned_highp_dvec3; - - /// 3 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<3, double, aligned_mediump> aligned_mediump_dvec3; - - /// 3 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<3, double, aligned_lowp> aligned_lowp_dvec3; - - /// 3 components vector aligned in memory of signed integer numbers. - typedef vec<3, int, aligned_highp> aligned_highp_ivec3; - - /// 3 components vector aligned in memory of signed integer numbers. - typedef vec<3, int, aligned_mediump> aligned_mediump_ivec3; - - /// 3 components vector aligned in memory of signed integer numbers. - typedef vec<3, int, aligned_lowp> aligned_lowp_ivec3; - - /// 3 components vector aligned in memory of unsigned integer numbers. - typedef vec<3, uint, aligned_highp> aligned_highp_uvec3; - - /// 3 components vector aligned in memory of unsigned integer numbers. - typedef vec<3, uint, aligned_mediump> aligned_mediump_uvec3; - - /// 3 components vector aligned in memory of unsigned integer numbers. - typedef vec<3, uint, aligned_lowp> aligned_lowp_uvec3; - - /// 3 components vector aligned in memory of bool values. - typedef vec<3, bool, aligned_highp> aligned_highp_bvec3; - - /// 3 components vector aligned in memory of bool values. - typedef vec<3, bool, aligned_mediump> aligned_mediump_bvec3; - - /// 3 components vector aligned in memory of bool values. - typedef vec<3, bool, aligned_lowp> aligned_lowp_bvec3; - - /// 3 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<3, float, packed_highp> packed_highp_vec3; - - /// 3 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<3, float, packed_mediump> packed_mediump_vec3; - - /// 3 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<3, float, packed_lowp> packed_lowp_vec3; - - /// 3 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<3, double, packed_highp> packed_highp_dvec3; - - /// 3 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<3, double, packed_mediump> packed_mediump_dvec3; - - /// 3 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<3, double, packed_lowp> packed_lowp_dvec3; - - /// 3 components vector tightly packed in memory of signed integer numbers. - typedef vec<3, int, packed_highp> packed_highp_ivec3; - - /// 3 components vector tightly packed in memory of signed integer numbers. - typedef vec<3, int, packed_mediump> packed_mediump_ivec3; - - /// 3 components vector tightly packed in memory of signed integer numbers. - typedef vec<3, int, packed_lowp> packed_lowp_ivec3; - - /// 3 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<3, uint, packed_highp> packed_highp_uvec3; - - /// 3 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<3, uint, packed_mediump> packed_mediump_uvec3; - - /// 3 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<3, uint, packed_lowp> packed_lowp_uvec3; - - /// 3 components vector tightly packed in memory of bool values. - typedef vec<3, bool, packed_highp> packed_highp_bvec3; - - /// 3 components vector tightly packed in memory of bool values. - typedef vec<3, bool, packed_mediump> packed_mediump_bvec3; - - /// 3 components vector tightly packed in memory of bool values. - typedef vec<3, bool, packed_lowp> packed_lowp_bvec3; - - // -- *vec4 -- - - /// 4 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<4, float, aligned_highp> aligned_highp_vec4; - - /// 4 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<4, float, aligned_mediump> aligned_mediump_vec4; - - /// 4 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<4, float, aligned_lowp> aligned_lowp_vec4; - - /// 4 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<4, double, aligned_highp> aligned_highp_dvec4; - - /// 4 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<4, double, aligned_mediump> aligned_mediump_dvec4; - - /// 4 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<4, double, aligned_lowp> aligned_lowp_dvec4; - - /// 4 components vector aligned in memory of signed integer numbers. - typedef vec<4, int, aligned_highp> aligned_highp_ivec4; - - /// 4 components vector aligned in memory of signed integer numbers. - typedef vec<4, int, aligned_mediump> aligned_mediump_ivec4; - - /// 4 components vector aligned in memory of signed integer numbers. - typedef vec<4, int, aligned_lowp> aligned_lowp_ivec4; - - /// 4 components vector aligned in memory of unsigned integer numbers. - typedef vec<4, uint, aligned_highp> aligned_highp_uvec4; - - /// 4 components vector aligned in memory of unsigned integer numbers. - typedef vec<4, uint, aligned_mediump> aligned_mediump_uvec4; - - /// 4 components vector aligned in memory of unsigned integer numbers. - typedef vec<4, uint, aligned_lowp> aligned_lowp_uvec4; - - /// 4 components vector aligned in memory of bool values. - typedef vec<4, bool, aligned_highp> aligned_highp_bvec4; - - /// 4 components vector aligned in memory of bool values. - typedef vec<4, bool, aligned_mediump> aligned_mediump_bvec4; - - /// 4 components vector aligned in memory of bool values. - typedef vec<4, bool, aligned_lowp> aligned_lowp_bvec4; - - /// 4 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<4, float, packed_highp> packed_highp_vec4; - - /// 4 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<4, float, packed_mediump> packed_mediump_vec4; - - /// 4 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<4, float, packed_lowp> packed_lowp_vec4; - - /// 4 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<4, double, packed_highp> packed_highp_dvec4; - - /// 4 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<4, double, packed_mediump> packed_mediump_dvec4; - - /// 4 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<4, double, packed_lowp> packed_lowp_dvec4; - - /// 4 components vector tightly packed in memory of signed integer numbers. - typedef vec<4, int, packed_highp> packed_highp_ivec4; - - /// 4 components vector tightly packed in memory of signed integer numbers. - typedef vec<4, int, packed_mediump> packed_mediump_ivec4; - - /// 4 components vector tightly packed in memory of signed integer numbers. - typedef vec<4, int, packed_lowp> packed_lowp_ivec4; - - /// 4 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<4, uint, packed_highp> packed_highp_uvec4; - - /// 4 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<4, uint, packed_mediump> packed_mediump_uvec4; - - /// 4 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<4, uint, packed_lowp> packed_lowp_uvec4; - - /// 4 components vector tightly packed in memory of bool values. - typedef vec<4, bool, packed_highp> packed_highp_bvec4; - - /// 4 components vector tightly packed in memory of bool values. - typedef vec<4, bool, packed_mediump> packed_mediump_bvec4; - - /// 4 components vector tightly packed in memory of bool values. - typedef vec<4, bool, packed_lowp> packed_lowp_bvec4; - - // -- *mat2 -- - - /// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 2, float, aligned_highp> aligned_highp_mat2; - - /// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 2, float, aligned_mediump> aligned_mediump_mat2; - - /// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 2, float, aligned_lowp> aligned_lowp_mat2; - - /// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 2, double, aligned_highp> aligned_highp_dmat2; - - /// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 2, double, aligned_mediump> aligned_mediump_dmat2; - - /// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 2, double, aligned_lowp> aligned_lowp_dmat2; - - /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 2, float, packed_highp> packed_highp_mat2; - - /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 2, float, packed_mediump> packed_mediump_mat2; - - /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 2, float, packed_lowp> packed_lowp_mat2; - - /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 2, double, packed_highp> packed_highp_dmat2; - - /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 2, double, packed_mediump> packed_mediump_dmat2; - - /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 2, double, packed_lowp> packed_lowp_dmat2; - - // -- *mat3 -- - - /// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 3, float, aligned_highp> aligned_highp_mat3; - - /// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 3, float, aligned_mediump> aligned_mediump_mat3; - - /// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 3, float, aligned_lowp> aligned_lowp_mat3; - - /// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 3, double, aligned_highp> aligned_highp_dmat3; - - /// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 3, double, aligned_mediump> aligned_mediump_dmat3; - - /// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 3, double, aligned_lowp> aligned_lowp_dmat3; - - /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 3, float, packed_highp> packed_highp_mat3; - - /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 3, float, packed_mediump> packed_mediump_mat3; - - /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 3, float, packed_lowp> packed_lowp_mat3; - - /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 3, double, packed_highp> packed_highp_dmat3; - - /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 3, double, packed_mediump> packed_mediump_dmat3; - - /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 3, double, packed_lowp> packed_lowp_dmat3; - - // -- *mat4 -- - - /// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 4, float, aligned_highp> aligned_highp_mat4; - - /// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 4, float, aligned_mediump> aligned_mediump_mat4; - - /// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 4, float, aligned_lowp> aligned_lowp_mat4; - - /// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 4, double, aligned_highp> aligned_highp_dmat4; - - /// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 4, double, aligned_mediump> aligned_mediump_dmat4; - - /// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 4, double, aligned_lowp> aligned_lowp_dmat4; - - /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 4, float, packed_highp> packed_highp_mat4; - - /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 4, float, packed_mediump> packed_mediump_mat4; - - /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 4, float, packed_lowp> packed_lowp_mat4; - - /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 4, double, packed_highp> packed_highp_dmat4; - - /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 4, double, packed_mediump> packed_mediump_dmat4; - - /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 4, double, packed_lowp> packed_lowp_dmat4; - - // -- *mat2x2 -- - - /// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 2, float, aligned_highp> aligned_highp_mat2x2; - - /// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 2, float, aligned_mediump> aligned_mediump_mat2x2; - - /// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 2, float, aligned_lowp> aligned_lowp_mat2x2; - - /// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 2, double, aligned_highp> aligned_highp_dmat2x2; - - /// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 2, double, aligned_mediump> aligned_mediump_dmat2x2; - - /// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 2, double, aligned_lowp> aligned_lowp_dmat2x2; - - /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 2, float, packed_highp> packed_highp_mat2x2; - - /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 2, float, packed_mediump> packed_mediump_mat2x2; - - /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 2, float, packed_lowp> packed_lowp_mat2x2; - - /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 2, double, packed_highp> packed_highp_dmat2x2; - - /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 2, double, packed_mediump> packed_mediump_dmat2x2; - - /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 2, double, packed_lowp> packed_lowp_dmat2x2; - - // -- *mat2x3 -- - - /// 2 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 3, float, aligned_highp> aligned_highp_mat2x3; - - /// 2 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 3, float, aligned_mediump> aligned_mediump_mat2x3; - - /// 2 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 3, float, aligned_lowp> aligned_lowp_mat2x3; - - /// 2 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 3, double, aligned_highp> aligned_highp_dmat2x3; - - /// 2 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 3, double, aligned_mediump> aligned_mediump_dmat2x3; - - /// 2 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 3, double, aligned_lowp> aligned_lowp_dmat2x3; - - /// 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 3, float, packed_highp> packed_highp_mat2x3; - - /// 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 3, float, packed_mediump> packed_mediump_mat2x3; - - /// 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 3, float, packed_lowp> packed_lowp_mat2x3; - - /// 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 3, double, packed_highp> packed_highp_dmat2x3; - - /// 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 3, double, packed_mediump> packed_mediump_dmat2x3; - - /// 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 3, double, packed_lowp> packed_lowp_dmat2x3; - - // -- *mat2x4 -- - - /// 2 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 4, float, aligned_highp> aligned_highp_mat2x4; - - /// 2 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 4, float, aligned_mediump> aligned_mediump_mat2x4; - - /// 2 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 4, float, aligned_lowp> aligned_lowp_mat2x4; - - /// 2 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 4, double, aligned_highp> aligned_highp_dmat2x4; - - /// 2 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 4, double, aligned_mediump> aligned_mediump_dmat2x4; - - /// 2 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 4, double, aligned_lowp> aligned_lowp_dmat2x4; - - /// 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 4, float, packed_highp> packed_highp_mat2x4; - - /// 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 4, float, packed_mediump> packed_mediump_mat2x4; - - /// 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 4, float, packed_lowp> packed_lowp_mat2x4; - - /// 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 4, double, packed_highp> packed_highp_dmat2x4; - - /// 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 4, double, packed_mediump> packed_mediump_dmat2x4; - - /// 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 4, double, packed_lowp> packed_lowp_dmat2x4; - - // -- *mat3x2 -- - - /// 3 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 2, float, aligned_highp> aligned_highp_mat3x2; - - /// 3 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 2, float, aligned_mediump> aligned_mediump_mat3x2; - - /// 3 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 2, float, aligned_lowp> aligned_lowp_mat3x2; - - /// 3 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 2, double, aligned_highp> aligned_highp_dmat3x2; - - /// 3 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 2, double, aligned_mediump> aligned_mediump_dmat3x2; - - /// 3 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 2, double, aligned_lowp> aligned_lowp_dmat3x2; - - /// 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 2, float, packed_highp> packed_highp_mat3x2; - - /// 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 2, float, packed_mediump> packed_mediump_mat3x2; - - /// 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 2, float, packed_lowp> packed_lowp_mat3x2; - - /// 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 2, double, packed_highp> packed_highp_dmat3x2; - - /// 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 2, double, packed_mediump> packed_mediump_dmat3x2; - - /// 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 2, double, packed_lowp> packed_lowp_dmat3x2; - - // -- *mat3x3 -- - - /// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 3, float, aligned_highp> aligned_highp_mat3x3; - - /// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 3, float, aligned_mediump> aligned_mediump_mat3x3; - - /// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 3, float, aligned_lowp> aligned_lowp_mat3x3; - - /// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 3, double, aligned_highp> aligned_highp_dmat3x3; - - /// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 3, double, aligned_mediump> aligned_mediump_dmat3x3; - - /// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 3, double, aligned_lowp> aligned_lowp_dmat3x3; - - /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 3, float, packed_highp> packed_highp_mat3x3; - - /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 3, float, packed_mediump> packed_mediump_mat3x3; - - /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 3, float, packed_lowp> packed_lowp_mat3x3; - - /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 3, double, packed_highp> packed_highp_dmat3x3; - - /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 3, double, packed_mediump> packed_mediump_dmat3x3; - - /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 3, double, packed_lowp> packed_lowp_dmat3x3; - - // -- *mat3x4 -- - - /// 3 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 4, float, aligned_highp> aligned_highp_mat3x4; - - /// 3 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 4, float, aligned_mediump> aligned_mediump_mat3x4; - - /// 3 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 4, float, aligned_lowp> aligned_lowp_mat3x4; - - /// 3 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 4, double, aligned_highp> aligned_highp_dmat3x4; - - /// 3 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 4, double, aligned_mediump> aligned_mediump_dmat3x4; - - /// 3 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 4, double, aligned_lowp> aligned_lowp_dmat3x4; - - /// 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 4, float, packed_highp> packed_highp_mat3x4; - - /// 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 4, float, packed_mediump> packed_mediump_mat3x4; - - /// 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 4, float, packed_lowp> packed_lowp_mat3x4; - - /// 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 4, double, packed_highp> packed_highp_dmat3x4; - - /// 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 4, double, packed_mediump> packed_mediump_dmat3x4; - - /// 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 4, double, packed_lowp> packed_lowp_dmat3x4; - - // -- *mat4x2 -- - - /// 4 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 2, float, aligned_highp> aligned_highp_mat4x2; - - /// 4 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 2, float, aligned_mediump> aligned_mediump_mat4x2; - - /// 4 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 2, float, aligned_lowp> aligned_lowp_mat4x2; - - /// 4 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 2, double, aligned_highp> aligned_highp_dmat4x2; - - /// 4 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 2, double, aligned_mediump> aligned_mediump_dmat4x2; - - /// 4 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 2, double, aligned_lowp> aligned_lowp_dmat4x2; - - /// 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 2, float, packed_highp> packed_highp_mat4x2; - - /// 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 2, float, packed_mediump> packed_mediump_mat4x2; - - /// 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 2, float, packed_lowp> packed_lowp_mat4x2; - - /// 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 2, double, packed_highp> packed_highp_dmat4x2; - - /// 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 2, double, packed_mediump> packed_mediump_dmat4x2; - - /// 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 2, double, packed_lowp> packed_lowp_dmat4x2; - - // -- *mat4x3 -- - - /// 4 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 3, float, aligned_highp> aligned_highp_mat4x3; - - /// 4 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 3, float, aligned_mediump> aligned_mediump_mat4x3; - - /// 4 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 3, float, aligned_lowp> aligned_lowp_mat4x3; - - /// 4 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 3, double, aligned_highp> aligned_highp_dmat4x3; - - /// 4 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 3, double, aligned_mediump> aligned_mediump_dmat4x3; - - /// 4 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 3, double, aligned_lowp> aligned_lowp_dmat4x3; - - /// 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 3, float, packed_highp> packed_highp_mat4x3; - - /// 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 3, float, packed_mediump> packed_mediump_mat4x3; - - /// 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 3, float, packed_lowp> packed_lowp_mat4x3; - - /// 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 3, double, packed_highp> packed_highp_dmat4x3; - - /// 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 3, double, packed_mediump> packed_mediump_dmat4x3; - - /// 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 3, double, packed_lowp> packed_lowp_dmat4x3; - - // -- *mat4x4 -- - - /// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 4, float, aligned_highp> aligned_highp_mat4x4; - - /// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 4, float, aligned_mediump> aligned_mediump_mat4x4; - - /// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 4, float, aligned_lowp> aligned_lowp_mat4x4; - - /// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 4, double, aligned_highp> aligned_highp_dmat4x4; - - /// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 4, double, aligned_mediump> aligned_mediump_dmat4x4; - - /// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 4, double, aligned_lowp> aligned_lowp_dmat4x4; - - /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 4, float, packed_highp> packed_highp_mat4x4; - - /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 4, float, packed_mediump> packed_mediump_mat4x4; - - /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 4, float, packed_lowp> packed_lowp_mat4x4; - - /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 4, double, packed_highp> packed_highp_dmat4x4; - - /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 4, double, packed_mediump> packed_mediump_dmat4x4; - - /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 4, double, packed_lowp> packed_lowp_dmat4x4; - - // -- default -- - -#if(defined(GLM_PRECISION_LOWP_FLOAT)) - typedef aligned_lowp_vec1 aligned_vec1; - typedef aligned_lowp_vec2 aligned_vec2; - typedef aligned_lowp_vec3 aligned_vec3; - typedef aligned_lowp_vec4 aligned_vec4; - typedef packed_lowp_vec1 packed_vec1; - typedef packed_lowp_vec2 packed_vec2; - typedef packed_lowp_vec3 packed_vec3; - typedef packed_lowp_vec4 packed_vec4; - - typedef aligned_lowp_mat2 aligned_mat2; - typedef aligned_lowp_mat3 aligned_mat3; - typedef aligned_lowp_mat4 aligned_mat4; - typedef packed_lowp_mat2 packed_mat2; - typedef packed_lowp_mat3 packed_mat3; - typedef packed_lowp_mat4 packed_mat4; - - typedef aligned_lowp_mat2x2 aligned_mat2x2; - typedef aligned_lowp_mat2x3 aligned_mat2x3; - typedef aligned_lowp_mat2x4 aligned_mat2x4; - typedef aligned_lowp_mat3x2 aligned_mat3x2; - typedef aligned_lowp_mat3x3 aligned_mat3x3; - typedef aligned_lowp_mat3x4 aligned_mat3x4; - typedef aligned_lowp_mat4x2 aligned_mat4x2; - typedef aligned_lowp_mat4x3 aligned_mat4x3; - typedef aligned_lowp_mat4x4 aligned_mat4x4; - typedef packed_lowp_mat2x2 packed_mat2x2; - typedef packed_lowp_mat2x3 packed_mat2x3; - typedef packed_lowp_mat2x4 packed_mat2x4; - typedef packed_lowp_mat3x2 packed_mat3x2; - typedef packed_lowp_mat3x3 packed_mat3x3; - typedef packed_lowp_mat3x4 packed_mat3x4; - typedef packed_lowp_mat4x2 packed_mat4x2; - typedef packed_lowp_mat4x3 packed_mat4x3; - typedef packed_lowp_mat4x4 packed_mat4x4; -#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT)) - typedef aligned_mediump_vec1 aligned_vec1; - typedef aligned_mediump_vec2 aligned_vec2; - typedef aligned_mediump_vec3 aligned_vec3; - typedef aligned_mediump_vec4 aligned_vec4; - typedef packed_mediump_vec1 packed_vec1; - typedef packed_mediump_vec2 packed_vec2; - typedef packed_mediump_vec3 packed_vec3; - typedef packed_mediump_vec4 packed_vec4; - - typedef aligned_mediump_mat2 aligned_mat2; - typedef aligned_mediump_mat3 aligned_mat3; - typedef aligned_mediump_mat4 aligned_mat4; - typedef packed_mediump_mat2 packed_mat2; - typedef packed_mediump_mat3 packed_mat3; - typedef packed_mediump_mat4 packed_mat4; - - typedef aligned_mediump_mat2x2 aligned_mat2x2; - typedef aligned_mediump_mat2x3 aligned_mat2x3; - typedef aligned_mediump_mat2x4 aligned_mat2x4; - typedef aligned_mediump_mat3x2 aligned_mat3x2; - typedef aligned_mediump_mat3x3 aligned_mat3x3; - typedef aligned_mediump_mat3x4 aligned_mat3x4; - typedef aligned_mediump_mat4x2 aligned_mat4x2; - typedef aligned_mediump_mat4x3 aligned_mat4x3; - typedef aligned_mediump_mat4x4 aligned_mat4x4; - typedef packed_mediump_mat2x2 packed_mat2x2; - typedef packed_mediump_mat2x3 packed_mat2x3; - typedef packed_mediump_mat2x4 packed_mat2x4; - typedef packed_mediump_mat3x2 packed_mat3x2; - typedef packed_mediump_mat3x3 packed_mat3x3; - typedef packed_mediump_mat3x4 packed_mat3x4; - typedef packed_mediump_mat4x2 packed_mat4x2; - typedef packed_mediump_mat4x3 packed_mat4x3; - typedef packed_mediump_mat4x4 packed_mat4x4; -#else //defined(GLM_PRECISION_HIGHP_FLOAT) - /// 1 component vector aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_vec1 aligned_vec1; - - /// 2 components vector aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_vec2 aligned_vec2; - - /// 3 components vector aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_vec3 aligned_vec3; - - /// 4 components vector aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_vec4 aligned_vec4; - - /// 1 component vector tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_vec1 packed_vec1; - - /// 2 components vector tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_vec2 packed_vec2; - - /// 3 components vector tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_vec3 packed_vec3; - - /// 4 components vector tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_vec4 packed_vec4; - - /// 2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat2 aligned_mat2; - - /// 3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat3 aligned_mat3; - - /// 4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat4 aligned_mat4; - - /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat2 packed_mat2; - - /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat3 packed_mat3; - - /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat4 packed_mat4; - - /// 2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat2x2 aligned_mat2x2; - - /// 2 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat2x3 aligned_mat2x3; - - /// 2 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat2x4 aligned_mat2x4; - - /// 3 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat3x2 aligned_mat3x2; - - /// 3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat3x3 aligned_mat3x3; - - /// 3 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat3x4 aligned_mat3x4; - - /// 4 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat4x2 aligned_mat4x2; - - /// 4 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat4x3 aligned_mat4x3; - - /// 4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat4x4 aligned_mat4x4; - - /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat2x2 packed_mat2x2; - - /// 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat2x3 packed_mat2x3; - - /// 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat2x4 packed_mat2x4; - - /// 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat3x2 packed_mat3x2; - - /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat3x3 packed_mat3x3; - - /// 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat3x4 packed_mat3x4; - - /// 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat4x2 packed_mat4x2; - - /// 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat4x3 packed_mat4x3; - - /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat4x4 packed_mat4x4; -#endif//GLM_PRECISION - -#if(defined(GLM_PRECISION_LOWP_DOUBLE)) - typedef aligned_lowp_dvec1 aligned_dvec1; - typedef aligned_lowp_dvec2 aligned_dvec2; - typedef aligned_lowp_dvec3 aligned_dvec3; - typedef aligned_lowp_dvec4 aligned_dvec4; - typedef packed_lowp_dvec1 packed_dvec1; - typedef packed_lowp_dvec2 packed_dvec2; - typedef packed_lowp_dvec3 packed_dvec3; - typedef packed_lowp_dvec4 packed_dvec4; - - typedef aligned_lowp_dmat2 aligned_dmat2; - typedef aligned_lowp_dmat3 aligned_dmat3; - typedef aligned_lowp_dmat4 aligned_dmat4; - typedef packed_lowp_dmat2 packed_dmat2; - typedef packed_lowp_dmat3 packed_dmat3; - typedef packed_lowp_dmat4 packed_dmat4; - - typedef aligned_lowp_dmat2x2 aligned_dmat2x2; - typedef aligned_lowp_dmat2x3 aligned_dmat2x3; - typedef aligned_lowp_dmat2x4 aligned_dmat2x4; - typedef aligned_lowp_dmat3x2 aligned_dmat3x2; - typedef aligned_lowp_dmat3x3 aligned_dmat3x3; - typedef aligned_lowp_dmat3x4 aligned_dmat3x4; - typedef aligned_lowp_dmat4x2 aligned_dmat4x2; - typedef aligned_lowp_dmat4x3 aligned_dmat4x3; - typedef aligned_lowp_dmat4x4 aligned_dmat4x4; - typedef packed_lowp_dmat2x2 packed_dmat2x2; - typedef packed_lowp_dmat2x3 packed_dmat2x3; - typedef packed_lowp_dmat2x4 packed_dmat2x4; - typedef packed_lowp_dmat3x2 packed_dmat3x2; - typedef packed_lowp_dmat3x3 packed_dmat3x3; - typedef packed_lowp_dmat3x4 packed_dmat3x4; - typedef packed_lowp_dmat4x2 packed_dmat4x2; - typedef packed_lowp_dmat4x3 packed_dmat4x3; - typedef packed_lowp_dmat4x4 packed_dmat4x4; -#elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE)) - typedef aligned_mediump_dvec1 aligned_dvec1; - typedef aligned_mediump_dvec2 aligned_dvec2; - typedef aligned_mediump_dvec3 aligned_dvec3; - typedef aligned_mediump_dvec4 aligned_dvec4; - typedef packed_mediump_dvec1 packed_dvec1; - typedef packed_mediump_dvec2 packed_dvec2; - typedef packed_mediump_dvec3 packed_dvec3; - typedef packed_mediump_dvec4 packed_dvec4; - - typedef aligned_mediump_dmat2 aligned_dmat2; - typedef aligned_mediump_dmat3 aligned_dmat3; - typedef aligned_mediump_dmat4 aligned_dmat4; - typedef packed_mediump_dmat2 packed_dmat2; - typedef packed_mediump_dmat3 packed_dmat3; - typedef packed_mediump_dmat4 packed_dmat4; - - typedef aligned_mediump_dmat2x2 aligned_dmat2x2; - typedef aligned_mediump_dmat2x3 aligned_dmat2x3; - typedef aligned_mediump_dmat2x4 aligned_dmat2x4; - typedef aligned_mediump_dmat3x2 aligned_dmat3x2; - typedef aligned_mediump_dmat3x3 aligned_dmat3x3; - typedef aligned_mediump_dmat3x4 aligned_dmat3x4; - typedef aligned_mediump_dmat4x2 aligned_dmat4x2; - typedef aligned_mediump_dmat4x3 aligned_dmat4x3; - typedef aligned_mediump_dmat4x4 aligned_dmat4x4; - typedef packed_mediump_dmat2x2 packed_dmat2x2; - typedef packed_mediump_dmat2x3 packed_dmat2x3; - typedef packed_mediump_dmat2x4 packed_dmat2x4; - typedef packed_mediump_dmat3x2 packed_dmat3x2; - typedef packed_mediump_dmat3x3 packed_dmat3x3; - typedef packed_mediump_dmat3x4 packed_dmat3x4; - typedef packed_mediump_dmat4x2 packed_dmat4x2; - typedef packed_mediump_dmat4x3 packed_dmat4x3; - typedef packed_mediump_dmat4x4 packed_dmat4x4; -#else //defined(GLM_PRECISION_HIGHP_DOUBLE) - /// 1 component vector aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dvec1 aligned_dvec1; - - /// 2 components vector aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dvec2 aligned_dvec2; - - /// 3 components vector aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dvec3 aligned_dvec3; - - /// 4 components vector aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dvec4 aligned_dvec4; - - /// 1 component vector tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dvec1 packed_dvec1; - - /// 2 components vector tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dvec2 packed_dvec2; - - /// 3 components vector tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dvec3 packed_dvec3; - - /// 4 components vector tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dvec4 packed_dvec4; - - /// 2 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat2 aligned_dmat2; - - /// 3 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat3 aligned_dmat3; - - /// 4 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat4 aligned_dmat4; - - /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat2 packed_dmat2; - - /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat3 packed_dmat3; - - /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat4 packed_dmat4; - - /// 2 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat2x2 aligned_dmat2x2; - - /// 2 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat2x3 aligned_dmat2x3; - - /// 2 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat2x4 aligned_dmat2x4; - - /// 3 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat3x2 aligned_dmat3x2; - - /// 3 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat3x3 aligned_dmat3x3; - - /// 3 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat3x4 aligned_dmat3x4; - - /// 4 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat4x2 aligned_dmat4x2; - - /// 4 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat4x3 aligned_dmat4x3; - - /// 4 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat4x4 aligned_dmat4x4; - - /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat2x2 packed_dmat2x2; - - /// 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat2x3 packed_dmat2x3; - - /// 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat2x4 packed_dmat2x4; - - /// 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat3x2 packed_dmat3x2; - - /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat3x3 packed_dmat3x3; - - /// 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat3x4 packed_dmat3x4; - - /// 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat4x2 packed_dmat4x2; - - /// 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat4x3 packed_dmat4x3; - - /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat4x4 packed_dmat4x4; -#endif//GLM_PRECISION - -#if(defined(GLM_PRECISION_LOWP_INT)) - typedef aligned_lowp_ivec1 aligned_ivec1; - typedef aligned_lowp_ivec2 aligned_ivec2; - typedef aligned_lowp_ivec3 aligned_ivec3; - typedef aligned_lowp_ivec4 aligned_ivec4; -#elif(defined(GLM_PRECISION_MEDIUMP_INT)) - typedef aligned_mediump_ivec1 aligned_ivec1; - typedef aligned_mediump_ivec2 aligned_ivec2; - typedef aligned_mediump_ivec3 aligned_ivec3; - typedef aligned_mediump_ivec4 aligned_ivec4; -#else //defined(GLM_PRECISION_HIGHP_INT) - /// 1 component vector aligned in memory of signed integer numbers. - typedef aligned_highp_ivec1 aligned_ivec1; - - /// 2 components vector aligned in memory of signed integer numbers. - typedef aligned_highp_ivec2 aligned_ivec2; - - /// 3 components vector aligned in memory of signed integer numbers. - typedef aligned_highp_ivec3 aligned_ivec3; - - /// 4 components vector aligned in memory of signed integer numbers. - typedef aligned_highp_ivec4 aligned_ivec4; - - /// 1 component vector tightly packed in memory of signed integer numbers. - typedef packed_highp_ivec1 packed_ivec1; - - /// 2 components vector tightly packed in memory of signed integer numbers. - typedef packed_highp_ivec2 packed_ivec2; - - /// 3 components vector tightly packed in memory of signed integer numbers. - typedef packed_highp_ivec3 packed_ivec3; - - /// 4 components vector tightly packed in memory of signed integer numbers. - typedef packed_highp_ivec4 packed_ivec4; -#endif//GLM_PRECISION - - // -- Unsigned integer definition -- - -#if(defined(GLM_PRECISION_LOWP_UINT)) - typedef aligned_lowp_uvec1 aligned_uvec1; - typedef aligned_lowp_uvec2 aligned_uvec2; - typedef aligned_lowp_uvec3 aligned_uvec3; - typedef aligned_lowp_uvec4 aligned_uvec4; -#elif(defined(GLM_PRECISION_MEDIUMP_UINT)) - typedef aligned_mediump_uvec1 aligned_uvec1; - typedef aligned_mediump_uvec2 aligned_uvec2; - typedef aligned_mediump_uvec3 aligned_uvec3; - typedef aligned_mediump_uvec4 aligned_uvec4; -#else //defined(GLM_PRECISION_HIGHP_UINT) - /// 1 component vector aligned in memory of unsigned integer numbers. - typedef aligned_highp_uvec1 aligned_uvec1; - - /// 2 components vector aligned in memory of unsigned integer numbers. - typedef aligned_highp_uvec2 aligned_uvec2; - - /// 3 components vector aligned in memory of unsigned integer numbers. - typedef aligned_highp_uvec3 aligned_uvec3; - - /// 4 components vector aligned in memory of unsigned integer numbers. - typedef aligned_highp_uvec4 aligned_uvec4; - - /// 1 component vector tightly packed in memory of unsigned integer numbers. - typedef packed_highp_uvec1 packed_uvec1; - - /// 2 components vector tightly packed in memory of unsigned integer numbers. - typedef packed_highp_uvec2 packed_uvec2; - - /// 3 components vector tightly packed in memory of unsigned integer numbers. - typedef packed_highp_uvec3 packed_uvec3; - - /// 4 components vector tightly packed in memory of unsigned integer numbers. - typedef packed_highp_uvec4 packed_uvec4; -#endif//GLM_PRECISION - -#if(defined(GLM_PRECISION_LOWP_BOOL)) - typedef aligned_lowp_bvec1 aligned_bvec1; - typedef aligned_lowp_bvec2 aligned_bvec2; - typedef aligned_lowp_bvec3 aligned_bvec3; - typedef aligned_lowp_bvec4 aligned_bvec4; -#elif(defined(GLM_PRECISION_MEDIUMP_BOOL)) - typedef aligned_mediump_bvec1 aligned_bvec1; - typedef aligned_mediump_bvec2 aligned_bvec2; - typedef aligned_mediump_bvec3 aligned_bvec3; - typedef aligned_mediump_bvec4 aligned_bvec4; -#else //defined(GLM_PRECISION_HIGHP_BOOL) - /// 1 component vector aligned in memory of bool values. - typedef aligned_highp_bvec1 aligned_bvec1; - - /// 2 components vector aligned in memory of bool values. - typedef aligned_highp_bvec2 aligned_bvec2; - - /// 3 components vector aligned in memory of bool values. - typedef aligned_highp_bvec3 aligned_bvec3; - - /// 4 components vector aligned in memory of bool values. - typedef aligned_highp_bvec4 aligned_bvec4; - - /// 1 components vector tightly packed in memory of bool values. - typedef packed_highp_bvec1 packed_bvec1; - - /// 2 components vector tightly packed in memory of bool values. - typedef packed_highp_bvec2 packed_bvec2; - - /// 3 components vector tightly packed in memory of bool values. - typedef packed_highp_bvec3 packed_bvec3; - - /// 4 components vector tightly packed in memory of bool values. - typedef packed_highp_bvec4 packed_bvec4; -#endif//GLM_PRECISION - - /// @} -}//namespace glm diff --git a/src/vendor/glm/gtc/type_precision.hpp b/src/vendor/glm/gtc/type_precision.hpp deleted file mode 100755 index 775e2f4..0000000 --- a/src/vendor/glm/gtc/type_precision.hpp +++ /dev/null @@ -1,2094 +0,0 @@ -/// @ref gtc_type_precision -/// @file glm/gtc/type_precision.hpp -/// -/// @see core (dependence) -/// @see gtc_quaternion (dependence) -/// -/// @defgroup gtc_type_precision GLM_GTC_type_precision -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Defines specific C++-based qualifier types. - -#pragma once - -// Dependency: -#include "../gtc/quaternion.hpp" -#include "../gtc/vec1.hpp" -#include "../ext/vector_int1_sized.hpp" -#include "../ext/vector_int2_sized.hpp" -#include "../ext/vector_int3_sized.hpp" -#include "../ext/vector_int4_sized.hpp" -#include "../ext/scalar_int_sized.hpp" -#include "../ext/vector_uint1_sized.hpp" -#include "../ext/vector_uint2_sized.hpp" -#include "../ext/vector_uint3_sized.hpp" -#include "../ext/vector_uint4_sized.hpp" -#include "../ext/scalar_uint_sized.hpp" -#include "../detail/type_vec2.hpp" -#include "../detail/type_vec3.hpp" -#include "../detail/type_vec4.hpp" -#include "../detail/type_mat2x2.hpp" -#include "../detail/type_mat2x3.hpp" -#include "../detail/type_mat2x4.hpp" -#include "../detail/type_mat3x2.hpp" -#include "../detail/type_mat3x3.hpp" -#include "../detail/type_mat3x4.hpp" -#include "../detail/type_mat4x2.hpp" -#include "../detail/type_mat4x3.hpp" -#include "../detail/type_mat4x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_type_precision extension included") -#endif - -namespace glm -{ - /////////////////////////// - // Signed int vector types - - /// @addtogroup gtc_type_precision - /// @{ - - /// Low qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 lowp_int8; - - /// Low qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 lowp_int16; - - /// Low qualifier 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 lowp_int32; - - /// Low qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 lowp_int64; - - /// Low qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 lowp_int8_t; - - /// Low qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 lowp_int16_t; - - /// Low qualifier 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 lowp_int32_t; - - /// Low qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 lowp_int64_t; - - /// Low qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 lowp_i8; - - /// Low qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 lowp_i16; - - /// Low qualifier 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 lowp_i32; - - /// Low qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 lowp_i64; - - /// Medium qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 mediump_int8; - - /// Medium qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 mediump_int16; - - /// Medium qualifier 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 mediump_int32; - - /// Medium qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 mediump_int64; - - /// Medium qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 mediump_int8_t; - - /// Medium qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 mediump_int16_t; - - /// Medium qualifier 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 mediump_int32_t; - - /// Medium qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 mediump_int64_t; - - /// Medium qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 mediump_i8; - - /// Medium qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 mediump_i16; - - /// Medium qualifier 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 mediump_i32; - - /// Medium qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 mediump_i64; - - /// High qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 highp_int8; - - /// High qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 highp_int16; - - /// High qualifier 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 highp_int32; - - /// High qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 highp_int64; - - /// High qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 highp_int8_t; - - /// High qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 highp_int16_t; - - /// 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 highp_int32_t; - - /// High qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 highp_int64_t; - - /// High qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 highp_i8; - - /// High qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 highp_i16; - - /// High qualifier 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 highp_i32; - - /// High qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 highp_i64; - - -#if GLM_HAS_EXTENDED_INTEGER_TYPE - using std::int8_t; - using std::int16_t; - using std::int32_t; - using std::int64_t; -#else - /// 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 int8_t; - - /// 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 int16_t; - - /// 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 int32_t; - - /// 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 int64_t; -#endif - - /// 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 i8; - - /// 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 i16; - - /// 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 i32; - - /// 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 i64; - - ///////////////////////////// - // Unsigned int vector types - - /// Low qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 lowp_uint8; - - /// Low qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 lowp_uint16; - - /// Low qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 lowp_uint32; - - /// Low qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 lowp_uint64; - - /// Low qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 lowp_uint8_t; - - /// Low qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 lowp_uint16_t; - - /// Low qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 lowp_uint32_t; - - /// Low qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 lowp_uint64_t; - - /// Low qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 lowp_u8; - - /// Low qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 lowp_u16; - - /// Low qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 lowp_u32; - - /// Low qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 lowp_u64; - - /// Medium qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 mediump_uint8; - - /// Medium qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 mediump_uint16; - - /// Medium qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 mediump_uint32; - - /// Medium qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 mediump_uint64; - - /// Medium qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 mediump_uint8_t; - - /// Medium qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 mediump_uint16_t; - - /// Medium qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 mediump_uint32_t; - - /// Medium qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 mediump_uint64_t; - - /// Medium qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 mediump_u8; - - /// Medium qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 mediump_u16; - - /// Medium qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 mediump_u32; - - /// Medium qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 mediump_u64; - - /// High qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 highp_uint8; - - /// High qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 highp_uint16; - - /// High qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 highp_uint32; - - /// High qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 highp_uint64; - - /// High qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 highp_uint8_t; - - /// High qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 highp_uint16_t; - - /// High qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 highp_uint32_t; - - /// High qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 highp_uint64_t; - - /// High qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 highp_u8; - - /// High qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 highp_u16; - - /// High qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 highp_u32; - - /// High qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 highp_u64; - -#if GLM_HAS_EXTENDED_INTEGER_TYPE - using std::uint8_t; - using std::uint16_t; - using std::uint32_t; - using std::uint64_t; -#else - /// Default qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 uint8_t; - - /// Default qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 uint16_t; - - /// Default qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 uint32_t; - - /// Default qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 uint64_t; -#endif - - /// Default qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 u8; - - /// Default qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 u16; - - /// Default qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 u32; - - /// Default qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 u64; - - - - - - ////////////////////// - // Float vector types - - /// Single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float float32; - - /// Double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef double float64; - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_float32; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_float64; - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_float32_t; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_float64_t; - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_f32; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_f64; - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_float32; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_float64; - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_float32_t; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_float64_t; - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_f32; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_f64; - - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_float32; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_float64; - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_float32_t; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_float64_t; - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_f32; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_f64; - - - /// Medium 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 mediump_float32; - - /// Medium 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 mediump_float64; - - /// Medium 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 mediump_float32_t; - - /// Medium 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 mediump_float64_t; - - /// Medium 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 mediump_f32; - - /// Medium 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 mediump_f64; - - - /// High 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 highp_float32; - - /// High 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 highp_float64; - - /// High 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 highp_float32_t; - - /// High 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 highp_float64_t; - - /// High 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 highp_f32; - - /// High 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 highp_f64; - - -#if(defined(GLM_PRECISION_LOWP_FLOAT)) - /// Default 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef lowp_float32_t float32_t; - - /// Default 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef lowp_float64_t float64_t; - - /// Default 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef lowp_f32 f32; - - /// Default 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef lowp_f64 f64; - -#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT)) - /// Default 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef mediump_float32 float32_t; - - /// Default 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef mediump_float64 float64_t; - - /// Default 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef mediump_float32 f32; - - /// Default 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef mediump_float64 f64; - -#else//(defined(GLM_PRECISION_HIGHP_FLOAT)) - - /// Default 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef highp_float32_t float32_t; - - /// Default 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef highp_float64_t float64_t; - - /// Default 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef highp_float32_t f32; - - /// Default 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef highp_float64_t f64; -#endif - - - /// Low single-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, float, lowp> lowp_fvec1; - - /// Low single-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, float, lowp> lowp_fvec2; - - /// Low single-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, float, lowp> lowp_fvec3; - - /// Low single-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, float, lowp> lowp_fvec4; - - - /// Medium single-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, float, mediump> mediump_fvec1; - - /// Medium Single-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, float, mediump> mediump_fvec2; - - /// Medium Single-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, float, mediump> mediump_fvec3; - - /// Medium Single-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, float, mediump> mediump_fvec4; - - - /// High single-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, float, highp> highp_fvec1; - - /// High Single-qualifier floating-point vector of 2 components. - /// @see core_precision - typedef vec<2, float, highp> highp_fvec2; - - /// High Single-qualifier floating-point vector of 3 components. - /// @see core_precision - typedef vec<3, float, highp> highp_fvec3; - - /// High Single-qualifier floating-point vector of 4 components. - /// @see core_precision - typedef vec<4, float, highp> highp_fvec4; - - - /// Low single-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, f32, lowp> lowp_f32vec1; - - /// Low single-qualifier floating-point vector of 2 components. - /// @see core_precision - typedef vec<2, f32, lowp> lowp_f32vec2; - - /// Low single-qualifier floating-point vector of 3 components. - /// @see core_precision - typedef vec<3, f32, lowp> lowp_f32vec3; - - /// Low single-qualifier floating-point vector of 4 components. - /// @see core_precision - typedef vec<4, f32, lowp> lowp_f32vec4; - - /// Medium single-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, f32, mediump> mediump_f32vec1; - - /// Medium single-qualifier floating-point vector of 2 components. - /// @see core_precision - typedef vec<2, f32, mediump> mediump_f32vec2; - - /// Medium single-qualifier floating-point vector of 3 components. - /// @see core_precision - typedef vec<3, f32, mediump> mediump_f32vec3; - - /// Medium single-qualifier floating-point vector of 4 components. - /// @see core_precision - typedef vec<4, f32, mediump> mediump_f32vec4; - - /// High single-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, f32, highp> highp_f32vec1; - - /// High single-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, f32, highp> highp_f32vec2; - - /// High single-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, f32, highp> highp_f32vec3; - - /// High single-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, f32, highp> highp_f32vec4; - - - /// Low double-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, f64, lowp> lowp_f64vec1; - - /// Low double-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, f64, lowp> lowp_f64vec2; - - /// Low double-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, f64, lowp> lowp_f64vec3; - - /// Low double-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, f64, lowp> lowp_f64vec4; - - /// Medium double-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, f64, mediump> mediump_f64vec1; - - /// Medium double-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, f64, mediump> mediump_f64vec2; - - /// Medium double-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, f64, mediump> mediump_f64vec3; - - /// Medium double-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, f64, mediump> mediump_f64vec4; - - /// High double-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, f64, highp> highp_f64vec1; - - /// High double-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, f64, highp> highp_f64vec2; - - /// High double-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, f64, highp> highp_f64vec3; - - /// High double-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, f64, highp> highp_f64vec4; - - - - ////////////////////// - // Float matrix types - - /// Low single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef lowp_f32 lowp_fmat1x1; - - /// Low single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, lowp> lowp_fmat2x2; - - /// Low single-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f32, lowp> lowp_fmat2x3; - - /// Low single-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f32, lowp> lowp_fmat2x4; - - /// Low single-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f32, lowp> lowp_fmat3x2; - - /// Low single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, lowp> lowp_fmat3x3; - - /// Low single-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f32, lowp> lowp_fmat3x4; - - /// Low single-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f32, lowp> lowp_fmat4x2; - - /// Low single-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f32, lowp> lowp_fmat4x3; - - /// Low single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, lowp> lowp_fmat4x4; - - /// Low single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef lowp_fmat1x1 lowp_fmat1; - - /// Low single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef lowp_fmat2x2 lowp_fmat2; - - /// Low single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef lowp_fmat3x3 lowp_fmat3; - - /// Low single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef lowp_fmat4x4 lowp_fmat4; - - - /// Medium single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef mediump_f32 mediump_fmat1x1; - - /// Medium single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, mediump> mediump_fmat2x2; - - /// Medium single-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f32, mediump> mediump_fmat2x3; - - /// Medium single-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f32, mediump> mediump_fmat2x4; - - /// Medium single-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f32, mediump> mediump_fmat3x2; - - /// Medium single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, mediump> mediump_fmat3x3; - - /// Medium single-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f32, mediump> mediump_fmat3x4; - - /// Medium single-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f32, mediump> mediump_fmat4x2; - - /// Medium single-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f32, mediump> mediump_fmat4x3; - - /// Medium single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, mediump> mediump_fmat4x4; - - /// Medium single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef mediump_fmat1x1 mediump_fmat1; - - /// Medium single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mediump_fmat2x2 mediump_fmat2; - - /// Medium single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mediump_fmat3x3 mediump_fmat3; - - /// Medium single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mediump_fmat4x4 mediump_fmat4; - - - /// High single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef highp_f32 highp_fmat1x1; - - /// High single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, highp> highp_fmat2x2; - - /// High single-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f32, highp> highp_fmat2x3; - - /// High single-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f32, highp> highp_fmat2x4; - - /// High single-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f32, highp> highp_fmat3x2; - - /// High single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, highp> highp_fmat3x3; - - /// High single-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f32, highp> highp_fmat3x4; - - /// High single-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f32, highp> highp_fmat4x2; - - /// High single-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f32, highp> highp_fmat4x3; - - /// High single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, highp> highp_fmat4x4; - - /// High single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef highp_fmat1x1 highp_fmat1; - - /// High single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef highp_fmat2x2 highp_fmat2; - - /// High single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef highp_fmat3x3 highp_fmat3; - - /// High single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef highp_fmat4x4 highp_fmat4; - - - /// Low single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f32 lowp_f32mat1x1; - - /// Low single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, lowp> lowp_f32mat2x2; - - /// Low single-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f32, lowp> lowp_f32mat2x3; - - /// Low single-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f32, lowp> lowp_f32mat2x4; - - /// Low single-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f32, lowp> lowp_f32mat3x2; - - /// Low single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, lowp> lowp_f32mat3x3; - - /// Low single-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f32, lowp> lowp_f32mat3x4; - - /// Low single-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f32, lowp> lowp_f32mat4x2; - - /// Low single-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f32, lowp> lowp_f32mat4x3; - - /// Low single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, lowp> lowp_f32mat4x4; - - /// Low single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef detail::tmat1x1 lowp_f32mat1; - - /// Low single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef lowp_f32mat2x2 lowp_f32mat2; - - /// Low single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef lowp_f32mat3x3 lowp_f32mat3; - - /// Low single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef lowp_f32mat4x4 lowp_f32mat4; - - - /// High single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f32 mediump_f32mat1x1; - - /// Low single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, mediump> mediump_f32mat2x2; - - /// Medium single-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f32, mediump> mediump_f32mat2x3; - - /// Medium single-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f32, mediump> mediump_f32mat2x4; - - /// Medium single-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f32, mediump> mediump_f32mat3x2; - - /// Medium single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, mediump> mediump_f32mat3x3; - - /// Medium single-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f32, mediump> mediump_f32mat3x4; - - /// Medium single-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f32, mediump> mediump_f32mat4x2; - - /// Medium single-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f32, mediump> mediump_f32mat4x3; - - /// Medium single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, mediump> mediump_f32mat4x4; - - /// Medium single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef detail::tmat1x1 f32mat1; - - /// Medium single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mediump_f32mat2x2 mediump_f32mat2; - - /// Medium single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mediump_f32mat3x3 mediump_f32mat3; - - /// Medium single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mediump_f32mat4x4 mediump_f32mat4; - - - /// High single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f32 highp_f32mat1x1; - - /// High single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, highp> highp_f32mat2x2; - - /// High single-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f32, highp> highp_f32mat2x3; - - /// High single-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f32, highp> highp_f32mat2x4; - - /// High single-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f32, highp> highp_f32mat3x2; - - /// High single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, highp> highp_f32mat3x3; - - /// High single-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f32, highp> highp_f32mat3x4; - - /// High single-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f32, highp> highp_f32mat4x2; - - /// High single-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f32, highp> highp_f32mat4x3; - - /// High single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, highp> highp_f32mat4x4; - - /// High single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef detail::tmat1x1 f32mat1; - - /// High single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef highp_f32mat2x2 highp_f32mat2; - - /// High single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef highp_f32mat3x3 highp_f32mat3; - - /// High single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef highp_f32mat4x4 highp_f32mat4; - - - /// Low double-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f64 lowp_f64mat1x1; - - /// Low double-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f64, lowp> lowp_f64mat2x2; - - /// Low double-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f64, lowp> lowp_f64mat2x3; - - /// Low double-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f64, lowp> lowp_f64mat2x4; - - /// Low double-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f64, lowp> lowp_f64mat3x2; - - /// Low double-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f64, lowp> lowp_f64mat3x3; - - /// Low double-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f64, lowp> lowp_f64mat3x4; - - /// Low double-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f64, lowp> lowp_f64mat4x2; - - /// Low double-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f64, lowp> lowp_f64mat4x3; - - /// Low double-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f64, lowp> lowp_f64mat4x4; - - /// Low double-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef lowp_f64mat1x1 lowp_f64mat1; - - /// Low double-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef lowp_f64mat2x2 lowp_f64mat2; - - /// Low double-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef lowp_f64mat3x3 lowp_f64mat3; - - /// Low double-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef lowp_f64mat4x4 lowp_f64mat4; - - - /// Medium double-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f64 Highp_f64mat1x1; - - /// Medium double-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f64, mediump> mediump_f64mat2x2; - - /// Medium double-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f64, mediump> mediump_f64mat2x3; - - /// Medium double-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f64, mediump> mediump_f64mat2x4; - - /// Medium double-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f64, mediump> mediump_f64mat3x2; - - /// Medium double-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f64, mediump> mediump_f64mat3x3; - - /// Medium double-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f64, mediump> mediump_f64mat3x4; - - /// Medium double-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f64, mediump> mediump_f64mat4x2; - - /// Medium double-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f64, mediump> mediump_f64mat4x3; - - /// Medium double-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f64, mediump> mediump_f64mat4x4; - - /// Medium double-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef mediump_f64mat1x1 mediump_f64mat1; - - /// Medium double-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mediump_f64mat2x2 mediump_f64mat2; - - /// Medium double-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mediump_f64mat3x3 mediump_f64mat3; - - /// Medium double-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mediump_f64mat4x4 mediump_f64mat4; - - /// High double-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f64 highp_f64mat1x1; - - /// High double-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f64, highp> highp_f64mat2x2; - - /// High double-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f64, highp> highp_f64mat2x3; - - /// High double-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f64, highp> highp_f64mat2x4; - - /// High double-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f64, highp> highp_f64mat3x2; - - /// High double-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f64, highp> highp_f64mat3x3; - - /// High double-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f64, highp> highp_f64mat3x4; - - /// High double-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f64, highp> highp_f64mat4x2; - - /// High double-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f64, highp> highp_f64mat4x3; - - /// High double-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f64, highp> highp_f64mat4x4; - - /// High double-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef highp_f64mat1x1 highp_f64mat1; - - /// High double-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef highp_f64mat2x2 highp_f64mat2; - - /// High double-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef highp_f64mat3x3 highp_f64mat3; - - /// High double-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef highp_f64mat4x4 highp_f64mat4; - - - ///////////////////////////// - // Signed int vector types - - /// Low qualifier signed integer vector of 1 component type. - /// @see gtc_type_precision - typedef vec<1, int, lowp> lowp_ivec1; - - /// Low qualifier signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, int, lowp> lowp_ivec2; - - /// Low qualifier signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, int, lowp> lowp_ivec3; - - /// Low qualifier signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, int, lowp> lowp_ivec4; - - - /// Medium qualifier signed integer vector of 1 component type. - /// @see gtc_type_precision - typedef vec<1, int, mediump> mediump_ivec1; - - /// Medium qualifier signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, int, mediump> mediump_ivec2; - - /// Medium qualifier signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, int, mediump> mediump_ivec3; - - /// Medium qualifier signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, int, mediump> mediump_ivec4; - - - /// High qualifier signed integer vector of 1 component type. - /// @see gtc_type_precision - typedef vec<1, int, highp> highp_ivec1; - - /// High qualifier signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, int, highp> highp_ivec2; - - /// High qualifier signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, int, highp> highp_ivec3; - - /// High qualifier signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, int, highp> highp_ivec4; - - - /// Low qualifier 8 bit signed integer vector of 1 component type. - /// @see gtc_type_precision - typedef vec<1, i8, lowp> lowp_i8vec1; - - /// Low qualifier 8 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i8, lowp> lowp_i8vec2; - - /// Low qualifier 8 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i8, lowp> lowp_i8vec3; - - /// Low qualifier 8 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i8, lowp> lowp_i8vec4; - - - /// Medium qualifier 8 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i8, mediump> mediump_i8vec1; - - /// Medium qualifier 8 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i8, mediump> mediump_i8vec2; - - /// Medium qualifier 8 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i8, mediump> mediump_i8vec3; - - /// Medium qualifier 8 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i8, mediump> mediump_i8vec4; - - - /// High qualifier 8 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i8, highp> highp_i8vec1; - - /// High qualifier 8 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i8, highp> highp_i8vec2; - - /// High qualifier 8 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i8, highp> highp_i8vec3; - - /// High qualifier 8 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i8, highp> highp_i8vec4; - - - /// Low qualifier 16 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i16, lowp> lowp_i16vec1; - - /// Low qualifier 16 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i16, lowp> lowp_i16vec2; - - /// Low qualifier 16 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i16, lowp> lowp_i16vec3; - - /// Low qualifier 16 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i16, lowp> lowp_i16vec4; - - - /// Medium qualifier 16 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i16, mediump> mediump_i16vec1; - - /// Medium qualifier 16 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i16, mediump> mediump_i16vec2; - - /// Medium qualifier 16 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i16, mediump> mediump_i16vec3; - - /// Medium qualifier 16 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i16, mediump> mediump_i16vec4; - - - /// High qualifier 16 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i16, highp> highp_i16vec1; - - /// High qualifier 16 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i16, highp> highp_i16vec2; - - /// High qualifier 16 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i16, highp> highp_i16vec3; - - /// High qualifier 16 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i16, highp> highp_i16vec4; - - - /// Low qualifier 32 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i32, lowp> lowp_i32vec1; - - /// Low qualifier 32 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i32, lowp> lowp_i32vec2; - - /// Low qualifier 32 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i32, lowp> lowp_i32vec3; - - /// Low qualifier 32 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i32, lowp> lowp_i32vec4; - - - /// Medium qualifier 32 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i32, mediump> mediump_i32vec1; - - /// Medium qualifier 32 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i32, mediump> mediump_i32vec2; - - /// Medium qualifier 32 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i32, mediump> mediump_i32vec3; - - /// Medium qualifier 32 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i32, mediump> mediump_i32vec4; - - - /// High qualifier 32 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i32, highp> highp_i32vec1; - - /// High qualifier 32 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i32, highp> highp_i32vec2; - - /// High qualifier 32 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i32, highp> highp_i32vec3; - - /// High qualifier 32 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i32, highp> highp_i32vec4; - - - /// Low qualifier 64 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i64, lowp> lowp_i64vec1; - - /// Low qualifier 64 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i64, lowp> lowp_i64vec2; - - /// Low qualifier 64 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i64, lowp> lowp_i64vec3; - - /// Low qualifier 64 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i64, lowp> lowp_i64vec4; - - - /// Medium qualifier 64 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i64, mediump> mediump_i64vec1; - - /// Medium qualifier 64 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i64, mediump> mediump_i64vec2; - - /// Medium qualifier 64 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i64, mediump> mediump_i64vec3; - - /// Medium qualifier 64 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i64, mediump> mediump_i64vec4; - - - /// High qualifier 64 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i64, highp> highp_i64vec1; - - /// High qualifier 64 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i64, highp> highp_i64vec2; - - /// High qualifier 64 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i64, highp> highp_i64vec3; - - /// High qualifier 64 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i64, highp> highp_i64vec4; - - - ///////////////////////////// - // Unsigned int vector types - - /// Low qualifier unsigned integer vector of 1 component type. - /// @see gtc_type_precision - typedef vec<1, uint, lowp> lowp_uvec1; - - /// Low qualifier unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, uint, lowp> lowp_uvec2; - - /// Low qualifier unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, uint, lowp> lowp_uvec3; - - /// Low qualifier unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, uint, lowp> lowp_uvec4; - - - /// Medium qualifier unsigned integer vector of 1 component type. - /// @see gtc_type_precision - typedef vec<1, uint, mediump> mediump_uvec1; - - /// Medium qualifier unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, uint, mediump> mediump_uvec2; - - /// Medium qualifier unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, uint, mediump> mediump_uvec3; - - /// Medium qualifier unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, uint, mediump> mediump_uvec4; - - - /// High qualifier unsigned integer vector of 1 component type. - /// @see gtc_type_precision - typedef vec<1, uint, highp> highp_uvec1; - - /// High qualifier unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, uint, highp> highp_uvec2; - - /// High qualifier unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, uint, highp> highp_uvec3; - - /// High qualifier unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, uint, highp> highp_uvec4; - - - /// Low qualifier 8 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u8, lowp> lowp_u8vec1; - - /// Low qualifier 8 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u8, lowp> lowp_u8vec2; - - /// Low qualifier 8 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u8, lowp> lowp_u8vec3; - - /// Low qualifier 8 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u8, lowp> lowp_u8vec4; - - - /// Medium qualifier 8 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u8, mediump> mediump_u8vec1; - - /// Medium qualifier 8 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u8, mediump> mediump_u8vec2; - - /// Medium qualifier 8 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u8, mediump> mediump_u8vec3; - - /// Medium qualifier 8 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u8, mediump> mediump_u8vec4; - - - /// High qualifier 8 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u8, highp> highp_u8vec1; - - /// High qualifier 8 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u8, highp> highp_u8vec2; - - /// High qualifier 8 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u8, highp> highp_u8vec3; - - /// High qualifier 8 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u8, highp> highp_u8vec4; - - - /// Low qualifier 16 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u16, lowp> lowp_u16vec1; - - /// Low qualifier 16 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u16, lowp> lowp_u16vec2; - - /// Low qualifier 16 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u16, lowp> lowp_u16vec3; - - /// Low qualifier 16 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u16, lowp> lowp_u16vec4; - - - /// Medium qualifier 16 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u16, mediump> mediump_u16vec1; - - /// Medium qualifier 16 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u16, mediump> mediump_u16vec2; - - /// Medium qualifier 16 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u16, mediump> mediump_u16vec3; - - /// Medium qualifier 16 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u16, mediump> mediump_u16vec4; - - - /// High qualifier 16 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u16, highp> highp_u16vec1; - - /// High qualifier 16 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u16, highp> highp_u16vec2; - - /// High qualifier 16 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u16, highp> highp_u16vec3; - - /// High qualifier 16 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u16, highp> highp_u16vec4; - - - /// Low qualifier 32 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u32, lowp> lowp_u32vec1; - - /// Low qualifier 32 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u32, lowp> lowp_u32vec2; - - /// Low qualifier 32 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u32, lowp> lowp_u32vec3; - - /// Low qualifier 32 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u32, lowp> lowp_u32vec4; - - - /// Medium qualifier 32 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u32, mediump> mediump_u32vec1; - - /// Medium qualifier 32 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u32, mediump> mediump_u32vec2; - - /// Medium qualifier 32 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u32, mediump> mediump_u32vec3; - - /// Medium qualifier 32 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u32, mediump> mediump_u32vec4; - - - /// High qualifier 32 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u32, highp> highp_u32vec1; - - /// High qualifier 32 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u32, highp> highp_u32vec2; - - /// High qualifier 32 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u32, highp> highp_u32vec3; - - /// High qualifier 32 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u32, highp> highp_u32vec4; - - - /// Low qualifier 64 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u64, lowp> lowp_u64vec1; - - /// Low qualifier 64 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u64, lowp> lowp_u64vec2; - - /// Low qualifier 64 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u64, lowp> lowp_u64vec3; - - /// Low qualifier 64 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u64, lowp> lowp_u64vec4; - - - /// Medium qualifier 64 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u64, mediump> mediump_u64vec1; - - /// Medium qualifier 64 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u64, mediump> mediump_u64vec2; - - /// Medium qualifier 64 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u64, mediump> mediump_u64vec3; - - /// Medium qualifier 64 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u64, mediump> mediump_u64vec4; - - - /// High qualifier 64 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u64, highp> highp_u64vec1; - - /// High qualifier 64 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u64, highp> highp_u64vec2; - - /// High qualifier 64 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u64, highp> highp_u64vec3; - - /// High qualifier 64 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u64, highp> highp_u64vec4; - - - ////////////////////// - // Float vector types - - /// 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 float32_t; - - /// 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 f32; - -# ifndef GLM_FORCE_SINGLE_ONLY - - /// 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 float64_t; - - /// 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 f64; -# endif//GLM_FORCE_SINGLE_ONLY - - /// Single-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, float, defaultp> fvec1; - - /// Single-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, float, defaultp> fvec2; - - /// Single-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, float, defaultp> fvec3; - - /// Single-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, float, defaultp> fvec4; - - - /// Single-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, f32, defaultp> f32vec1; - - /// Single-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, f32, defaultp> f32vec2; - - /// Single-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, f32, defaultp> f32vec3; - - /// Single-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, f32, defaultp> f32vec4; - -# ifndef GLM_FORCE_SINGLE_ONLY - /// Double-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, f64, defaultp> f64vec1; - - /// Double-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, f64, defaultp> f64vec2; - - /// Double-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, f64, defaultp> f64vec3; - - /// Double-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, f64, defaultp> f64vec4; -# endif//GLM_FORCE_SINGLE_ONLY - - - ////////////////////// - // Float matrix types - - /// Single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef detail::tmat1x1 fmat1; - - /// Single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, defaultp> fmat2; - - /// Single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, defaultp> fmat3; - - /// Single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, defaultp> fmat4; - - - /// Single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f32 fmat1x1; - - /// Single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, defaultp> fmat2x2; - - /// Single-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f32, defaultp> fmat2x3; - - /// Single-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f32, defaultp> fmat2x4; - - /// Single-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f32, defaultp> fmat3x2; - - /// Single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, defaultp> fmat3x3; - - /// Single-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f32, defaultp> fmat3x4; - - /// Single-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f32, defaultp> fmat4x2; - - /// Single-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f32, defaultp> fmat4x3; - - /// Single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, defaultp> fmat4x4; - - - /// Single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef detail::tmat1x1 f32mat1; - - /// Single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, defaultp> f32mat2; - - /// Single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, defaultp> f32mat3; - - /// Single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, defaultp> f32mat4; - - - /// Single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f32 f32mat1x1; - - /// Single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, defaultp> f32mat2x2; - - /// Single-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f32, defaultp> f32mat2x3; - - /// Single-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f32, defaultp> f32mat2x4; - - /// Single-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f32, defaultp> f32mat3x2; - - /// Single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, defaultp> f32mat3x3; - - /// Single-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f32, defaultp> f32mat3x4; - - /// Single-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f32, defaultp> f32mat4x2; - - /// Single-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f32, defaultp> f32mat4x3; - - /// Single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, defaultp> f32mat4x4; - - -# ifndef GLM_FORCE_SINGLE_ONLY - - /// Double-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef detail::tmat1x1 f64mat1; - - /// Double-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f64, defaultp> f64mat2; - - /// Double-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f64, defaultp> f64mat3; - - /// Double-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f64, defaultp> f64mat4; - - - /// Double-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f64 f64mat1x1; - - /// Double-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f64, defaultp> f64mat2x2; - - /// Double-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f64, defaultp> f64mat2x3; - - /// Double-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f64, defaultp> f64mat2x4; - - /// Double-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f64, defaultp> f64mat3x2; - - /// Double-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f64, defaultp> f64mat3x3; - - /// Double-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f64, defaultp> f64mat3x4; - - /// Double-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f64, defaultp> f64mat4x2; - - /// Double-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f64, defaultp> f64mat4x3; - - /// Double-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f64, defaultp> f64mat4x4; - -# endif//GLM_FORCE_SINGLE_ONLY - - ////////////////////////// - // Quaternion types - - /// Single-qualifier floating-point quaternion. - /// @see gtc_type_precision - typedef qua f32quat; - - /// Low single-qualifier floating-point quaternion. - /// @see gtc_type_precision - typedef qua lowp_f32quat; - - /// Low double-qualifier floating-point quaternion. - /// @see gtc_type_precision - typedef qua lowp_f64quat; - - /// Medium single-qualifier floating-point quaternion. - /// @see gtc_type_precision - typedef qua mediump_f32quat; - -# ifndef GLM_FORCE_SINGLE_ONLY - - /// Medium double-qualifier floating-point quaternion. - /// @see gtc_type_precision - typedef qua mediump_f64quat; - - /// High single-qualifier floating-point quaternion. - /// @see gtc_type_precision - typedef qua highp_f32quat; - - /// High double-qualifier floating-point quaternion. - /// @see gtc_type_precision - typedef qua highp_f64quat; - - /// Double-qualifier floating-point quaternion. - /// @see gtc_type_precision - typedef qua f64quat; - -# endif//GLM_FORCE_SINGLE_ONLY - - /// @} -}//namespace glm - -#include "type_precision.inl" diff --git a/src/vendor/glm/gtc/type_precision.inl b/src/vendor/glm/gtc/type_precision.inl deleted file mode 100755 index ae80912..0000000 --- a/src/vendor/glm/gtc/type_precision.inl +++ /dev/null @@ -1,6 +0,0 @@ -/// @ref gtc_precision - -namespace glm -{ - -} diff --git a/src/vendor/glm/gtc/type_ptr.hpp b/src/vendor/glm/gtc/type_ptr.hpp deleted file mode 100755 index d7e625a..0000000 --- a/src/vendor/glm/gtc/type_ptr.hpp +++ /dev/null @@ -1,230 +0,0 @@ -/// @ref gtc_type_ptr -/// @file glm/gtc/type_ptr.hpp -/// -/// @see core (dependence) -/// @see gtc_quaternion (dependence) -/// -/// @defgroup gtc_type_ptr GLM_GTC_type_ptr -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Handles the interaction between pointers and vector, matrix types. -/// -/// This extension defines an overloaded function, glm::value_ptr. It returns -/// a pointer to the memory layout of the object. Matrix types store their values -/// in column-major order. -/// -/// This is useful for uploading data to matrices or copying data to buffer objects. -/// -/// Example: -/// @code -/// #include -/// #include -/// -/// glm::vec3 aVector(3); -/// glm::mat4 someMatrix(1.0); -/// -/// glUniform3fv(uniformLoc, 1, glm::value_ptr(aVector)); -/// glUniformMatrix4fv(uniformMatrixLoc, 1, GL_FALSE, glm::value_ptr(someMatrix)); -/// @endcode -/// -/// need to be included to use the features of this extension. - -#pragma once - -// Dependency: -#include "../gtc/quaternion.hpp" -#include "../gtc/vec1.hpp" -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include "../mat2x2.hpp" -#include "../mat2x3.hpp" -#include "../mat2x4.hpp" -#include "../mat3x2.hpp" -#include "../mat3x3.hpp" -#include "../mat3x4.hpp" -#include "../mat4x2.hpp" -#include "../mat4x3.hpp" -#include "../mat4x4.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_type_ptr extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_type_ptr - /// @{ - - /// Return the constant address to the data of the input parameter. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL typename genType::value_type const * value_ptr(genType const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<1, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<2, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<3, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<4, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<1, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<2, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<3, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<4, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<1, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<2, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<3, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<4, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<1, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<2, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<3, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<4, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<2, T, defaultp> make_vec2(T const * const ptr); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<3, T, defaultp> make_vec3(T const * const ptr); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<4, T, defaultp> make_vec4(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<2, 2, T, defaultp> make_mat2x2(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<2, 3, T, defaultp> make_mat2x3(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<2, 4, T, defaultp> make_mat2x4(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<3, 2, T, defaultp> make_mat3x2(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<3, 3, T, defaultp> make_mat3x3(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<3, 4, T, defaultp> make_mat3x4(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<4, 2, T, defaultp> make_mat4x2(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<4, 3, T, defaultp> make_mat4x3(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> make_mat4x4(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<2, 2, T, defaultp> make_mat2(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<3, 3, T, defaultp> make_mat3(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> make_mat4(T const * const ptr); - - /// Build a quaternion from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL qua make_quat(T const * const ptr); - - /// @} -}//namespace glm - -#include "type_ptr.inl" diff --git a/src/vendor/glm/gtc/type_ptr.inl b/src/vendor/glm/gtc/type_ptr.inl deleted file mode 100755 index 26b20b5..0000000 --- a/src/vendor/glm/gtc/type_ptr.inl +++ /dev/null @@ -1,386 +0,0 @@ -/// @ref gtc_type_ptr - -#include - -namespace glm -{ - /// @addtogroup gtc_type_ptr - /// @{ - - template - GLM_FUNC_QUALIFIER T const* value_ptr(vec<2, T, Q> const& v) - { - return &(v.x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(vec<2, T, Q>& v) - { - return &(v.x); - } - - template - GLM_FUNC_QUALIFIER T const * value_ptr(vec<3, T, Q> const& v) - { - return &(v.x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(vec<3, T, Q>& v) - { - return &(v.x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(vec<4, T, Q> const& v) - { - return &(v.x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(vec<4, T, Q>& v) - { - return &(v.x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<2, 2, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(mat<2, 2, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<3, 3, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(mat<3, 3, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<4, 4, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(mat<4, 4, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<2, 3, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(mat<2, 3, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<3, 2, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(mat<3, 2, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<2, 4, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(mat<2, 4, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<4, 2, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(mat<4, 2, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<3, 4, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(mat<3, 4, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<4, 3, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T * value_ptr(mat<4, 3, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const * value_ptr(qua const& q) - { - return &(q[0]); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(qua& q) - { - return &(q[0]); - } - - template - GLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<1, T, Q> const& v) - { - return v; - } - - template - GLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<2, T, Q> const& v) - { - return vec<1, T, Q>(v); - } - - template - GLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<3, T, Q> const& v) - { - return vec<1, T, Q>(v); - } - - template - GLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<4, T, Q> const& v) - { - return vec<1, T, Q>(v); - } - - template - GLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<1, T, Q> const& v) - { - return vec<2, T, Q>(v.x, static_cast(0)); - } - - template - GLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<2, T, Q> const& v) - { - return v; - } - - template - GLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<3, T, Q> const& v) - { - return vec<2, T, Q>(v); - } - - template - GLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<4, T, Q> const& v) - { - return vec<2, T, Q>(v); - } - - template - GLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<1, T, Q> const& v) - { - return vec<3, T, Q>(v.x, static_cast(0), static_cast(0)); - } - - template - GLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<2, T, Q> const& v) - { - return vec<3, T, Q>(v.x, v.y, static_cast(0)); - } - - template - GLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<3, T, Q> const& v) - { - return v; - } - - template - GLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<4, T, Q> const& v) - { - return vec<3, T, Q>(v); - } - - template - GLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<1, T, Q> const& v) - { - return vec<4, T, Q>(v.x, static_cast(0), static_cast(0), static_cast(1)); - } - - template - GLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<2, T, Q> const& v) - { - return vec<4, T, Q>(v.x, v.y, static_cast(0), static_cast(1)); - } - - template - GLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<3, T, Q> const& v) - { - return vec<4, T, Q>(v.x, v.y, v.z, static_cast(1)); - } - - template - GLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<4, T, Q> const& v) - { - return v; - } - - template - GLM_FUNC_QUALIFIER vec<2, T, defaultp> make_vec2(T const *const ptr) - { - vec<2, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(vec<2, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, defaultp> make_vec3(T const *const ptr) - { - vec<3, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(vec<3, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, T, defaultp> make_vec4(T const *const ptr) - { - vec<4, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(vec<4, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, defaultp> make_mat2x2(T const *const ptr) - { - mat<2, 2, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<2, 2, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, defaultp> make_mat2x3(T const *const ptr) - { - mat<2, 3, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<2, 3, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, defaultp> make_mat2x4(T const *const ptr) - { - mat<2, 4, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<2, 4, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, defaultp> make_mat3x2(T const *const ptr) - { - mat<3, 2, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<3, 2, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, defaultp> make_mat3x3(T const *const ptr) - { - mat<3, 3, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<3, 3, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, defaultp> make_mat3x4(T const *const ptr) - { - mat<3, 4, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<3, 4, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, defaultp> make_mat4x2(T const *const ptr) - { - mat<4, 2, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<4, 2, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, defaultp> make_mat4x3(T const *const ptr) - { - mat<4, 3, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<4, 3, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> make_mat4x4(T const *const ptr) - { - mat<4, 4, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<4, 4, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, defaultp> make_mat2(T const *const ptr) - { - return make_mat2x2(ptr); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, defaultp> make_mat3(T const *const ptr) - { - return make_mat3x3(ptr); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> make_mat4(T const *const ptr) - { - return make_mat4x4(ptr); - } - - template - GLM_FUNC_QUALIFIER qua make_quat(T const *const ptr) - { - qua Result; - memcpy(value_ptr(Result), ptr, sizeof(qua)); - return Result; - } - - /// @} -}//namespace glm - diff --git a/src/vendor/glm/gtc/ulp.hpp b/src/vendor/glm/gtc/ulp.hpp deleted file mode 100755 index 0d80a75..0000000 --- a/src/vendor/glm/gtc/ulp.hpp +++ /dev/null @@ -1,152 +0,0 @@ -/// @ref gtc_ulp -/// @file glm/gtc/ulp.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_ulp GLM_GTC_ulp -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Allow the measurement of the accuracy of a function against a reference -/// implementation. This extension works on floating-point data and provide results -/// in ULP. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../detail/_vectorize.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_ulp extension included") -#endif - -namespace glm -{ - /// Return the next ULP value(s) after the input value(s). - /// - /// @tparam genType A floating-point scalar type. - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL genType next_float(genType x); - - /// Return the previous ULP value(s) before the input value(s). - /// - /// @tparam genType A floating-point scalar type. - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL genType prev_float(genType x); - - /// Return the value(s) ULP distance after the input value(s). - /// - /// @tparam genType A floating-point scalar type. - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL genType next_float(genType x, int ULPs); - - /// Return the value(s) ULP distance before the input value(s). - /// - /// @tparam genType A floating-point scalar type. - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL genType prev_float(genType x, int ULPs); - - /// Return the distance in the number of ULP between 2 single-precision floating-point scalars. - /// - /// @see gtc_ulp - GLM_FUNC_DECL int float_distance(float x, float y); - - /// Return the distance in the number of ULP between 2 double-precision floating-point scalars. - /// - /// @see gtc_ulp - GLM_FUNC_DECL int64 float_distance(double x, double y); - - /// Return the next ULP value(s) after the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL vec next_float(vec const& x); - - /// Return the value(s) ULP distance after the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL vec next_float(vec const& x, int ULPs); - - /// Return the value(s) ULP distance after the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL vec next_float(vec const& x, vec const& ULPs); - - /// Return the previous ULP value(s) before the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL vec prev_float(vec const& x); - - /// Return the value(s) ULP distance before the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL vec prev_float(vec const& x, int ULPs); - - /// Return the value(s) ULP distance before the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL vec prev_float(vec const& x, vec const& ULPs); - - /// Return the distance in the number of ULP between 2 single-precision floating-point scalars. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL vec float_distance(vec const& x, vec const& y); - - /// Return the distance in the number of ULP between 2 double-precision floating-point scalars. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL vec float_distance(vec const& x, vec const& y); - - /// @} -}//namespace glm - -#include "ulp.inl" diff --git a/src/vendor/glm/gtc/ulp.inl b/src/vendor/glm/gtc/ulp.inl deleted file mode 100755 index 4ecbd3f..0000000 --- a/src/vendor/glm/gtc/ulp.inl +++ /dev/null @@ -1,173 +0,0 @@ -/// @ref gtc_ulp - -#include "../ext/scalar_ulp.hpp" - -namespace glm -{ - template<> - GLM_FUNC_QUALIFIER float next_float(float x) - { -# if GLM_HAS_CXX11_STL - return std::nextafter(x, std::numeric_limits::max()); -# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) - return detail::nextafterf(x, FLT_MAX); -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return __builtin_nextafterf(x, FLT_MAX); -# else - return nextafterf(x, FLT_MAX); -# endif - } - - template<> - GLM_FUNC_QUALIFIER double next_float(double x) - { -# if GLM_HAS_CXX11_STL - return std::nextafter(x, std::numeric_limits::max()); -# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) - return detail::nextafter(x, std::numeric_limits::max()); -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return __builtin_nextafter(x, DBL_MAX); -# else - return nextafter(x, DBL_MAX); -# endif - } - - template - GLM_FUNC_QUALIFIER T next_float(T x, int ULPs) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'next_float' only accept floating-point input"); - assert(ULPs >= 0); - - T temp = x; - for (int i = 0; i < ULPs; ++i) - temp = next_float(temp); - return temp; - } - - GLM_FUNC_QUALIFIER float prev_float(float x) - { -# if GLM_HAS_CXX11_STL - return std::nextafter(x, std::numeric_limits::min()); -# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) - return detail::nextafterf(x, FLT_MIN); -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return __builtin_nextafterf(x, FLT_MIN); -# else - return nextafterf(x, FLT_MIN); -# endif - } - - GLM_FUNC_QUALIFIER double prev_float(double x) - { -# if GLM_HAS_CXX11_STL - return std::nextafter(x, std::numeric_limits::min()); -# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) - return _nextafter(x, DBL_MIN); -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return __builtin_nextafter(x, DBL_MIN); -# else - return nextafter(x, DBL_MIN); -# endif - } - - template - GLM_FUNC_QUALIFIER T prev_float(T x, int ULPs) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'prev_float' only accept floating-point input"); - assert(ULPs >= 0); - - T temp = x; - for (int i = 0; i < ULPs; ++i) - temp = prev_float(temp); - return temp; - } - - GLM_FUNC_QUALIFIER int float_distance(float x, float y) - { - detail::float_t const a(x); - detail::float_t const b(y); - - return abs(a.i - b.i); - } - - GLM_FUNC_QUALIFIER int64 float_distance(double x, double y) - { - detail::float_t const a(x); - detail::float_t const b(y); - - return abs(a.i - b.i); - } - - template - GLM_FUNC_QUALIFIER vec next_float(vec const& x) - { - vec Result; - for (length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = next_float(x[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec next_float(vec const& x, int ULPs) - { - vec Result; - for (length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = next_float(x[i], ULPs); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec next_float(vec const& x, vec const& ULPs) - { - vec Result; - for (length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = next_float(x[i], ULPs[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec prev_float(vec const& x) - { - vec Result; - for (length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = prev_float(x[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec prev_float(vec const& x, int ULPs) - { - vec Result; - for (length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = prev_float(x[i], ULPs); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec prev_float(vec const& x, vec const& ULPs) - { - vec Result; - for (length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = prev_float(x[i], ULPs[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec float_distance(vec const& x, vec const& y) - { - vec Result; - for (length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = float_distance(x[i], y[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec float_distance(vec const& x, vec const& y) - { - vec Result; - for (length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = float_distance(x[i], y[i]); - return Result; - } -}//namespace glm - diff --git a/src/vendor/glm/gtc/vec1.hpp b/src/vendor/glm/gtc/vec1.hpp deleted file mode 100755 index 63697a2..0000000 --- a/src/vendor/glm/gtc/vec1.hpp +++ /dev/null @@ -1,30 +0,0 @@ -/// @ref gtc_vec1 -/// @file glm/gtc/vec1.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_vec1 GLM_GTC_vec1 -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Add vec1, ivec1, uvec1 and bvec1 types. - -#pragma once - -// Dependency: -#include "../ext/vector_bool1.hpp" -#include "../ext/vector_bool1_precision.hpp" -#include "../ext/vector_float1.hpp" -#include "../ext/vector_float1_precision.hpp" -#include "../ext/vector_double1.hpp" -#include "../ext/vector_double1_precision.hpp" -#include "../ext/vector_int1.hpp" -#include "../ext/vector_int1_sized.hpp" -#include "../ext/vector_uint1.hpp" -#include "../ext/vector_uint1_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_vec1 extension included") -#endif - diff --git a/src/vendor/glm/gtx/associated_min_max.hpp b/src/vendor/glm/gtx/associated_min_max.hpp deleted file mode 100755 index d1a41c0..0000000 --- a/src/vendor/glm/gtx/associated_min_max.hpp +++ /dev/null @@ -1,207 +0,0 @@ -/// @ref gtx_associated_min_max -/// @file glm/gtx/associated_min_max.hpp -/// -/// @see core (dependence) -/// @see gtx_extented_min_max (dependence) -/// -/// @defgroup gtx_associated_min_max GLM_GTX_associated_min_max -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// @brief Min and max functions that return associated values not the compared onces. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_associated_min_max is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_associated_min_max extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_associated_min_max - /// @{ - - /// Minimum comparison between 2 variables and returns 2 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL U associatedMin(T x, U a, T y, U b); - - /// Minimum comparison between 2 variables and returns 2 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec<2, U, Q> associatedMin( - vec const& x, vec const& a, - vec const& y, vec const& b); - - /// Minimum comparison between 2 variables and returns 2 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMin( - T x, const vec& a, - T y, const vec& b); - - /// Minimum comparison between 2 variables and returns 2 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMin( - vec const& x, U a, - vec const& y, U b); - - /// Minimum comparison between 3 variables and returns 3 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL U associatedMin( - T x, U a, - T y, U b, - T z, U c); - - /// Minimum comparison between 3 variables and returns 3 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMin( - vec const& x, vec const& a, - vec const& y, vec const& b, - vec const& z, vec const& c); - - /// Minimum comparison between 4 variables and returns 4 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL U associatedMin( - T x, U a, - T y, U b, - T z, U c, - T w, U d); - - /// Minimum comparison between 4 variables and returns 4 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMin( - vec const& x, vec const& a, - vec const& y, vec const& b, - vec const& z, vec const& c, - vec const& w, vec const& d); - - /// Minimum comparison between 4 variables and returns 4 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMin( - T x, vec const& a, - T y, vec const& b, - T z, vec const& c, - T w, vec const& d); - - /// Minimum comparison between 4 variables and returns 4 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMin( - vec const& x, U a, - vec const& y, U b, - vec const& z, U c, - vec const& w, U d); - - /// Maximum comparison between 2 variables and returns 2 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL U associatedMax(T x, U a, T y, U b); - - /// Maximum comparison between 2 variables and returns 2 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec<2, U, Q> associatedMax( - vec const& x, vec const& a, - vec const& y, vec const& b); - - /// Maximum comparison between 2 variables and returns 2 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMax( - T x, vec const& a, - T y, vec const& b); - - /// Maximum comparison between 2 variables and returns 2 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMax( - vec const& x, U a, - vec const& y, U b); - - /// Maximum comparison between 3 variables and returns 3 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL U associatedMax( - T x, U a, - T y, U b, - T z, U c); - - /// Maximum comparison between 3 variables and returns 3 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMax( - vec const& x, vec const& a, - vec const& y, vec const& b, - vec const& z, vec const& c); - - /// Maximum comparison between 3 variables and returns 3 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMax( - T x, vec const& a, - T y, vec const& b, - T z, vec const& c); - - /// Maximum comparison between 3 variables and returns 3 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMax( - vec const& x, U a, - vec const& y, U b, - vec const& z, U c); - - /// Maximum comparison between 4 variables and returns 4 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL U associatedMax( - T x, U a, - T y, U b, - T z, U c, - T w, U d); - - /// Maximum comparison between 4 variables and returns 4 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMax( - vec const& x, vec const& a, - vec const& y, vec const& b, - vec const& z, vec const& c, - vec const& w, vec const& d); - - /// Maximum comparison between 4 variables and returns 4 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMax( - T x, vec const& a, - T y, vec const& b, - T z, vec const& c, - T w, vec const& d); - - /// Maximum comparison between 4 variables and returns 4 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMax( - vec const& x, U a, - vec const& y, U b, - vec const& z, U c, - vec const& w, U d); - - /// @} -} //namespace glm - -#include "associated_min_max.inl" diff --git a/src/vendor/glm/gtx/associated_min_max.inl b/src/vendor/glm/gtx/associated_min_max.inl deleted file mode 100755 index 5186c47..0000000 --- a/src/vendor/glm/gtx/associated_min_max.inl +++ /dev/null @@ -1,354 +0,0 @@ -/// @ref gtx_associated_min_max - -namespace glm{ - -// Min comparison between 2 variables -template -GLM_FUNC_QUALIFIER U associatedMin(T x, U a, T y, U b) -{ - return x < y ? a : b; -} - -template -GLM_FUNC_QUALIFIER vec<2, U, Q> associatedMin -( - vec const& x, vec const& a, - vec const& y, vec const& b -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x[i] < y[i] ? a[i] : b[i]; - return Result; -} - -template -GLM_FUNC_QUALIFIER vec associatedMin -( - T x, const vec& a, - T y, const vec& b -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x < y ? a[i] : b[i]; - return Result; -} - -template -GLM_FUNC_QUALIFIER vec associatedMin -( - vec const& x, U a, - vec const& y, U b -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x[i] < y[i] ? a : b; - return Result; -} - -// Min comparison between 3 variables -template -GLM_FUNC_QUALIFIER U associatedMin -( - T x, U a, - T y, U b, - T z, U c -) -{ - U Result = x < y ? (x < z ? a : c) : (y < z ? b : c); - return Result; -} - -template -GLM_FUNC_QUALIFIER vec associatedMin -( - vec const& x, vec const& a, - vec const& y, vec const& b, - vec const& z, vec const& c -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x[i] < y[i] ? (x[i] < z[i] ? a[i] : c[i]) : (y[i] < z[i] ? b[i] : c[i]); - return Result; -} - -// Min comparison between 4 variables -template -GLM_FUNC_QUALIFIER U associatedMin -( - T x, U a, - T y, U b, - T z, U c, - T w, U d -) -{ - T Test1 = min(x, y); - T Test2 = min(z, w); - U Result1 = x < y ? a : b; - U Result2 = z < w ? c : d; - U Result = Test1 < Test2 ? Result1 : Result2; - return Result; -} - -// Min comparison between 4 variables -template -GLM_FUNC_QUALIFIER vec associatedMin -( - vec const& x, vec const& a, - vec const& y, vec const& b, - vec const& z, vec const& c, - vec const& w, vec const& d -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - { - T Test1 = min(x[i], y[i]); - T Test2 = min(z[i], w[i]); - U Result1 = x[i] < y[i] ? a[i] : b[i]; - U Result2 = z[i] < w[i] ? c[i] : d[i]; - Result[i] = Test1 < Test2 ? Result1 : Result2; - } - return Result; -} - -// Min comparison between 4 variables -template -GLM_FUNC_QUALIFIER vec associatedMin -( - T x, vec const& a, - T y, vec const& b, - T z, vec const& c, - T w, vec const& d -) -{ - T Test1 = min(x, y); - T Test2 = min(z, w); - - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - { - U Result1 = x < y ? a[i] : b[i]; - U Result2 = z < w ? c[i] : d[i]; - Result[i] = Test1 < Test2 ? Result1 : Result2; - } - return Result; -} - -// Min comparison between 4 variables -template -GLM_FUNC_QUALIFIER vec associatedMin -( - vec const& x, U a, - vec const& y, U b, - vec const& z, U c, - vec const& w, U d -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - { - T Test1 = min(x[i], y[i]); - T Test2 = min(z[i], w[i]); - U Result1 = x[i] < y[i] ? a : b; - U Result2 = z[i] < w[i] ? c : d; - Result[i] = Test1 < Test2 ? Result1 : Result2; - } - return Result; -} - -// Max comparison between 2 variables -template -GLM_FUNC_QUALIFIER U associatedMax(T x, U a, T y, U b) -{ - return x > y ? a : b; -} - -// Max comparison between 2 variables -template -GLM_FUNC_QUALIFIER vec<2, U, Q> associatedMax -( - vec const& x, vec const& a, - vec const& y, vec const& b -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x[i] > y[i] ? a[i] : b[i]; - return Result; -} - -// Max comparison between 2 variables -template -GLM_FUNC_QUALIFIER vec associatedMax -( - T x, vec const& a, - T y, vec const& b -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x > y ? a[i] : b[i]; - return Result; -} - -// Max comparison between 2 variables -template -GLM_FUNC_QUALIFIER vec associatedMax -( - vec const& x, U a, - vec const& y, U b -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x[i] > y[i] ? a : b; - return Result; -} - -// Max comparison between 3 variables -template -GLM_FUNC_QUALIFIER U associatedMax -( - T x, U a, - T y, U b, - T z, U c -) -{ - U Result = x > y ? (x > z ? a : c) : (y > z ? b : c); - return Result; -} - -// Max comparison between 3 variables -template -GLM_FUNC_QUALIFIER vec associatedMax -( - vec const& x, vec const& a, - vec const& y, vec const& b, - vec const& z, vec const& c -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x[i] > y[i] ? (x[i] > z[i] ? a[i] : c[i]) : (y[i] > z[i] ? b[i] : c[i]); - return Result; -} - -// Max comparison between 3 variables -template -GLM_FUNC_QUALIFIER vec associatedMax -( - T x, vec const& a, - T y, vec const& b, - T z, vec const& c -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x > y ? (x > z ? a[i] : c[i]) : (y > z ? b[i] : c[i]); - return Result; -} - -// Max comparison between 3 variables -template -GLM_FUNC_QUALIFIER vec associatedMax -( - vec const& x, U a, - vec const& y, U b, - vec const& z, U c -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x[i] > y[i] ? (x[i] > z[i] ? a : c) : (y[i] > z[i] ? b : c); - return Result; -} - -// Max comparison between 4 variables -template -GLM_FUNC_QUALIFIER U associatedMax -( - T x, U a, - T y, U b, - T z, U c, - T w, U d -) -{ - T Test1 = max(x, y); - T Test2 = max(z, w); - U Result1 = x > y ? a : b; - U Result2 = z > w ? c : d; - U Result = Test1 > Test2 ? Result1 : Result2; - return Result; -} - -// Max comparison between 4 variables -template -GLM_FUNC_QUALIFIER vec associatedMax -( - vec const& x, vec const& a, - vec const& y, vec const& b, - vec const& z, vec const& c, - vec const& w, vec const& d -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - { - T Test1 = max(x[i], y[i]); - T Test2 = max(z[i], w[i]); - U Result1 = x[i] > y[i] ? a[i] : b[i]; - U Result2 = z[i] > w[i] ? c[i] : d[i]; - Result[i] = Test1 > Test2 ? Result1 : Result2; - } - return Result; -} - -// Max comparison between 4 variables -template -GLM_FUNC_QUALIFIER vec associatedMax -( - T x, vec const& a, - T y, vec const& b, - T z, vec const& c, - T w, vec const& d -) -{ - T Test1 = max(x, y); - T Test2 = max(z, w); - - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - { - U Result1 = x > y ? a[i] : b[i]; - U Result2 = z > w ? c[i] : d[i]; - Result[i] = Test1 > Test2 ? Result1 : Result2; - } - return Result; -} - -// Max comparison between 4 variables -template -GLM_FUNC_QUALIFIER vec associatedMax -( - vec const& x, U a, - vec const& y, U b, - vec const& z, U c, - vec const& w, U d -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - { - T Test1 = max(x[i], y[i]); - T Test2 = max(z[i], w[i]); - U Result1 = x[i] > y[i] ? a : b; - U Result2 = z[i] > w[i] ? c : d; - Result[i] = Test1 > Test2 ? Result1 : Result2; - } - return Result; -} -}//namespace glm diff --git a/src/vendor/glm/gtx/bit.hpp b/src/vendor/glm/gtx/bit.hpp deleted file mode 100755 index 60a7aef..0000000 --- a/src/vendor/glm/gtx/bit.hpp +++ /dev/null @@ -1,98 +0,0 @@ -/// @ref gtx_bit -/// @file glm/gtx/bit.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_bit GLM_GTX_bit -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Allow to perform bit operations on integer values - -#pragma once - -// Dependencies -#include "../gtc/bitfield.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_bit is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_bit extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_bit - /// @{ - - /// @see gtx_bit - template - GLM_FUNC_DECL genIUType highestBitValue(genIUType Value); - - /// @see gtx_bit - template - GLM_FUNC_DECL genIUType lowestBitValue(genIUType Value); - - /// Find the highest bit set to 1 in a integer variable and return its value. - /// - /// @see gtx_bit - template - GLM_FUNC_DECL vec highestBitValue(vec const& value); - - /// Return the power of two number which value is just higher the input value. - /// Deprecated, use ceilPowerOfTwo from GTC_round instead - /// - /// @see gtc_round - /// @see gtx_bit - template - GLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoAbove(genIUType Value); - - /// Return the power of two number which value is just higher the input value. - /// Deprecated, use ceilPowerOfTwo from GTC_round instead - /// - /// @see gtc_round - /// @see gtx_bit - template - GLM_DEPRECATED GLM_FUNC_DECL vec powerOfTwoAbove(vec const& value); - - /// Return the power of two number which value is just lower the input value. - /// Deprecated, use floorPowerOfTwo from GTC_round instead - /// - /// @see gtc_round - /// @see gtx_bit - template - GLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoBelow(genIUType Value); - - /// Return the power of two number which value is just lower the input value. - /// Deprecated, use floorPowerOfTwo from GTC_round instead - /// - /// @see gtc_round - /// @see gtx_bit - template - GLM_DEPRECATED GLM_FUNC_DECL vec powerOfTwoBelow(vec const& value); - - /// Return the power of two number which value is the closet to the input value. - /// Deprecated, use roundPowerOfTwo from GTC_round instead - /// - /// @see gtc_round - /// @see gtx_bit - template - GLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoNearest(genIUType Value); - - /// Return the power of two number which value is the closet to the input value. - /// Deprecated, use roundPowerOfTwo from GTC_round instead - /// - /// @see gtc_round - /// @see gtx_bit - template - GLM_DEPRECATED GLM_FUNC_DECL vec powerOfTwoNearest(vec const& value); - - /// @} -} //namespace glm - - -#include "bit.inl" - diff --git a/src/vendor/glm/gtx/bit.inl b/src/vendor/glm/gtx/bit.inl deleted file mode 100755 index 621b626..0000000 --- a/src/vendor/glm/gtx/bit.inl +++ /dev/null @@ -1,92 +0,0 @@ -/// @ref gtx_bit - -namespace glm -{ - /////////////////// - // highestBitValue - - template - GLM_FUNC_QUALIFIER genIUType highestBitValue(genIUType Value) - { - genIUType tmp = Value; - genIUType result = genIUType(0); - while(tmp) - { - result = (tmp & (~tmp + 1)); // grab lowest bit - tmp &= ~result; // clear lowest bit - } - return result; - } - - template - GLM_FUNC_QUALIFIER vec highestBitValue(vec const& v) - { - return detail::functor1::call(highestBitValue, v); - } - - /////////////////// - // lowestBitValue - - template - GLM_FUNC_QUALIFIER genIUType lowestBitValue(genIUType Value) - { - return (Value & (~Value + 1)); - } - - template - GLM_FUNC_QUALIFIER vec lowestBitValue(vec const& v) - { - return detail::functor1::call(lowestBitValue, v); - } - - /////////////////// - // powerOfTwoAbove - - template - GLM_FUNC_QUALIFIER genType powerOfTwoAbove(genType value) - { - return isPowerOfTwo(value) ? value : highestBitValue(value) << 1; - } - - template - GLM_FUNC_QUALIFIER vec powerOfTwoAbove(vec const& v) - { - return detail::functor1::call(powerOfTwoAbove, v); - } - - /////////////////// - // powerOfTwoBelow - - template - GLM_FUNC_QUALIFIER genType powerOfTwoBelow(genType value) - { - return isPowerOfTwo(value) ? value : highestBitValue(value); - } - - template - GLM_FUNC_QUALIFIER vec powerOfTwoBelow(vec const& v) - { - return detail::functor1::call(powerOfTwoBelow, v); - } - - ///////////////////// - // powerOfTwoNearest - - template - GLM_FUNC_QUALIFIER genType powerOfTwoNearest(genType value) - { - if(isPowerOfTwo(value)) - return value; - - genType const prev = highestBitValue(value); - genType const next = prev << 1; - return (next - value) < (value - prev) ? next : prev; - } - - template - GLM_FUNC_QUALIFIER vec powerOfTwoNearest(vec const& v) - { - return detail::functor1::call(powerOfTwoNearest, v); - } - -}//namespace glm diff --git a/src/vendor/glm/gtx/closest_point.hpp b/src/vendor/glm/gtx/closest_point.hpp deleted file mode 100755 index de6dbbf..0000000 --- a/src/vendor/glm/gtx/closest_point.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref gtx_closest_point -/// @file glm/gtx/closest_point.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_closest_point GLM_GTX_closest_point -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Find the point on a straight line which is the closet of a point. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_closest_point is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_closest_point extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_closest_point - /// @{ - - /// Find the point on a straight line which is the closet of a point. - /// @see gtx_closest_point - template - GLM_FUNC_DECL vec<3, T, Q> closestPointOnLine( - vec<3, T, Q> const& point, - vec<3, T, Q> const& a, - vec<3, T, Q> const& b); - - /// 2d lines work as well - template - GLM_FUNC_DECL vec<2, T, Q> closestPointOnLine( - vec<2, T, Q> const& point, - vec<2, T, Q> const& a, - vec<2, T, Q> const& b); - - /// @} -}// namespace glm - -#include "closest_point.inl" diff --git a/src/vendor/glm/gtx/closest_point.inl b/src/vendor/glm/gtx/closest_point.inl deleted file mode 100755 index 0a39b04..0000000 --- a/src/vendor/glm/gtx/closest_point.inl +++ /dev/null @@ -1,45 +0,0 @@ -/// @ref gtx_closest_point - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> closestPointOnLine - ( - vec<3, T, Q> const& point, - vec<3, T, Q> const& a, - vec<3, T, Q> const& b - ) - { - T LineLength = distance(a, b); - vec<3, T, Q> Vector = point - a; - vec<3, T, Q> LineDirection = (b - a) / LineLength; - - // Project Vector to LineDirection to get the distance of point from a - T Distance = dot(Vector, LineDirection); - - if(Distance <= T(0)) return a; - if(Distance >= LineLength) return b; - return a + LineDirection * Distance; - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> closestPointOnLine - ( - vec<2, T, Q> const& point, - vec<2, T, Q> const& a, - vec<2, T, Q> const& b - ) - { - T LineLength = distance(a, b); - vec<2, T, Q> Vector = point - a; - vec<2, T, Q> LineDirection = (b - a) / LineLength; - - // Project Vector to LineDirection to get the distance of point from a - T Distance = dot(Vector, LineDirection); - - if(Distance <= T(0)) return a; - if(Distance >= LineLength) return b; - return a + LineDirection * Distance; - } - -}//namespace glm diff --git a/src/vendor/glm/gtx/color_encoding.hpp b/src/vendor/glm/gtx/color_encoding.hpp deleted file mode 100755 index 96ded2a..0000000 --- a/src/vendor/glm/gtx/color_encoding.hpp +++ /dev/null @@ -1,54 +0,0 @@ -/// @ref gtx_color_encoding -/// @file glm/gtx/color_encoding.hpp -/// -/// @see core (dependence) -/// @see gtx_color_encoding (dependence) -/// -/// @defgroup gtx_color_encoding GLM_GTX_color_encoding -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// @brief Allow to perform bit operations on integer values - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../vec3.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTC_color_encoding is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTC_color_encoding extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_color_encoding - /// @{ - - /// Convert a linear sRGB color to D65 YUV. - template - GLM_FUNC_DECL vec<3, T, Q> convertLinearSRGBToD65XYZ(vec<3, T, Q> const& ColorLinearSRGB); - - /// Convert a linear sRGB color to D50 YUV. - template - GLM_FUNC_DECL vec<3, T, Q> convertLinearSRGBToD50XYZ(vec<3, T, Q> const& ColorLinearSRGB); - - /// Convert a D65 YUV color to linear sRGB. - template - GLM_FUNC_DECL vec<3, T, Q> convertD65XYZToLinearSRGB(vec<3, T, Q> const& ColorD65XYZ); - - /// Convert a D65 YUV color to D50 YUV. - template - GLM_FUNC_DECL vec<3, T, Q> convertD65XYZToD50XYZ(vec<3, T, Q> const& ColorD65XYZ); - - /// @} -} //namespace glm - -#include "color_encoding.inl" diff --git a/src/vendor/glm/gtx/color_encoding.inl b/src/vendor/glm/gtx/color_encoding.inl deleted file mode 100755 index e50fa3e..0000000 --- a/src/vendor/glm/gtx/color_encoding.inl +++ /dev/null @@ -1,45 +0,0 @@ -/// @ref gtx_color_encoding - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> convertLinearSRGBToD65XYZ(vec<3, T, Q> const& ColorLinearSRGB) - { - vec<3, T, Q> const M(0.490f, 0.17697f, 0.2f); - vec<3, T, Q> const N(0.31f, 0.8124f, 0.01063f); - vec<3, T, Q> const O(0.490f, 0.01f, 0.99f); - - return (M * ColorLinearSRGB + N * ColorLinearSRGB + O * ColorLinearSRGB) * static_cast(5.650675255693055f); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> convertLinearSRGBToD50XYZ(vec<3, T, Q> const& ColorLinearSRGB) - { - vec<3, T, Q> const M(0.436030342570117f, 0.222438466210245f, 0.013897440074263f); - vec<3, T, Q> const N(0.385101860087134f, 0.716942745571917f, 0.097076381494207f); - vec<3, T, Q> const O(0.143067806654203f, 0.060618777416563f, 0.713926257896652f); - - return M * ColorLinearSRGB + N * ColorLinearSRGB + O * ColorLinearSRGB; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> convertD65XYZToLinearSRGB(vec<3, T, Q> const& ColorD65XYZ) - { - vec<3, T, Q> const M(0.41847f, -0.091169f, 0.0009209f); - vec<3, T, Q> const N(-0.15866f, 0.25243f, 0.015708f); - vec<3, T, Q> const O(0.0009209f, -0.0025498f, 0.1786f); - - return M * ColorD65XYZ + N * ColorD65XYZ + O * ColorD65XYZ; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> convertD65XYZToD50XYZ(vec<3, T, Q> const& ColorD65XYZ) - { - vec<3, T, Q> const M(+1.047844353856414f, +0.029549007606644f, -0.009250984365223f); - vec<3, T, Q> const N(+0.022898981050086f, +0.990508028941971f, +0.015072338237051f); - vec<3, T, Q> const O(-0.050206647741605f, -0.017074711360960f, +0.751717835079977f); - - return M * ColorD65XYZ + N * ColorD65XYZ + O * ColorD65XYZ; - } - -}//namespace glm diff --git a/src/vendor/glm/gtx/color_space.hpp b/src/vendor/glm/gtx/color_space.hpp deleted file mode 100755 index a634392..0000000 --- a/src/vendor/glm/gtx/color_space.hpp +++ /dev/null @@ -1,72 +0,0 @@ -/// @ref gtx_color_space -/// @file glm/gtx/color_space.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_color_space GLM_GTX_color_space -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Related to RGB to HSV conversions and operations. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_color_space is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_color_space extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_color_space - /// @{ - - /// Converts a color from HSV color space to its color in RGB color space. - /// @see gtx_color_space - template - GLM_FUNC_DECL vec<3, T, Q> rgbColor( - vec<3, T, Q> const& hsvValue); - - /// Converts a color from RGB color space to its color in HSV color space. - /// @see gtx_color_space - template - GLM_FUNC_DECL vec<3, T, Q> hsvColor( - vec<3, T, Q> const& rgbValue); - - /// Build a saturation matrix. - /// @see gtx_color_space - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> saturation( - T const s); - - /// Modify the saturation of a color. - /// @see gtx_color_space - template - GLM_FUNC_DECL vec<3, T, Q> saturation( - T const s, - vec<3, T, Q> const& color); - - /// Modify the saturation of a color. - /// @see gtx_color_space - template - GLM_FUNC_DECL vec<4, T, Q> saturation( - T const s, - vec<4, T, Q> const& color); - - /// Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals. - /// @see gtx_color_space - template - GLM_FUNC_DECL T luminosity( - vec<3, T, Q> const& color); - - /// @} -}//namespace glm - -#include "color_space.inl" diff --git a/src/vendor/glm/gtx/color_space.inl b/src/vendor/glm/gtx/color_space.inl deleted file mode 100755 index f698afe..0000000 --- a/src/vendor/glm/gtx/color_space.inl +++ /dev/null @@ -1,141 +0,0 @@ -/// @ref gtx_color_space - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rgbColor(const vec<3, T, Q>& hsvColor) - { - vec<3, T, Q> hsv = hsvColor; - vec<3, T, Q> rgbColor; - - if(hsv.y == static_cast(0)) - // achromatic (grey) - rgbColor = vec<3, T, Q>(hsv.z); - else - { - T sector = floor(hsv.x * (T(1) / T(60))); - T frac = (hsv.x * (T(1) / T(60))) - sector; - // factorial part of h - T o = hsv.z * (T(1) - hsv.y); - T p = hsv.z * (T(1) - hsv.y * frac); - T q = hsv.z * (T(1) - hsv.y * (T(1) - frac)); - - switch(int(sector)) - { - default: - case 0: - rgbColor.r = hsv.z; - rgbColor.g = q; - rgbColor.b = o; - break; - case 1: - rgbColor.r = p; - rgbColor.g = hsv.z; - rgbColor.b = o; - break; - case 2: - rgbColor.r = o; - rgbColor.g = hsv.z; - rgbColor.b = q; - break; - case 3: - rgbColor.r = o; - rgbColor.g = p; - rgbColor.b = hsv.z; - break; - case 4: - rgbColor.r = q; - rgbColor.g = o; - rgbColor.b = hsv.z; - break; - case 5: - rgbColor.r = hsv.z; - rgbColor.g = o; - rgbColor.b = p; - break; - } - } - - return rgbColor; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> hsvColor(const vec<3, T, Q>& rgbColor) - { - vec<3, T, Q> hsv = rgbColor; - float Min = min(min(rgbColor.r, rgbColor.g), rgbColor.b); - float Max = max(max(rgbColor.r, rgbColor.g), rgbColor.b); - float Delta = Max - Min; - - hsv.z = Max; - - if(Max != static_cast(0)) - { - hsv.y = Delta / hsv.z; - T h = static_cast(0); - - if(rgbColor.r == Max) - // between yellow & magenta - h = static_cast(0) + T(60) * (rgbColor.g - rgbColor.b) / Delta; - else if(rgbColor.g == Max) - // between cyan & yellow - h = static_cast(120) + T(60) * (rgbColor.b - rgbColor.r) / Delta; - else - // between magenta & cyan - h = static_cast(240) + T(60) * (rgbColor.r - rgbColor.g) / Delta; - - if(h < T(0)) - hsv.x = h + T(360); - else - hsv.x = h; - } - else - { - // If r = g = b = 0 then s = 0, h is undefined - hsv.y = static_cast(0); - hsv.x = static_cast(0); - } - - return hsv; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> saturation(T const s) - { - vec<3, T, defaultp> rgbw = vec<3, T, defaultp>(T(0.2126), T(0.7152), T(0.0722)); - - vec<3, T, defaultp> const col((T(1) - s) * rgbw); - - mat<4, 4, T, defaultp> result(T(1)); - result[0][0] = col.x + s; - result[0][1] = col.x; - result[0][2] = col.x; - result[1][0] = col.y; - result[1][1] = col.y + s; - result[1][2] = col.y; - result[2][0] = col.z; - result[2][1] = col.z; - result[2][2] = col.z + s; - - return result; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> saturation(const T s, const vec<3, T, Q>& color) - { - return vec<3, T, Q>(saturation(s) * vec<4, T, Q>(color, T(0))); - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> saturation(const T s, const vec<4, T, Q>& color) - { - return saturation(s) * color; - } - - template - GLM_FUNC_QUALIFIER T luminosity(const vec<3, T, Q>& color) - { - const vec<3, T, Q> tmp = vec<3, T, Q>(0.33, 0.59, 0.11); - return dot(color, tmp); - } -}//namespace glm diff --git a/src/vendor/glm/gtx/color_space_YCoCg.hpp b/src/vendor/glm/gtx/color_space_YCoCg.hpp deleted file mode 100755 index dd2b771..0000000 --- a/src/vendor/glm/gtx/color_space_YCoCg.hpp +++ /dev/null @@ -1,60 +0,0 @@ -/// @ref gtx_color_space_YCoCg -/// @file glm/gtx/color_space_YCoCg.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_color_space_YCoCg GLM_GTX_color_space_YCoCg -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// RGB to YCoCg conversions and operations - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_color_space_YCoCg is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_color_space_YCoCg extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_color_space_YCoCg - /// @{ - - /// Convert a color from RGB color space to YCoCg color space. - /// @see gtx_color_space_YCoCg - template - GLM_FUNC_DECL vec<3, T, Q> rgb2YCoCg( - vec<3, T, Q> const& rgbColor); - - /// Convert a color from YCoCg color space to RGB color space. - /// @see gtx_color_space_YCoCg - template - GLM_FUNC_DECL vec<3, T, Q> YCoCg2rgb( - vec<3, T, Q> const& YCoCgColor); - - /// Convert a color from RGB color space to YCoCgR color space. - /// @see "YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range" - /// @see gtx_color_space_YCoCg - template - GLM_FUNC_DECL vec<3, T, Q> rgb2YCoCgR( - vec<3, T, Q> const& rgbColor); - - /// Convert a color from YCoCgR color space to RGB color space. - /// @see "YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range" - /// @see gtx_color_space_YCoCg - template - GLM_FUNC_DECL vec<3, T, Q> YCoCgR2rgb( - vec<3, T, Q> const& YCoCgColor); - - /// @} -}//namespace glm - -#include "color_space_YCoCg.inl" diff --git a/src/vendor/glm/gtx/color_space_YCoCg.inl b/src/vendor/glm/gtx/color_space_YCoCg.inl deleted file mode 100755 index 83ba857..0000000 --- a/src/vendor/glm/gtx/color_space_YCoCg.inl +++ /dev/null @@ -1,107 +0,0 @@ -/// @ref gtx_color_space_YCoCg - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rgb2YCoCg - ( - vec<3, T, Q> const& rgbColor - ) - { - vec<3, T, Q> result; - result.x/*Y */ = rgbColor.r / T(4) + rgbColor.g / T(2) + rgbColor.b / T(4); - result.y/*Co*/ = rgbColor.r / T(2) + rgbColor.g * T(0) - rgbColor.b / T(2); - result.z/*Cg*/ = - rgbColor.r / T(4) + rgbColor.g / T(2) - rgbColor.b / T(4); - return result; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> YCoCg2rgb - ( - vec<3, T, Q> const& YCoCgColor - ) - { - vec<3, T, Q> result; - result.r = YCoCgColor.x + YCoCgColor.y - YCoCgColor.z; - result.g = YCoCgColor.x + YCoCgColor.z; - result.b = YCoCgColor.x - YCoCgColor.y - YCoCgColor.z; - return result; - } - - template - class compute_YCoCgR { - public: - static GLM_FUNC_QUALIFIER vec<3, T, Q> rgb2YCoCgR - ( - vec<3, T, Q> const& rgbColor - ) - { - vec<3, T, Q> result; - result.x/*Y */ = rgbColor.g * static_cast(0.5) + (rgbColor.r + rgbColor.b) * static_cast(0.25); - result.y/*Co*/ = rgbColor.r - rgbColor.b; - result.z/*Cg*/ = rgbColor.g - (rgbColor.r + rgbColor.b) * static_cast(0.5); - return result; - } - - static GLM_FUNC_QUALIFIER vec<3, T, Q> YCoCgR2rgb - ( - vec<3, T, Q> const& YCoCgRColor - ) - { - vec<3, T, Q> result; - T tmp = YCoCgRColor.x - (YCoCgRColor.z * static_cast(0.5)); - result.g = YCoCgRColor.z + tmp; - result.b = tmp - (YCoCgRColor.y * static_cast(0.5)); - result.r = result.b + YCoCgRColor.y; - return result; - } - }; - - template - class compute_YCoCgR { - public: - static GLM_FUNC_QUALIFIER vec<3, T, Q> rgb2YCoCgR - ( - vec<3, T, Q> const& rgbColor - ) - { - vec<3, T, Q> result; - result.y/*Co*/ = rgbColor.r - rgbColor.b; - T tmp = rgbColor.b + (result.y >> 1); - result.z/*Cg*/ = rgbColor.g - tmp; - result.x/*Y */ = tmp + (result.z >> 1); - return result; - } - - static GLM_FUNC_QUALIFIER vec<3, T, Q> YCoCgR2rgb - ( - vec<3, T, Q> const& YCoCgRColor - ) - { - vec<3, T, Q> result; - T tmp = YCoCgRColor.x - (YCoCgRColor.z >> 1); - result.g = YCoCgRColor.z + tmp; - result.b = tmp - (YCoCgRColor.y >> 1); - result.r = result.b + YCoCgRColor.y; - return result; - } - }; - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rgb2YCoCgR - ( - vec<3, T, Q> const& rgbColor - ) - { - return compute_YCoCgR::is_integer>::rgb2YCoCgR(rgbColor); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> YCoCgR2rgb - ( - vec<3, T, Q> const& YCoCgRColor - ) - { - return compute_YCoCgR::is_integer>::YCoCgR2rgb(YCoCgRColor); - } -}//namespace glm diff --git a/src/vendor/glm/gtx/common.hpp b/src/vendor/glm/gtx/common.hpp deleted file mode 100755 index 254ada2..0000000 --- a/src/vendor/glm/gtx/common.hpp +++ /dev/null @@ -1,76 +0,0 @@ -/// @ref gtx_common -/// @file glm/gtx/common.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_common GLM_GTX_common -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// @brief Provide functions to increase the compatibility with Cg and HLSL languages - -#pragma once - -// Dependencies: -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include "../gtc/vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_common is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_common extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_common - /// @{ - - /// Returns true if x is a denormalized number - /// Numbers whose absolute value is too small to be represented in the normal format are represented in an alternate, denormalized format. - /// This format is less precise but can represent values closer to zero. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL isnan man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL typename genType::bool_type isdenormal(genType const& x); - - /// Similar to 'mod' but with a different rounding and integer support. - /// Returns 'x - y * trunc(x/y)' instead of 'x - y * floor(x/y)' - /// - /// @see GLSL mod vs HLSL fmod - /// @see GLSL mod man page - template - GLM_FUNC_DECL vec fmod(vec const& v); - - /// Returns whether vector components values are within an interval. A open interval excludes its endpoints, and is denoted with square brackets. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_relational - template - GLM_FUNC_DECL vec openBounded(vec const& Value, vec const& Min, vec const& Max); - - /// Returns whether vector components values are within an interval. A closed interval includes its endpoints, and is denoted with square brackets. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_relational - template - GLM_FUNC_DECL vec closeBounded(vec const& Value, vec const& Min, vec const& Max); - - /// @} -}//namespace glm - -#include "common.inl" diff --git a/src/vendor/glm/gtx/common.inl b/src/vendor/glm/gtx/common.inl deleted file mode 100755 index 4ad2126..0000000 --- a/src/vendor/glm/gtx/common.inl +++ /dev/null @@ -1,125 +0,0 @@ -/// @ref gtx_common - -#include -#include "../gtc/epsilon.hpp" -#include "../gtc/constants.hpp" - -namespace glm{ -namespace detail -{ - template - struct compute_fmod - { - GLM_FUNC_QUALIFIER static vec call(vec const& a, vec const& b) - { - return detail::functor2::call(std::fmod, a, b); - } - }; - - template - struct compute_fmod - { - GLM_FUNC_QUALIFIER static vec call(vec const& a, vec const& b) - { - return a % b; - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER bool isdenormal(T const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isdenormal' only accept floating-point inputs"); - -# if GLM_HAS_CXX11_STL - return std::fpclassify(x) == FP_SUBNORMAL; -# else - return epsilonNotEqual(x, static_cast(0), epsilon()) && std::fabs(x) < std::numeric_limits::min(); -# endif - } - - template - GLM_FUNC_QUALIFIER typename vec<1, T, Q>::bool_type isdenormal - ( - vec<1, T, Q> const& x - ) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isdenormal' only accept floating-point inputs"); - - return typename vec<1, T, Q>::bool_type( - isdenormal(x.x)); - } - - template - GLM_FUNC_QUALIFIER typename vec<2, T, Q>::bool_type isdenormal - ( - vec<2, T, Q> const& x - ) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isdenormal' only accept floating-point inputs"); - - return typename vec<2, T, Q>::bool_type( - isdenormal(x.x), - isdenormal(x.y)); - } - - template - GLM_FUNC_QUALIFIER typename vec<3, T, Q>::bool_type isdenormal - ( - vec<3, T, Q> const& x - ) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isdenormal' only accept floating-point inputs"); - - return typename vec<3, T, Q>::bool_type( - isdenormal(x.x), - isdenormal(x.y), - isdenormal(x.z)); - } - - template - GLM_FUNC_QUALIFIER typename vec<4, T, Q>::bool_type isdenormal - ( - vec<4, T, Q> const& x - ) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isdenormal' only accept floating-point inputs"); - - return typename vec<4, T, Q>::bool_type( - isdenormal(x.x), - isdenormal(x.y), - isdenormal(x.z), - isdenormal(x.w)); - } - - // fmod - template - GLM_FUNC_QUALIFIER genType fmod(genType x, genType y) - { - return fmod(vec<1, genType>(x), y).x; - } - - template - GLM_FUNC_QUALIFIER vec fmod(vec const& x, T y) - { - return detail::compute_fmod::is_iec559>::call(x, vec(y)); - } - - template - GLM_FUNC_QUALIFIER vec fmod(vec const& x, vec const& y) - { - return detail::compute_fmod::is_iec559>::call(x, y); - } - - template - GLM_FUNC_QUALIFIER vec openBounded(vec const& Value, vec const& Min, vec const& Max) - { - return greaterThan(Value, Min) && lessThan(Value, Max); - } - - template - GLM_FUNC_QUALIFIER vec closeBounded(vec const& Value, vec const& Min, vec const& Max) - { - return greaterThanEqual(Value, Min) && lessThanEqual(Value, Max); - } -}//namespace glm diff --git a/src/vendor/glm/gtx/compatibility.hpp b/src/vendor/glm/gtx/compatibility.hpp deleted file mode 100755 index f1b00a6..0000000 --- a/src/vendor/glm/gtx/compatibility.hpp +++ /dev/null @@ -1,133 +0,0 @@ -/// @ref gtx_compatibility -/// @file glm/gtx/compatibility.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_compatibility GLM_GTX_compatibility -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Provide functions to increase the compatibility with Cg and HLSL languages - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/quaternion.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_compatibility is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_compatibility extension included") -# endif -#endif - -#if GLM_COMPILER & GLM_COMPILER_VC -# include -#elif GLM_COMPILER & GLM_COMPILER_GCC -# include -# if(GLM_PLATFORM & GLM_PLATFORM_ANDROID) -# undef isfinite -# endif -#endif//GLM_COMPILER - -namespace glm -{ - /// @addtogroup gtx_compatibility - /// @{ - - template GLM_FUNC_QUALIFIER T lerp(T x, T y, T a){return mix(x, y, a);} //!< \brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<2, T, Q> lerp(const vec<2, T, Q>& x, const vec<2, T, Q>& y, T a){return mix(x, y, a);} //!< \brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) - - template GLM_FUNC_QUALIFIER vec<3, T, Q> lerp(const vec<3, T, Q>& x, const vec<3, T, Q>& y, T a){return mix(x, y, a);} //!< \brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<4, T, Q> lerp(const vec<4, T, Q>& x, const vec<4, T, Q>& y, T a){return mix(x, y, a);} //!< \brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<2, T, Q> lerp(const vec<2, T, Q>& x, const vec<2, T, Q>& y, const vec<2, T, Q>& a){return mix(x, y, a);} //!< \brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<3, T, Q> lerp(const vec<3, T, Q>& x, const vec<3, T, Q>& y, const vec<3, T, Q>& a){return mix(x, y, a);} //!< \brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<4, T, Q> lerp(const vec<4, T, Q>& x, const vec<4, T, Q>& y, const vec<4, T, Q>& a){return mix(x, y, a);} //!< \brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) - - template GLM_FUNC_QUALIFIER T saturate(T x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<2, T, Q> saturate(const vec<2, T, Q>& x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<3, T, Q> saturate(const vec<3, T, Q>& x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<4, T, Q> saturate(const vec<4, T, Q>& x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) - - template GLM_FUNC_QUALIFIER T atan2(T x, T y){return atan(x, y);} //!< \brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<2, T, Q> atan2(const vec<2, T, Q>& x, const vec<2, T, Q>& y){return atan(x, y);} //!< \brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<3, T, Q> atan2(const vec<3, T, Q>& x, const vec<3, T, Q>& y){return atan(x, y);} //!< \brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<4, T, Q> atan2(const vec<4, T, Q>& x, const vec<4, T, Q>& y){return atan(x, y);} //!< \brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) - - template GLM_FUNC_DECL bool isfinite(genType const& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) - template GLM_FUNC_DECL vec<1, bool, Q> isfinite(const vec<1, T, Q>& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) - template GLM_FUNC_DECL vec<2, bool, Q> isfinite(const vec<2, T, Q>& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) - template GLM_FUNC_DECL vec<3, bool, Q> isfinite(const vec<3, T, Q>& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) - template GLM_FUNC_DECL vec<4, bool, Q> isfinite(const vec<4, T, Q>& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) - - typedef bool bool1; //!< \brief boolean type with 1 component. (From GLM_GTX_compatibility extension) - typedef vec<2, bool, highp> bool2; //!< \brief boolean type with 2 components. (From GLM_GTX_compatibility extension) - typedef vec<3, bool, highp> bool3; //!< \brief boolean type with 3 components. (From GLM_GTX_compatibility extension) - typedef vec<4, bool, highp> bool4; //!< \brief boolean type with 4 components. (From GLM_GTX_compatibility extension) - - typedef bool bool1x1; //!< \brief boolean matrix with 1 x 1 component. (From GLM_GTX_compatibility extension) - typedef mat<2, 2, bool, highp> bool2x2; //!< \brief boolean matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<2, 3, bool, highp> bool2x3; //!< \brief boolean matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<2, 4, bool, highp> bool2x4; //!< \brief boolean matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 2, bool, highp> bool3x2; //!< \brief boolean matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 3, bool, highp> bool3x3; //!< \brief boolean matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 4, bool, highp> bool3x4; //!< \brief boolean matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 2, bool, highp> bool4x2; //!< \brief boolean matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 3, bool, highp> bool4x3; //!< \brief boolean matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 4, bool, highp> bool4x4; //!< \brief boolean matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) - - typedef int int1; //!< \brief integer vector with 1 component. (From GLM_GTX_compatibility extension) - typedef vec<2, int, highp> int2; //!< \brief integer vector with 2 components. (From GLM_GTX_compatibility extension) - typedef vec<3, int, highp> int3; //!< \brief integer vector with 3 components. (From GLM_GTX_compatibility extension) - typedef vec<4, int, highp> int4; //!< \brief integer vector with 4 components. (From GLM_GTX_compatibility extension) - - typedef int int1x1; //!< \brief integer matrix with 1 component. (From GLM_GTX_compatibility extension) - typedef mat<2, 2, int, highp> int2x2; //!< \brief integer matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<2, 3, int, highp> int2x3; //!< \brief integer matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<2, 4, int, highp> int2x4; //!< \brief integer matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 2, int, highp> int3x2; //!< \brief integer matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 3, int, highp> int3x3; //!< \brief integer matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 4, int, highp> int3x4; //!< \brief integer matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 2, int, highp> int4x2; //!< \brief integer matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 3, int, highp> int4x3; //!< \brief integer matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 4, int, highp> int4x4; //!< \brief integer matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) - - typedef float float1; //!< \brief single-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension) - typedef vec<2, float, highp> float2; //!< \brief single-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension) - typedef vec<3, float, highp> float3; //!< \brief single-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension) - typedef vec<4, float, highp> float4; //!< \brief single-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension) - - typedef float float1x1; //!< \brief single-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) - typedef mat<2, 2, float, highp> float2x2; //!< \brief single-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<2, 3, float, highp> float2x3; //!< \brief single-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<2, 4, float, highp> float2x4; //!< \brief single-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 2, float, highp> float3x2; //!< \brief single-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 3, float, highp> float3x3; //!< \brief single-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 4, float, highp> float3x4; //!< \brief single-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 2, float, highp> float4x2; //!< \brief single-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 3, float, highp> float4x3; //!< \brief single-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 4, float, highp> float4x4; //!< \brief single-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) - - typedef double double1; //!< \brief double-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension) - typedef vec<2, double, highp> double2; //!< \brief double-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension) - typedef vec<3, double, highp> double3; //!< \brief double-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension) - typedef vec<4, double, highp> double4; //!< \brief double-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension) - - typedef double double1x1; //!< \brief double-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) - typedef mat<2, 2, double, highp> double2x2; //!< \brief double-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<2, 3, double, highp> double2x3; //!< \brief double-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<2, 4, double, highp> double2x4; //!< \brief double-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 2, double, highp> double3x2; //!< \brief double-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 3, double, highp> double3x3; //!< \brief double-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 4, double, highp> double3x4; //!< \brief double-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 2, double, highp> double4x2; //!< \brief double-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 3, double, highp> double4x3; //!< \brief double-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 4, double, highp> double4x4; //!< \brief double-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) - - /// @} -}//namespace glm - -#include "compatibility.inl" diff --git a/src/vendor/glm/gtx/compatibility.inl b/src/vendor/glm/gtx/compatibility.inl deleted file mode 100755 index 1d49496..0000000 --- a/src/vendor/glm/gtx/compatibility.inl +++ /dev/null @@ -1,62 +0,0 @@ -#include - -namespace glm -{ - // isfinite - template - GLM_FUNC_QUALIFIER bool isfinite( - genType const& x) - { -# if GLM_HAS_CXX11_STL - return std::isfinite(x) != 0; -# elif GLM_COMPILER & GLM_COMPILER_VC - return _finite(x) != 0; -# elif GLM_COMPILER & GLM_COMPILER_GCC && GLM_PLATFORM & GLM_PLATFORM_ANDROID - return _isfinite(x) != 0; -# else - if (std::numeric_limits::is_integer || std::denorm_absent == std::numeric_limits::has_denorm) - return std::numeric_limits::min() <= x && std::numeric_limits::max() >= x; - else - return -std::numeric_limits::max() <= x && std::numeric_limits::max() >= x; -# endif - } - - template - GLM_FUNC_QUALIFIER vec<1, bool, Q> isfinite( - vec<1, T, Q> const& x) - { - return vec<1, bool, Q>( - isfinite(x.x)); - } - - template - GLM_FUNC_QUALIFIER vec<2, bool, Q> isfinite( - vec<2, T, Q> const& x) - { - return vec<2, bool, Q>( - isfinite(x.x), - isfinite(x.y)); - } - - template - GLM_FUNC_QUALIFIER vec<3, bool, Q> isfinite( - vec<3, T, Q> const& x) - { - return vec<3, bool, Q>( - isfinite(x.x), - isfinite(x.y), - isfinite(x.z)); - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> isfinite( - vec<4, T, Q> const& x) - { - return vec<4, bool, Q>( - isfinite(x.x), - isfinite(x.y), - isfinite(x.z), - isfinite(x.w)); - } - -}//namespace glm diff --git a/src/vendor/glm/gtx/component_wise.hpp b/src/vendor/glm/gtx/component_wise.hpp deleted file mode 100755 index 34a2b0a..0000000 --- a/src/vendor/glm/gtx/component_wise.hpp +++ /dev/null @@ -1,69 +0,0 @@ -/// @ref gtx_component_wise -/// @file glm/gtx/component_wise.hpp -/// @date 2007-05-21 / 2011-06-07 -/// @author Christophe Riccio -/// -/// @see core (dependence) -/// -/// @defgroup gtx_component_wise GLM_GTX_component_wise -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Operations between components of a type - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_component_wise is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_component_wise extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_component_wise - /// @{ - - /// Convert an integer vector to a normalized float vector. - /// If the parameter value type is already a floating qualifier type, the value is passed through. - /// @see gtx_component_wise - template - GLM_FUNC_DECL vec compNormalize(vec const& v); - - /// Convert a normalized float vector to an integer vector. - /// If the parameter value type is already a floating qualifier type, the value is passed through. - /// @see gtx_component_wise - template - GLM_FUNC_DECL vec compScale(vec const& v); - - /// Add all vector components together. - /// @see gtx_component_wise - template - GLM_FUNC_DECL typename genType::value_type compAdd(genType const& v); - - /// Multiply all vector components together. - /// @see gtx_component_wise - template - GLM_FUNC_DECL typename genType::value_type compMul(genType const& v); - - /// Find the minimum value between single vector components. - /// @see gtx_component_wise - template - GLM_FUNC_DECL typename genType::value_type compMin(genType const& v); - - /// Find the maximum value between single vector components. - /// @see gtx_component_wise - template - GLM_FUNC_DECL typename genType::value_type compMax(genType const& v); - - /// @} -}//namespace glm - -#include "component_wise.inl" diff --git a/src/vendor/glm/gtx/component_wise.inl b/src/vendor/glm/gtx/component_wise.inl deleted file mode 100755 index cbbc7d4..0000000 --- a/src/vendor/glm/gtx/component_wise.inl +++ /dev/null @@ -1,127 +0,0 @@ -/// @ref gtx_component_wise - -#include - -namespace glm{ -namespace detail -{ - template - struct compute_compNormalize - {}; - - template - struct compute_compNormalize - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - floatType const Min = static_cast(std::numeric_limits::min()); - floatType const Max = static_cast(std::numeric_limits::max()); - return (vec(v) - Min) / (Max - Min) * static_cast(2) - static_cast(1); - } - }; - - template - struct compute_compNormalize - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - return vec(v) / static_cast(std::numeric_limits::max()); - } - }; - - template - struct compute_compNormalize - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - return v; - } - }; - - template - struct compute_compScale - {}; - - template - struct compute_compScale - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - floatType const Max = static_cast(std::numeric_limits::max()) + static_cast(0.5); - vec const Scaled(v * Max); - vec const Result(Scaled - static_cast(0.5)); - return Result; - } - }; - - template - struct compute_compScale - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - return vec(vec(v) * static_cast(std::numeric_limits::max())); - } - }; - - template - struct compute_compScale - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - return v; - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER vec compNormalize(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'compNormalize' accepts only floating-point types for 'floatType' template parameter"); - - return detail::compute_compNormalize::is_integer, std::numeric_limits::is_signed>::call(v); - } - - template - GLM_FUNC_QUALIFIER vec compScale(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'compScale' accepts only floating-point types for 'floatType' template parameter"); - - return detail::compute_compScale::is_integer, std::numeric_limits::is_signed>::call(v); - } - - template - GLM_FUNC_QUALIFIER T compAdd(vec const& v) - { - T Result(0); - for(length_t i = 0, n = v.length(); i < n; ++i) - Result += v[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER T compMul(vec const& v) - { - T Result(1); - for(length_t i = 0, n = v.length(); i < n; ++i) - Result *= v[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER T compMin(vec const& v) - { - T Result(v[0]); - for(length_t i = 1, n = v.length(); i < n; ++i) - Result = min(Result, v[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER T compMax(vec const& v) - { - T Result(v[0]); - for(length_t i = 1, n = v.length(); i < n; ++i) - Result = max(Result, v[i]); - return Result; - } -}//namespace glm diff --git a/src/vendor/glm/gtx/dual_quaternion.hpp b/src/vendor/glm/gtx/dual_quaternion.hpp deleted file mode 100755 index 6a51ab7..0000000 --- a/src/vendor/glm/gtx/dual_quaternion.hpp +++ /dev/null @@ -1,274 +0,0 @@ -/// @ref gtx_dual_quaternion -/// @file glm/gtx/dual_quaternion.hpp -/// @author Maksim Vorobiev (msomeone@gmail.com) -/// -/// @see core (dependence) -/// @see gtc_constants (dependence) -/// @see gtc_quaternion (dependence) -/// -/// @defgroup gtx_dual_quaternion GLM_GTX_dual_quaternion -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Defines a templated dual-quaternion type and several dual-quaternion operations. - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/constants.hpp" -#include "../gtc/quaternion.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_dual_quaternion is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_dual_quaternion extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_dual_quaternion - /// @{ - - template - struct tdualquat - { - // -- Implementation detail -- - - typedef T value_type; - typedef qua part_type; - - // -- Data -- - - qua real, dual; - - // -- Component accesses -- - - typedef length_t length_type; - /// Return the count of components of a dual quaternion - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 2;} - - GLM_FUNC_DECL part_type & operator[](length_type i); - GLM_FUNC_DECL part_type const& operator[](length_type i) const; - - // -- Implicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR tdualquat() GLM_DEFAULT; - GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tdualquat const& d) GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tdualquat const& d); - - // -- Explicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua const& real); - GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua const& orientation, vec<3, T, Q> const& translation); - GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua const& real, qua const& dual); - - // -- Conversion constructors -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tdualquat(tdualquat const& q); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR tdualquat(mat<2, 4, T, Q> const& holder_mat); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR tdualquat(mat<3, 4, T, Q> const& aug_mat); - - // -- Unary arithmetic operators -- - - GLM_FUNC_DECL tdualquat & operator=(tdualquat const& m) GLM_DEFAULT; - - template - GLM_FUNC_DECL tdualquat & operator=(tdualquat const& m); - template - GLM_FUNC_DECL tdualquat & operator*=(U s); - template - GLM_FUNC_DECL tdualquat & operator/=(U s); - }; - - // -- Unary bit operators -- - - template - GLM_FUNC_DECL tdualquat operator+(tdualquat const& q); - - template - GLM_FUNC_DECL tdualquat operator-(tdualquat const& q); - - // -- Binary operators -- - - template - GLM_FUNC_DECL tdualquat operator+(tdualquat const& q, tdualquat const& p); - - template - GLM_FUNC_DECL tdualquat operator*(tdualquat const& q, tdualquat const& p); - - template - GLM_FUNC_DECL vec<3, T, Q> operator*(tdualquat const& q, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL vec<3, T, Q> operator*(vec<3, T, Q> const& v, tdualquat const& q); - - template - GLM_FUNC_DECL vec<4, T, Q> operator*(tdualquat const& q, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL vec<4, T, Q> operator*(vec<4, T, Q> const& v, tdualquat const& q); - - template - GLM_FUNC_DECL tdualquat operator*(tdualquat const& q, T const& s); - - template - GLM_FUNC_DECL tdualquat operator*(T const& s, tdualquat const& q); - - template - GLM_FUNC_DECL tdualquat operator/(tdualquat const& q, T const& s); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(tdualquat const& q1, tdualquat const& q2); - - template - GLM_FUNC_DECL bool operator!=(tdualquat const& q1, tdualquat const& q2); - - /// Creates an identity dual quaternion. - /// - /// @see gtx_dual_quaternion - template - GLM_FUNC_DECL tdualquat dual_quat_identity(); - - /// Returns the normalized quaternion. - /// - /// @see gtx_dual_quaternion - template - GLM_FUNC_DECL tdualquat normalize(tdualquat const& q); - - /// Returns the linear interpolation of two dual quaternion. - /// - /// @see gtc_dual_quaternion - template - GLM_FUNC_DECL tdualquat lerp(tdualquat const& x, tdualquat const& y, T const& a); - - /// Returns the q inverse. - /// - /// @see gtx_dual_quaternion - template - GLM_FUNC_DECL tdualquat inverse(tdualquat const& q); - - /// Converts a quaternion to a 2 * 4 matrix. - /// - /// @see gtx_dual_quaternion - template - GLM_FUNC_DECL mat<2, 4, T, Q> mat2x4_cast(tdualquat const& x); - - /// Converts a quaternion to a 3 * 4 matrix. - /// - /// @see gtx_dual_quaternion - template - GLM_FUNC_DECL mat<3, 4, T, Q> mat3x4_cast(tdualquat const& x); - - /// Converts a 2 * 4 matrix (matrix which holds real and dual parts) to a quaternion. - /// - /// @see gtx_dual_quaternion - template - GLM_FUNC_DECL tdualquat dualquat_cast(mat<2, 4, T, Q> const& x); - - /// Converts a 3 * 4 matrix (augmented matrix rotation + translation) to a quaternion. - /// - /// @see gtx_dual_quaternion - template - GLM_FUNC_DECL tdualquat dualquat_cast(mat<3, 4, T, Q> const& x); - - - /// Dual-quaternion of low single-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat lowp_dualquat; - - /// Dual-quaternion of medium single-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat mediump_dualquat; - - /// Dual-quaternion of high single-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat highp_dualquat; - - - /// Dual-quaternion of low single-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat lowp_fdualquat; - - /// Dual-quaternion of medium single-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat mediump_fdualquat; - - /// Dual-quaternion of high single-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat highp_fdualquat; - - - /// Dual-quaternion of low double-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat lowp_ddualquat; - - /// Dual-quaternion of medium double-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat mediump_ddualquat; - - /// Dual-quaternion of high double-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat highp_ddualquat; - - -#if(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT)) - /// Dual-quaternion of floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef highp_fdualquat dualquat; - - /// Dual-quaternion of single-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef highp_fdualquat fdualquat; -#elif(defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT)) - typedef highp_fdualquat dualquat; - typedef highp_fdualquat fdualquat; -#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT)) - typedef mediump_fdualquat dualquat; - typedef mediump_fdualquat fdualquat; -#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && defined(GLM_PRECISION_LOWP_FLOAT)) - typedef lowp_fdualquat dualquat; - typedef lowp_fdualquat fdualquat; -#else -# error "GLM error: multiple default precision requested for single-precision floating-point types" -#endif - - -#if(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE)) - /// Dual-quaternion of default double-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef highp_ddualquat ddualquat; -#elif(defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE)) - typedef highp_ddualquat ddualquat; -#elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE)) - typedef mediump_ddualquat ddualquat; -#elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && defined(GLM_PRECISION_LOWP_DOUBLE)) - typedef lowp_ddualquat ddualquat; -#else -# error "GLM error: Multiple default precision requested for double-precision floating-point types" -#endif - - /// @} -} //namespace glm - -#include "dual_quaternion.inl" diff --git a/src/vendor/glm/gtx/dual_quaternion.inl b/src/vendor/glm/gtx/dual_quaternion.inl deleted file mode 100755 index fad07ea..0000000 --- a/src/vendor/glm/gtx/dual_quaternion.inl +++ /dev/null @@ -1,352 +0,0 @@ -/// @ref gtx_dual_quaternion - -#include "../geometric.hpp" -#include - -namespace glm -{ - // -- Component accesses -- - - template - GLM_FUNC_QUALIFIER typename tdualquat::part_type & tdualquat::operator[](typename tdualquat::length_type i) - { - assert(i >= 0 && i < this->length()); - return (&real)[i]; - } - - template - GLM_FUNC_QUALIFIER typename tdualquat::part_type const& tdualquat::operator[](typename tdualquat::length_type i) const - { - assert(i >= 0 && i < this->length()); - return (&real)[i]; - } - - // -- Implicit basic constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat() -# if GLM_CONFIG_DEFAULTED_FUNCTIONS != GLM_DISABLE - : real(qua()) - , dual(qua(0, 0, 0, 0)) -# endif - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(tdualquat const& d) - : real(d.real) - , dual(d.dual) - {} -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(tdualquat const& d) - : real(d.real) - , dual(d.dual) - {} - - // -- Explicit basic constructors -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(qua const& r) - : real(r), dual(qua(0, 0, 0, 0)) - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(qua const& q, vec<3, T, Q> const& p) - : real(q), dual( - T(-0.5) * ( p.x*q.x + p.y*q.y + p.z*q.z), - T(+0.5) * ( p.x*q.w + p.y*q.z - p.z*q.y), - T(+0.5) * (-p.x*q.z + p.y*q.w + p.z*q.x), - T(+0.5) * ( p.x*q.y - p.y*q.x + p.z*q.w)) - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(qua const& r, qua const& d) - : real(r), dual(d) - {} - - // -- Conversion constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(tdualquat const& q) - : real(q.real) - , dual(q.dual) - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(mat<2, 4, T, Q> const& m) - { - *this = dualquat_cast(m); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(mat<3, 4, T, Q> const& m) - { - *this = dualquat_cast(m); - } - - // -- Unary arithmetic operators -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER tdualquat & tdualquat::operator=(tdualquat const& q) - { - this->real = q.real; - this->dual = q.dual; - return *this; - } -# endif - - template - template - GLM_FUNC_QUALIFIER tdualquat & tdualquat::operator=(tdualquat const& q) - { - this->real = q.real; - this->dual = q.dual; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER tdualquat & tdualquat::operator*=(U s) - { - this->real *= static_cast(s); - this->dual *= static_cast(s); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER tdualquat & tdualquat::operator/=(U s) - { - this->real /= static_cast(s); - this->dual /= static_cast(s); - return *this; - } - - // -- Unary bit operators -- - - template - GLM_FUNC_QUALIFIER tdualquat operator+(tdualquat const& q) - { - return q; - } - - template - GLM_FUNC_QUALIFIER tdualquat operator-(tdualquat const& q) - { - return tdualquat(-q.real, -q.dual); - } - - // -- Binary operators -- - - template - GLM_FUNC_QUALIFIER tdualquat operator+(tdualquat const& q, tdualquat const& p) - { - return tdualquat(q.real + p.real,q.dual + p.dual); - } - - template - GLM_FUNC_QUALIFIER tdualquat operator*(tdualquat const& p, tdualquat const& o) - { - return tdualquat(p.real * o.real,p.real * o.dual + p.dual * o.real); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> operator*(tdualquat const& q, vec<3, T, Q> const& v) - { - vec<3, T, Q> const real_v3(q.real.x,q.real.y,q.real.z); - vec<3, T, Q> const dual_v3(q.dual.x,q.dual.y,q.dual.z); - return (cross(real_v3, cross(real_v3,v) + v * q.real.w + dual_v3) + dual_v3 * q.real.w - real_v3 * q.dual.w) * T(2) + v; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> operator*(vec<3, T, Q> const& v, tdualquat const& q) - { - return glm::inverse(q) * v; - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> operator*(tdualquat const& q, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(q * vec<3, T, Q>(v), v.w); - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> operator*(vec<4, T, Q> const& v, tdualquat const& q) - { - return glm::inverse(q) * v; - } - - template - GLM_FUNC_QUALIFIER tdualquat operator*(tdualquat const& q, T const& s) - { - return tdualquat(q.real * s, q.dual * s); - } - - template - GLM_FUNC_QUALIFIER tdualquat operator*(T const& s, tdualquat const& q) - { - return q * s; - } - - template - GLM_FUNC_QUALIFIER tdualquat operator/(tdualquat const& q, T const& s) - { - return tdualquat(q.real / s, q.dual / s); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(tdualquat const& q1, tdualquat const& q2) - { - return (q1.real == q2.real) && (q1.dual == q2.dual); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(tdualquat const& q1, tdualquat const& q2) - { - return (q1.real != q2.real) || (q1.dual != q2.dual); - } - - // -- Operations -- - - template - GLM_FUNC_QUALIFIER tdualquat dual_quat_identity() - { - return tdualquat( - qua(static_cast(1), static_cast(0), static_cast(0), static_cast(0)), - qua(static_cast(0), static_cast(0), static_cast(0), static_cast(0))); - } - - template - GLM_FUNC_QUALIFIER tdualquat normalize(tdualquat const& q) - { - return q / length(q.real); - } - - template - GLM_FUNC_QUALIFIER tdualquat lerp(tdualquat const& x, tdualquat const& y, T const& a) - { - // Dual Quaternion Linear blend aka DLB: - // Lerp is only defined in [0, 1] - assert(a >= static_cast(0)); - assert(a <= static_cast(1)); - T const k = dot(x.real,y.real) < static_cast(0) ? -a : a; - T const one(1); - return tdualquat(x * (one - a) + y * k); - } - - template - GLM_FUNC_QUALIFIER tdualquat inverse(tdualquat const& q) - { - const glm::qua real = conjugate(q.real); - const glm::qua dual = conjugate(q.dual); - return tdualquat(real, dual + (real * (-2.0f * dot(real,dual)))); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> mat2x4_cast(tdualquat const& x) - { - return mat<2, 4, T, Q>( x[0].x, x[0].y, x[0].z, x[0].w, x[1].x, x[1].y, x[1].z, x[1].w ); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> mat3x4_cast(tdualquat const& x) - { - qua r = x.real / length2(x.real); - - qua const rr(r.w * x.real.w, r.x * x.real.x, r.y * x.real.y, r.z * x.real.z); - r *= static_cast(2); - - T const xy = r.x * x.real.y; - T const xz = r.x * x.real.z; - T const yz = r.y * x.real.z; - T const wx = r.w * x.real.x; - T const wy = r.w * x.real.y; - T const wz = r.w * x.real.z; - - vec<4, T, Q> const a( - rr.w + rr.x - rr.y - rr.z, - xy - wz, - xz + wy, - -(x.dual.w * r.x - x.dual.x * r.w + x.dual.y * r.z - x.dual.z * r.y)); - - vec<4, T, Q> const b( - xy + wz, - rr.w + rr.y - rr.x - rr.z, - yz - wx, - -(x.dual.w * r.y - x.dual.x * r.z - x.dual.y * r.w + x.dual.z * r.x)); - - vec<4, T, Q> const c( - xz - wy, - yz + wx, - rr.w + rr.z - rr.x - rr.y, - -(x.dual.w * r.z + x.dual.x * r.y - x.dual.y * r.x - x.dual.z * r.w)); - - return mat<3, 4, T, Q>(a, b, c); - } - - template - GLM_FUNC_QUALIFIER tdualquat dualquat_cast(mat<2, 4, T, Q> const& x) - { - return tdualquat( - qua( x[0].w, x[0].x, x[0].y, x[0].z ), - qua( x[1].w, x[1].x, x[1].y, x[1].z )); - } - - template - GLM_FUNC_QUALIFIER tdualquat dualquat_cast(mat<3, 4, T, Q> const& x) - { - qua real; - - T const trace = x[0].x + x[1].y + x[2].z; - if(trace > static_cast(0)) - { - T const r = sqrt(T(1) + trace); - T const invr = static_cast(0.5) / r; - real.w = static_cast(0.5) * r; - real.x = (x[2].y - x[1].z) * invr; - real.y = (x[0].z - x[2].x) * invr; - real.z = (x[1].x - x[0].y) * invr; - } - else if(x[0].x > x[1].y && x[0].x > x[2].z) - { - T const r = sqrt(T(1) + x[0].x - x[1].y - x[2].z); - T const invr = static_cast(0.5) / r; - real.x = static_cast(0.5)*r; - real.y = (x[1].x + x[0].y) * invr; - real.z = (x[0].z + x[2].x) * invr; - real.w = (x[2].y - x[1].z) * invr; - } - else if(x[1].y > x[2].z) - { - T const r = sqrt(T(1) + x[1].y - x[0].x - x[2].z); - T const invr = static_cast(0.5) / r; - real.x = (x[1].x + x[0].y) * invr; - real.y = static_cast(0.5) * r; - real.z = (x[2].y + x[1].z) * invr; - real.w = (x[0].z - x[2].x) * invr; - } - else - { - T const r = sqrt(T(1) + x[2].z - x[0].x - x[1].y); - T const invr = static_cast(0.5) / r; - real.x = (x[0].z + x[2].x) * invr; - real.y = (x[2].y + x[1].z) * invr; - real.z = static_cast(0.5) * r; - real.w = (x[1].x - x[0].y) * invr; - } - - qua dual; - dual.x = static_cast(0.5) * ( x[0].w * real.w + x[1].w * real.z - x[2].w * real.y); - dual.y = static_cast(0.5) * (-x[0].w * real.z + x[1].w * real.w + x[2].w * real.x); - dual.z = static_cast(0.5) * ( x[0].w * real.y - x[1].w * real.x + x[2].w * real.w); - dual.w = -static_cast(0.5) * ( x[0].w * real.x + x[1].w * real.y + x[2].w * real.z); - return tdualquat(real, dual); - } -}//namespace glm diff --git a/src/vendor/glm/gtx/easing.hpp b/src/vendor/glm/gtx/easing.hpp deleted file mode 100755 index 57f3d61..0000000 --- a/src/vendor/glm/gtx/easing.hpp +++ /dev/null @@ -1,219 +0,0 @@ -/// @ref gtx_easing -/// @file glm/gtx/easing.hpp -/// @author Robert Chisholm -/// -/// @see core (dependence) -/// -/// @defgroup gtx_easing GLM_GTX_easing -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Easing functions for animations and transitons -/// All functions take a parameter x in the range [0.0,1.0] -/// -/// Based on the AHEasing project of Warren Moore (https://github.com/warrenm/AHEasing) - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/constants.hpp" -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_easing is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_easing extension included") -# endif -#endif - -namespace glm{ - /// @addtogroup gtx_easing - /// @{ - - /// Modelled after the line y = x - /// @see gtx_easing - template - GLM_FUNC_DECL genType linearInterpolation(genType const & a); - - /// Modelled after the parabola y = x^2 - /// @see gtx_easing - template - GLM_FUNC_DECL genType quadraticEaseIn(genType const & a); - - /// Modelled after the parabola y = -x^2 + 2x - /// @see gtx_easing - template - GLM_FUNC_DECL genType quadraticEaseOut(genType const & a); - - /// Modelled after the piecewise quadratic - /// y = (1/2)((2x)^2) ; [0, 0.5) - /// y = -(1/2)((2x-1)*(2x-3) - 1) ; [0.5, 1] - /// @see gtx_easing - template - GLM_FUNC_DECL genType quadraticEaseInOut(genType const & a); - - /// Modelled after the cubic y = x^3 - template - GLM_FUNC_DECL genType cubicEaseIn(genType const & a); - - /// Modelled after the cubic y = (x - 1)^3 + 1 - /// @see gtx_easing - template - GLM_FUNC_DECL genType cubicEaseOut(genType const & a); - - /// Modelled after the piecewise cubic - /// y = (1/2)((2x)^3) ; [0, 0.5) - /// y = (1/2)((2x-2)^3 + 2) ; [0.5, 1] - /// @see gtx_easing - template - GLM_FUNC_DECL genType cubicEaseInOut(genType const & a); - - /// Modelled after the quartic x^4 - /// @see gtx_easing - template - GLM_FUNC_DECL genType quarticEaseIn(genType const & a); - - /// Modelled after the quartic y = 1 - (x - 1)^4 - /// @see gtx_easing - template - GLM_FUNC_DECL genType quarticEaseOut(genType const & a); - - /// Modelled after the piecewise quartic - /// y = (1/2)((2x)^4) ; [0, 0.5) - /// y = -(1/2)((2x-2)^4 - 2) ; [0.5, 1] - /// @see gtx_easing - template - GLM_FUNC_DECL genType quarticEaseInOut(genType const & a); - - /// Modelled after the quintic y = x^5 - /// @see gtx_easing - template - GLM_FUNC_DECL genType quinticEaseIn(genType const & a); - - /// Modelled after the quintic y = (x - 1)^5 + 1 - /// @see gtx_easing - template - GLM_FUNC_DECL genType quinticEaseOut(genType const & a); - - /// Modelled after the piecewise quintic - /// y = (1/2)((2x)^5) ; [0, 0.5) - /// y = (1/2)((2x-2)^5 + 2) ; [0.5, 1] - /// @see gtx_easing - template - GLM_FUNC_DECL genType quinticEaseInOut(genType const & a); - - /// Modelled after quarter-cycle of sine wave - /// @see gtx_easing - template - GLM_FUNC_DECL genType sineEaseIn(genType const & a); - - /// Modelled after quarter-cycle of sine wave (different phase) - /// @see gtx_easing - template - GLM_FUNC_DECL genType sineEaseOut(genType const & a); - - /// Modelled after half sine wave - /// @see gtx_easing - template - GLM_FUNC_DECL genType sineEaseInOut(genType const & a); - - /// Modelled after shifted quadrant IV of unit circle - /// @see gtx_easing - template - GLM_FUNC_DECL genType circularEaseIn(genType const & a); - - /// Modelled after shifted quadrant II of unit circle - /// @see gtx_easing - template - GLM_FUNC_DECL genType circularEaseOut(genType const & a); - - /// Modelled after the piecewise circular function - /// y = (1/2)(1 - sqrt(1 - 4x^2)) ; [0, 0.5) - /// y = (1/2)(sqrt(-(2x - 3)*(2x - 1)) + 1) ; [0.5, 1] - /// @see gtx_easing - template - GLM_FUNC_DECL genType circularEaseInOut(genType const & a); - - /// Modelled after the exponential function y = 2^(10(x - 1)) - /// @see gtx_easing - template - GLM_FUNC_DECL genType exponentialEaseIn(genType const & a); - - /// Modelled after the exponential function y = -2^(-10x) + 1 - /// @see gtx_easing - template - GLM_FUNC_DECL genType exponentialEaseOut(genType const & a); - - /// Modelled after the piecewise exponential - /// y = (1/2)2^(10(2x - 1)) ; [0,0.5) - /// y = -(1/2)*2^(-10(2x - 1))) + 1 ; [0.5,1] - /// @see gtx_easing - template - GLM_FUNC_DECL genType exponentialEaseInOut(genType const & a); - - /// Modelled after the damped sine wave y = sin(13pi/2*x)*pow(2, 10 * (x - 1)) - /// @see gtx_easing - template - GLM_FUNC_DECL genType elasticEaseIn(genType const & a); - - /// Modelled after the damped sine wave y = sin(-13pi/2*(x + 1))*pow(2, -10x) + 1 - /// @see gtx_easing - template - GLM_FUNC_DECL genType elasticEaseOut(genType const & a); - - /// Modelled after the piecewise exponentially-damped sine wave: - /// y = (1/2)*sin(13pi/2*(2*x))*pow(2, 10 * ((2*x) - 1)) ; [0,0.5) - /// y = (1/2)*(sin(-13pi/2*((2x-1)+1))*pow(2,-10(2*x-1)) + 2) ; [0.5, 1] - /// @see gtx_easing - template - GLM_FUNC_DECL genType elasticEaseInOut(genType const & a); - - /// @see gtx_easing - template - GLM_FUNC_DECL genType backEaseIn(genType const& a); - - /// @see gtx_easing - template - GLM_FUNC_DECL genType backEaseOut(genType const& a); - - /// @see gtx_easing - template - GLM_FUNC_DECL genType backEaseInOut(genType const& a); - - /// @param a parameter - /// @param o Optional overshoot modifier - /// @see gtx_easing - template - GLM_FUNC_DECL genType backEaseIn(genType const& a, genType const& o); - - /// @param a parameter - /// @param o Optional overshoot modifier - /// @see gtx_easing - template - GLM_FUNC_DECL genType backEaseOut(genType const& a, genType const& o); - - /// @param a parameter - /// @param o Optional overshoot modifier - /// @see gtx_easing - template - GLM_FUNC_DECL genType backEaseInOut(genType const& a, genType const& o); - - /// @see gtx_easing - template - GLM_FUNC_DECL genType bounceEaseIn(genType const& a); - - /// @see gtx_easing - template - GLM_FUNC_DECL genType bounceEaseOut(genType const& a); - - /// @see gtx_easing - template - GLM_FUNC_DECL genType bounceEaseInOut(genType const& a); - - /// @} -}//namespace glm - -#include "easing.inl" diff --git a/src/vendor/glm/gtx/easing.inl b/src/vendor/glm/gtx/easing.inl deleted file mode 100755 index 4b7d05b..0000000 --- a/src/vendor/glm/gtx/easing.inl +++ /dev/null @@ -1,436 +0,0 @@ -/// @ref gtx_easing - -#include - -namespace glm{ - - template - GLM_FUNC_QUALIFIER genType linearInterpolation(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return a; - } - - template - GLM_FUNC_QUALIFIER genType quadraticEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return a * a; - } - - template - GLM_FUNC_QUALIFIER genType quadraticEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return -(a * (a - static_cast(2))); - } - - template - GLM_FUNC_QUALIFIER genType quadraticEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a < static_cast(0.5)) - { - return static_cast(2) * a * a; - } - else - { - return (-static_cast(2) * a * a) + (4 * a) - one(); - } - } - - template - GLM_FUNC_QUALIFIER genType cubicEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return a * a * a; - } - - template - GLM_FUNC_QUALIFIER genType cubicEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - genType const f = a - one(); - return f * f * f + one(); - } - - template - GLM_FUNC_QUALIFIER genType cubicEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if (a < static_cast(0.5)) - { - return static_cast(4) * a * a * a; - } - else - { - genType const f = ((static_cast(2) * a) - static_cast(2)); - return static_cast(0.5) * f * f * f + one(); - } - } - - template - GLM_FUNC_QUALIFIER genType quarticEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return a * a * a * a; - } - - template - GLM_FUNC_QUALIFIER genType quarticEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - genType const f = (a - one()); - return f * f * f * (one() - a) + one(); - } - - template - GLM_FUNC_QUALIFIER genType quarticEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a < static_cast(0.5)) - { - return static_cast(8) * a * a * a * a; - } - else - { - genType const f = (a - one()); - return -static_cast(8) * f * f * f * f + one(); - } - } - - template - GLM_FUNC_QUALIFIER genType quinticEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return a * a * a * a * a; - } - - template - GLM_FUNC_QUALIFIER genType quinticEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - genType const f = (a - one()); - return f * f * f * f * f + one(); - } - - template - GLM_FUNC_QUALIFIER genType quinticEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a < static_cast(0.5)) - { - return static_cast(16) * a * a * a * a * a; - } - else - { - genType const f = ((static_cast(2) * a) - static_cast(2)); - return static_cast(0.5) * f * f * f * f * f + one(); - } - } - - template - GLM_FUNC_QUALIFIER genType sineEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return sin((a - one()) * half_pi()) + one(); - } - - template - GLM_FUNC_QUALIFIER genType sineEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return sin(a * half_pi()); - } - - template - GLM_FUNC_QUALIFIER genType sineEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return static_cast(0.5) * (one() - cos(a * pi())); - } - - template - GLM_FUNC_QUALIFIER genType circularEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return one() - sqrt(one() - (a * a)); - } - - template - GLM_FUNC_QUALIFIER genType circularEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return sqrt((static_cast(2) - a) * a); - } - - template - GLM_FUNC_QUALIFIER genType circularEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a < static_cast(0.5)) - { - return static_cast(0.5) * (one() - std::sqrt(one() - static_cast(4) * (a * a))); - } - else - { - return static_cast(0.5) * (std::sqrt(-((static_cast(2) * a) - static_cast(3)) * ((static_cast(2) * a) - one())) + one()); - } - } - - template - GLM_FUNC_QUALIFIER genType exponentialEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a <= zero()) - return a; - else - { - genType const Complementary = a - one(); - genType const Two = static_cast(2); - - return glm::pow(Two, Complementary * static_cast(10)); - } - } - - template - GLM_FUNC_QUALIFIER genType exponentialEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a >= one()) - return a; - else - { - return one() - glm::pow(static_cast(2), -static_cast(10) * a); - } - } - - template - GLM_FUNC_QUALIFIER genType exponentialEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a < static_cast(0.5)) - return static_cast(0.5) * glm::pow(static_cast(2), (static_cast(20) * a) - static_cast(10)); - else - return -static_cast(0.5) * glm::pow(static_cast(2), (-static_cast(20) * a) + static_cast(10)) + one(); - } - - template - GLM_FUNC_QUALIFIER genType elasticEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return std::sin(static_cast(13) * half_pi() * a) * glm::pow(static_cast(2), static_cast(10) * (a - one())); - } - - template - GLM_FUNC_QUALIFIER genType elasticEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return std::sin(-static_cast(13) * half_pi() * (a + one())) * glm::pow(static_cast(2), -static_cast(10) * a) + one(); - } - - template - GLM_FUNC_QUALIFIER genType elasticEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a < static_cast(0.5)) - return static_cast(0.5) * std::sin(static_cast(13) * half_pi() * (static_cast(2) * a)) * glm::pow(static_cast(2), static_cast(10) * ((static_cast(2) * a) - one())); - else - return static_cast(0.5) * (std::sin(-static_cast(13) * half_pi() * ((static_cast(2) * a - one()) + one())) * glm::pow(static_cast(2), -static_cast(10) * (static_cast(2) * a - one())) + static_cast(2)); - } - - template - GLM_FUNC_QUALIFIER genType backEaseIn(genType const& a, genType const& o) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - genType z = ((o + one()) * a) - o; - return (a * a * z); - } - - template - GLM_FUNC_QUALIFIER genType backEaseOut(genType const& a, genType const& o) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - genType n = a - one(); - genType z = ((o + one()) * n) + o; - return (n * n * z) + one(); - } - - template - GLM_FUNC_QUALIFIER genType backEaseInOut(genType const& a, genType const& o) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - genType s = o * static_cast(1.525); - genType x = static_cast(0.5); - genType n = a / static_cast(0.5); - - if (n < static_cast(1)) - { - genType z = ((s + static_cast(1)) * n) - s; - genType m = n * n * z; - return x * m; - } - else - { - n -= static_cast(2); - genType z = ((s + static_cast(1)) * n) + s; - genType m = (n*n*z) + static_cast(2); - return x * m; - } - } - - template - GLM_FUNC_QUALIFIER genType backEaseIn(genType const& a) - { - return backEaseIn(a, static_cast(1.70158)); - } - - template - GLM_FUNC_QUALIFIER genType backEaseOut(genType const& a) - { - return backEaseOut(a, static_cast(1.70158)); - } - - template - GLM_FUNC_QUALIFIER genType backEaseInOut(genType const& a) - { - return backEaseInOut(a, static_cast(1.70158)); - } - - template - GLM_FUNC_QUALIFIER genType bounceEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a < static_cast(4.0 / 11.0)) - { - return (static_cast(121) * a * a) / static_cast(16); - } - else if(a < static_cast(8.0 / 11.0)) - { - return (static_cast(363.0 / 40.0) * a * a) - (static_cast(99.0 / 10.0) * a) + static_cast(17.0 / 5.0); - } - else if(a < static_cast(9.0 / 10.0)) - { - return (static_cast(4356.0 / 361.0) * a * a) - (static_cast(35442.0 / 1805.0) * a) + static_cast(16061.0 / 1805.0); - } - else - { - return (static_cast(54.0 / 5.0) * a * a) - (static_cast(513.0 / 25.0) * a) + static_cast(268.0 / 25.0); - } - } - - template - GLM_FUNC_QUALIFIER genType bounceEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return one() - bounceEaseOut(one() - a); - } - - template - GLM_FUNC_QUALIFIER genType bounceEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a < static_cast(0.5)) - { - return static_cast(0.5) * (one() - bounceEaseOut(a * static_cast(2))); - } - else - { - return static_cast(0.5) * bounceEaseOut(a * static_cast(2) - one()) + static_cast(0.5); - } - } - -}//namespace glm diff --git a/src/vendor/glm/gtx/euler_angles.hpp b/src/vendor/glm/gtx/euler_angles.hpp deleted file mode 100755 index 2723697..0000000 --- a/src/vendor/glm/gtx/euler_angles.hpp +++ /dev/null @@ -1,335 +0,0 @@ -/// @ref gtx_euler_angles -/// @file glm/gtx/euler_angles.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_euler_angles GLM_GTX_euler_angles -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Build matrices from Euler angles. -/// -/// Extraction of Euler angles from rotation matrix. -/// Based on the original paper 2014 Mike Day - Extracting Euler Angles from a Rotation Matrix. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_euler_angles is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_euler_angles extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_euler_angles - /// @{ - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X. - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleX( - T const& angleX); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y. - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleY( - T const& angleY); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z. - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZ( - T const& angleZ); - - /// Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about X-axis. - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> derivedEulerAngleX( - T const & angleX, T const & angularVelocityX); - - /// Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Y-axis. - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> derivedEulerAngleY( - T const & angleY, T const & angularVelocityY); - - /// Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Z-axis. - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> derivedEulerAngleZ( - T const & angleZ, T const & angularVelocityZ); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXY( - T const& angleX, - T const& angleY); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYX( - T const& angleY, - T const& angleX); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXZ( - T const& angleX, - T const& angleZ); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZX( - T const& angle, - T const& angleX); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYZ( - T const& angleY, - T const& angleZ); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZY( - T const& angleZ, - T const& angleY); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXYZ( - T const& t1, - T const& t2, - T const& t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYXZ( - T const& yaw, - T const& pitch, - T const& roll); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * X). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXZX( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * X). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXYX( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Y). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYXY( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * Y). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYZY( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZYZ( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZXZ( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * Y). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXZY( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * X). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYZX( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * X). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZYX( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Y). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZXY( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> yawPitchRoll( - T const& yaw, - T const& pitch, - T const& roll); - - /// Creates a 2D 2 * 2 rotation matrix from an euler angle. - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<2, 2, T, defaultp> orientate2(T const& angle); - - /// Creates a 2D 4 * 4 homogeneous rotation matrix from an euler angle. - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<3, 3, T, defaultp> orientate3(T const& angle); - - /// Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<3, 3, T, Q> orientate3(vec<3, T, Q> const& angles); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, Q> orientate4(vec<3, T, Q> const& angles); - - /// Extracts the (X * Y * Z) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleXYZ(mat<4, 4, T, defaultp> const& M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (Y * X * Z) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleYXZ(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (X * Z * X) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleXZX(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (X * Y * X) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleXYX(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (Y * X * Y) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleYXY(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (Y * Z * Y) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleYZY(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (Z * Y * Z) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleZYZ(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (Z * X * Z) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleZXZ(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (X * Z * Y) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleXZY(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (Y * Z * X) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleYZX(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (Z * Y * X) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleZYX(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (Z * X * Y) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleZXY(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// @} -}//namespace glm - -#include "euler_angles.inl" diff --git a/src/vendor/glm/gtx/euler_angles.inl b/src/vendor/glm/gtx/euler_angles.inl deleted file mode 100755 index 3f13df6..0000000 --- a/src/vendor/glm/gtx/euler_angles.inl +++ /dev/null @@ -1,899 +0,0 @@ -/// @ref gtx_euler_angles - -#include "compatibility.hpp" // glm::atan2 - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleX - ( - T const& angleX - ) - { - T cosX = glm::cos(angleX); - T sinX = glm::sin(angleX); - - return mat<4, 4, T, defaultp>( - T(1), T(0), T(0), T(0), - T(0), cosX, sinX, T(0), - T(0),-sinX, cosX, T(0), - T(0), T(0), T(0), T(1)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleY - ( - T const& angleY - ) - { - T cosY = glm::cos(angleY); - T sinY = glm::sin(angleY); - - return mat<4, 4, T, defaultp>( - cosY, T(0), -sinY, T(0), - T(0), T(1), T(0), T(0), - sinY, T(0), cosY, T(0), - T(0), T(0), T(0), T(1)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZ - ( - T const& angleZ - ) - { - T cosZ = glm::cos(angleZ); - T sinZ = glm::sin(angleZ); - - return mat<4, 4, T, defaultp>( - cosZ, sinZ, T(0), T(0), - -sinZ, cosZ, T(0), T(0), - T(0), T(0), T(1), T(0), - T(0), T(0), T(0), T(1)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> derivedEulerAngleX - ( - T const & angleX, - T const & angularVelocityX - ) - { - T cosX = glm::cos(angleX) * angularVelocityX; - T sinX = glm::sin(angleX) * angularVelocityX; - - return mat<4, 4, T, defaultp>( - T(0), T(0), T(0), T(0), - T(0),-sinX, cosX, T(0), - T(0),-cosX,-sinX, T(0), - T(0), T(0), T(0), T(0)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> derivedEulerAngleY - ( - T const & angleY, - T const & angularVelocityY - ) - { - T cosY = glm::cos(angleY) * angularVelocityY; - T sinY = glm::sin(angleY) * angularVelocityY; - - return mat<4, 4, T, defaultp>( - -sinY, T(0), -cosY, T(0), - T(0), T(0), T(0), T(0), - cosY, T(0), -sinY, T(0), - T(0), T(0), T(0), T(0)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> derivedEulerAngleZ - ( - T const & angleZ, - T const & angularVelocityZ - ) - { - T cosZ = glm::cos(angleZ) * angularVelocityZ; - T sinZ = glm::sin(angleZ) * angularVelocityZ; - - return mat<4, 4, T, defaultp>( - -sinZ, cosZ, T(0), T(0), - -cosZ, -sinZ, T(0), T(0), - T(0), T(0), T(0), T(0), - T(0), T(0), T(0), T(0)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXY - ( - T const& angleX, - T const& angleY - ) - { - T cosX = glm::cos(angleX); - T sinX = glm::sin(angleX); - T cosY = glm::cos(angleY); - T sinY = glm::sin(angleY); - - return mat<4, 4, T, defaultp>( - cosY, -sinX * -sinY, cosX * -sinY, T(0), - T(0), cosX, sinX, T(0), - sinY, -sinX * cosY, cosX * cosY, T(0), - T(0), T(0), T(0), T(1)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYX - ( - T const& angleY, - T const& angleX - ) - { - T cosX = glm::cos(angleX); - T sinX = glm::sin(angleX); - T cosY = glm::cos(angleY); - T sinY = glm::sin(angleY); - - return mat<4, 4, T, defaultp>( - cosY, 0, -sinY, T(0), - sinY * sinX, cosX, cosY * sinX, T(0), - sinY * cosX, -sinX, cosY * cosX, T(0), - T(0), T(0), T(0), T(1)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXZ - ( - T const& angleX, - T const& angleZ - ) - { - return eulerAngleX(angleX) * eulerAngleZ(angleZ); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZX - ( - T const& angleZ, - T const& angleX - ) - { - return eulerAngleZ(angleZ) * eulerAngleX(angleX); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYZ - ( - T const& angleY, - T const& angleZ - ) - { - return eulerAngleY(angleY) * eulerAngleZ(angleZ); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZY - ( - T const& angleZ, - T const& angleY - ) - { - return eulerAngleZ(angleZ) * eulerAngleY(angleY); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXYZ - ( - T const& t1, - T const& t2, - T const& t3 - ) - { - T c1 = glm::cos(-t1); - T c2 = glm::cos(-t2); - T c3 = glm::cos(-t3); - T s1 = glm::sin(-t1); - T s2 = glm::sin(-t2); - T s3 = glm::sin(-t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c2 * c3; - Result[0][1] =-c1 * s3 + s1 * s2 * c3; - Result[0][2] = s1 * s3 + c1 * s2 * c3; - Result[0][3] = static_cast(0); - Result[1][0] = c2 * s3; - Result[1][1] = c1 * c3 + s1 * s2 * s3; - Result[1][2] =-s1 * c3 + c1 * s2 * s3; - Result[1][3] = static_cast(0); - Result[2][0] =-s2; - Result[2][1] = s1 * c2; - Result[2][2] = c1 * c2; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYXZ - ( - T const& yaw, - T const& pitch, - T const& roll - ) - { - T tmp_ch = glm::cos(yaw); - T tmp_sh = glm::sin(yaw); - T tmp_cp = glm::cos(pitch); - T tmp_sp = glm::sin(pitch); - T tmp_cb = glm::cos(roll); - T tmp_sb = glm::sin(roll); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = tmp_ch * tmp_cb + tmp_sh * tmp_sp * tmp_sb; - Result[0][1] = tmp_sb * tmp_cp; - Result[0][2] = -tmp_sh * tmp_cb + tmp_ch * tmp_sp * tmp_sb; - Result[0][3] = static_cast(0); - Result[1][0] = -tmp_ch * tmp_sb + tmp_sh * tmp_sp * tmp_cb; - Result[1][1] = tmp_cb * tmp_cp; - Result[1][2] = tmp_sb * tmp_sh + tmp_ch * tmp_sp * tmp_cb; - Result[1][3] = static_cast(0); - Result[2][0] = tmp_sh * tmp_cp; - Result[2][1] = -tmp_sp; - Result[2][2] = tmp_ch * tmp_cp; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXZX - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c2; - Result[0][1] = c1 * s2; - Result[0][2] = s1 * s2; - Result[0][3] = static_cast(0); - Result[1][0] =-c3 * s2; - Result[1][1] = c1 * c2 * c3 - s1 * s3; - Result[1][2] = c1 * s3 + c2 * c3 * s1; - Result[1][3] = static_cast(0); - Result[2][0] = s2 * s3; - Result[2][1] =-c3 * s1 - c1 * c2 * s3; - Result[2][2] = c1 * c3 - c2 * s1 * s3; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXYX - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c2; - Result[0][1] = s1 * s2; - Result[0][2] =-c1 * s2; - Result[0][3] = static_cast(0); - Result[1][0] = s2 * s3; - Result[1][1] = c1 * c3 - c2 * s1 * s3; - Result[1][2] = c3 * s1 + c1 * c2 * s3; - Result[1][3] = static_cast(0); - Result[2][0] = c3 * s2; - Result[2][1] =-c1 * s3 - c2 * c3 * s1; - Result[2][2] = c1 * c2 * c3 - s1 * s3; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYXY - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c1 * c3 - c2 * s1 * s3; - Result[0][1] = s2* s3; - Result[0][2] =-c3 * s1 - c1 * c2 * s3; - Result[0][3] = static_cast(0); - Result[1][0] = s1 * s2; - Result[1][1] = c2; - Result[1][2] = c1 * s2; - Result[1][3] = static_cast(0); - Result[2][0] = c1 * s3 + c2 * c3 * s1; - Result[2][1] =-c3 * s2; - Result[2][2] = c1 * c2 * c3 - s1 * s3; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYZY - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c1 * c2 * c3 - s1 * s3; - Result[0][1] = c3 * s2; - Result[0][2] =-c1 * s3 - c2 * c3 * s1; - Result[0][3] = static_cast(0); - Result[1][0] =-c1 * s2; - Result[1][1] = c2; - Result[1][2] = s1 * s2; - Result[1][3] = static_cast(0); - Result[2][0] = c3 * s1 + c1 * c2 * s3; - Result[2][1] = s2 * s3; - Result[2][2] = c1 * c3 - c2 * s1 * s3; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZYZ - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c1 * c2 * c3 - s1 * s3; - Result[0][1] = c1 * s3 + c2 * c3 * s1; - Result[0][2] =-c3 * s2; - Result[0][3] = static_cast(0); - Result[1][0] =-c3 * s1 - c1 * c2 * s3; - Result[1][1] = c1 * c3 - c2 * s1 * s3; - Result[1][2] = s2 * s3; - Result[1][3] = static_cast(0); - Result[2][0] = c1 * s2; - Result[2][1] = s1 * s2; - Result[2][2] = c2; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZXZ - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c1 * c3 - c2 * s1 * s3; - Result[0][1] = c3 * s1 + c1 * c2 * s3; - Result[0][2] = s2 *s3; - Result[0][3] = static_cast(0); - Result[1][0] =-c1 * s3 - c2 * c3 * s1; - Result[1][1] = c1 * c2 * c3 - s1 * s3; - Result[1][2] = c3 * s2; - Result[1][3] = static_cast(0); - Result[2][0] = s1 * s2; - Result[2][1] =-c1 * s2; - Result[2][2] = c2; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXZY - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c2 * c3; - Result[0][1] = s1 * s3 + c1 * c3 * s2; - Result[0][2] = c3 * s1 * s2 - c1 * s3; - Result[0][3] = static_cast(0); - Result[1][0] =-s2; - Result[1][1] = c1 * c2; - Result[1][2] = c2 * s1; - Result[1][3] = static_cast(0); - Result[2][0] = c2 * s3; - Result[2][1] = c1 * s2 * s3 - c3 * s1; - Result[2][2] = c1 * c3 + s1 * s2 *s3; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYZX - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c1 * c2; - Result[0][1] = s2; - Result[0][2] =-c2 * s1; - Result[0][3] = static_cast(0); - Result[1][0] = s1 * s3 - c1 * c3 * s2; - Result[1][1] = c2 * c3; - Result[1][2] = c1 * s3 + c3 * s1 * s2; - Result[1][3] = static_cast(0); - Result[2][0] = c3 * s1 + c1 * s2 * s3; - Result[2][1] =-c2 * s3; - Result[2][2] = c1 * c3 - s1 * s2 * s3; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZYX - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c1 * c2; - Result[0][1] = c2 * s1; - Result[0][2] =-s2; - Result[0][3] = static_cast(0); - Result[1][0] = c1 * s2 * s3 - c3 * s1; - Result[1][1] = c1 * c3 + s1 * s2 * s3; - Result[1][2] = c2 * s3; - Result[1][3] = static_cast(0); - Result[2][0] = s1 * s3 + c1 * c3 * s2; - Result[2][1] = c3 * s1 * s2 - c1 * s3; - Result[2][2] = c2 * c3; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZXY - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c1 * c3 - s1 * s2 * s3; - Result[0][1] = c3 * s1 + c1 * s2 * s3; - Result[0][2] =-c2 * s3; - Result[0][3] = static_cast(0); - Result[1][0] =-c2 * s1; - Result[1][1] = c1 * c2; - Result[1][2] = s2; - Result[1][3] = static_cast(0); - Result[2][0] = c1 * s3 + c3 * s1 * s2; - Result[2][1] = s1 * s3 - c1 * c3 * s2; - Result[2][2] = c2 * c3; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> yawPitchRoll - ( - T const& yaw, - T const& pitch, - T const& roll - ) - { - T tmp_ch = glm::cos(yaw); - T tmp_sh = glm::sin(yaw); - T tmp_cp = glm::cos(pitch); - T tmp_sp = glm::sin(pitch); - T tmp_cb = glm::cos(roll); - T tmp_sb = glm::sin(roll); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = tmp_ch * tmp_cb + tmp_sh * tmp_sp * tmp_sb; - Result[0][1] = tmp_sb * tmp_cp; - Result[0][2] = -tmp_sh * tmp_cb + tmp_ch * tmp_sp * tmp_sb; - Result[0][3] = static_cast(0); - Result[1][0] = -tmp_ch * tmp_sb + tmp_sh * tmp_sp * tmp_cb; - Result[1][1] = tmp_cb * tmp_cp; - Result[1][2] = tmp_sb * tmp_sh + tmp_ch * tmp_sp * tmp_cb; - Result[1][3] = static_cast(0); - Result[2][0] = tmp_sh * tmp_cp; - Result[2][1] = -tmp_sp; - Result[2][2] = tmp_ch * tmp_cp; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, defaultp> orientate2 - ( - T const& angle - ) - { - T c = glm::cos(angle); - T s = glm::sin(angle); - - mat<2, 2, T, defaultp> Result; - Result[0][0] = c; - Result[0][1] = s; - Result[1][0] = -s; - Result[1][1] = c; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, defaultp> orientate3 - ( - T const& angle - ) - { - T c = glm::cos(angle); - T s = glm::sin(angle); - - mat<3, 3, T, defaultp> Result; - Result[0][0] = c; - Result[0][1] = s; - Result[0][2] = T(0.0); - Result[1][0] = -s; - Result[1][1] = c; - Result[1][2] = T(0.0); - Result[2][0] = T(0.0); - Result[2][1] = T(0.0); - Result[2][2] = T(1.0); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> orientate3 - ( - vec<3, T, Q> const& angles - ) - { - return mat<3, 3, T, Q>(yawPitchRoll(angles.z, angles.x, angles.y)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> orientate4 - ( - vec<3, T, Q> const& angles - ) - { - return yawPitchRoll(angles.z, angles.x, angles.y); - } - - template - GLM_FUNC_DECL void extractEulerAngleXYZ(mat<4, 4, T, defaultp> const& M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[2][1], M[2][2]); - T C2 = glm::sqrt(M[0][0]*M[0][0] + M[1][0]*M[1][0]); - T T2 = glm::atan2(-M[2][0], C2); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(S1*M[0][2] - C1*M[0][1], C1*M[1][1] - S1*M[1][2 ]); - t1 = -T1; - t2 = -T2; - t3 = -T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleYXZ(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[2][0], M[2][2]); - T C2 = glm::sqrt(M[0][1]*M[0][1] + M[1][1]*M[1][1]); - T T2 = glm::atan2(-M[2][1], C2); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(S1*M[1][2] - C1*M[1][0], C1*M[0][0] - S1*M[0][2]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleXZX(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[0][2], M[0][1]); - T S2 = glm::sqrt(M[1][0]*M[1][0] + M[2][0]*M[2][0]); - T T2 = glm::atan2(S2, M[0][0]); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(C1*M[1][2] - S1*M[1][1], C1*M[2][2] - S1*M[2][1]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleXYX(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[0][1], -M[0][2]); - T S2 = glm::sqrt(M[1][0]*M[1][0] + M[2][0]*M[2][0]); - T T2 = glm::atan2(S2, M[0][0]); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(-C1*M[2][1] - S1*M[2][2], C1*M[1][1] + S1*M[1][2]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleYXY(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[1][0], M[1][2]); - T S2 = glm::sqrt(M[0][1]*M[0][1] + M[2][1]*M[2][1]); - T T2 = glm::atan2(S2, M[1][1]); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(C1*M[2][0] - S1*M[2][2], C1*M[0][0] - S1*M[0][2]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleYZY(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[1][2], -M[1][0]); - T S2 = glm::sqrt(M[0][1]*M[0][1] + M[2][1]*M[2][1]); - T T2 = glm::atan2(S2, M[1][1]); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(-S1*M[0][0] - C1*M[0][2], S1*M[2][0] + C1*M[2][2]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleZYZ(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[2][1], M[2][0]); - T S2 = glm::sqrt(M[0][2]*M[0][2] + M[1][2]*M[1][2]); - T T2 = glm::atan2(S2, M[2][2]); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(C1*M[0][1] - S1*M[0][0], C1*M[1][1] - S1*M[1][0]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleZXZ(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[2][0], -M[2][1]); - T S2 = glm::sqrt(M[0][2]*M[0][2] + M[1][2]*M[1][2]); - T T2 = glm::atan2(S2, M[2][2]); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(-C1*M[1][0] - S1*M[1][1], C1*M[0][0] + S1*M[0][1]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleXZY(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[1][2], M[1][1]); - T C2 = glm::sqrt(M[0][0]*M[0][0] + M[2][0]*M[2][0]); - T T2 = glm::atan2(-M[1][0], C2); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(S1*M[0][1] - C1*M[0][2], C1*M[2][2] - S1*M[2][1]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleYZX(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(-M[0][2], M[0][0]); - T C2 = glm::sqrt(M[1][1]*M[1][1] + M[2][1]*M[2][1]); - T T2 = glm::atan2(M[0][1], C2); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(S1*M[1][0] + C1*M[1][2], S1*M[2][0] + C1*M[2][2]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleZYX(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[0][1], M[0][0]); - T C2 = glm::sqrt(M[1][2]*M[1][2] + M[2][2]*M[2][2]); - T T2 = glm::atan2(-M[0][2], C2); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(S1*M[2][0] - C1*M[2][1], C1*M[1][1] - S1*M[1][0]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleZXY(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(-M[1][0], M[1][1]); - T C2 = glm::sqrt(M[0][2]*M[0][2] + M[2][2]*M[2][2]); - T T2 = glm::atan2(M[1][2], C2); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(C1*M[2][0] + S1*M[2][1], C1*M[0][0] + S1*M[0][1]); - t1 = T1; - t2 = T2; - t3 = T3; - } -}//namespace glm diff --git a/src/vendor/glm/gtx/extend.hpp b/src/vendor/glm/gtx/extend.hpp deleted file mode 100755 index 28b7c5c..0000000 --- a/src/vendor/glm/gtx/extend.hpp +++ /dev/null @@ -1,42 +0,0 @@ -/// @ref gtx_extend -/// @file glm/gtx/extend.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_extend GLM_GTX_extend -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Extend a position from a source to a position at a defined length. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_extend is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_extend extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_extend - /// @{ - - /// Extends of Length the Origin position using the (Source - Origin) direction. - /// @see gtx_extend - template - GLM_FUNC_DECL genType extend( - genType const& Origin, - genType const& Source, - typename genType::value_type const Length); - - /// @} -}//namespace glm - -#include "extend.inl" diff --git a/src/vendor/glm/gtx/extend.inl b/src/vendor/glm/gtx/extend.inl deleted file mode 100755 index 32128eb..0000000 --- a/src/vendor/glm/gtx/extend.inl +++ /dev/null @@ -1,48 +0,0 @@ -/// @ref gtx_extend - -namespace glm -{ - template - GLM_FUNC_QUALIFIER genType extend - ( - genType const& Origin, - genType const& Source, - genType const& Distance - ) - { - return Origin + (Source - Origin) * Distance; - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> extend - ( - vec<2, T, Q> const& Origin, - vec<2, T, Q> const& Source, - T const& Distance - ) - { - return Origin + (Source - Origin) * Distance; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> extend - ( - vec<3, T, Q> const& Origin, - vec<3, T, Q> const& Source, - T const& Distance - ) - { - return Origin + (Source - Origin) * Distance; - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> extend - ( - vec<4, T, Q> const& Origin, - vec<4, T, Q> const& Source, - T const& Distance - ) - { - return Origin + (Source - Origin) * Distance; - } -}//namespace glm diff --git a/src/vendor/glm/gtx/extended_min_max.hpp b/src/vendor/glm/gtx/extended_min_max.hpp deleted file mode 100755 index 025eda2..0000000 --- a/src/vendor/glm/gtx/extended_min_max.hpp +++ /dev/null @@ -1,137 +0,0 @@ -/// @ref gtx_extended_min_max -/// @file glm/gtx/extended_min_max.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_extended_min_max GLM_GTX_extented_min_max -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Min and max functions for 3 to 4 parameters. - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../ext/vector_common.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_extented_min_max is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_extented_min_max extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_extended_min_max - /// @{ - - /// Return the minimum component-wise values of 3 inputs - /// @see gtx_extented_min_max - template - GLM_FUNC_DECL T min( - T const& x, - T const& y, - T const& z); - - /// Return the minimum component-wise values of 3 inputs - /// @see gtx_extented_min_max - template class C> - GLM_FUNC_DECL C min( - C const& x, - typename C::T const& y, - typename C::T const& z); - - /// Return the minimum component-wise values of 3 inputs - /// @see gtx_extented_min_max - template class C> - GLM_FUNC_DECL C min( - C const& x, - C const& y, - C const& z); - - /// Return the minimum component-wise values of 4 inputs - /// @see gtx_extented_min_max - template - GLM_FUNC_DECL T min( - T const& x, - T const& y, - T const& z, - T const& w); - - /// Return the minimum component-wise values of 4 inputs - /// @see gtx_extented_min_max - template class C> - GLM_FUNC_DECL C min( - C const& x, - typename C::T const& y, - typename C::T const& z, - typename C::T const& w); - - /// Return the minimum component-wise values of 4 inputs - /// @see gtx_extented_min_max - template class C> - GLM_FUNC_DECL C min( - C const& x, - C const& y, - C const& z, - C const& w); - - /// Return the maximum component-wise values of 3 inputs - /// @see gtx_extented_min_max - template - GLM_FUNC_DECL T max( - T const& x, - T const& y, - T const& z); - - /// Return the maximum component-wise values of 3 inputs - /// @see gtx_extented_min_max - template class C> - GLM_FUNC_DECL C max( - C const& x, - typename C::T const& y, - typename C::T const& z); - - /// Return the maximum component-wise values of 3 inputs - /// @see gtx_extented_min_max - template class C> - GLM_FUNC_DECL C max( - C const& x, - C const& y, - C const& z); - - /// Return the maximum component-wise values of 4 inputs - /// @see gtx_extented_min_max - template - GLM_FUNC_DECL T max( - T const& x, - T const& y, - T const& z, - T const& w); - - /// Return the maximum component-wise values of 4 inputs - /// @see gtx_extented_min_max - template class C> - GLM_FUNC_DECL C max( - C const& x, - typename C::T const& y, - typename C::T const& z, - typename C::T const& w); - - /// Return the maximum component-wise values of 4 inputs - /// @see gtx_extented_min_max - template class C> - GLM_FUNC_DECL C max( - C const& x, - C const& y, - C const& z, - C const& w); - - /// @} -}//namespace glm - -#include "extended_min_max.inl" diff --git a/src/vendor/glm/gtx/extended_min_max.inl b/src/vendor/glm/gtx/extended_min_max.inl deleted file mode 100755 index de5998f..0000000 --- a/src/vendor/glm/gtx/extended_min_max.inl +++ /dev/null @@ -1,138 +0,0 @@ -/// @ref gtx_extended_min_max - -namespace glm -{ - template - GLM_FUNC_QUALIFIER T min( - T const& x, - T const& y, - T const& z) - { - return glm::min(glm::min(x, y), z); - } - - template class C> - GLM_FUNC_QUALIFIER C min - ( - C const& x, - typename C::T const& y, - typename C::T const& z - ) - { - return glm::min(glm::min(x, y), z); - } - - template class C> - GLM_FUNC_QUALIFIER C min - ( - C const& x, - C const& y, - C const& z - ) - { - return glm::min(glm::min(x, y), z); - } - - template - GLM_FUNC_QUALIFIER T min - ( - T const& x, - T const& y, - T const& z, - T const& w - ) - { - return glm::min(glm::min(x, y), glm::min(z, w)); - } - - template class C> - GLM_FUNC_QUALIFIER C min - ( - C const& x, - typename C::T const& y, - typename C::T const& z, - typename C::T const& w - ) - { - return glm::min(glm::min(x, y), glm::min(z, w)); - } - - template class C> - GLM_FUNC_QUALIFIER C min - ( - C const& x, - C const& y, - C const& z, - C const& w - ) - { - return glm::min(glm::min(x, y), glm::min(z, w)); - } - - template - GLM_FUNC_QUALIFIER T max( - T const& x, - T const& y, - T const& z) - { - return glm::max(glm::max(x, y), z); - } - - template class C> - GLM_FUNC_QUALIFIER C max - ( - C const& x, - typename C::T const& y, - typename C::T const& z - ) - { - return glm::max(glm::max(x, y), z); - } - - template class C> - GLM_FUNC_QUALIFIER C max - ( - C const& x, - C const& y, - C const& z - ) - { - return glm::max(glm::max(x, y), z); - } - - template - GLM_FUNC_QUALIFIER T max - ( - T const& x, - T const& y, - T const& z, - T const& w - ) - { - return glm::max(glm::max(x, y), glm::max(z, w)); - } - - template class C> - GLM_FUNC_QUALIFIER C max - ( - C const& x, - typename C::T const& y, - typename C::T const& z, - typename C::T const& w - ) - { - return glm::max(glm::max(x, y), glm::max(z, w)); - } - - template class C> - GLM_FUNC_QUALIFIER C max - ( - C const& x, - C const& y, - C const& z, - C const& w - ) - { - return glm::max(glm::max(x, y), glm::max(z, w)); - } -}//namespace glm diff --git a/src/vendor/glm/gtx/exterior_product.hpp b/src/vendor/glm/gtx/exterior_product.hpp deleted file mode 100755 index 5522df7..0000000 --- a/src/vendor/glm/gtx/exterior_product.hpp +++ /dev/null @@ -1,45 +0,0 @@ -/// @ref gtx_exterior_product -/// @file glm/gtx/exterior_product.hpp -/// -/// @see core (dependence) -/// @see gtx_exterior_product (dependence) -/// -/// @defgroup gtx_exterior_product GLM_GTX_exterior_product -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// @brief Allow to perform bit operations on integer values - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_exterior_product is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_exterior_product extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_exterior_product - /// @{ - - /// Returns the cross product of x and y. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see Exterior product - template - GLM_FUNC_DECL T cross(vec<2, T, Q> const& v, vec<2, T, Q> const& u); - - /// @} -} //namespace glm - -#include "exterior_product.inl" diff --git a/src/vendor/glm/gtx/exterior_product.inl b/src/vendor/glm/gtx/exterior_product.inl deleted file mode 100755 index 93661fd..0000000 --- a/src/vendor/glm/gtx/exterior_product.inl +++ /dev/null @@ -1,26 +0,0 @@ -/// @ref gtx_exterior_product - -#include - -namespace glm { -namespace detail -{ - template - struct compute_cross_vec2 - { - GLM_FUNC_QUALIFIER static T call(vec<2, T, Q> const& v, vec<2, T, Q> const& u) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'cross' accepts only floating-point inputs"); - - return v.x * u.y - u.x * v.y; - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER T cross(vec<2, T, Q> const& x, vec<2, T, Q> const& y) - { - return detail::compute_cross_vec2::value>::call(x, y); - } -}//namespace glm - diff --git a/src/vendor/glm/gtx/fast_exponential.hpp b/src/vendor/glm/gtx/fast_exponential.hpp deleted file mode 100755 index 6fb7286..0000000 --- a/src/vendor/glm/gtx/fast_exponential.hpp +++ /dev/null @@ -1,95 +0,0 @@ -/// @ref gtx_fast_exponential -/// @file glm/gtx/fast_exponential.hpp -/// -/// @see core (dependence) -/// @see gtx_half_float (dependence) -/// -/// @defgroup gtx_fast_exponential GLM_GTX_fast_exponential -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Fast but less accurate implementations of exponential based functions. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_fast_exponential is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_fast_exponential extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_fast_exponential - /// @{ - - /// Faster than the common pow function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL genType fastPow(genType x, genType y); - - /// Faster than the common pow function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL vec fastPow(vec const& x, vec const& y); - - /// Faster than the common pow function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL genTypeT fastPow(genTypeT x, genTypeU y); - - /// Faster than the common pow function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL vec fastPow(vec const& x); - - /// Faster than the common exp function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL T fastExp(T x); - - /// Faster than the common exp function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL vec fastExp(vec const& x); - - /// Faster than the common log function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL T fastLog(T x); - - /// Faster than the common exp2 function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL vec fastLog(vec const& x); - - /// Faster than the common exp2 function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL T fastExp2(T x); - - /// Faster than the common exp2 function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL vec fastExp2(vec const& x); - - /// Faster than the common log2 function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL T fastLog2(T x); - - /// Faster than the common log2 function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL vec fastLog2(vec const& x); - - /// @} -}//namespace glm - -#include "fast_exponential.inl" diff --git a/src/vendor/glm/gtx/fast_exponential.inl b/src/vendor/glm/gtx/fast_exponential.inl deleted file mode 100755 index 5b11742..0000000 --- a/src/vendor/glm/gtx/fast_exponential.inl +++ /dev/null @@ -1,136 +0,0 @@ -/// @ref gtx_fast_exponential - -namespace glm -{ - // fastPow: - template - GLM_FUNC_QUALIFIER genType fastPow(genType x, genType y) - { - return exp(y * log(x)); - } - - template - GLM_FUNC_QUALIFIER vec fastPow(vec const& x, vec const& y) - { - return exp(y * log(x)); - } - - template - GLM_FUNC_QUALIFIER T fastPow(T x, int y) - { - T f = static_cast(1); - for(int i = 0; i < y; ++i) - f *= x; - return f; - } - - template - GLM_FUNC_QUALIFIER vec fastPow(vec const& x, vec const& y) - { - vec Result; - for(length_t i = 0, n = x.length(); i < n; ++i) - Result[i] = fastPow(x[i], y[i]); - return Result; - } - - // fastExp - // Note: This function provides accurate results only for value between -1 and 1, else avoid it. - template - GLM_FUNC_QUALIFIER T fastExp(T x) - { - // This has a better looking and same performance in release mode than the following code. However, in debug mode it's slower. - // return 1.0f + x * (1.0f + x * 0.5f * (1.0f + x * 0.3333333333f * (1.0f + x * 0.25 * (1.0f + x * 0.2f)))); - T x2 = x * x; - T x3 = x2 * x; - T x4 = x3 * x; - T x5 = x4 * x; - return T(1) + x + (x2 * T(0.5)) + (x3 * T(0.1666666667)) + (x4 * T(0.041666667)) + (x5 * T(0.008333333333)); - } - /* // Try to handle all values of float... but often shower than std::exp, glm::floor and the loop kill the performance - GLM_FUNC_QUALIFIER float fastExp(float x) - { - const float e = 2.718281828f; - const float IntegerPart = floor(x); - const float FloatPart = x - IntegerPart; - float z = 1.f; - - for(int i = 0; i < int(IntegerPart); ++i) - z *= e; - - const float x2 = FloatPart * FloatPart; - const float x3 = x2 * FloatPart; - const float x4 = x3 * FloatPart; - const float x5 = x4 * FloatPart; - return z * (1.0f + FloatPart + (x2 * 0.5f) + (x3 * 0.1666666667f) + (x4 * 0.041666667f) + (x5 * 0.008333333333f)); - } - - // Increase accuracy on number bigger that 1 and smaller than -1 but it's not enough for high and negative numbers - GLM_FUNC_QUALIFIER float fastExp(float x) - { - // This has a better looking and same performance in release mode than the following code. However, in debug mode it's slower. - // return 1.0f + x * (1.0f + x * 0.5f * (1.0f + x * 0.3333333333f * (1.0f + x * 0.25 * (1.0f + x * 0.2f)))); - float x2 = x * x; - float x3 = x2 * x; - float x4 = x3 * x; - float x5 = x4 * x; - float x6 = x5 * x; - float x7 = x6 * x; - float x8 = x7 * x; - return 1.0f + x + (x2 * 0.5f) + (x3 * 0.1666666667f) + (x4 * 0.041666667f) + (x5 * 0.008333333333f)+ (x6 * 0.00138888888888f) + (x7 * 0.000198412698f) + (x8 * 0.0000248015873f);; - } - */ - - template - GLM_FUNC_QUALIFIER vec fastExp(vec const& x) - { - return detail::functor1::call(fastExp, x); - } - - // fastLog - template - GLM_FUNC_QUALIFIER genType fastLog(genType x) - { - return std::log(x); - } - - /* Slower than the VC7.1 function... - GLM_FUNC_QUALIFIER float fastLog(float x) - { - float y1 = (x - 1.0f) / (x + 1.0f); - float y2 = y1 * y1; - return 2.0f * y1 * (1.0f + y2 * (0.3333333333f + y2 * (0.2f + y2 * 0.1428571429f))); - } - */ - - template - GLM_FUNC_QUALIFIER vec fastLog(vec const& x) - { - return detail::functor1::call(fastLog, x); - } - - //fastExp2, ln2 = 0.69314718055994530941723212145818f - template - GLM_FUNC_QUALIFIER genType fastExp2(genType x) - { - return fastExp(static_cast(0.69314718055994530941723212145818) * x); - } - - template - GLM_FUNC_QUALIFIER vec fastExp2(vec const& x) - { - return detail::functor1::call(fastExp2, x); - } - - // fastLog2, ln2 = 0.69314718055994530941723212145818f - template - GLM_FUNC_QUALIFIER genType fastLog2(genType x) - { - return fastLog(x) / static_cast(0.69314718055994530941723212145818); - } - - template - GLM_FUNC_QUALIFIER vec fastLog2(vec const& x) - { - return detail::functor1::call(fastLog2, x); - } -}//namespace glm diff --git a/src/vendor/glm/gtx/fast_square_root.hpp b/src/vendor/glm/gtx/fast_square_root.hpp deleted file mode 100755 index ac42a9c..0000000 --- a/src/vendor/glm/gtx/fast_square_root.hpp +++ /dev/null @@ -1,98 +0,0 @@ -/// @ref gtx_fast_square_root -/// @file glm/gtx/fast_square_root.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_fast_square_root GLM_GTX_fast_square_root -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Fast but less accurate implementations of square root based functions. -/// - Sqrt optimisation based on Newton's method, -/// www.gamedev.net/community/forums/topic.asp?topic id=139956 - -#pragma once - -// Dependency: -#include "../common.hpp" -#include "../exponential.hpp" -#include "../geometric.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_fast_square_root is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_fast_square_root extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_fast_square_root - /// @{ - - /// Faster than the common sqrt function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL genType fastSqrt(genType x); - - /// Faster than the common sqrt function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL vec fastSqrt(vec const& x); - - /// Faster than the common inversesqrt function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL genType fastInverseSqrt(genType x); - - /// Faster than the common inversesqrt function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL vec fastInverseSqrt(vec const& x); - - /// Faster than the common length function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL genType fastLength(genType x); - - /// Faster than the common length function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL T fastLength(vec const& x); - - /// Faster than the common distance function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL genType fastDistance(genType x, genType y); - - /// Faster than the common distance function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL T fastDistance(vec const& x, vec const& y); - - /// Faster than the common normalize function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL genType fastNormalize(genType x); - - /// Faster than the common normalize function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL vec fastNormalize(vec const& x); - - /// @} -}// namespace glm - -#include "fast_square_root.inl" diff --git a/src/vendor/glm/gtx/fast_square_root.inl b/src/vendor/glm/gtx/fast_square_root.inl deleted file mode 100755 index 4e6c6de..0000000 --- a/src/vendor/glm/gtx/fast_square_root.inl +++ /dev/null @@ -1,75 +0,0 @@ -/// @ref gtx_fast_square_root - -namespace glm -{ - // fastSqrt - template - GLM_FUNC_QUALIFIER genType fastSqrt(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fastSqrt' only accept floating-point input"); - - return genType(1) / fastInverseSqrt(x); - } - - template - GLM_FUNC_QUALIFIER vec fastSqrt(vec const& x) - { - return detail::functor1::call(fastSqrt, x); - } - - // fastInversesqrt - template - GLM_FUNC_QUALIFIER genType fastInverseSqrt(genType x) - { - return detail::compute_inversesqrt<1, genType, lowp, detail::is_aligned::value>::call(vec<1, genType, lowp>(x)).x; - } - - template - GLM_FUNC_QUALIFIER vec fastInverseSqrt(vec const& x) - { - return detail::compute_inversesqrt::value>::call(x); - } - - // fastLength - template - GLM_FUNC_QUALIFIER genType fastLength(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fastLength' only accept floating-point inputs"); - - return abs(x); - } - - template - GLM_FUNC_QUALIFIER T fastLength(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fastLength' only accept floating-point inputs"); - - return fastSqrt(dot(x, x)); - } - - // fastDistance - template - GLM_FUNC_QUALIFIER genType fastDistance(genType x, genType y) - { - return fastLength(y - x); - } - - template - GLM_FUNC_QUALIFIER T fastDistance(vec const& x, vec const& y) - { - return fastLength(y - x); - } - - // fastNormalize - template - GLM_FUNC_QUALIFIER genType fastNormalize(genType x) - { - return x > genType(0) ? genType(1) : -genType(1); - } - - template - GLM_FUNC_QUALIFIER vec fastNormalize(vec const& x) - { - return x * fastInverseSqrt(dot(x, x)); - } -}//namespace glm diff --git a/src/vendor/glm/gtx/fast_trigonometry.hpp b/src/vendor/glm/gtx/fast_trigonometry.hpp deleted file mode 100755 index 2650d6e..0000000 --- a/src/vendor/glm/gtx/fast_trigonometry.hpp +++ /dev/null @@ -1,79 +0,0 @@ -/// @ref gtx_fast_trigonometry -/// @file glm/gtx/fast_trigonometry.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_fast_trigonometry GLM_GTX_fast_trigonometry -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Fast but less accurate implementations of trigonometric functions. - -#pragma once - -// Dependency: -#include "../gtc/constants.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_fast_trigonometry is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_fast_trigonometry extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_fast_trigonometry - /// @{ - - /// Wrap an angle to [0 2pi[ - /// From GLM_GTX_fast_trigonometry extension. - template - GLM_FUNC_DECL T wrapAngle(T angle); - - /// Faster than the common sin function but less accurate. - /// From GLM_GTX_fast_trigonometry extension. - template - GLM_FUNC_DECL T fastSin(T angle); - - /// Faster than the common cos function but less accurate. - /// From GLM_GTX_fast_trigonometry extension. - template - GLM_FUNC_DECL T fastCos(T angle); - - /// Faster than the common tan function but less accurate. - /// Defined between -2pi and 2pi. - /// From GLM_GTX_fast_trigonometry extension. - template - GLM_FUNC_DECL T fastTan(T angle); - - /// Faster than the common asin function but less accurate. - /// Defined between -2pi and 2pi. - /// From GLM_GTX_fast_trigonometry extension. - template - GLM_FUNC_DECL T fastAsin(T angle); - - /// Faster than the common acos function but less accurate. - /// Defined between -2pi and 2pi. - /// From GLM_GTX_fast_trigonometry extension. - template - GLM_FUNC_DECL T fastAcos(T angle); - - /// Faster than the common atan function but less accurate. - /// Defined between -2pi and 2pi. - /// From GLM_GTX_fast_trigonometry extension. - template - GLM_FUNC_DECL T fastAtan(T y, T x); - - /// Faster than the common atan function but less accurate. - /// Defined between -2pi and 2pi. - /// From GLM_GTX_fast_trigonometry extension. - template - GLM_FUNC_DECL T fastAtan(T angle); - - /// @} -}//namespace glm - -#include "fast_trigonometry.inl" diff --git a/src/vendor/glm/gtx/fast_trigonometry.inl b/src/vendor/glm/gtx/fast_trigonometry.inl deleted file mode 100755 index 1a710cb..0000000 --- a/src/vendor/glm/gtx/fast_trigonometry.inl +++ /dev/null @@ -1,142 +0,0 @@ -/// @ref gtx_fast_trigonometry - -namespace glm{ -namespace detail -{ - template - GLM_FUNC_QUALIFIER vec taylorCos(vec const& x) - { - return static_cast(1) - - (x * x) * (1.f / 2.f) - + ((x * x) * (x * x)) * (1.f / 24.f) - - (((x * x) * (x * x)) * (x * x)) * (1.f / 720.f) - + (((x * x) * (x * x)) * ((x * x) * (x * x))) * (1.f / 40320.f); - } - - template - GLM_FUNC_QUALIFIER T cos_52s(T x) - { - T const xx(x * x); - return (T(0.9999932946) + xx * (T(-0.4999124376) + xx * (T(0.0414877472) + xx * T(-0.0012712095)))); - } - - template - GLM_FUNC_QUALIFIER vec cos_52s(vec const& x) - { - return detail::functor1::call(cos_52s, x); - } -}//namespace detail - - // wrapAngle - template - GLM_FUNC_QUALIFIER T wrapAngle(T angle) - { - return abs(mod(angle, two_pi())); - } - - template - GLM_FUNC_QUALIFIER vec wrapAngle(vec const& x) - { - return detail::functor1::call(wrapAngle, x); - } - - // cos - template - GLM_FUNC_QUALIFIER T fastCos(T x) - { - T const angle(wrapAngle(x)); - - if(angle < half_pi()) - return detail::cos_52s(angle); - if(angle < pi()) - return -detail::cos_52s(pi() - angle); - if(angle < (T(3) * half_pi())) - return -detail::cos_52s(angle - pi()); - - return detail::cos_52s(two_pi() - angle); - } - - template - GLM_FUNC_QUALIFIER vec fastCos(vec const& x) - { - return detail::functor1::call(fastCos, x); - } - - // sin - template - GLM_FUNC_QUALIFIER T fastSin(T x) - { - return fastCos(half_pi() - x); - } - - template - GLM_FUNC_QUALIFIER vec fastSin(vec const& x) - { - return detail::functor1::call(fastSin, x); - } - - // tan - template - GLM_FUNC_QUALIFIER T fastTan(T x) - { - return x + (x * x * x * T(0.3333333333)) + (x * x * x * x * x * T(0.1333333333333)) + (x * x * x * x * x * x * x * T(0.0539682539)); - } - - template - GLM_FUNC_QUALIFIER vec fastTan(vec const& x) - { - return detail::functor1::call(fastTan, x); - } - - // asin - template - GLM_FUNC_QUALIFIER T fastAsin(T x) - { - return x + (x * x * x * T(0.166666667)) + (x * x * x * x * x * T(0.075)) + (x * x * x * x * x * x * x * T(0.0446428571)) + (x * x * x * x * x * x * x * x * x * T(0.0303819444));// + (x * x * x * x * x * x * x * x * x * x * x * T(0.022372159)); - } - - template - GLM_FUNC_QUALIFIER vec fastAsin(vec const& x) - { - return detail::functor1::call(fastAsin, x); - } - - // acos - template - GLM_FUNC_QUALIFIER T fastAcos(T x) - { - return T(1.5707963267948966192313216916398) - fastAsin(x); //(PI / 2) - } - - template - GLM_FUNC_QUALIFIER vec fastAcos(vec const& x) - { - return detail::functor1::call(fastAcos, x); - } - - // atan - template - GLM_FUNC_QUALIFIER T fastAtan(T y, T x) - { - T sgn = sign(y) * sign(x); - return abs(fastAtan(y / x)) * sgn; - } - - template - GLM_FUNC_QUALIFIER vec fastAtan(vec const& y, vec const& x) - { - return detail::functor2::call(fastAtan, y, x); - } - - template - GLM_FUNC_QUALIFIER T fastAtan(T x) - { - return x - (x * x * x * T(0.333333333333)) + (x * x * x * x * x * T(0.2)) - (x * x * x * x * x * x * x * T(0.1428571429)) + (x * x * x * x * x * x * x * x * x * T(0.111111111111)) - (x * x * x * x * x * x * x * x * x * x * x * T(0.0909090909)); - } - - template - GLM_FUNC_QUALIFIER vec fastAtan(vec const& x) - { - return detail::functor1::call(fastAtan, x); - } -}//namespace glm diff --git a/src/vendor/glm/gtx/float_notmalize.inl b/src/vendor/glm/gtx/float_notmalize.inl deleted file mode 100755 index 8cdbc5a..0000000 --- a/src/vendor/glm/gtx/float_notmalize.inl +++ /dev/null @@ -1,13 +0,0 @@ -/// @ref gtx_float_normalize - -#include - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec floatNormalize(vec const& v) - { - return vec(v) / static_cast(std::numeric_limits::max()); - } - -}//namespace glm diff --git a/src/vendor/glm/gtx/functions.hpp b/src/vendor/glm/gtx/functions.hpp deleted file mode 100755 index 9f4166c..0000000 --- a/src/vendor/glm/gtx/functions.hpp +++ /dev/null @@ -1,56 +0,0 @@ -/// @ref gtx_functions -/// @file glm/gtx/functions.hpp -/// -/// @see core (dependence) -/// @see gtc_quaternion (dependence) -/// -/// @defgroup gtx_functions GLM_GTX_functions -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// List of useful common functions. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../detail/type_vec2.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_functions is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_functions extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_functions - /// @{ - - /// 1D gauss function - /// - /// @see gtc_epsilon - template - GLM_FUNC_DECL T gauss( - T x, - T ExpectedValue, - T StandardDeviation); - - /// 2D gauss function - /// - /// @see gtc_epsilon - template - GLM_FUNC_DECL T gauss( - vec<2, T, Q> const& Coord, - vec<2, T, Q> const& ExpectedValue, - vec<2, T, Q> const& StandardDeviation); - - /// @} -}//namespace glm - -#include "functions.inl" - diff --git a/src/vendor/glm/gtx/functions.inl b/src/vendor/glm/gtx/functions.inl deleted file mode 100755 index 29cbb20..0000000 --- a/src/vendor/glm/gtx/functions.inl +++ /dev/null @@ -1,30 +0,0 @@ -/// @ref gtx_functions - -#include "../exponential.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER T gauss - ( - T x, - T ExpectedValue, - T StandardDeviation - ) - { - return exp(-((x - ExpectedValue) * (x - ExpectedValue)) / (static_cast(2) * StandardDeviation * StandardDeviation)) / (StandardDeviation * sqrt(static_cast(6.28318530717958647692528676655900576))); - } - - template - GLM_FUNC_QUALIFIER T gauss - ( - vec<2, T, Q> const& Coord, - vec<2, T, Q> const& ExpectedValue, - vec<2, T, Q> const& StandardDeviation - ) - { - vec<2, T, Q> const Squared = ((Coord - ExpectedValue) * (Coord - ExpectedValue)) / (static_cast(2) * StandardDeviation * StandardDeviation); - return exp(-(Squared.x + Squared.y)); - } -}//namespace glm - diff --git a/src/vendor/glm/gtx/gradient_paint.hpp b/src/vendor/glm/gtx/gradient_paint.hpp deleted file mode 100755 index 6f85bf4..0000000 --- a/src/vendor/glm/gtx/gradient_paint.hpp +++ /dev/null @@ -1,53 +0,0 @@ -/// @ref gtx_gradient_paint -/// @file glm/gtx/gradient_paint.hpp -/// -/// @see core (dependence) -/// @see gtx_optimum_pow (dependence) -/// -/// @defgroup gtx_gradient_paint GLM_GTX_gradient_paint -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Functions that return the color of procedural gradient for specific coordinates. - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtx/optimum_pow.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_gradient_paint is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_gradient_paint extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_gradient_paint - /// @{ - - /// Return a color from a radial gradient. - /// @see - gtx_gradient_paint - template - GLM_FUNC_DECL T radialGradient( - vec<2, T, Q> const& Center, - T const& Radius, - vec<2, T, Q> const& Focal, - vec<2, T, Q> const& Position); - - /// Return a color from a linear gradient. - /// @see - gtx_gradient_paint - template - GLM_FUNC_DECL T linearGradient( - vec<2, T, Q> const& Point0, - vec<2, T, Q> const& Point1, - vec<2, T, Q> const& Position); - - /// @} -}// namespace glm - -#include "gradient_paint.inl" diff --git a/src/vendor/glm/gtx/gradient_paint.inl b/src/vendor/glm/gtx/gradient_paint.inl deleted file mode 100755 index 4c495e6..0000000 --- a/src/vendor/glm/gtx/gradient_paint.inl +++ /dev/null @@ -1,36 +0,0 @@ -/// @ref gtx_gradient_paint - -namespace glm -{ - template - GLM_FUNC_QUALIFIER T radialGradient - ( - vec<2, T, Q> const& Center, - T const& Radius, - vec<2, T, Q> const& Focal, - vec<2, T, Q> const& Position - ) - { - vec<2, T, Q> F = Focal - Center; - vec<2, T, Q> D = Position - Focal; - T Radius2 = pow2(Radius); - T Fx2 = pow2(F.x); - T Fy2 = pow2(F.y); - - T Numerator = (D.x * F.x + D.y * F.y) + sqrt(Radius2 * (pow2(D.x) + pow2(D.y)) - pow2(D.x * F.y - D.y * F.x)); - T Denominator = Radius2 - (Fx2 + Fy2); - return Numerator / Denominator; - } - - template - GLM_FUNC_QUALIFIER T linearGradient - ( - vec<2, T, Q> const& Point0, - vec<2, T, Q> const& Point1, - vec<2, T, Q> const& Position - ) - { - vec<2, T, Q> Dist = Point1 - Point0; - return (Dist.x * (Position.x - Point0.x) + Dist.y * (Position.y - Point0.y)) / glm::dot(Dist, Dist); - } -}//namespace glm diff --git a/src/vendor/glm/gtx/handed_coordinate_space.hpp b/src/vendor/glm/gtx/handed_coordinate_space.hpp deleted file mode 100755 index 3c85968..0000000 --- a/src/vendor/glm/gtx/handed_coordinate_space.hpp +++ /dev/null @@ -1,50 +0,0 @@ -/// @ref gtx_handed_coordinate_space -/// @file glm/gtx/handed_coordinate_space.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_handed_coordinate_space GLM_GTX_handed_coordinate_space -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// To know if a set of three basis vectors defines a right or left-handed coordinate system. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_handed_coordinate_space is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_handed_coordinate_space extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_handed_coordinate_space - /// @{ - - //! Return if a trihedron right handed or not. - //! From GLM_GTX_handed_coordinate_space extension. - template - GLM_FUNC_DECL bool rightHanded( - vec<3, T, Q> const& tangent, - vec<3, T, Q> const& binormal, - vec<3, T, Q> const& normal); - - //! Return if a trihedron left handed or not. - //! From GLM_GTX_handed_coordinate_space extension. - template - GLM_FUNC_DECL bool leftHanded( - vec<3, T, Q> const& tangent, - vec<3, T, Q> const& binormal, - vec<3, T, Q> const& normal); - - /// @} -}// namespace glm - -#include "handed_coordinate_space.inl" diff --git a/src/vendor/glm/gtx/handed_coordinate_space.inl b/src/vendor/glm/gtx/handed_coordinate_space.inl deleted file mode 100755 index e43c17b..0000000 --- a/src/vendor/glm/gtx/handed_coordinate_space.inl +++ /dev/null @@ -1,26 +0,0 @@ -/// @ref gtx_handed_coordinate_space - -namespace glm -{ - template - GLM_FUNC_QUALIFIER bool rightHanded - ( - vec<3, T, Q> const& tangent, - vec<3, T, Q> const& binormal, - vec<3, T, Q> const& normal - ) - { - return dot(cross(normal, tangent), binormal) > T(0); - } - - template - GLM_FUNC_QUALIFIER bool leftHanded - ( - vec<3, T, Q> const& tangent, - vec<3, T, Q> const& binormal, - vec<3, T, Q> const& normal - ) - { - return dot(cross(normal, tangent), binormal) < T(0); - } -}//namespace glm diff --git a/src/vendor/glm/gtx/hash.hpp b/src/vendor/glm/gtx/hash.hpp deleted file mode 100755 index 05dae9f..0000000 --- a/src/vendor/glm/gtx/hash.hpp +++ /dev/null @@ -1,142 +0,0 @@ -/// @ref gtx_hash -/// @file glm/gtx/hash.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_hash GLM_GTX_hash -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Add std::hash support for glm types - -#pragma once - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_hash is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_hash extension included") -# endif -#endif - -#include - -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include "../gtc/vec1.hpp" - -#include "../gtc/quaternion.hpp" -#include "../gtx/dual_quaternion.hpp" - -#include "../mat2x2.hpp" -#include "../mat2x3.hpp" -#include "../mat2x4.hpp" - -#include "../mat3x2.hpp" -#include "../mat3x3.hpp" -#include "../mat3x4.hpp" - -#include "../mat4x2.hpp" -#include "../mat4x3.hpp" -#include "../mat4x4.hpp" - -#if !GLM_HAS_CXX11_STL -# error "GLM_GTX_hash requires C++11 standard library support" -#endif - -namespace std -{ - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::vec<1, T, Q> const& v) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::vec<2, T, Q> const& v) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::vec<3, T, Q> const& v) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::vec<4, T, Q> const& v) const; - }; - - template - struct hash> - { - GLM_FUNC_DECL size_t operator()(glm::qua const& q) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::tdualquat const& q) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<2, 2, T,Q> const& m) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<2, 3, T,Q> const& m) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<2, 4, T,Q> const& m) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<3, 2, T,Q> const& m) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<3, 3, T,Q> const& m) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<3, 4, T,Q> const& m) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<4, 2, T,Q> const& m) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<4, 3, T,Q> const& m) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<4, 4, T,Q> const& m) const; - }; -} // namespace std - -#include "hash.inl" diff --git a/src/vendor/glm/gtx/hash.inl b/src/vendor/glm/gtx/hash.inl deleted file mode 100755 index ff71ca9..0000000 --- a/src/vendor/glm/gtx/hash.inl +++ /dev/null @@ -1,184 +0,0 @@ -/// @ref gtx_hash -/// -/// @see core (dependence) -/// -/// @defgroup gtx_hash GLM_GTX_hash -/// @ingroup gtx -/// -/// @brief Add std::hash support for glm types -/// -/// need to be included to use the features of this extension. - -namespace glm { -namespace detail -{ - GLM_INLINE void hash_combine(size_t &seed, size_t hash) - { - hash += 0x9e3779b9 + (seed << 6) + (seed >> 2); - seed ^= hash; - } -}} - -namespace std -{ - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::vec<1, T, Q> const& v) const - { - hash hasher; - return hasher(v.x); - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::vec<2, T, Q> const& v) const - { - size_t seed = 0; - hash hasher; - glm::detail::hash_combine(seed, hasher(v.x)); - glm::detail::hash_combine(seed, hasher(v.y)); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::vec<3, T, Q> const& v) const - { - size_t seed = 0; - hash hasher; - glm::detail::hash_combine(seed, hasher(v.x)); - glm::detail::hash_combine(seed, hasher(v.y)); - glm::detail::hash_combine(seed, hasher(v.z)); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::vec<4, T, Q> const& v) const - { - size_t seed = 0; - hash hasher; - glm::detail::hash_combine(seed, hasher(v.x)); - glm::detail::hash_combine(seed, hasher(v.y)); - glm::detail::hash_combine(seed, hasher(v.z)); - glm::detail::hash_combine(seed, hasher(v.w)); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::qua const& q) const - { - size_t seed = 0; - hash hasher; - glm::detail::hash_combine(seed, hasher(q.x)); - glm::detail::hash_combine(seed, hasher(q.y)); - glm::detail::hash_combine(seed, hasher(q.z)); - glm::detail::hash_combine(seed, hasher(q.w)); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::tdualquat const& q) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(q.real)); - glm::detail::hash_combine(seed, hasher(q.dual)); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<2, 2, T, Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<2, 3, T, Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<2, 4, T, Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<3, 2, T, Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - glm::detail::hash_combine(seed, hasher(m[2])); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<3, 3, T, Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - glm::detail::hash_combine(seed, hasher(m[2])); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<3, 4, T, Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - glm::detail::hash_combine(seed, hasher(m[2])); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<4, 2, T,Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - glm::detail::hash_combine(seed, hasher(m[2])); - glm::detail::hash_combine(seed, hasher(m[3])); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<4, 3, T,Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - glm::detail::hash_combine(seed, hasher(m[2])); - glm::detail::hash_combine(seed, hasher(m[3])); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<4, 4, T, Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - glm::detail::hash_combine(seed, hasher(m[2])); - glm::detail::hash_combine(seed, hasher(m[3])); - return seed; - } -} diff --git a/src/vendor/glm/gtx/integer.hpp b/src/vendor/glm/gtx/integer.hpp deleted file mode 100755 index d0b4c61..0000000 --- a/src/vendor/glm/gtx/integer.hpp +++ /dev/null @@ -1,76 +0,0 @@ -/// @ref gtx_integer -/// @file glm/gtx/integer.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_integer GLM_GTX_integer -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Add support for integer for core functions - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/integer.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_integer is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_integer extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_integer - /// @{ - - //! Returns x raised to the y power. - //! From GLM_GTX_integer extension. - GLM_FUNC_DECL int pow(int x, uint y); - - //! Returns the positive square root of x. - //! From GLM_GTX_integer extension. - GLM_FUNC_DECL int sqrt(int x); - - //! Returns the floor log2 of x. - //! From GLM_GTX_integer extension. - GLM_FUNC_DECL unsigned int floor_log2(unsigned int x); - - //! Modulus. Returns x - y * floor(x / y) for each component in x using the floating point value y. - //! From GLM_GTX_integer extension. - GLM_FUNC_DECL int mod(int x, int y); - - //! Return the factorial value of a number (!12 max, integer only) - //! From GLM_GTX_integer extension. - template - GLM_FUNC_DECL genType factorial(genType const& x); - - //! 32bit signed integer. - //! From GLM_GTX_integer extension. - typedef signed int sint; - - //! Returns x raised to the y power. - //! From GLM_GTX_integer extension. - GLM_FUNC_DECL uint pow(uint x, uint y); - - //! Returns the positive square root of x. - //! From GLM_GTX_integer extension. - GLM_FUNC_DECL uint sqrt(uint x); - - //! Modulus. Returns x - y * floor(x / y) for each component in x using the floating point value y. - //! From GLM_GTX_integer extension. - GLM_FUNC_DECL uint mod(uint x, uint y); - - //! Returns the number of leading zeros. - //! From GLM_GTX_integer extension. - GLM_FUNC_DECL uint nlz(uint x); - - /// @} -}//namespace glm - -#include "integer.inl" diff --git a/src/vendor/glm/gtx/integer.inl b/src/vendor/glm/gtx/integer.inl deleted file mode 100755 index 956366b..0000000 --- a/src/vendor/glm/gtx/integer.inl +++ /dev/null @@ -1,185 +0,0 @@ -/// @ref gtx_integer - -namespace glm -{ - // pow - GLM_FUNC_QUALIFIER int pow(int x, uint y) - { - if(y == 0) - return x >= 0 ? 1 : -1; - - int result = x; - for(uint i = 1; i < y; ++i) - result *= x; - return result; - } - - // sqrt: From Christopher J. Musial, An integer square root, Graphics Gems, 1990, page 387 - GLM_FUNC_QUALIFIER int sqrt(int x) - { - if(x <= 1) return x; - - int NextTrial = x >> 1; - int CurrentAnswer; - - do - { - CurrentAnswer = NextTrial; - NextTrial = (NextTrial + x / NextTrial) >> 1; - } while(NextTrial < CurrentAnswer); - - return CurrentAnswer; - } - -// Henry Gordon Dietz: http://aggregate.org/MAGIC/ -namespace detail -{ - GLM_FUNC_QUALIFIER unsigned int ones32(unsigned int x) - { - /* 32-bit recursive reduction using SWAR... - but first step is mapping 2-bit values - into sum of 2 1-bit values in sneaky way - */ - x -= ((x >> 1) & 0x55555555); - x = (((x >> 2) & 0x33333333) + (x & 0x33333333)); - x = (((x >> 4) + x) & 0x0f0f0f0f); - x += (x >> 8); - x += (x >> 16); - return(x & 0x0000003f); - } -}//namespace detail - - // Henry Gordon Dietz: http://aggregate.org/MAGIC/ -/* - GLM_FUNC_QUALIFIER unsigned int floor_log2(unsigned int x) - { - x |= (x >> 1); - x |= (x >> 2); - x |= (x >> 4); - x |= (x >> 8); - x |= (x >> 16); - - return _detail::ones32(x) >> 1; - } -*/ - // mod - GLM_FUNC_QUALIFIER int mod(int x, int y) - { - return ((x % y) + y) % y; - } - - // factorial (!12 max, integer only) - template - GLM_FUNC_QUALIFIER genType factorial(genType const& x) - { - genType Temp = x; - genType Result; - for(Result = 1; Temp > 1; --Temp) - Result *= Temp; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> factorial( - vec<2, T, Q> const& x) - { - return vec<2, T, Q>( - factorial(x.x), - factorial(x.y)); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> factorial( - vec<3, T, Q> const& x) - { - return vec<3, T, Q>( - factorial(x.x), - factorial(x.y), - factorial(x.z)); - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> factorial( - vec<4, T, Q> const& x) - { - return vec<4, T, Q>( - factorial(x.x), - factorial(x.y), - factorial(x.z), - factorial(x.w)); - } - - GLM_FUNC_QUALIFIER uint pow(uint x, uint y) - { - if (y == 0) - return 1u; - - uint result = x; - for(uint i = 1; i < y; ++i) - result *= x; - return result; - } - - GLM_FUNC_QUALIFIER uint sqrt(uint x) - { - if(x <= 1) return x; - - uint NextTrial = x >> 1; - uint CurrentAnswer; - - do - { - CurrentAnswer = NextTrial; - NextTrial = (NextTrial + x / NextTrial) >> 1; - } while(NextTrial < CurrentAnswer); - - return CurrentAnswer; - } - - GLM_FUNC_QUALIFIER uint mod(uint x, uint y) - { - return x - y * (x / y); - } - -#if(GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_GCC)) - - GLM_FUNC_QUALIFIER unsigned int nlz(unsigned int x) - { - return 31u - findMSB(x); - } - -#else - - // Hackers Delight: http://www.hackersdelight.org/HDcode/nlz.c.txt - GLM_FUNC_QUALIFIER unsigned int nlz(unsigned int x) - { - int y, m, n; - - y = -int(x >> 16); // If left half of x is 0, - m = (y >> 16) & 16; // set n = 16. If left half - n = 16 - m; // is nonzero, set n = 0 and - x = x >> m; // shift x right 16. - // Now x is of the form 0000xxxx. - y = x - 0x100; // If positions 8-15 are 0, - m = (y >> 16) & 8; // add 8 to n and shift x left 8. - n = n + m; - x = x << m; - - y = x - 0x1000; // If positions 12-15 are 0, - m = (y >> 16) & 4; // add 4 to n and shift x left 4. - n = n + m; - x = x << m; - - y = x - 0x4000; // If positions 14-15 are 0, - m = (y >> 16) & 2; // add 2 to n and shift x left 2. - n = n + m; - x = x << m; - - y = x >> 14; // Set y = 0, 1, 2, or 3. - m = y & ~(y >> 1); // Set m = 0, 1, 2, or 2 resp. - return unsigned(n + 2 - m); - } - -#endif//(GLM_COMPILER) - -}//namespace glm diff --git a/src/vendor/glm/gtx/intersect.hpp b/src/vendor/glm/gtx/intersect.hpp deleted file mode 100755 index f5c0621..0000000 --- a/src/vendor/glm/gtx/intersect.hpp +++ /dev/null @@ -1,92 +0,0 @@ -/// @ref gtx_intersect -/// @file glm/gtx/intersect.hpp -/// -/// @see core (dependence) -/// @see gtx_closest_point (dependence) -/// -/// @defgroup gtx_intersect GLM_GTX_intersect -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Add intersection functions - -#pragma once - -// Dependency: -#include -#include -#include "../glm.hpp" -#include "../geometric.hpp" -#include "../gtx/closest_point.hpp" -#include "../gtx/vector_query.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_closest_point is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_closest_point extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_intersect - /// @{ - - //! Compute the intersection of a ray and a plane. - //! Ray direction and plane normal must be unit length. - //! From GLM_GTX_intersect extension. - template - GLM_FUNC_DECL bool intersectRayPlane( - genType const& orig, genType const& dir, - genType const& planeOrig, genType const& planeNormal, - typename genType::value_type & intersectionDistance); - - //! Compute the intersection of a ray and a triangle. - /// Based om Tomas Möller implementation http://fileadmin.cs.lth.se/cs/Personal/Tomas_Akenine-Moller/raytri/ - //! From GLM_GTX_intersect extension. - template - GLM_FUNC_DECL bool intersectRayTriangle( - vec<3, T, Q> const& orig, vec<3, T, Q> const& dir, - vec<3, T, Q> const& v0, vec<3, T, Q> const& v1, vec<3, T, Q> const& v2, - vec<2, T, Q>& baryPosition, T& distance); - - //! Compute the intersection of a line and a triangle. - //! From GLM_GTX_intersect extension. - template - GLM_FUNC_DECL bool intersectLineTriangle( - genType const& orig, genType const& dir, - genType const& vert0, genType const& vert1, genType const& vert2, - genType & position); - - //! Compute the intersection distance of a ray and a sphere. - //! The ray direction vector is unit length. - //! From GLM_GTX_intersect extension. - template - GLM_FUNC_DECL bool intersectRaySphere( - genType const& rayStarting, genType const& rayNormalizedDirection, - genType const& sphereCenter, typename genType::value_type const sphereRadiusSquared, - typename genType::value_type & intersectionDistance); - - //! Compute the intersection of a ray and a sphere. - //! From GLM_GTX_intersect extension. - template - GLM_FUNC_DECL bool intersectRaySphere( - genType const& rayStarting, genType const& rayNormalizedDirection, - genType const& sphereCenter, const typename genType::value_type sphereRadius, - genType & intersectionPosition, genType & intersectionNormal); - - //! Compute the intersection of a line and a sphere. - //! From GLM_GTX_intersect extension - template - GLM_FUNC_DECL bool intersectLineSphere( - genType const& point0, genType const& point1, - genType const& sphereCenter, typename genType::value_type sphereRadius, - genType & intersectionPosition1, genType & intersectionNormal1, - genType & intersectionPosition2 = genType(), genType & intersectionNormal2 = genType()); - - /// @} -}//namespace glm - -#include "intersect.inl" diff --git a/src/vendor/glm/gtx/intersect.inl b/src/vendor/glm/gtx/intersect.inl deleted file mode 100755 index d242a61..0000000 --- a/src/vendor/glm/gtx/intersect.inl +++ /dev/null @@ -1,200 +0,0 @@ -/// @ref gtx_intersect - -namespace glm -{ - template - GLM_FUNC_QUALIFIER bool intersectRayPlane - ( - genType const& orig, genType const& dir, - genType const& planeOrig, genType const& planeNormal, - typename genType::value_type & intersectionDistance - ) - { - typename genType::value_type d = glm::dot(dir, planeNormal); - typename genType::value_type Epsilon = std::numeric_limits::epsilon(); - - if(glm::abs(d) > Epsilon) // if dir and planeNormal are not perpendicular - { - typename genType::value_type const tmp_intersectionDistance = glm::dot(planeOrig - orig, planeNormal) / d; - if (tmp_intersectionDistance > static_cast(0)) { // allow only intersections - intersectionDistance = tmp_intersectionDistance; - return true; - } - } - - return false; - } - - template - GLM_FUNC_QUALIFIER bool intersectRayTriangle - ( - vec<3, T, Q> const& orig, vec<3, T, Q> const& dir, - vec<3, T, Q> const& vert0, vec<3, T, Q> const& vert1, vec<3, T, Q> const& vert2, - vec<2, T, Q>& baryPosition, T& distance - ) - { - // find vectors for two edges sharing vert0 - vec<3, T, Q> const edge1 = vert1 - vert0; - vec<3, T, Q> const edge2 = vert2 - vert0; - - // begin calculating determinant - also used to calculate U parameter - vec<3, T, Q> const p = glm::cross(dir, edge2); - - // if determinant is near zero, ray lies in plane of triangle - T const det = glm::dot(edge1, p); - - vec<3, T, Q> Perpendicular(0); - - if(det > std::numeric_limits::epsilon()) - { - // calculate distance from vert0 to ray origin - vec<3, T, Q> const dist = orig - vert0; - - // calculate U parameter and test bounds - baryPosition.x = glm::dot(dist, p); - if(baryPosition.x < static_cast(0) || baryPosition.x > det) - return false; - - // prepare to test V parameter - Perpendicular = glm::cross(dist, edge1); - - // calculate V parameter and test bounds - baryPosition.y = glm::dot(dir, Perpendicular); - if((baryPosition.y < static_cast(0)) || ((baryPosition.x + baryPosition.y) > det)) - return false; - } - else if(det < -std::numeric_limits::epsilon()) - { - // calculate distance from vert0 to ray origin - vec<3, T, Q> const dist = orig - vert0; - - // calculate U parameter and test bounds - baryPosition.x = glm::dot(dist, p); - if((baryPosition.x > static_cast(0)) || (baryPosition.x < det)) - return false; - - // prepare to test V parameter - Perpendicular = glm::cross(dist, edge1); - - // calculate V parameter and test bounds - baryPosition.y = glm::dot(dir, Perpendicular); - if((baryPosition.y > static_cast(0)) || (baryPosition.x + baryPosition.y < det)) - return false; - } - else - return false; // ray is parallel to the plane of the triangle - - T inv_det = static_cast(1) / det; - - // calculate distance, ray intersects triangle - distance = glm::dot(edge2, Perpendicular) * inv_det; - baryPosition *= inv_det; - - return true; - } - - template - GLM_FUNC_QUALIFIER bool intersectLineTriangle - ( - genType const& orig, genType const& dir, - genType const& vert0, genType const& vert1, genType const& vert2, - genType & position - ) - { - typename genType::value_type Epsilon = std::numeric_limits::epsilon(); - - genType edge1 = vert1 - vert0; - genType edge2 = vert2 - vert0; - - genType Perpendicular = cross(dir, edge2); - - typename genType::value_type det = dot(edge1, Perpendicular); - - if (det > -Epsilon && det < Epsilon) - return false; - typename genType::value_type inv_det = typename genType::value_type(1) / det; - - genType Tengant = orig - vert0; - - position.y = dot(Tengant, Perpendicular) * inv_det; - if (position.y < typename genType::value_type(0) || position.y > typename genType::value_type(1)) - return false; - - genType Cotengant = cross(Tengant, edge1); - - position.z = dot(dir, Cotengant) * inv_det; - if (position.z < typename genType::value_type(0) || position.y + position.z > typename genType::value_type(1)) - return false; - - position.x = dot(edge2, Cotengant) * inv_det; - - return true; - } - - template - GLM_FUNC_QUALIFIER bool intersectRaySphere - ( - genType const& rayStarting, genType const& rayNormalizedDirection, - genType const& sphereCenter, const typename genType::value_type sphereRadiusSquared, - typename genType::value_type & intersectionDistance - ) - { - typename genType::value_type Epsilon = std::numeric_limits::epsilon(); - genType diff = sphereCenter - rayStarting; - typename genType::value_type t0 = dot(diff, rayNormalizedDirection); - typename genType::value_type dSquared = dot(diff, diff) - t0 * t0; - if( dSquared > sphereRadiusSquared ) - { - return false; - } - typename genType::value_type t1 = sqrt( sphereRadiusSquared - dSquared ); - intersectionDistance = t0 > t1 + Epsilon ? t0 - t1 : t0 + t1; - return intersectionDistance > Epsilon; - } - - template - GLM_FUNC_QUALIFIER bool intersectRaySphere - ( - genType const& rayStarting, genType const& rayNormalizedDirection, - genType const& sphereCenter, const typename genType::value_type sphereRadius, - genType & intersectionPosition, genType & intersectionNormal - ) - { - typename genType::value_type distance; - if( intersectRaySphere( rayStarting, rayNormalizedDirection, sphereCenter, sphereRadius * sphereRadius, distance ) ) - { - intersectionPosition = rayStarting + rayNormalizedDirection * distance; - intersectionNormal = (intersectionPosition - sphereCenter) / sphereRadius; - return true; - } - return false; - } - - template - GLM_FUNC_QUALIFIER bool intersectLineSphere - ( - genType const& point0, genType const& point1, - genType const& sphereCenter, typename genType::value_type sphereRadius, - genType & intersectionPoint1, genType & intersectionNormal1, - genType & intersectionPoint2, genType & intersectionNormal2 - ) - { - typename genType::value_type Epsilon = std::numeric_limits::epsilon(); - genType dir = normalize(point1 - point0); - genType diff = sphereCenter - point0; - typename genType::value_type t0 = dot(diff, dir); - typename genType::value_type dSquared = dot(diff, diff) - t0 * t0; - if( dSquared > sphereRadius * sphereRadius ) - { - return false; - } - typename genType::value_type t1 = sqrt( sphereRadius * sphereRadius - dSquared ); - if( t0 < t1 + Epsilon ) - t1 = -t1; - intersectionPoint1 = point0 + dir * (t0 - t1); - intersectionNormal1 = (intersectionPoint1 - sphereCenter) / sphereRadius; - intersectionPoint2 = point0 + dir * (t0 + t1); - intersectionNormal2 = (intersectionPoint2 - sphereCenter) / sphereRadius; - return true; - } -}//namespace glm diff --git a/src/vendor/glm/gtx/io.hpp b/src/vendor/glm/gtx/io.hpp deleted file mode 100755 index 8d974f0..0000000 --- a/src/vendor/glm/gtx/io.hpp +++ /dev/null @@ -1,201 +0,0 @@ -/// @ref gtx_io -/// @file glm/gtx/io.hpp -/// @author Jan P Springer (regnirpsj@gmail.com) -/// -/// @see core (dependence) -/// @see gtc_matrix_access (dependence) -/// @see gtc_quaternion (dependence) -/// -/// @defgroup gtx_io GLM_GTX_io -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// std::[w]ostream support for glm types -/// -/// std::[w]ostream support for glm types + qualifier/width/etc. manipulators -/// based on howard hinnant's std::chrono io proposal -/// [http://home.roadrunner.com/~hinnant/bloomington/chrono_io.html] - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtx/quaternion.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_io is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_io extension included") -# endif -#endif - -#include // std::basic_ostream<> (fwd) -#include // std::locale, std::locale::facet, std::locale::id -#include // std::pair<> - -namespace glm -{ - /// @addtogroup gtx_io - /// @{ - - namespace io - { - enum order_type { column_major, row_major}; - - template - class format_punct : public std::locale::facet - { - typedef CTy char_type; - - public: - - static std::locale::id id; - - bool formatted; - unsigned precision; - unsigned width; - char_type separator; - char_type delim_left; - char_type delim_right; - char_type space; - char_type newline; - order_type order; - - GLM_FUNC_DECL explicit format_punct(size_t a = 0); - GLM_FUNC_DECL explicit format_punct(format_punct const&); - }; - - template > - class basic_state_saver { - - public: - - GLM_FUNC_DECL explicit basic_state_saver(std::basic_ios&); - GLM_FUNC_DECL ~basic_state_saver(); - - private: - - typedef ::std::basic_ios state_type; - typedef typename state_type::char_type char_type; - typedef ::std::ios_base::fmtflags flags_type; - typedef ::std::streamsize streamsize_type; - typedef ::std::locale const locale_type; - - state_type& state_; - flags_type flags_; - streamsize_type precision_; - streamsize_type width_; - char_type fill_; - locale_type locale_; - - GLM_FUNC_DECL basic_state_saver& operator=(basic_state_saver const&); - }; - - typedef basic_state_saver state_saver; - typedef basic_state_saver wstate_saver; - - template > - class basic_format_saver - { - public: - - GLM_FUNC_DECL explicit basic_format_saver(std::basic_ios&); - GLM_FUNC_DECL ~basic_format_saver(); - - private: - - basic_state_saver const bss_; - - GLM_FUNC_DECL basic_format_saver& operator=(basic_format_saver const&); - }; - - typedef basic_format_saver format_saver; - typedef basic_format_saver wformat_saver; - - struct precision - { - unsigned value; - - GLM_FUNC_DECL explicit precision(unsigned); - }; - - struct width - { - unsigned value; - - GLM_FUNC_DECL explicit width(unsigned); - }; - - template - struct delimeter - { - CTy value[3]; - - GLM_FUNC_DECL explicit delimeter(CTy /* left */, CTy /* right */, CTy /* separator */ = ','); - }; - - struct order - { - order_type value; - - GLM_FUNC_DECL explicit order(order_type); - }; - - // functions, inlined (inline) - - template - FTy const& get_facet(std::basic_ios&); - template - std::basic_ios& formatted(std::basic_ios&); - template - std::basic_ios& unformattet(std::basic_ios&); - - template - std::basic_ostream& operator<<(std::basic_ostream&, precision const&); - template - std::basic_ostream& operator<<(std::basic_ostream&, width const&); - template - std::basic_ostream& operator<<(std::basic_ostream&, delimeter const&); - template - std::basic_ostream& operator<<(std::basic_ostream&, order const&); - }//namespace io - - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, qua const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, vec<1, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, vec<2, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, vec<3, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, vec<4, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<2, 2, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<2, 3, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<2, 4, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<3, 2, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<3, 3, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<3, 4, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<4, 2, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<4, 3, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<4, 4, T, Q> const&); - - template - GLM_FUNC_DECL std::basic_ostream & operator<<(std::basic_ostream &, - std::pair const, mat<4, 4, T, Q> const> const&); - - /// @} -}//namespace glm - -#include "io.inl" diff --git a/src/vendor/glm/gtx/io.inl b/src/vendor/glm/gtx/io.inl deleted file mode 100755 index a3a1bb6..0000000 --- a/src/vendor/glm/gtx/io.inl +++ /dev/null @@ -1,440 +0,0 @@ -/// @ref gtx_io -/// @author Jan P Springer (regnirpsj@gmail.com) - -#include // std::fixed, std::setfill<>, std::setprecision, std::right, std::setw -#include // std::basic_ostream<> -#include "../gtc/matrix_access.hpp" // glm::col, glm::row -#include "../gtx/type_trait.hpp" // glm::type<> - -namespace glm{ -namespace io -{ - template - GLM_FUNC_QUALIFIER format_punct::format_punct(size_t a) - : std::locale::facet(a) - , formatted(true) - , precision(3) - , width(1 + 4 + 1 + precision) - , separator(',') - , delim_left('[') - , delim_right(']') - , space(' ') - , newline('\n') - , order(column_major) - {} - - template - GLM_FUNC_QUALIFIER format_punct::format_punct(format_punct const& a) - : std::locale::facet(0) - , formatted(a.formatted) - , precision(a.precision) - , width(a.width) - , separator(a.separator) - , delim_left(a.delim_left) - , delim_right(a.delim_right) - , space(a.space) - , newline(a.newline) - , order(a.order) - {} - - template std::locale::id format_punct::id; - - template - GLM_FUNC_QUALIFIER basic_state_saver::basic_state_saver(std::basic_ios& a) - : state_(a) - , flags_(a.flags()) - , precision_(a.precision()) - , width_(a.width()) - , fill_(a.fill()) - , locale_(a.getloc()) - {} - - template - GLM_FUNC_QUALIFIER basic_state_saver::~basic_state_saver() - { - state_.imbue(locale_); - state_.fill(fill_); - state_.width(width_); - state_.precision(precision_); - state_.flags(flags_); - } - - template - GLM_FUNC_QUALIFIER basic_format_saver::basic_format_saver(std::basic_ios& a) - : bss_(a) - { - a.imbue(std::locale(a.getloc(), new format_punct(get_facet >(a)))); - } - - template - GLM_FUNC_QUALIFIER - basic_format_saver::~basic_format_saver() - {} - - GLM_FUNC_QUALIFIER precision::precision(unsigned a) - : value(a) - {} - - GLM_FUNC_QUALIFIER width::width(unsigned a) - : value(a) - {} - - template - GLM_FUNC_QUALIFIER delimeter::delimeter(CTy a, CTy b, CTy c) - : value() - { - value[0] = a; - value[1] = b; - value[2] = c; - } - - GLM_FUNC_QUALIFIER order::order(order_type a) - : value(a) - {} - - template - GLM_FUNC_QUALIFIER FTy const& get_facet(std::basic_ios& ios) - { - if(!std::has_facet(ios.getloc())) - ios.imbue(std::locale(ios.getloc(), new FTy)); - - return std::use_facet(ios.getloc()); - } - - template - GLM_FUNC_QUALIFIER std::basic_ios& formatted(std::basic_ios& ios) - { - const_cast&>(get_facet >(ios)).formatted = true; - return ios; - } - - template - GLM_FUNC_QUALIFIER std::basic_ios& unformatted(std::basic_ios& ios) - { - const_cast&>(get_facet >(ios)).formatted = false; - return ios; - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, precision const& a) - { - const_cast&>(get_facet >(os)).precision = a.value; - return os; - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, width const& a) - { - const_cast&>(get_facet >(os)).width = a.value; - return os; - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, delimeter const& a) - { - format_punct & fmt(const_cast&>(get_facet >(os))); - - fmt.delim_left = a.value[0]; - fmt.delim_right = a.value[1]; - fmt.separator = a.value[2]; - - return os; - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, order const& a) - { - const_cast&>(get_facet >(os)).order = a.value; - return os; - } -} // namespace io - -namespace detail -{ - template - GLM_FUNC_QUALIFIER std::basic_ostream& - print_vector_on(std::basic_ostream& os, V const& a) - { - typename std::basic_ostream::sentry const cerberus(os); - - if(cerberus) - { - io::format_punct const& fmt(io::get_facet >(os)); - - length_t const& components(type::components); - - if(fmt.formatted) - { - io::basic_state_saver const bss(os); - - os << std::fixed << std::right << std::setprecision(fmt.precision) << std::setfill(fmt.space) << fmt.delim_left; - - for(length_t i(0); i < components; ++i) - { - os << std::setw(fmt.width) << a[i]; - if(components-1 != i) - os << fmt.separator; - } - - os << fmt.delim_right; - } - else - { - for(length_t i(0); i < components; ++i) - { - os << a[i]; - - if(components-1 != i) - os << fmt.space; - } - } - } - - return os; - } -}//namespace detail - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, qua const& a) - { - return detail::print_vector_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, vec<1, T, Q> const& a) - { - return detail::print_vector_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, vec<2, T, Q> const& a) - { - return detail::print_vector_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, vec<3, T, Q> const& a) - { - return detail::print_vector_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, vec<4, T, Q> const& a) - { - return detail::print_vector_on(os, a); - } - -namespace detail -{ - template class M, length_t C, length_t R, typename T, qualifier Q> - GLM_FUNC_QUALIFIER std::basic_ostream& print_matrix_on(std::basic_ostream& os, M const& a) - { - typename std::basic_ostream::sentry const cerberus(os); - - if(cerberus) - { - io::format_punct const& fmt(io::get_facet >(os)); - - length_t const& cols(type >::cols); - length_t const& rows(type >::rows); - - if(fmt.formatted) - { - os << fmt.newline << fmt.delim_left; - - switch(fmt.order) - { - case io::column_major: - { - for(length_t i(0); i < rows; ++i) - { - if (0 != i) - os << fmt.space; - - os << row(a, i); - - if(rows-1 != i) - os << fmt.newline; - } - } - break; - - case io::row_major: - { - for(length_t i(0); i < cols; ++i) - { - if(0 != i) - os << fmt.space; - - os << column(a, i); - - if(cols-1 != i) - os << fmt.newline; - } - } - break; - } - - os << fmt.delim_right; - } - else - { - switch (fmt.order) - { - case io::column_major: - { - for(length_t i(0); i < cols; ++i) - { - os << column(a, i); - - if(cols - 1 != i) - os << fmt.space; - } - } - break; - - case io::row_major: - { - for (length_t i(0); i < rows; ++i) - { - os << row(a, i); - - if (rows-1 != i) - os << fmt.space; - } - } - break; - } - } - } - - return os; - } -}//namespace detail - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, mat<2, 2, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, mat<2, 3, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, mat<2, 4, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, mat<3, 2, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, mat<3, 3, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream & operator<<(std::basic_ostream& os, mat<3, 4, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream & operator<<(std::basic_ostream& os, mat<4, 2, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream & operator<<(std::basic_ostream& os, mat<4, 3, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream & operator<<(std::basic_ostream& os, mat<4, 4, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - -namespace detail -{ - template class M, length_t C, length_t R, typename T, qualifier Q> - GLM_FUNC_QUALIFIER std::basic_ostream& print_matrix_pair_on(std::basic_ostream& os, std::pair const, M const> const& a) - { - typename std::basic_ostream::sentry const cerberus(os); - - if(cerberus) - { - io::format_punct const& fmt(io::get_facet >(os)); - M const& ml(a.first); - M const& mr(a.second); - length_t const& cols(type >::cols); - length_t const& rows(type >::rows); - - if(fmt.formatted) - { - os << fmt.newline << fmt.delim_left; - - switch(fmt.order) - { - case io::column_major: - { - for(length_t i(0); i < rows; ++i) - { - if(0 != i) - os << fmt.space; - - os << row(ml, i) << ((rows-1 != i) ? fmt.space : fmt.delim_right) << fmt.space << ((0 != i) ? fmt.space : fmt.delim_left) << row(mr, i); - - if(rows-1 != i) - os << fmt.newline; - } - } - break; - case io::row_major: - { - for(length_t i(0); i < cols; ++i) - { - if(0 != i) - os << fmt.space; - - os << column(ml, i) << ((cols-1 != i) ? fmt.space : fmt.delim_right) << fmt.space << ((0 != i) ? fmt.space : fmt.delim_left) << column(mr, i); - - if(cols-1 != i) - os << fmt.newline; - } - } - break; - } - - os << fmt.delim_right; - } - else - { - os << ml << fmt.space << mr; - } - } - - return os; - } -}//namespace detail - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<( - std::basic_ostream & os, - std::pair const, - mat<4, 4, T, Q> const> const& a) - { - return detail::print_matrix_pair_on(os, a); - } -}//namespace glm diff --git a/src/vendor/glm/gtx/log_base.hpp b/src/vendor/glm/gtx/log_base.hpp deleted file mode 100755 index ba28c9d..0000000 --- a/src/vendor/glm/gtx/log_base.hpp +++ /dev/null @@ -1,48 +0,0 @@ -/// @ref gtx_log_base -/// @file glm/gtx/log_base.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_log_base GLM_GTX_log_base -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Logarithm for any base. base can be a vector or a scalar. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_log_base is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_log_base extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_log_base - /// @{ - - /// Logarithm for any base. - /// From GLM_GTX_log_base. - template - GLM_FUNC_DECL genType log( - genType const& x, - genType const& base); - - /// Logarithm for any base. - /// From GLM_GTX_log_base. - template - GLM_FUNC_DECL vec sign( - vec const& x, - vec const& base); - - /// @} -}//namespace glm - -#include "log_base.inl" diff --git a/src/vendor/glm/gtx/log_base.inl b/src/vendor/glm/gtx/log_base.inl deleted file mode 100755 index 4bbb8e8..0000000 --- a/src/vendor/glm/gtx/log_base.inl +++ /dev/null @@ -1,16 +0,0 @@ -/// @ref gtx_log_base - -namespace glm -{ - template - GLM_FUNC_QUALIFIER genType log(genType const& x, genType const& base) - { - return glm::log(x) / glm::log(base); - } - - template - GLM_FUNC_QUALIFIER vec log(vec const& x, vec const& base) - { - return glm::log(x) / glm::log(base); - } -}//namespace glm diff --git a/src/vendor/glm/gtx/matrix_cross_product.hpp b/src/vendor/glm/gtx/matrix_cross_product.hpp deleted file mode 100755 index 1e585f9..0000000 --- a/src/vendor/glm/gtx/matrix_cross_product.hpp +++ /dev/null @@ -1,47 +0,0 @@ -/// @ref gtx_matrix_cross_product -/// @file glm/gtx/matrix_cross_product.hpp -/// -/// @see core (dependence) -/// @see gtx_extented_min_max (dependence) -/// -/// @defgroup gtx_matrix_cross_product GLM_GTX_matrix_cross_product -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Build cross product matrices - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_matrix_cross_product is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_matrix_cross_product extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_matrix_cross_product - /// @{ - - //! Build a cross product matrix. - //! From GLM_GTX_matrix_cross_product extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> matrixCross3( - vec<3, T, Q> const& x); - - //! Build a cross product matrix. - //! From GLM_GTX_matrix_cross_product extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> matrixCross4( - vec<3, T, Q> const& x); - - /// @} -}//namespace glm - -#include "matrix_cross_product.inl" diff --git a/src/vendor/glm/gtx/matrix_cross_product.inl b/src/vendor/glm/gtx/matrix_cross_product.inl deleted file mode 100755 index 3a15397..0000000 --- a/src/vendor/glm/gtx/matrix_cross_product.inl +++ /dev/null @@ -1,37 +0,0 @@ -/// @ref gtx_matrix_cross_product - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> matrixCross3 - ( - vec<3, T, Q> const& x - ) - { - mat<3, 3, T, Q> Result(T(0)); - Result[0][1] = x.z; - Result[1][0] = -x.z; - Result[0][2] = -x.y; - Result[2][0] = x.y; - Result[1][2] = x.x; - Result[2][1] = -x.x; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> matrixCross4 - ( - vec<3, T, Q> const& x - ) - { - mat<4, 4, T, Q> Result(T(0)); - Result[0][1] = x.z; - Result[1][0] = -x.z; - Result[0][2] = -x.y; - Result[2][0] = x.y; - Result[1][2] = x.x; - Result[2][1] = -x.x; - return Result; - } - -}//namespace glm diff --git a/src/vendor/glm/gtx/matrix_decompose.hpp b/src/vendor/glm/gtx/matrix_decompose.hpp deleted file mode 100755 index acd7a7f..0000000 --- a/src/vendor/glm/gtx/matrix_decompose.hpp +++ /dev/null @@ -1,46 +0,0 @@ -/// @ref gtx_matrix_decompose -/// @file glm/gtx/matrix_decompose.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_matrix_decompose GLM_GTX_matrix_decompose -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Decomposes a model matrix to translations, rotation and scale components - -#pragma once - -// Dependencies -#include "../mat4x4.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include "../geometric.hpp" -#include "../gtc/quaternion.hpp" -#include "../gtc/matrix_transform.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_matrix_decompose is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_matrix_decompose extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_matrix_decompose - /// @{ - - /// Decomposes a model matrix to translations, rotation and scale components - /// @see gtx_matrix_decompose - template - GLM_FUNC_DECL bool decompose( - mat<4, 4, T, Q> const& modelMatrix, - vec<3, T, Q> & scale, qua & orientation, vec<3, T, Q> & translation, vec<3, T, Q> & skew, vec<4, T, Q> & perspective); - - /// @} -}//namespace glm - -#include "matrix_decompose.inl" diff --git a/src/vendor/glm/gtx/matrix_decompose.inl b/src/vendor/glm/gtx/matrix_decompose.inl deleted file mode 100755 index 6432318..0000000 --- a/src/vendor/glm/gtx/matrix_decompose.inl +++ /dev/null @@ -1,192 +0,0 @@ -/// @ref gtx_matrix_decompose - -#include "../gtc/constants.hpp" -#include "../gtc/epsilon.hpp" - -namespace glm{ -namespace detail -{ - /// Make a linear combination of two vectors and return the result. - // result = (a * ascl) + (b * bscl) - template - GLM_FUNC_QUALIFIER vec<3, T, Q> combine( - vec<3, T, Q> const& a, - vec<3, T, Q> const& b, - T ascl, T bscl) - { - return (a * ascl) + (b * bscl); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> scale(vec<3, T, Q> const& v, T desiredLength) - { - return v * desiredLength / length(v); - } -}//namespace detail - - // Matrix decompose - // http://www.opensource.apple.com/source/WebCore/WebCore-514/platform/graphics/transforms/TransformationMatrix.cpp - // Decomposes the mode matrix to translations,rotation scale components - - template - GLM_FUNC_QUALIFIER bool decompose(mat<4, 4, T, Q> const& ModelMatrix, vec<3, T, Q> & Scale, qua & Orientation, vec<3, T, Q> & Translation, vec<3, T, Q> & Skew, vec<4, T, Q> & Perspective) - { - mat<4, 4, T, Q> LocalMatrix(ModelMatrix); - - // Normalize the matrix. - if(epsilonEqual(LocalMatrix[3][3], static_cast(0), epsilon())) - return false; - - for(length_t i = 0; i < 4; ++i) - for(length_t j = 0; j < 4; ++j) - LocalMatrix[i][j] /= LocalMatrix[3][3]; - - // perspectiveMatrix is used to solve for perspective, but it also provides - // an easy way to test for singularity of the upper 3x3 component. - mat<4, 4, T, Q> PerspectiveMatrix(LocalMatrix); - - for(length_t i = 0; i < 3; i++) - PerspectiveMatrix[i][3] = static_cast(0); - PerspectiveMatrix[3][3] = static_cast(1); - - /// TODO_: Fixme! - if(epsilonEqual(determinant(PerspectiveMatrix), static_cast(0), epsilon())) - return false; - - // First, isolate perspective. This is the messiest. - if( - epsilonNotEqual(LocalMatrix[0][3], static_cast(0), epsilon()) || - epsilonNotEqual(LocalMatrix[1][3], static_cast(0), epsilon()) || - epsilonNotEqual(LocalMatrix[2][3], static_cast(0), epsilon())) - { - // rightHandSide is the right hand side of the equation. - vec<4, T, Q> RightHandSide; - RightHandSide[0] = LocalMatrix[0][3]; - RightHandSide[1] = LocalMatrix[1][3]; - RightHandSide[2] = LocalMatrix[2][3]; - RightHandSide[3] = LocalMatrix[3][3]; - - // Solve the equation by inverting PerspectiveMatrix and multiplying - // rightHandSide by the inverse. (This is the easiest way, not - // necessarily the best.) - mat<4, 4, T, Q> InversePerspectiveMatrix = glm::inverse(PerspectiveMatrix);// inverse(PerspectiveMatrix, inversePerspectiveMatrix); - mat<4, 4, T, Q> TransposedInversePerspectiveMatrix = glm::transpose(InversePerspectiveMatrix);// transposeMatrix4(inversePerspectiveMatrix, transposedInversePerspectiveMatrix); - - Perspective = TransposedInversePerspectiveMatrix * RightHandSide; - // v4MulPointByMatrix(rightHandSide, transposedInversePerspectiveMatrix, perspectivePoint); - - // Clear the perspective partition - LocalMatrix[0][3] = LocalMatrix[1][3] = LocalMatrix[2][3] = static_cast(0); - LocalMatrix[3][3] = static_cast(1); - } - else - { - // No perspective. - Perspective = vec<4, T, Q>(0, 0, 0, 1); - } - - // Next take care of translation (easy). - Translation = vec<3, T, Q>(LocalMatrix[3]); - LocalMatrix[3] = vec<4, T, Q>(0, 0, 0, LocalMatrix[3].w); - - vec<3, T, Q> Row[3], Pdum3; - - // Now get scale and shear. - for(length_t i = 0; i < 3; ++i) - for(length_t j = 0; j < 3; ++j) - Row[i][j] = LocalMatrix[i][j]; - - // Compute X scale factor and normalize first row. - Scale.x = length(Row[0]);// v3Length(Row[0]); - - Row[0] = detail::scale(Row[0], static_cast(1)); - - // Compute XY shear factor and make 2nd row orthogonal to 1st. - Skew.z = dot(Row[0], Row[1]); - Row[1] = detail::combine(Row[1], Row[0], static_cast(1), -Skew.z); - - // Now, compute Y scale and normalize 2nd row. - Scale.y = length(Row[1]); - Row[1] = detail::scale(Row[1], static_cast(1)); - Skew.z /= Scale.y; - - // Compute XZ and YZ shears, orthogonalize 3rd row. - Skew.y = glm::dot(Row[0], Row[2]); - Row[2] = detail::combine(Row[2], Row[0], static_cast(1), -Skew.y); - Skew.x = glm::dot(Row[1], Row[2]); - Row[2] = detail::combine(Row[2], Row[1], static_cast(1), -Skew.x); - - // Next, get Z scale and normalize 3rd row. - Scale.z = length(Row[2]); - Row[2] = detail::scale(Row[2], static_cast(1)); - Skew.y /= Scale.z; - Skew.x /= Scale.z; - - // At this point, the matrix (in rows[]) is orthonormal. - // Check for a coordinate system flip. If the determinant - // is -1, then negate the matrix and the scaling factors. - Pdum3 = cross(Row[1], Row[2]); // v3Cross(row[1], row[2], Pdum3); - if(dot(Row[0], Pdum3) < 0) - { - for(length_t i = 0; i < 3; i++) - { - Scale[i] *= static_cast(-1); - Row[i] *= static_cast(-1); - } - } - - // Now, get the rotations out, as described in the gem. - - // FIXME - Add the ability to return either quaternions (which are - // easier to recompose with) or Euler angles (rx, ry, rz), which - // are easier for authors to deal with. The latter will only be useful - // when we fix https://bugs.webkit.org/show_bug.cgi?id=23799, so I - // will leave the Euler angle code here for now. - - // ret.rotateY = asin(-Row[0][2]); - // if (cos(ret.rotateY) != 0) { - // ret.rotateX = atan2(Row[1][2], Row[2][2]); - // ret.rotateZ = atan2(Row[0][1], Row[0][0]); - // } else { - // ret.rotateX = atan2(-Row[2][0], Row[1][1]); - // ret.rotateZ = 0; - // } - - int i, j, k = 0; - T root, trace = Row[0].x + Row[1].y + Row[2].z; - if(trace > static_cast(0)) - { - root = sqrt(trace + static_cast(1.0)); - Orientation.w = static_cast(0.5) * root; - root = static_cast(0.5) / root; - Orientation.x = root * (Row[1].z - Row[2].y); - Orientation.y = root * (Row[2].x - Row[0].z); - Orientation.z = root * (Row[0].y - Row[1].x); - } // End if > 0 - else - { - static int Next[3] = {1, 2, 0}; - i = 0; - if(Row[1].y > Row[0].x) i = 1; - if(Row[2].z > Row[i][i]) i = 2; - j = Next[i]; - k = Next[j]; - -# ifdef GLM_FORCE_QUAT_DATA_XYZW - int off = 0; -# else - int off = 1; -# endif - - root = sqrt(Row[i][i] - Row[j][j] - Row[k][k] + static_cast(1.0)); - - Orientation[i + off] = static_cast(0.5) * root; - root = static_cast(0.5) / root; - Orientation[j + off] = root * (Row[i][j] + Row[j][i]); - Orientation[k + off] = root * (Row[i][k] + Row[k][i]); - Orientation.w = root * (Row[j][k] - Row[k][j]); - } // End if <= 0 - - return true; - } -}//namespace glm diff --git a/src/vendor/glm/gtx/matrix_factorisation.hpp b/src/vendor/glm/gtx/matrix_factorisation.hpp deleted file mode 100755 index 5a975d6..0000000 --- a/src/vendor/glm/gtx/matrix_factorisation.hpp +++ /dev/null @@ -1,69 +0,0 @@ -/// @ref gtx_matrix_factorisation -/// @file glm/gtx/matrix_factorisation.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_matrix_factorisation GLM_GTX_matrix_factorisation -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Functions to factor matrices in various forms - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_matrix_factorisation is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_matrix_factorisation extension included") -# endif -#endif - -/* -Suggestions: - - Move helper functions flipud and fliplr to another file: They may be helpful in more general circumstances. - - Implement other types of matrix factorisation, such as: QL and LQ, L(D)U, eigendecompositions, etc... -*/ - -namespace glm -{ - /// @addtogroup gtx_matrix_factorisation - /// @{ - - /// Flips the matrix rows up and down. - /// - /// From GLM_GTX_matrix_factorisation extension. - template - GLM_FUNC_DECL mat flipud(mat const& in); - - /// Flips the matrix columns right and left. - /// - /// From GLM_GTX_matrix_factorisation extension. - template - GLM_FUNC_DECL mat fliplr(mat const& in); - - /// Performs QR factorisation of a matrix. - /// Returns 2 matrices, q and r, such that the columns of q are orthonormal and span the same subspace than those of the input matrix, r is an upper triangular matrix, and q*r=in. - /// Given an n-by-m input matrix, q has dimensions min(n,m)-by-m, and r has dimensions n-by-min(n,m). - /// - /// From GLM_GTX_matrix_factorisation extension. - template - GLM_FUNC_DECL void qr_decompose(mat const& in, mat<(C < R ? C : R), R, T, Q>& q, mat& r); - - /// Performs RQ factorisation of a matrix. - /// Returns 2 matrices, r and q, such that r is an upper triangular matrix, the rows of q are orthonormal and span the same subspace than those of the input matrix, and r*q=in. - /// Note that in the context of RQ factorisation, the diagonal is seen as starting in the lower-right corner of the matrix, instead of the usual upper-left. - /// Given an n-by-m input matrix, r has dimensions min(n,m)-by-m, and q has dimensions n-by-min(n,m). - /// - /// From GLM_GTX_matrix_factorisation extension. - template - GLM_FUNC_DECL void rq_decompose(mat const& in, mat<(C < R ? C : R), R, T, Q>& r, mat& q); - - /// @} -} - -#include "matrix_factorisation.inl" diff --git a/src/vendor/glm/gtx/matrix_factorisation.inl b/src/vendor/glm/gtx/matrix_factorisation.inl deleted file mode 100755 index c479b8a..0000000 --- a/src/vendor/glm/gtx/matrix_factorisation.inl +++ /dev/null @@ -1,84 +0,0 @@ -/// @ref gtx_matrix_factorisation - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat flipud(mat const& in) - { - mat tin = transpose(in); - tin = fliplr(tin); - mat out = transpose(tin); - - return out; - } - - template - GLM_FUNC_QUALIFIER mat fliplr(mat const& in) - { - mat out; - for (length_t i = 0; i < C; i++) - { - out[i] = in[(C - i) - 1]; - } - - return out; - } - - template - GLM_FUNC_QUALIFIER void qr_decompose(mat const& in, mat<(C < R ? C : R), R, T, Q>& q, mat& r) - { - // Uses modified Gram-Schmidt method - // Source: https://en.wikipedia.org/wiki/Gram–Schmidt_process - // And https://en.wikipedia.org/wiki/QR_decomposition - - //For all the linearly independs columns of the input... - // (there can be no more linearly independents columns than there are rows.) - for (length_t i = 0; i < (C < R ? C : R); i++) - { - //Copy in Q the input's i-th column. - q[i] = in[i]; - - //j = [0,i[ - // Make that column orthogonal to all the previous ones by substracting to it the non-orthogonal projection of all the previous columns. - // Also: Fill the zero elements of R - for (length_t j = 0; j < i; j++) - { - q[i] -= dot(q[i], q[j])*q[j]; - r[j][i] = 0; - } - - //Now, Q i-th column is orthogonal to all the previous columns. Normalize it. - q[i] = normalize(q[i]); - - //j = [i,C[ - //Finally, compute the corresponding coefficients of R by computing the projection of the resulting column on the other columns of the input. - for (length_t j = i; j < C; j++) - { - r[j][i] = dot(in[j], q[i]); - } - } - } - - template - GLM_FUNC_QUALIFIER void rq_decompose(mat const& in, mat<(C < R ? C : R), R, T, Q>& r, mat& q) - { - // From https://en.wikipedia.org/wiki/QR_decomposition: - // The RQ decomposition transforms a matrix A into the product of an upper triangular matrix R (also known as right-triangular) and an orthogonal matrix Q. The only difference from QR decomposition is the order of these matrices. - // QR decomposition is Gram–Schmidt orthogonalization of columns of A, started from the first column. - // RQ decomposition is Gram–Schmidt orthogonalization of rows of A, started from the last row. - - mat tin = transpose(in); - tin = fliplr(tin); - - mat tr; - mat<(C < R ? C : R), C, T, Q> tq; - qr_decompose(tin, tq, tr); - - tr = fliplr(tr); - r = transpose(tr); - r = fliplr(r); - - tq = fliplr(tq); - q = transpose(tq); - } -} //namespace glm diff --git a/src/vendor/glm/gtx/matrix_interpolation.hpp b/src/vendor/glm/gtx/matrix_interpolation.hpp deleted file mode 100755 index 7d5ad4c..0000000 --- a/src/vendor/glm/gtx/matrix_interpolation.hpp +++ /dev/null @@ -1,60 +0,0 @@ -/// @ref gtx_matrix_interpolation -/// @file glm/gtx/matrix_interpolation.hpp -/// @author Ghenadii Ursachi (the.asteroth@gmail.com) -/// -/// @see core (dependence) -/// -/// @defgroup gtx_matrix_interpolation GLM_GTX_matrix_interpolation -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Allows to directly interpolate two matrices. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_matrix_interpolation is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_matrix_interpolation extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_matrix_interpolation - /// @{ - - /// Get the axis and angle of the rotation from a matrix. - /// From GLM_GTX_matrix_interpolation extension. - template - GLM_FUNC_DECL void axisAngle( - mat<4, 4, T, Q> const& Mat, vec<3, T, Q> & Axis, T & Angle); - - /// Build a matrix from axis and angle. - /// From GLM_GTX_matrix_interpolation extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> axisAngleMatrix( - vec<3, T, Q> const& Axis, T const Angle); - - /// Extracts the rotation part of a matrix. - /// From GLM_GTX_matrix_interpolation extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> extractMatrixRotation( - mat<4, 4, T, Q> const& Mat); - - /// Build a interpolation of 4 * 4 matrixes. - /// From GLM_GTX_matrix_interpolation extension. - /// Warning! works only with rotation and/or translation matrixes, scale will generate unexpected results. - template - GLM_FUNC_DECL mat<4, 4, T, Q> interpolate( - mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2, T const Delta); - - /// @} -}//namespace glm - -#include "matrix_interpolation.inl" diff --git a/src/vendor/glm/gtx/matrix_interpolation.inl b/src/vendor/glm/gtx/matrix_interpolation.inl deleted file mode 100755 index f4ba3a6..0000000 --- a/src/vendor/glm/gtx/matrix_interpolation.inl +++ /dev/null @@ -1,146 +0,0 @@ -/// @ref gtx_matrix_interpolation - -#include "../ext/scalar_constants.hpp" - -#include - -namespace glm -{ - template - GLM_FUNC_QUALIFIER void axisAngle(mat<4, 4, T, Q> const& m, vec<3, T, Q>& axis, T& angle) - { - T const epsilon = - std::numeric_limits::epsilon() * static_cast(1e2); - - bool const nearSymmetrical = - abs(m[1][0] - m[0][1]) < epsilon && - abs(m[2][0] - m[0][2]) < epsilon && - abs(m[2][1] - m[1][2]) < epsilon; - - if(nearSymmetrical) - { - bool const nearIdentity = - abs(m[1][0] + m[0][1]) < epsilon && - abs(m[2][0] + m[0][2]) < epsilon && - abs(m[2][1] + m[1][2]) < epsilon && - abs(m[0][0] + m[1][1] + m[2][2] - T(3.0)) < epsilon; - if (nearIdentity) - { - angle = static_cast(0.0); - axis = vec<3, T, Q>( - static_cast(1.0), static_cast(0.0), static_cast(0.0)); - return; - } - angle = pi(); - T xx = (m[0][0] + static_cast(1.0)) * static_cast(0.5); - T yy = (m[1][1] + static_cast(1.0)) * static_cast(0.5); - T zz = (m[2][2] + static_cast(1.0)) * static_cast(0.5); - T xy = (m[1][0] + m[0][1]) * static_cast(0.25); - T xz = (m[2][0] + m[0][2]) * static_cast(0.25); - T yz = (m[2][1] + m[1][2]) * static_cast(0.25); - if((xx > yy) && (xx > zz)) - { - if(xx < epsilon) - { - axis.x = static_cast(0.0); - axis.y = static_cast(0.7071); - axis.z = static_cast(0.7071); - } - else - { - axis.x = sqrt(xx); - axis.y = xy / axis.x; - axis.z = xz / axis.x; - } - } - else if (yy > zz) - { - if(yy < epsilon) - { - axis.x = static_cast(0.7071); - axis.y = static_cast(0.0); - axis.z = static_cast(0.7071); - } - else - { - axis.y = sqrt(yy); - axis.x = xy / axis.y; - axis.z = yz / axis.y; - } - } - else - { - if (zz < epsilon) - { - axis.x = static_cast(0.7071); - axis.y = static_cast(0.7071); - axis.z = static_cast(0.0); - } - else - { - axis.z = sqrt(zz); - axis.x = xz / axis.z; - axis.y = yz / axis.z; - } - } - return; - } - - T const angleCos = (m[0][0] + m[1][1] + m[2][2] - static_cast(1)) * static_cast(0.5); - if(angleCos >= static_cast(1.0)) - { - angle = static_cast(0.0); - } - else if (angleCos <= static_cast(-1.0)) - { - angle = pi(); - } - else - { - angle = acos(angleCos); - } - - axis = glm::normalize(glm::vec<3, T, Q>( - m[1][2] - m[2][1], m[2][0] - m[0][2], m[0][1] - m[1][0])); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> axisAngleMatrix(vec<3, T, Q> const& axis, T const angle) - { - T c = cos(angle); - T s = sin(angle); - T t = static_cast(1) - c; - vec<3, T, Q> n = normalize(axis); - - return mat<4, 4, T, Q>( - t * n.x * n.x + c, t * n.x * n.y + n.z * s, t * n.x * n.z - n.y * s, static_cast(0.0), - t * n.x * n.y - n.z * s, t * n.y * n.y + c, t * n.y * n.z + n.x * s, static_cast(0.0), - t * n.x * n.z + n.y * s, t * n.y * n.z - n.x * s, t * n.z * n.z + c, static_cast(0.0), - static_cast(0.0), static_cast(0.0), static_cast(0.0), static_cast(1.0)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> extractMatrixRotation(mat<4, 4, T, Q> const& m) - { - return mat<4, 4, T, Q>( - m[0][0], m[0][1], m[0][2], static_cast(0.0), - m[1][0], m[1][1], m[1][2], static_cast(0.0), - m[2][0], m[2][1], m[2][2], static_cast(0.0), - static_cast(0.0), static_cast(0.0), static_cast(0.0), static_cast(1.0)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> interpolate(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2, T const delta) - { - mat<4, 4, T, Q> m1rot = extractMatrixRotation(m1); - mat<4, 4, T, Q> dltRotation = m2 * transpose(m1rot); - vec<3, T, Q> dltAxis; - T dltAngle; - axisAngle(dltRotation, dltAxis, dltAngle); - mat<4, 4, T, Q> out = axisAngleMatrix(dltAxis, dltAngle * delta) * m1rot; - out[3][0] = m1[3][0] + delta * (m2[3][0] - m1[3][0]); - out[3][1] = m1[3][1] + delta * (m2[3][1] - m1[3][1]); - out[3][2] = m1[3][2] + delta * (m2[3][2] - m1[3][2]); - return out; - } -}//namespace glm diff --git a/src/vendor/glm/gtx/matrix_major_storage.hpp b/src/vendor/glm/gtx/matrix_major_storage.hpp deleted file mode 100755 index 8c6bc22..0000000 --- a/src/vendor/glm/gtx/matrix_major_storage.hpp +++ /dev/null @@ -1,119 +0,0 @@ -/// @ref gtx_matrix_major_storage -/// @file glm/gtx/matrix_major_storage.hpp -/// -/// @see core (dependence) -/// @see gtx_extented_min_max (dependence) -/// -/// @defgroup gtx_matrix_major_storage GLM_GTX_matrix_major_storage -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Build matrices with specific matrix order, row or column - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_matrix_major_storage is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_matrix_major_storage extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_matrix_major_storage - /// @{ - - //! Build a row major matrix from row vectors. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<2, 2, T, Q> rowMajor2( - vec<2, T, Q> const& v1, - vec<2, T, Q> const& v2); - - //! Build a row major matrix from other matrix. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<2, 2, T, Q> rowMajor2( - mat<2, 2, T, Q> const& m); - - //! Build a row major matrix from row vectors. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> rowMajor3( - vec<3, T, Q> const& v1, - vec<3, T, Q> const& v2, - vec<3, T, Q> const& v3); - - //! Build a row major matrix from other matrix. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> rowMajor3( - mat<3, 3, T, Q> const& m); - - //! Build a row major matrix from row vectors. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> rowMajor4( - vec<4, T, Q> const& v1, - vec<4, T, Q> const& v2, - vec<4, T, Q> const& v3, - vec<4, T, Q> const& v4); - - //! Build a row major matrix from other matrix. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> rowMajor4( - mat<4, 4, T, Q> const& m); - - //! Build a column major matrix from column vectors. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<2, 2, T, Q> colMajor2( - vec<2, T, Q> const& v1, - vec<2, T, Q> const& v2); - - //! Build a column major matrix from other matrix. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<2, 2, T, Q> colMajor2( - mat<2, 2, T, Q> const& m); - - //! Build a column major matrix from column vectors. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> colMajor3( - vec<3, T, Q> const& v1, - vec<3, T, Q> const& v2, - vec<3, T, Q> const& v3); - - //! Build a column major matrix from other matrix. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> colMajor3( - mat<3, 3, T, Q> const& m); - - //! Build a column major matrix from column vectors. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> colMajor4( - vec<4, T, Q> const& v1, - vec<4, T, Q> const& v2, - vec<4, T, Q> const& v3, - vec<4, T, Q> const& v4); - - //! Build a column major matrix from other matrix. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> colMajor4( - mat<4, 4, T, Q> const& m); - - /// @} -}//namespace glm - -#include "matrix_major_storage.inl" diff --git a/src/vendor/glm/gtx/matrix_major_storage.inl b/src/vendor/glm/gtx/matrix_major_storage.inl deleted file mode 100755 index 279dd34..0000000 --- a/src/vendor/glm/gtx/matrix_major_storage.inl +++ /dev/null @@ -1,166 +0,0 @@ -/// @ref gtx_matrix_major_storage - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> rowMajor2 - ( - vec<2, T, Q> const& v1, - vec<2, T, Q> const& v2 - ) - { - mat<2, 2, T, Q> Result; - Result[0][0] = v1.x; - Result[1][0] = v1.y; - Result[0][1] = v2.x; - Result[1][1] = v2.y; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> rowMajor2( - const mat<2, 2, T, Q>& m) - { - mat<2, 2, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> rowMajor3( - const vec<3, T, Q>& v1, - const vec<3, T, Q>& v2, - const vec<3, T, Q>& v3) - { - mat<3, 3, T, Q> Result; - Result[0][0] = v1.x; - Result[1][0] = v1.y; - Result[2][0] = v1.z; - Result[0][1] = v2.x; - Result[1][1] = v2.y; - Result[2][1] = v2.z; - Result[0][2] = v3.x; - Result[1][2] = v3.y; - Result[2][2] = v3.z; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> rowMajor3( - const mat<3, 3, T, Q>& m) - { - mat<3, 3, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[0][2] = m[2][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[1][2] = m[2][1]; - Result[2][0] = m[0][2]; - Result[2][1] = m[1][2]; - Result[2][2] = m[2][2]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rowMajor4( - const vec<4, T, Q>& v1, - const vec<4, T, Q>& v2, - const vec<4, T, Q>& v3, - const vec<4, T, Q>& v4) - { - mat<4, 4, T, Q> Result; - Result[0][0] = v1.x; - Result[1][0] = v1.y; - Result[2][0] = v1.z; - Result[3][0] = v1.w; - Result[0][1] = v2.x; - Result[1][1] = v2.y; - Result[2][1] = v2.z; - Result[3][1] = v2.w; - Result[0][2] = v3.x; - Result[1][2] = v3.y; - Result[2][2] = v3.z; - Result[3][2] = v3.w; - Result[0][3] = v4.x; - Result[1][3] = v4.y; - Result[2][3] = v4.z; - Result[3][3] = v4.w; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rowMajor4( - const mat<4, 4, T, Q>& m) - { - mat<4, 4, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[0][2] = m[2][0]; - Result[0][3] = m[3][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[1][2] = m[2][1]; - Result[1][3] = m[3][1]; - Result[2][0] = m[0][2]; - Result[2][1] = m[1][2]; - Result[2][2] = m[2][2]; - Result[2][3] = m[3][2]; - Result[3][0] = m[0][3]; - Result[3][1] = m[1][3]; - Result[3][2] = m[2][3]; - Result[3][3] = m[3][3]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> colMajor2( - const vec<2, T, Q>& v1, - const vec<2, T, Q>& v2) - { - return mat<2, 2, T, Q>(v1, v2); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> colMajor2( - const mat<2, 2, T, Q>& m) - { - return mat<2, 2, T, Q>(m); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> colMajor3( - const vec<3, T, Q>& v1, - const vec<3, T, Q>& v2, - const vec<3, T, Q>& v3) - { - return mat<3, 3, T, Q>(v1, v2, v3); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> colMajor3( - const mat<3, 3, T, Q>& m) - { - return mat<3, 3, T, Q>(m); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> colMajor4( - const vec<4, T, Q>& v1, - const vec<4, T, Q>& v2, - const vec<4, T, Q>& v3, - const vec<4, T, Q>& v4) - { - return mat<4, 4, T, Q>(v1, v2, v3, v4); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> colMajor4( - const mat<4, 4, T, Q>& m) - { - return mat<4, 4, T, Q>(m); - } -}//namespace glm diff --git a/src/vendor/glm/gtx/matrix_operation.hpp b/src/vendor/glm/gtx/matrix_operation.hpp deleted file mode 100755 index de6ff1f..0000000 --- a/src/vendor/glm/gtx/matrix_operation.hpp +++ /dev/null @@ -1,103 +0,0 @@ -/// @ref gtx_matrix_operation -/// @file glm/gtx/matrix_operation.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_matrix_operation GLM_GTX_matrix_operation -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Build diagonal matrices from vectors. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_matrix_operation is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_matrix_operation extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_matrix_operation - /// @{ - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<2, 2, T, Q> diagonal2x2( - vec<2, T, Q> const& v); - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<2, 3, T, Q> diagonal2x3( - vec<2, T, Q> const& v); - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<2, 4, T, Q> diagonal2x4( - vec<2, T, Q> const& v); - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<3, 2, T, Q> diagonal3x2( - vec<2, T, Q> const& v); - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> diagonal3x3( - vec<3, T, Q> const& v); - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<3, 4, T, Q> diagonal3x4( - vec<3, T, Q> const& v); - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<4, 2, T, Q> diagonal4x2( - vec<2, T, Q> const& v); - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<4, 3, T, Q> diagonal4x3( - vec<3, T, Q> const& v); - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> diagonal4x4( - vec<4, T, Q> const& v); - - /// Build an adjugate matrix. - /// From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<2, 2, T, Q> adjugate(mat<2, 2, T, Q> const& m); - - /// Build an adjugate matrix. - /// From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> adjugate(mat<3, 3, T, Q> const& m); - - /// Build an adjugate matrix. - /// From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> adjugate(mat<4, 4, T, Q> const& m); - - /// @} -}//namespace glm - -#include "matrix_operation.inl" diff --git a/src/vendor/glm/gtx/matrix_operation.inl b/src/vendor/glm/gtx/matrix_operation.inl deleted file mode 100755 index a4f4a85..0000000 --- a/src/vendor/glm/gtx/matrix_operation.inl +++ /dev/null @@ -1,176 +0,0 @@ -/// @ref gtx_matrix_operation - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> diagonal2x2 - ( - vec<2, T, Q> const& v - ) - { - mat<2, 2, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> diagonal2x3 - ( - vec<2, T, Q> const& v - ) - { - mat<2, 3, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> diagonal2x4 - ( - vec<2, T, Q> const& v - ) - { - mat<2, 4, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> diagonal3x2 - ( - vec<2, T, Q> const& v - ) - { - mat<3, 2, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> diagonal3x3 - ( - vec<3, T, Q> const& v - ) - { - mat<3, 3, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - Result[2][2] = v[2]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> diagonal3x4 - ( - vec<3, T, Q> const& v - ) - { - mat<3, 4, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - Result[2][2] = v[2]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> diagonal4x4 - ( - vec<4, T, Q> const& v - ) - { - mat<4, 4, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - Result[2][2] = v[2]; - Result[3][3] = v[3]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> diagonal4x3 - ( - vec<3, T, Q> const& v - ) - { - mat<4, 3, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - Result[2][2] = v[2]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> diagonal4x2 - ( - vec<2, T, Q> const& v - ) - { - mat<4, 2, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> adjugate(mat<2, 2, T, Q> const& m) - { - return mat<2, 2, T, Q>( - +m[1][1], -m[0][1], - -m[1][0], +m[0][0]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> adjugate(mat<3, 3, T, Q> const& m) - { - T const m00 = determinant(mat<2, 2, T, Q>(m[1][1], m[2][1], m[1][2], m[2][2])); - T const m01 = determinant(mat<2, 2, T, Q>(m[0][1], m[2][1], m[0][2], m[2][2])); - T const m02 = determinant(mat<2, 2, T, Q>(m[0][1], m[1][1], m[0][2], m[1][2])); - - T const m10 = determinant(mat<2, 2, T, Q>(m[1][0], m[2][0], m[1][2], m[2][2])); - T const m11 = determinant(mat<2, 2, T, Q>(m[0][0], m[2][0], m[0][2], m[2][2])); - T const m12 = determinant(mat<2, 2, T, Q>(m[0][0], m[1][0], m[0][2], m[1][2])); - - T const m20 = determinant(mat<2, 2, T, Q>(m[1][0], m[2][0], m[1][1], m[2][1])); - T const m21 = determinant(mat<2, 2, T, Q>(m[0][0], m[2][0], m[0][1], m[2][1])); - T const m22 = determinant(mat<2, 2, T, Q>(m[0][0], m[1][0], m[0][1], m[1][1])); - - return mat<3, 3, T, Q>( - +m00, -m01, +m02, - -m10, +m11, -m12, - +m20, -m21, +m22); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> adjugate(mat<4, 4, T, Q> const& m) - { - T const m00 = determinant(mat<3, 3, T, Q>(m[1][1], m[1][2], m[1][3], m[2][1], m[2][2], m[2][3], m[3][1], m[3][2], m[3][3])); - T const m01 = determinant(mat<3, 3, T, Q>(m[1][0], m[1][2], m[1][3], m[2][0], m[2][2], m[2][3], m[3][0], m[3][2], m[3][3])); - T const m02 = determinant(mat<3, 3, T, Q>(m[1][0], m[1][1], m[1][3], m[2][0], m[2][1], m[2][3], m[3][0], m[3][1], m[3][3])); - T const m03 = determinant(mat<3, 3, T, Q>(m[1][0], m[1][1], m[1][2], m[2][0], m[2][1], m[2][2], m[3][0], m[3][1], m[3][2])); - - T const m10 = determinant(mat<3, 3, T, Q>(m[0][1], m[0][2], m[0][3], m[2][1], m[2][2], m[2][3], m[3][1], m[3][2], m[3][3])); - T const m11 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][2], m[0][3], m[2][0], m[2][2], m[2][3], m[3][0], m[3][2], m[3][3])); - T const m12 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][3], m[2][0], m[2][1], m[2][3], m[3][0], m[3][1], m[3][3])); - T const m13 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][2], m[2][0], m[2][1], m[2][2], m[3][0], m[3][1], m[3][2])); - - T const m20 = determinant(mat<3, 3, T, Q>(m[0][1], m[0][2], m[0][3], m[1][1], m[1][2], m[1][3], m[3][1], m[3][2], m[3][3])); - T const m21 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][2], m[0][3], m[1][0], m[1][2], m[1][3], m[3][0], m[3][2], m[3][3])); - T const m22 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][3], m[1][0], m[1][1], m[1][3], m[3][0], m[3][1], m[3][3])); - T const m23 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][2], m[1][0], m[1][1], m[1][2], m[3][0], m[3][1], m[3][2])); - - T const m30 = determinant(mat<3, 3, T, Q>(m[0][1], m[0][2], m[0][3], m[1][1], m[1][2], m[1][3], m[2][1], m[2][2], m[2][3])); - T const m31 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][2], m[0][3], m[1][0], m[1][2], m[1][3], m[2][0], m[2][2], m[2][3])); - T const m32 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][3], m[1][0], m[1][1], m[1][3], m[2][0], m[2][1], m[2][3])); - T const m33 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][2], m[1][0], m[1][1], m[1][2], m[2][0], m[2][1], m[2][2])); - - return mat<4, 4, T, Q>( - +m00, -m10, +m20, -m30, - -m01, +m11, -m21, +m31, - +m02, -m12, +m22, -m32, - -m03, +m13, -m23, +m33); - } -}//namespace glm diff --git a/src/vendor/glm/gtx/matrix_query.hpp b/src/vendor/glm/gtx/matrix_query.hpp deleted file mode 100755 index 8011b2b..0000000 --- a/src/vendor/glm/gtx/matrix_query.hpp +++ /dev/null @@ -1,77 +0,0 @@ -/// @ref gtx_matrix_query -/// @file glm/gtx/matrix_query.hpp -/// -/// @see core (dependence) -/// @see gtx_vector_query (dependence) -/// -/// @defgroup gtx_matrix_query GLM_GTX_matrix_query -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Query to evaluate matrix properties - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtx/vector_query.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_matrix_query is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_matrix_query extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_matrix_query - /// @{ - - /// Return whether a matrix a null matrix. - /// From GLM_GTX_matrix_query extension. - template - GLM_FUNC_DECL bool isNull(mat<2, 2, T, Q> const& m, T const& epsilon); - - /// Return whether a matrix a null matrix. - /// From GLM_GTX_matrix_query extension. - template - GLM_FUNC_DECL bool isNull(mat<3, 3, T, Q> const& m, T const& epsilon); - - /// Return whether a matrix is a null matrix. - /// From GLM_GTX_matrix_query extension. - template - GLM_FUNC_DECL bool isNull(mat<4, 4, T, Q> const& m, T const& epsilon); - - /// Return whether a matrix is an identity matrix. - /// From GLM_GTX_matrix_query extension. - template class matType> - GLM_FUNC_DECL bool isIdentity(matType const& m, T const& epsilon); - - /// Return whether a matrix is a normalized matrix. - /// From GLM_GTX_matrix_query extension. - template - GLM_FUNC_DECL bool isNormalized(mat<2, 2, T, Q> const& m, T const& epsilon); - - /// Return whether a matrix is a normalized matrix. - /// From GLM_GTX_matrix_query extension. - template - GLM_FUNC_DECL bool isNormalized(mat<3, 3, T, Q> const& m, T const& epsilon); - - /// Return whether a matrix is a normalized matrix. - /// From GLM_GTX_matrix_query extension. - template - GLM_FUNC_DECL bool isNormalized(mat<4, 4, T, Q> const& m, T const& epsilon); - - /// Return whether a matrix is an orthonormalized matrix. - /// From GLM_GTX_matrix_query extension. - template class matType> - GLM_FUNC_DECL bool isOrthogonal(matType const& m, T const& epsilon); - - /// @} -}//namespace glm - -#include "matrix_query.inl" diff --git a/src/vendor/glm/gtx/matrix_query.inl b/src/vendor/glm/gtx/matrix_query.inl deleted file mode 100755 index b763c1a..0000000 --- a/src/vendor/glm/gtx/matrix_query.inl +++ /dev/null @@ -1,113 +0,0 @@ -/// @ref gtx_matrix_query - -namespace glm -{ - template - GLM_FUNC_QUALIFIER bool isNull(mat<2, 2, T, Q> const& m, T const& epsilon) - { - bool result = true; - for(length_t i = 0; result && i < m.length() ; ++i) - result = isNull(m[i], epsilon); - return result; - } - - template - GLM_FUNC_QUALIFIER bool isNull(mat<3, 3, T, Q> const& m, T const& epsilon) - { - bool result = true; - for(length_t i = 0; result && i < m.length() ; ++i) - result = isNull(m[i], epsilon); - return result; - } - - template - GLM_FUNC_QUALIFIER bool isNull(mat<4, 4, T, Q> const& m, T const& epsilon) - { - bool result = true; - for(length_t i = 0; result && i < m.length() ; ++i) - result = isNull(m[i], epsilon); - return result; - } - - template - GLM_FUNC_QUALIFIER bool isIdentity(mat const& m, T const& epsilon) - { - bool result = true; - for(length_t i = 0; result && i < m.length(); ++i) - { - for(length_t j = 0; result && j < glm::min(i, m[0].length()); ++j) - result = abs(m[i][j]) <= epsilon; - if(result && i < m[0].length()) - result = abs(m[i][i] - 1) <= epsilon; - for(length_t j = i + 1; result && j < m[0].length(); ++j) - result = abs(m[i][j]) <= epsilon; - } - return result; - } - - template - GLM_FUNC_QUALIFIER bool isNormalized(mat<2, 2, T, Q> const& m, T const& epsilon) - { - bool result(true); - for(length_t i = 0; result && i < m.length(); ++i) - result = isNormalized(m[i], epsilon); - for(length_t i = 0; result && i < m.length(); ++i) - { - typename mat<2, 2, T, Q>::col_type v; - for(length_t j = 0; j < m.length(); ++j) - v[j] = m[j][i]; - result = isNormalized(v, epsilon); - } - return result; - } - - template - GLM_FUNC_QUALIFIER bool isNormalized(mat<3, 3, T, Q> const& m, T const& epsilon) - { - bool result(true); - for(length_t i = 0; result && i < m.length(); ++i) - result = isNormalized(m[i], epsilon); - for(length_t i = 0; result && i < m.length(); ++i) - { - typename mat<3, 3, T, Q>::col_type v; - for(length_t j = 0; j < m.length(); ++j) - v[j] = m[j][i]; - result = isNormalized(v, epsilon); - } - return result; - } - - template - GLM_FUNC_QUALIFIER bool isNormalized(mat<4, 4, T, Q> const& m, T const& epsilon) - { - bool result(true); - for(length_t i = 0; result && i < m.length(); ++i) - result = isNormalized(m[i], epsilon); - for(length_t i = 0; result && i < m.length(); ++i) - { - typename mat<4, 4, T, Q>::col_type v; - for(length_t j = 0; j < m.length(); ++j) - v[j] = m[j][i]; - result = isNormalized(v, epsilon); - } - return result; - } - - template - GLM_FUNC_QUALIFIER bool isOrthogonal(mat const& m, T const& epsilon) - { - bool result = true; - for(length_t i(0); result && i < m.length() - 1; ++i) - for(length_t j(i + 1); result && j < m.length(); ++j) - result = areOrthogonal(m[i], m[j], epsilon); - - if(result) - { - mat tmp = transpose(m); - for(length_t i(0); result && i < m.length() - 1 ; ++i) - for(length_t j(i + 1); result && j < m.length(); ++j) - result = areOrthogonal(tmp[i], tmp[j], epsilon); - } - return result; - } -}//namespace glm diff --git a/src/vendor/glm/gtx/matrix_transform_2d.hpp b/src/vendor/glm/gtx/matrix_transform_2d.hpp deleted file mode 100755 index 5f9c540..0000000 --- a/src/vendor/glm/gtx/matrix_transform_2d.hpp +++ /dev/null @@ -1,81 +0,0 @@ -/// @ref gtx_matrix_transform_2d -/// @file glm/gtx/matrix_transform_2d.hpp -/// @author Miguel Ãngel Pérez Martínez -/// -/// @see core (dependence) -/// -/// @defgroup gtx_matrix_transform_2d GLM_GTX_matrix_transform_2d -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Defines functions that generate common 2d transformation matrices. - -#pragma once - -// Dependency: -#include "../mat3x3.hpp" -#include "../vec2.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_matrix_transform_2d is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_matrix_transform_2d extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_matrix_transform_2d - /// @{ - - /// Builds a translation 3 * 3 matrix created from a vector of 2 components. - /// - /// @param m Input matrix multiplied by this translation matrix. - /// @param v Coordinates of a translation vector. - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> translate( - mat<3, 3, T, Q> const& m, - vec<2, T, Q> const& v); - - /// Builds a rotation 3 * 3 matrix created from an angle. - /// - /// @param m Input matrix multiplied by this translation matrix. - /// @param angle Rotation angle expressed in radians. - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> rotate( - mat<3, 3, T, Q> const& m, - T angle); - - /// Builds a scale 3 * 3 matrix created from a vector of 2 components. - /// - /// @param m Input matrix multiplied by this translation matrix. - /// @param v Coordinates of a scale vector. - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> scale( - mat<3, 3, T, Q> const& m, - vec<2, T, Q> const& v); - - /// Builds an horizontal (parallel to the x axis) shear 3 * 3 matrix. - /// - /// @param m Input matrix multiplied by this translation matrix. - /// @param y Shear factor. - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearX( - mat<3, 3, T, Q> const& m, - T y); - - /// Builds a vertical (parallel to the y axis) shear 3 * 3 matrix. - /// - /// @param m Input matrix multiplied by this translation matrix. - /// @param x Shear factor. - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearY( - mat<3, 3, T, Q> const& m, - T x); - - /// @} -}//namespace glm - -#include "matrix_transform_2d.inl" diff --git a/src/vendor/glm/gtx/matrix_transform_2d.inl b/src/vendor/glm/gtx/matrix_transform_2d.inl deleted file mode 100755 index a68d24d..0000000 --- a/src/vendor/glm/gtx/matrix_transform_2d.inl +++ /dev/null @@ -1,68 +0,0 @@ -/// @ref gtx_matrix_transform_2d -/// @author Miguel Ãngel Pérez Martínez - -#include "../trigonometric.hpp" - -namespace glm -{ - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> translate( - mat<3, 3, T, Q> const& m, - vec<2, T, Q> const& v) - { - mat<3, 3, T, Q> Result(m); - Result[2] = m[0] * v[0] + m[1] * v[1] + m[2]; - return Result; - } - - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> rotate( - mat<3, 3, T, Q> const& m, - T angle) - { - T const a = angle; - T const c = cos(a); - T const s = sin(a); - - mat<3, 3, T, Q> Result; - Result[0] = m[0] * c + m[1] * s; - Result[1] = m[0] * -s + m[1] * c; - Result[2] = m[2]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> scale( - mat<3, 3, T, Q> const& m, - vec<2, T, Q> const& v) - { - mat<3, 3, T, Q> Result; - Result[0] = m[0] * v[0]; - Result[1] = m[1] * v[1]; - Result[2] = m[2]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearX( - mat<3, 3, T, Q> const& m, - T y) - { - mat<3, 3, T, Q> Result(1); - Result[0][1] = y; - return m * Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearY( - mat<3, 3, T, Q> const& m, - T x) - { - mat<3, 3, T, Q> Result(1); - Result[1][0] = x; - return m * Result; - } - -}//namespace glm diff --git a/src/vendor/glm/gtx/mixed_product.hpp b/src/vendor/glm/gtx/mixed_product.hpp deleted file mode 100755 index b242e35..0000000 --- a/src/vendor/glm/gtx/mixed_product.hpp +++ /dev/null @@ -1,41 +0,0 @@ -/// @ref gtx_mixed_product -/// @file glm/gtx/mixed_product.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_mixed_product GLM_GTX_mixed_producte -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Mixed product of 3 vectors. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_mixed_product is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_mixed_product extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_mixed_product - /// @{ - - /// @brief Mixed product of 3 vectors (from GLM_GTX_mixed_product extension) - template - GLM_FUNC_DECL T mixedProduct( - vec<3, T, Q> const& v1, - vec<3, T, Q> const& v2, - vec<3, T, Q> const& v3); - - /// @} -}// namespace glm - -#include "mixed_product.inl" diff --git a/src/vendor/glm/gtx/mixed_product.inl b/src/vendor/glm/gtx/mixed_product.inl deleted file mode 100755 index e5cdbdb..0000000 --- a/src/vendor/glm/gtx/mixed_product.inl +++ /dev/null @@ -1,15 +0,0 @@ -/// @ref gtx_mixed_product - -namespace glm -{ - template - GLM_FUNC_QUALIFIER T mixedProduct - ( - vec<3, T, Q> const& v1, - vec<3, T, Q> const& v2, - vec<3, T, Q> const& v3 - ) - { - return dot(cross(v1, v2), v3); - } -}//namespace glm diff --git a/src/vendor/glm/gtx/norm.hpp b/src/vendor/glm/gtx/norm.hpp deleted file mode 100755 index dfaebb7..0000000 --- a/src/vendor/glm/gtx/norm.hpp +++ /dev/null @@ -1,88 +0,0 @@ -/// @ref gtx_norm -/// @file glm/gtx/norm.hpp -/// -/// @see core (dependence) -/// @see gtx_quaternion (dependence) -/// @see gtx_component_wise (dependence) -/// -/// @defgroup gtx_norm GLM_GTX_norm -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Various ways to compute vector norms. - -#pragma once - -// Dependency: -#include "../geometric.hpp" -#include "../gtx/quaternion.hpp" -#include "../gtx/component_wise.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_norm is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_norm extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_norm - /// @{ - - /// Returns the squared length of x. - /// From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T length2(vec const& x); - - /// Returns the squared distance between p0 and p1, i.e., length2(p0 - p1). - /// From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T distance2(vec const& p0, vec const& p1); - - //! Returns the L1 norm between x and y. - //! From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T l1Norm(vec<3, T, Q> const& x, vec<3, T, Q> const& y); - - //! Returns the L1 norm of v. - //! From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T l1Norm(vec<3, T, Q> const& v); - - //! Returns the L2 norm between x and y. - //! From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T l2Norm(vec<3, T, Q> const& x, vec<3, T, Q> const& y); - - //! Returns the L2 norm of v. - //! From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T l2Norm(vec<3, T, Q> const& x); - - //! Returns the L norm between x and y. - //! From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T lxNorm(vec<3, T, Q> const& x, vec<3, T, Q> const& y, unsigned int Depth); - - //! Returns the L norm of v. - //! From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T lxNorm(vec<3, T, Q> const& x, unsigned int Depth); - - //! Returns the LMax norm between x and y. - //! From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T lMaxNorm(vec<3, T, Q> const& x, vec<3, T, Q> const& y); - - //! Returns the LMax norm of v. - //! From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T lMaxNorm(vec<3, T, Q> const& x); - - /// @} -}//namespace glm - -#include "norm.inl" diff --git a/src/vendor/glm/gtx/norm.inl b/src/vendor/glm/gtx/norm.inl deleted file mode 100755 index 6db561b..0000000 --- a/src/vendor/glm/gtx/norm.inl +++ /dev/null @@ -1,95 +0,0 @@ -/// @ref gtx_norm - -#include "../detail/qualifier.hpp" - -namespace glm{ -namespace detail -{ - template - struct compute_length2 - { - GLM_FUNC_QUALIFIER static T call(vec const& v) - { - return dot(v, v); - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER genType length2(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'length2' accepts only floating-point inputs"); - return x * x; - } - - template - GLM_FUNC_QUALIFIER T length2(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'length2' accepts only floating-point inputs"); - return detail::compute_length2::value>::call(v); - } - - template - GLM_FUNC_QUALIFIER T distance2(T p0, T p1) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'distance2' accepts only floating-point inputs"); - return length2(p1 - p0); - } - - template - GLM_FUNC_QUALIFIER T distance2(vec const& p0, vec const& p1) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'distance2' accepts only floating-point inputs"); - return length2(p1 - p0); - } - - template - GLM_FUNC_QUALIFIER T l1Norm(vec<3, T, Q> const& a, vec<3, T, Q> const& b) - { - return abs(b.x - a.x) + abs(b.y - a.y) + abs(b.z - a.z); - } - - template - GLM_FUNC_QUALIFIER T l1Norm(vec<3, T, Q> const& v) - { - return abs(v.x) + abs(v.y) + abs(v.z); - } - - template - GLM_FUNC_QUALIFIER T l2Norm(vec<3, T, Q> const& a, vec<3, T, Q> const& b - ) - { - return length(b - a); - } - - template - GLM_FUNC_QUALIFIER T l2Norm(vec<3, T, Q> const& v) - { - return length(v); - } - - template - GLM_FUNC_QUALIFIER T lxNorm(vec<3, T, Q> const& x, vec<3, T, Q> const& y, unsigned int Depth) - { - return pow(pow(abs(y.x - x.x), T(Depth)) + pow(abs(y.y - x.y), T(Depth)) + pow(abs(y.z - x.z), T(Depth)), T(1) / T(Depth)); - } - - template - GLM_FUNC_QUALIFIER T lxNorm(vec<3, T, Q> const& v, unsigned int Depth) - { - return pow(pow(abs(v.x), T(Depth)) + pow(abs(v.y), T(Depth)) + pow(abs(v.z), T(Depth)), T(1) / T(Depth)); - } - - template - GLM_FUNC_QUALIFIER T lMaxNorm(vec<3, T, Q> const& a, vec<3, T, Q> const& b) - { - return compMax(abs(b - a)); - } - - template - GLM_FUNC_QUALIFIER T lMaxNorm(vec<3, T, Q> const& v) - { - return compMax(abs(v)); - } - -}//namespace glm diff --git a/src/vendor/glm/gtx/normal.hpp b/src/vendor/glm/gtx/normal.hpp deleted file mode 100755 index 068682f..0000000 --- a/src/vendor/glm/gtx/normal.hpp +++ /dev/null @@ -1,41 +0,0 @@ -/// @ref gtx_normal -/// @file glm/gtx/normal.hpp -/// -/// @see core (dependence) -/// @see gtx_extented_min_max (dependence) -/// -/// @defgroup gtx_normal GLM_GTX_normal -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Compute the normal of a triangle. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_normal is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_normal extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_normal - /// @{ - - /// Computes triangle normal from triangle points. - /// - /// @see gtx_normal - template - GLM_FUNC_DECL vec<3, T, Q> triangleNormal(vec<3, T, Q> const& p1, vec<3, T, Q> const& p2, vec<3, T, Q> const& p3); - - /// @} -}//namespace glm - -#include "normal.inl" diff --git a/src/vendor/glm/gtx/normal.inl b/src/vendor/glm/gtx/normal.inl deleted file mode 100755 index 74f9fc9..0000000 --- a/src/vendor/glm/gtx/normal.inl +++ /dev/null @@ -1,15 +0,0 @@ -/// @ref gtx_normal - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> triangleNormal - ( - vec<3, T, Q> const& p1, - vec<3, T, Q> const& p2, - vec<3, T, Q> const& p3 - ) - { - return normalize(cross(p1 - p2, p1 - p3)); - } -}//namespace glm diff --git a/src/vendor/glm/gtx/normalize_dot.hpp b/src/vendor/glm/gtx/normalize_dot.hpp deleted file mode 100755 index 5195802..0000000 --- a/src/vendor/glm/gtx/normalize_dot.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref gtx_normalize_dot -/// @file glm/gtx/normalize_dot.hpp -/// -/// @see core (dependence) -/// @see gtx_fast_square_root (dependence) -/// -/// @defgroup gtx_normalize_dot GLM_GTX_normalize_dot -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Dot product of vectors that need to be normalize with a single square root. - -#pragma once - -// Dependency: -#include "../gtx/fast_square_root.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_normalize_dot is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_normalize_dot extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_normalize_dot - /// @{ - - /// Normalize parameters and returns the dot product of x and y. - /// It's faster that dot(normalize(x), normalize(y)). - /// - /// @see gtx_normalize_dot extension. - template - GLM_FUNC_DECL T normalizeDot(vec const& x, vec const& y); - - /// Normalize parameters and returns the dot product of x and y. - /// Faster that dot(fastNormalize(x), fastNormalize(y)). - /// - /// @see gtx_normalize_dot extension. - template - GLM_FUNC_DECL T fastNormalizeDot(vec const& x, vec const& y); - - /// @} -}//namespace glm - -#include "normalize_dot.inl" diff --git a/src/vendor/glm/gtx/normalize_dot.inl b/src/vendor/glm/gtx/normalize_dot.inl deleted file mode 100755 index 7bcd9a5..0000000 --- a/src/vendor/glm/gtx/normalize_dot.inl +++ /dev/null @@ -1,16 +0,0 @@ -/// @ref gtx_normalize_dot - -namespace glm -{ - template - GLM_FUNC_QUALIFIER T normalizeDot(vec const& x, vec const& y) - { - return glm::dot(x, y) * glm::inversesqrt(glm::dot(x, x) * glm::dot(y, y)); - } - - template - GLM_FUNC_QUALIFIER T fastNormalizeDot(vec const& x, vec const& y) - { - return glm::dot(x, y) * glm::fastInverseSqrt(glm::dot(x, x) * glm::dot(y, y)); - } -}//namespace glm diff --git a/src/vendor/glm/gtx/number_precision.hpp b/src/vendor/glm/gtx/number_precision.hpp deleted file mode 100755 index 3a606bd..0000000 --- a/src/vendor/glm/gtx/number_precision.hpp +++ /dev/null @@ -1,61 +0,0 @@ -/// @ref gtx_number_precision -/// @file glm/gtx/number_precision.hpp -/// -/// @see core (dependence) -/// @see gtc_type_precision (dependence) -/// @see gtc_quaternion (dependence) -/// -/// @defgroup gtx_number_precision GLM_GTX_number_precision -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Defined size types. - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/type_precision.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_number_precision is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_number_precision extension included") -# endif -#endif - -namespace glm{ -namespace gtx -{ - ///////////////////////////// - // Unsigned int vector types - - /// @addtogroup gtx_number_precision - /// @{ - - typedef u8 u8vec1; //!< \brief 8bit unsigned integer scalar. (from GLM_GTX_number_precision extension) - typedef u16 u16vec1; //!< \brief 16bit unsigned integer scalar. (from GLM_GTX_number_precision extension) - typedef u32 u32vec1; //!< \brief 32bit unsigned integer scalar. (from GLM_GTX_number_precision extension) - typedef u64 u64vec1; //!< \brief 64bit unsigned integer scalar. (from GLM_GTX_number_precision extension) - - ////////////////////// - // Float vector types - - typedef f32 f32vec1; //!< \brief Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) - typedef f64 f64vec1; //!< \brief Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) - - ////////////////////// - // Float matrix types - - typedef f32 f32mat1; //!< \brief Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) - typedef f32 f32mat1x1; //!< \brief Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) - typedef f64 f64mat1; //!< \brief Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) - typedef f64 f64mat1x1; //!< \brief Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) - - /// @} -}//namespace gtx -}//namespace glm - -#include "number_precision.inl" diff --git a/src/vendor/glm/gtx/number_precision.inl b/src/vendor/glm/gtx/number_precision.inl deleted file mode 100755 index b39d71c..0000000 --- a/src/vendor/glm/gtx/number_precision.inl +++ /dev/null @@ -1,6 +0,0 @@ -/// @ref gtx_number_precision - -namespace glm -{ - -} diff --git a/src/vendor/glm/gtx/optimum_pow.hpp b/src/vendor/glm/gtx/optimum_pow.hpp deleted file mode 100755 index 9284a47..0000000 --- a/src/vendor/glm/gtx/optimum_pow.hpp +++ /dev/null @@ -1,54 +0,0 @@ -/// @ref gtx_optimum_pow -/// @file glm/gtx/optimum_pow.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_optimum_pow GLM_GTX_optimum_pow -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Integer exponentiation of power functions. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_optimum_pow is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_optimum_pow extension included") -# endif -#endif - -namespace glm{ -namespace gtx -{ - /// @addtogroup gtx_optimum_pow - /// @{ - - /// Returns x raised to the power of 2. - /// - /// @see gtx_optimum_pow - template - GLM_FUNC_DECL genType pow2(genType const& x); - - /// Returns x raised to the power of 3. - /// - /// @see gtx_optimum_pow - template - GLM_FUNC_DECL genType pow3(genType const& x); - - /// Returns x raised to the power of 4. - /// - /// @see gtx_optimum_pow - template - GLM_FUNC_DECL genType pow4(genType const& x); - - /// @} -}//namespace gtx -}//namespace glm - -#include "optimum_pow.inl" diff --git a/src/vendor/glm/gtx/optimum_pow.inl b/src/vendor/glm/gtx/optimum_pow.inl deleted file mode 100755 index a26c19c..0000000 --- a/src/vendor/glm/gtx/optimum_pow.inl +++ /dev/null @@ -1,22 +0,0 @@ -/// @ref gtx_optimum_pow - -namespace glm -{ - template - GLM_FUNC_QUALIFIER genType pow2(genType const& x) - { - return x * x; - } - - template - GLM_FUNC_QUALIFIER genType pow3(genType const& x) - { - return x * x * x; - } - - template - GLM_FUNC_QUALIFIER genType pow4(genType const& x) - { - return (x * x) * (x * x); - } -}//namespace glm diff --git a/src/vendor/glm/gtx/orthonormalize.hpp b/src/vendor/glm/gtx/orthonormalize.hpp deleted file mode 100755 index 3e004fb..0000000 --- a/src/vendor/glm/gtx/orthonormalize.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/// @ref gtx_orthonormalize -/// @file glm/gtx/orthonormalize.hpp -/// -/// @see core (dependence) -/// @see gtx_extented_min_max (dependence) -/// -/// @defgroup gtx_orthonormalize GLM_GTX_orthonormalize -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Orthonormalize matrices. - -#pragma once - -// Dependency: -#include "../vec3.hpp" -#include "../mat3x3.hpp" -#include "../geometric.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_orthonormalize is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_orthonormalize extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_orthonormalize - /// @{ - - /// Returns the orthonormalized matrix of m. - /// - /// @see gtx_orthonormalize - template - GLM_FUNC_DECL mat<3, 3, T, Q> orthonormalize(mat<3, 3, T, Q> const& m); - - /// Orthonormalizes x according y. - /// - /// @see gtx_orthonormalize - template - GLM_FUNC_DECL vec<3, T, Q> orthonormalize(vec<3, T, Q> const& x, vec<3, T, Q> const& y); - - /// @} -}//namespace glm - -#include "orthonormalize.inl" diff --git a/src/vendor/glm/gtx/orthonormalize.inl b/src/vendor/glm/gtx/orthonormalize.inl deleted file mode 100755 index cb553ba..0000000 --- a/src/vendor/glm/gtx/orthonormalize.inl +++ /dev/null @@ -1,29 +0,0 @@ -/// @ref gtx_orthonormalize - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> orthonormalize(mat<3, 3, T, Q> const& m) - { - mat<3, 3, T, Q> r = m; - - r[0] = normalize(r[0]); - - T d0 = dot(r[0], r[1]); - r[1] -= r[0] * d0; - r[1] = normalize(r[1]); - - T d1 = dot(r[1], r[2]); - d0 = dot(r[0], r[2]); - r[2] -= r[0] * d0 + r[1] * d1; - r[2] = normalize(r[2]); - - return r; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> orthonormalize(vec<3, T, Q> const& x, vec<3, T, Q> const& y) - { - return normalize(x - y * dot(y, x)); - } -}//namespace glm diff --git a/src/vendor/glm/gtx/pca.hpp b/src/vendor/glm/gtx/pca.hpp deleted file mode 100755 index 93da745..0000000 --- a/src/vendor/glm/gtx/pca.hpp +++ /dev/null @@ -1,111 +0,0 @@ -/// @ref gtx_pca -/// @file glm/gtx/pca.hpp -/// -/// @see core (dependence) -/// @see ext_scalar_relational (dependence) -/// -/// @defgroup gtx_pca GLM_GTX_pca -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Implements functions required for fundamental 'princple component analysis' in 2D, 3D, and 4D: -/// 1) Computing a covariance matrics from a list of _relative_ position vectors -/// 2) Compute the eigenvalues and eigenvectors of the covariance matrics -/// This is useful, e.g., to compute an object-aligned bounding box from vertices of an object. -/// https://en.wikipedia.org/wiki/Principal_component_analysis -/// -/// Example: -/// ``` -/// std::vector ptData; -/// // ... fill ptData with some point data, e.g. vertices -/// -/// glm::dvec3 center = computeCenter(ptData); -/// -/// glm::dmat3 covarMat = glm::computeCovarianceMatrix(ptData.data(), ptData.size(), center); -/// -/// glm::dvec3 evals; -/// glm::dmat3 evecs; -/// int evcnt = glm::findEigenvaluesSymReal(covarMat, evals, evecs); -/// -/// if(evcnt != 3) -/// // ... error handling -/// -/// glm::sortEigenvalues(evals, evecs); -/// -/// // ... now evecs[0] points in the direction (symmetric) of the largest spatial distribuion within ptData -/// ``` - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../ext/scalar_relational.hpp" - - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_pca is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_pca extension included") -# endif -#endif - -namespace glm { - /// @addtogroup gtx_pca - /// @{ - - /// Compute a covariance matrix form an array of relative coordinates `v` (e.g., relative to the center of gravity of the object) - /// @param v Points to a memory holding `n` times vectors - template - GLM_INLINE mat computeCovarianceMatrix(vec const* v, size_t n); - - /// Compute a covariance matrix form an array of absolute coordinates `v` and a precomputed center of gravity `c` - /// @param v Points to a memory holding `n` times vectors - template - GLM_INLINE mat computeCovarianceMatrix(vec const* v, size_t n, vec const& c); - - /// Compute a covariance matrix form a pair of iterators `b` (begin) and `e` (end) of a container with relative coordinates (e.g., relative to the center of gravity of the object) - /// Dereferencing an iterator of type I must yield a `vec<D, T, Q%gt;` - template - GLM_FUNC_DECL mat computeCovarianceMatrix(I const& b, I const& e); - - /// Compute a covariance matrix form a pair of iterators `b` (begin) and `e` (end) of a container with absolute coordinates and a precomputed center of gravity `c` - /// Dereferencing an iterator of type I must yield a `vec<D, T, Q%gt;` - template - GLM_FUNC_DECL mat computeCovarianceMatrix(I const& b, I const& e, vec const& c); - - /// Assuming the provided covariance matrix `covarMat` is symmetric and real-valued, this function find the `D` Eigenvalues of the matrix, and also provides the corresponding Eigenvectors. - /// Note: the data in `outEigenvalues` and `outEigenvectors` are in matching order, i.e. `outEigenvector[i]` is the Eigenvector of the Eigenvalue `outEigenvalue[i]`. - /// This is a numeric implementation to find the Eigenvalues, using 'QL decomposition` (variant of QR decomposition: https://en.wikipedia.org/wiki/QR_decomposition). - /// @param covarMat A symmetric, real-valued covariance matrix, e.g. computed from `computeCovarianceMatrix`. - /// @param outEigenvalues Vector to receive the found eigenvalues - /// @param outEigenvectors Matrix to receive the found eigenvectors corresponding to the found eigenvalues, as column vectors - /// @return The number of eigenvalues found, usually D if the precondition of the covariance matrix is met. - template - GLM_FUNC_DECL unsigned int findEigenvaluesSymReal - ( - mat const& covarMat, - vec& outEigenvalues, - mat& outEigenvectors - ); - - /// Sorts a group of Eigenvalues&Eigenvectors, for largest Eigenvalue to smallest Eigenvalue. - /// The data in `outEigenvalues` and `outEigenvectors` are assumed to be matching order, i.e. `outEigenvector[i]` is the Eigenvector of the Eigenvalue `outEigenvalue[i]`. - template - GLM_INLINE void sortEigenvalues(vec<2, T, Q>& eigenvalues, mat<2, 2, T, Q>& eigenvectors); - - /// Sorts a group of Eigenvalues&Eigenvectors, for largest Eigenvalue to smallest Eigenvalue. - /// The data in `outEigenvalues` and `outEigenvectors` are assumed to be matching order, i.e. `outEigenvector[i]` is the Eigenvector of the Eigenvalue `outEigenvalue[i]`. - template - GLM_INLINE void sortEigenvalues(vec<3, T, Q>& eigenvalues, mat<3, 3, T, Q>& eigenvectors); - - /// Sorts a group of Eigenvalues&Eigenvectors, for largest Eigenvalue to smallest Eigenvalue. - /// The data in `outEigenvalues` and `outEigenvectors` are assumed to be matching order, i.e. `outEigenvector[i]` is the Eigenvector of the Eigenvalue `outEigenvalue[i]`. - template - GLM_INLINE void sortEigenvalues(vec<4, T, Q>& eigenvalues, mat<4, 4, T, Q>& eigenvectors); - - /// @} -}//namespace glm - -#include "pca.inl" diff --git a/src/vendor/glm/gtx/pca.inl b/src/vendor/glm/gtx/pca.inl deleted file mode 100755 index d5a24b7..0000000 --- a/src/vendor/glm/gtx/pca.inl +++ /dev/null @@ -1,343 +0,0 @@ -/// @ref gtx_pca - -#ifndef GLM_HAS_CXX11_STL -#include -#else -#include -#endif - -namespace glm { - - - template - GLM_INLINE mat computeCovarianceMatrix(vec const* v, size_t n) - { - return computeCovarianceMatrix const*>(v, v + n); - } - - - template - GLM_INLINE mat computeCovarianceMatrix(vec const* v, size_t n, vec const& c) - { - return computeCovarianceMatrix const*>(v, v + n, c); - } - - - template - GLM_FUNC_DECL mat computeCovarianceMatrix(I const& b, I const& e) - { - glm::mat m(0); - - size_t cnt = 0; - for(I i = b; i != e; i++) - { - vec const& v = *i; - for(length_t x = 0; x < D; ++x) - for(length_t y = 0; y < D; ++y) - m[x][y] += static_cast(v[x] * v[y]); - cnt++; - } - if(cnt > 0) - m /= static_cast(cnt); - - return m; - } - - - template - GLM_FUNC_DECL mat computeCovarianceMatrix(I const& b, I const& e, vec const& c) - { - glm::mat m(0); - glm::vec v; - - size_t cnt = 0; - for(I i = b; i != e; i++) - { - v = *i - c; - for(length_t x = 0; x < D; ++x) - for(length_t y = 0; y < D; ++y) - m[x][y] += static_cast(v[x] * v[y]); - cnt++; - } - if(cnt > 0) - m /= static_cast(cnt); - - return m; - } - - namespace _internal_ - { - - template - GLM_INLINE T transferSign(T const& v, T const& s) - { - return ((s) >= 0 ? glm::abs(v) : -glm::abs(v)); - } - - template - GLM_INLINE T pythag(T const& a, T const& b) { - static const T epsilon = static_cast(0.0000001); - T absa = glm::abs(a); - T absb = glm::abs(b); - if(absa > absb) { - absb /= absa; - absb *= absb; - return absa * glm::sqrt(static_cast(1) + absb); - } - if(glm::equal(absb, 0, epsilon)) return static_cast(0); - absa /= absb; - absa *= absa; - return absb * glm::sqrt(static_cast(1) + absa); - } - - } - - template - GLM_FUNC_DECL unsigned int findEigenvaluesSymReal - ( - mat const& covarMat, - vec& outEigenvalues, - mat& outEigenvectors - ) - { - using _internal_::transferSign; - using _internal_::pythag; - - T a[D * D]; // matrix -- input and workspace for algorithm (will be changed inplace) - T d[D]; // diagonal elements - T e[D]; // off-diagonal elements - - for(length_t r = 0; r < D; r++) - for(length_t c = 0; c < D; c++) - a[(r) * D + (c)] = covarMat[c][r]; - - // 1. Householder reduction. - length_t l, k, j, i; - T scale, hh, h, g, f; - static const T epsilon = static_cast(0.0000001); - - for(i = D; i >= 2; i--) - { - l = i - 1; - h = scale = 0; - if(l > 1) - { - for(k = 1; k <= l; k++) - { - scale += glm::abs(a[(i - 1) * D + (k - 1)]); - } - if(glm::equal(scale, 0, epsilon)) - { - e[i - 1] = a[(i - 1) * D + (l - 1)]; - } - else - { - for(k = 1; k <= l; k++) - { - a[(i - 1) * D + (k - 1)] /= scale; - h += a[(i - 1) * D + (k - 1)] * a[(i - 1) * D + (k - 1)]; - } - f = a[(i - 1) * D + (l - 1)]; - g = ((f >= 0) ? -glm::sqrt(h) : glm::sqrt(h)); - e[i - 1] = scale * g; - h -= f * g; - a[(i - 1) * D + (l - 1)] = f - g; - f = 0; - for(j = 1; j <= l; j++) - { - a[(j - 1) * D + (i - 1)] = a[(i - 1) * D + (j - 1)] / h; - g = 0; - for(k = 1; k <= j; k++) - { - g += a[(j - 1) * D + (k - 1)] * a[(i - 1) * D + (k - 1)]; - } - for(k = j + 1; k <= l; k++) - { - g += a[(k - 1) * D + (j - 1)] * a[(i - 1) * D + (k - 1)]; - } - e[j - 1] = g / h; - f += e[j - 1] * a[(i - 1) * D + (j - 1)]; - } - hh = f / (h + h); - for(j = 1; j <= l; j++) - { - f = a[(i - 1) * D + (j - 1)]; - e[j - 1] = g = e[j - 1] - hh * f; - for(k = 1; k <= j; k++) - { - a[(j - 1) * D + (k - 1)] -= (f * e[k - 1] + g * a[(i - 1) * D + (k - 1)]); - } - } - } - } - else - { - e[i - 1] = a[(i - 1) * D + (l - 1)]; - } - d[i - 1] = h; - } - d[0] = 0; - e[0] = 0; - for(i = 1; i <= D; i++) - { - l = i - 1; - if(!glm::equal(d[i - 1], 0, epsilon)) - { - for(j = 1; j <= l; j++) - { - g = 0; - for(k = 1; k <= l; k++) - { - g += a[(i - 1) * D + (k - 1)] * a[(k - 1) * D + (j - 1)]; - } - for(k = 1; k <= l; k++) - { - a[(k - 1) * D + (j - 1)] -= g * a[(k - 1) * D + (i - 1)]; - } - } - } - d[i - 1] = a[(i - 1) * D + (i - 1)]; - a[(i - 1) * D + (i - 1)] = 1; - for(j = 1; j <= l; j++) - { - a[(j - 1) * D + (i - 1)] = a[(i - 1) * D + (j - 1)] = 0; - } - } - - // 2. Calculation of eigenvalues and eigenvectors (QL algorithm) - length_t m, iter; - T s, r, p, dd, c, b; - const length_t MAX_ITER = 30; - - for(i = 2; i <= D; i++) - { - e[i - 2] = e[i - 1]; - } - e[D - 1] = 0; - - for(l = 1; l <= D; l++) - { - iter = 0; - do - { - for(m = l; m <= D - 1; m++) - { - dd = glm::abs(d[m - 1]) + glm::abs(d[m - 1 + 1]); - if(glm::equal(glm::abs(e[m - 1]) + dd, dd, epsilon)) - break; - } - if(m != l) - { - if(iter++ == MAX_ITER) - { - return 0; // Too many iterations in FindEigenvalues - } - g = (d[l - 1 + 1] - d[l - 1]) / (2 * e[l - 1]); - r = pythag(g, 1); - g = d[m - 1] - d[l - 1] + e[l - 1] / (g + transferSign(r, g)); - s = c = 1; - p = 0; - for(i = m - 1; i >= l; i--) - { - f = s * e[i - 1]; - b = c * e[i - 1]; - e[i - 1 + 1] = r = pythag(f, g); - if(glm::equal(r, 0, epsilon)) - { - d[i - 1 + 1] -= p; - e[m - 1] = 0; - break; - } - s = f / r; - c = g / r; - g = d[i - 1 + 1] - p; - r = (d[i - 1] - g) * s + 2 * c * b; - d[i - 1 + 1] = g + (p = s * r); - g = c * r - b; - for(k = 1; k <= D; k++) - { - f = a[(k - 1) * D + (i - 1 + 1)]; - a[(k - 1) * D + (i - 1 + 1)] = s * a[(k - 1) * D + (i - 1)] + c * f; - a[(k - 1) * D + (i - 1)] = c * a[(k - 1) * D + (i - 1)] - s * f; - } - } - if(glm::equal(r, 0, epsilon) && (i >= l)) - continue; - d[l - 1] -= p; - e[l - 1] = g; - e[m - 1] = 0; - } - } while(m != l); - } - - // 3. output - for(i = 0; i < D; i++) - outEigenvalues[i] = d[i]; - for(i = 0; i < D; i++) - for(j = 0; j < D; j++) - outEigenvectors[i][j] = a[(j) * D + (i)]; - - return D; - } - - template - GLM_INLINE void sortEigenvalues(vec<2, T, Q>& eigenvalues, mat<2, 2, T, Q>& eigenvectors) - { - if (eigenvalues[0] < eigenvalues[1]) - { - std::swap(eigenvalues[0], eigenvalues[1]); - std::swap(eigenvectors[0], eigenvectors[1]); - } - } - - template - GLM_INLINE void sortEigenvalues(vec<3, T, Q>& eigenvalues, mat<3, 3, T, Q>& eigenvectors) - { - if (eigenvalues[0] < eigenvalues[1]) - { - std::swap(eigenvalues[0], eigenvalues[1]); - std::swap(eigenvectors[0], eigenvectors[1]); - } - if (eigenvalues[0] < eigenvalues[2]) - { - std::swap(eigenvalues[0], eigenvalues[2]); - std::swap(eigenvectors[0], eigenvectors[2]); - } - if (eigenvalues[1] < eigenvalues[2]) - { - std::swap(eigenvalues[1], eigenvalues[2]); - std::swap(eigenvectors[1], eigenvectors[2]); - } - } - - template - GLM_INLINE void sortEigenvalues(vec<4, T, Q>& eigenvalues, mat<4, 4, T, Q>& eigenvectors) - { - if (eigenvalues[0] < eigenvalues[2]) - { - std::swap(eigenvalues[0], eigenvalues[2]); - std::swap(eigenvectors[0], eigenvectors[2]); - } - if (eigenvalues[1] < eigenvalues[3]) - { - std::swap(eigenvalues[1], eigenvalues[3]); - std::swap(eigenvectors[1], eigenvectors[3]); - } - if (eigenvalues[0] < eigenvalues[1]) - { - std::swap(eigenvalues[0], eigenvalues[1]); - std::swap(eigenvectors[0], eigenvectors[1]); - } - if (eigenvalues[2] < eigenvalues[3]) - { - std::swap(eigenvalues[2], eigenvalues[3]); - std::swap(eigenvectors[2], eigenvectors[3]); - } - if (eigenvalues[1] < eigenvalues[2]) - { - std::swap(eigenvalues[1], eigenvalues[2]); - std::swap(eigenvectors[1], eigenvectors[2]); - } - } - -}//namespace glm diff --git a/src/vendor/glm/gtx/perpendicular.hpp b/src/vendor/glm/gtx/perpendicular.hpp deleted file mode 100755 index 72b77b6..0000000 --- a/src/vendor/glm/gtx/perpendicular.hpp +++ /dev/null @@ -1,41 +0,0 @@ -/// @ref gtx_perpendicular -/// @file glm/gtx/perpendicular.hpp -/// -/// @see core (dependence) -/// @see gtx_projection (dependence) -/// -/// @defgroup gtx_perpendicular GLM_GTX_perpendicular -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Perpendicular of a vector from other one - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtx/projection.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_perpendicular is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_perpendicular extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_perpendicular - /// @{ - - //! Projects x a perpendicular axis of Normal. - //! From GLM_GTX_perpendicular extension. - template - GLM_FUNC_DECL genType perp(genType const& x, genType const& Normal); - - /// @} -}//namespace glm - -#include "perpendicular.inl" diff --git a/src/vendor/glm/gtx/perpendicular.inl b/src/vendor/glm/gtx/perpendicular.inl deleted file mode 100755 index 1e72f33..0000000 --- a/src/vendor/glm/gtx/perpendicular.inl +++ /dev/null @@ -1,10 +0,0 @@ -/// @ref gtx_perpendicular - -namespace glm -{ - template - GLM_FUNC_QUALIFIER genType perp(genType const& x, genType const& Normal) - { - return x - proj(x, Normal); - } -}//namespace glm diff --git a/src/vendor/glm/gtx/polar_coordinates.hpp b/src/vendor/glm/gtx/polar_coordinates.hpp deleted file mode 100755 index 76beb82..0000000 --- a/src/vendor/glm/gtx/polar_coordinates.hpp +++ /dev/null @@ -1,48 +0,0 @@ -/// @ref gtx_polar_coordinates -/// @file glm/gtx/polar_coordinates.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_polar_coordinates GLM_GTX_polar_coordinates -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Conversion from Euclidean space to polar space and revert. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_polar_coordinates is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_polar_coordinates extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_polar_coordinates - /// @{ - - /// Convert Euclidean to Polar coordinates, x is the latitude, y the longitude and z the xz distance. - /// - /// @see gtx_polar_coordinates - template - GLM_FUNC_DECL vec<3, T, Q> polar( - vec<3, T, Q> const& euclidean); - - /// Convert Polar to Euclidean coordinates. - /// - /// @see gtx_polar_coordinates - template - GLM_FUNC_DECL vec<3, T, Q> euclidean( - vec<2, T, Q> const& polar); - - /// @} -}//namespace glm - -#include "polar_coordinates.inl" diff --git a/src/vendor/glm/gtx/polar_coordinates.inl b/src/vendor/glm/gtx/polar_coordinates.inl deleted file mode 100755 index 371c8dd..0000000 --- a/src/vendor/glm/gtx/polar_coordinates.inl +++ /dev/null @@ -1,36 +0,0 @@ -/// @ref gtx_polar_coordinates - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> polar - ( - vec<3, T, Q> const& euclidean - ) - { - T const Length(length(euclidean)); - vec<3, T, Q> const tmp(euclidean / Length); - T const xz_dist(sqrt(tmp.x * tmp.x + tmp.z * tmp.z)); - - return vec<3, T, Q>( - asin(tmp.y), // latitude - atan(tmp.x, tmp.z), // longitude - xz_dist); // xz distance - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> euclidean - ( - vec<2, T, Q> const& polar - ) - { - T const latitude(polar.x); - T const longitude(polar.y); - - return vec<3, T, Q>( - cos(latitude) * sin(longitude), - sin(latitude), - cos(latitude) * cos(longitude)); - } - -}//namespace glm diff --git a/src/vendor/glm/gtx/projection.hpp b/src/vendor/glm/gtx/projection.hpp deleted file mode 100755 index 678f3ad..0000000 --- a/src/vendor/glm/gtx/projection.hpp +++ /dev/null @@ -1,43 +0,0 @@ -/// @ref gtx_projection -/// @file glm/gtx/projection.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_projection GLM_GTX_projection -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Projection of a vector to other one - -#pragma once - -// Dependency: -#include "../geometric.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_projection is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_projection extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_projection - /// @{ - - /// Projects x on Normal. - /// - /// @param[in] x A vector to project - /// @param[in] Normal A normal that doesn't need to be of unit length. - /// - /// @see gtx_projection - template - GLM_FUNC_DECL genType proj(genType const& x, genType const& Normal); - - /// @} -}//namespace glm - -#include "projection.inl" diff --git a/src/vendor/glm/gtx/projection.inl b/src/vendor/glm/gtx/projection.inl deleted file mode 100755 index f23f884..0000000 --- a/src/vendor/glm/gtx/projection.inl +++ /dev/null @@ -1,10 +0,0 @@ -/// @ref gtx_projection - -namespace glm -{ - template - GLM_FUNC_QUALIFIER genType proj(genType const& x, genType const& Normal) - { - return glm::dot(x, Normal) / glm::dot(Normal, Normal) * Normal; - } -}//namespace glm diff --git a/src/vendor/glm/gtx/quaternion.hpp b/src/vendor/glm/gtx/quaternion.hpp deleted file mode 100755 index 5c2b5ad..0000000 --- a/src/vendor/glm/gtx/quaternion.hpp +++ /dev/null @@ -1,174 +0,0 @@ -/// @ref gtx_quaternion -/// @file glm/gtx/quaternion.hpp -/// -/// @see core (dependence) -/// @see gtx_extented_min_max (dependence) -/// -/// @defgroup gtx_quaternion GLM_GTX_quaternion -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Extented quaternion types and functions - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/constants.hpp" -#include "../gtc/quaternion.hpp" -#include "../ext/quaternion_exponential.hpp" -#include "../gtx/norm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_quaternion is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_quaternion extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_quaternion - /// @{ - - /// Create an identity quaternion. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL GLM_CONSTEXPR qua quat_identity(); - - /// Compute a cross product between a quaternion and a vector. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL vec<3, T, Q> cross( - qua const& q, - vec<3, T, Q> const& v); - - //! Compute a cross product between a vector and a quaternion. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL vec<3, T, Q> cross( - vec<3, T, Q> const& v, - qua const& q); - - //! Compute a point on a path according squad equation. - //! q1 and q2 are control points; s1 and s2 are intermediate control points. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL qua squad( - qua const& q1, - qua const& q2, - qua const& s1, - qua const& s2, - T const& h); - - //! Returns an intermediate control point for squad interpolation. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL qua intermediate( - qua const& prev, - qua const& curr, - qua const& next); - - //! Returns quarternion square root. - /// - /// @see gtx_quaternion - //template - //qua sqrt( - // qua const& q); - - //! Rotates a 3 components vector by a quaternion. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL vec<3, T, Q> rotate( - qua const& q, - vec<3, T, Q> const& v); - - /// Rotates a 4 components vector by a quaternion. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL vec<4, T, Q> rotate( - qua const& q, - vec<4, T, Q> const& v); - - /// Extract the real component of a quaternion. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL T extractRealComponent( - qua const& q); - - /// Converts a quaternion to a 3 * 3 matrix. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL mat<3, 3, T, Q> toMat3( - qua const& x){return mat3_cast(x);} - - /// Converts a quaternion to a 4 * 4 matrix. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL mat<4, 4, T, Q> toMat4( - qua const& x){return mat4_cast(x);} - - /// Converts a 3 * 3 matrix to a quaternion. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL qua toQuat( - mat<3, 3, T, Q> const& x){return quat_cast(x);} - - /// Converts a 4 * 4 matrix to a quaternion. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL qua toQuat( - mat<4, 4, T, Q> const& x){return quat_cast(x);} - - /// Quaternion interpolation using the rotation short path. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL qua shortMix( - qua const& x, - qua const& y, - T const& a); - - /// Quaternion normalized linear interpolation. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL qua fastMix( - qua const& x, - qua const& y, - T const& a); - - /// Compute the rotation between two vectors. - /// @param orig vector, needs to be normalized - /// @param dest vector, needs to be normalized - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL qua rotation( - vec<3, T, Q> const& orig, - vec<3, T, Q> const& dest); - - /// Returns the squared length of x. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL GLM_CONSTEXPR T length2(qua const& q); - - /// @} -}//namespace glm - -#include "quaternion.inl" diff --git a/src/vendor/glm/gtx/quaternion.inl b/src/vendor/glm/gtx/quaternion.inl deleted file mode 100755 index d125bcc..0000000 --- a/src/vendor/glm/gtx/quaternion.inl +++ /dev/null @@ -1,159 +0,0 @@ -/// @ref gtx_quaternion - -#include -#include "../gtc/constants.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua quat_identity() - { - return qua(static_cast(1), static_cast(0), static_cast(0), static_cast(0)); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> cross(vec<3, T, Q> const& v, qua const& q) - { - return inverse(q) * v; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> cross(qua const& q, vec<3, T, Q> const& v) - { - return q * v; - } - - template - GLM_FUNC_QUALIFIER qua squad - ( - qua const& q1, - qua const& q2, - qua const& s1, - qua const& s2, - T const& h) - { - return mix(mix(q1, q2, h), mix(s1, s2, h), static_cast(2) * (static_cast(1) - h) * h); - } - - template - GLM_FUNC_QUALIFIER qua intermediate - ( - qua const& prev, - qua const& curr, - qua const& next - ) - { - qua invQuat = inverse(curr); - return exp((log(next * invQuat) + log(prev * invQuat)) / static_cast(-4)) * curr; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rotate(qua const& q, vec<3, T, Q> const& v) - { - return q * v; - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> rotate(qua const& q, vec<4, T, Q> const& v) - { - return q * v; - } - - template - GLM_FUNC_QUALIFIER T extractRealComponent(qua const& q) - { - T w = static_cast(1) - q.x * q.x - q.y * q.y - q.z * q.z; - if(w < T(0)) - return T(0); - else - return -sqrt(w); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T length2(qua const& q) - { - return q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w; - } - - template - GLM_FUNC_QUALIFIER qua shortMix(qua const& x, qua const& y, T const& a) - { - if(a <= static_cast(0)) return x; - if(a >= static_cast(1)) return y; - - T fCos = dot(x, y); - qua y2(y); //BUG!!! qua y2; - if(fCos < static_cast(0)) - { - y2 = -y; - fCos = -fCos; - } - - //if(fCos > 1.0f) // problem - T k0, k1; - if(fCos > (static_cast(1) - epsilon())) - { - k0 = static_cast(1) - a; - k1 = static_cast(0) + a; //BUG!!! 1.0f + a; - } - else - { - T fSin = sqrt(T(1) - fCos * fCos); - T fAngle = atan(fSin, fCos); - T fOneOverSin = static_cast(1) / fSin; - k0 = sin((static_cast(1) - a) * fAngle) * fOneOverSin; - k1 = sin((static_cast(0) + a) * fAngle) * fOneOverSin; - } - - return qua( - k0 * x.w + k1 * y2.w, - k0 * x.x + k1 * y2.x, - k0 * x.y + k1 * y2.y, - k0 * x.z + k1 * y2.z); - } - - template - GLM_FUNC_QUALIFIER qua fastMix(qua const& x, qua const& y, T const& a) - { - return glm::normalize(x * (static_cast(1) - a) + (y * a)); - } - - template - GLM_FUNC_QUALIFIER qua rotation(vec<3, T, Q> const& orig, vec<3, T, Q> const& dest) - { - T cosTheta = dot(orig, dest); - vec<3, T, Q> rotationAxis; - - if(cosTheta >= static_cast(1) - epsilon()) { - // orig and dest point in the same direction - return quat_identity(); - } - - if(cosTheta < static_cast(-1) + epsilon()) - { - // special case when vectors in opposite directions : - // there is no "ideal" rotation axis - // So guess one; any will do as long as it's perpendicular to start - // This implementation favors a rotation around the Up axis (Y), - // since it's often what you want to do. - rotationAxis = cross(vec<3, T, Q>(0, 0, 1), orig); - if(length2(rotationAxis) < epsilon()) // bad luck, they were parallel, try again! - rotationAxis = cross(vec<3, T, Q>(1, 0, 0), orig); - - rotationAxis = normalize(rotationAxis); - return angleAxis(pi(), rotationAxis); - } - - // Implementation from Stan Melax's Game Programming Gems 1 article - rotationAxis = cross(orig, dest); - - T s = sqrt((T(1) + cosTheta) * static_cast(2)); - T invs = static_cast(1) / s; - - return qua( - s * static_cast(0.5f), - rotationAxis.x * invs, - rotationAxis.y * invs, - rotationAxis.z * invs); - } -}//namespace glm diff --git a/src/vendor/glm/gtx/range.hpp b/src/vendor/glm/gtx/range.hpp deleted file mode 100755 index 93bcb9a..0000000 --- a/src/vendor/glm/gtx/range.hpp +++ /dev/null @@ -1,98 +0,0 @@ -/// @ref gtx_range -/// @file glm/gtx/range.hpp -/// @author Joshua Moerman -/// -/// @defgroup gtx_range GLM_GTX_range -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Defines begin and end for vectors and matrices. Useful for range-based for loop. -/// The range is defined over the elements, not over columns or rows (e.g. mat4 has 16 elements). - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_range is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_range extension included") -# endif -#endif - -#include "../gtc/type_ptr.hpp" -#include "../gtc/vec1.hpp" - -namespace glm -{ - /// @addtogroup gtx_range - /// @{ - -# if GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(push) -# pragma warning(disable : 4100) // unreferenced formal parameter -# endif - - template - inline length_t components(vec<1, T, Q> const& v) - { - return v.length(); - } - - template - inline length_t components(vec<2, T, Q> const& v) - { - return v.length(); - } - - template - inline length_t components(vec<3, T, Q> const& v) - { - return v.length(); - } - - template - inline length_t components(vec<4, T, Q> const& v) - { - return v.length(); - } - - template - inline length_t components(genType const& m) - { - return m.length() * m[0].length(); - } - - template - inline typename genType::value_type const * begin(genType const& v) - { - return value_ptr(v); - } - - template - inline typename genType::value_type const * end(genType const& v) - { - return begin(v) + components(v); - } - - template - inline typename genType::value_type * begin(genType& v) - { - return value_ptr(v); - } - - template - inline typename genType::value_type * end(genType& v) - { - return begin(v) + components(v); - } - -# if GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(pop) -# endif - - /// @} -}//namespace glm diff --git a/src/vendor/glm/gtx/raw_data.hpp b/src/vendor/glm/gtx/raw_data.hpp deleted file mode 100755 index 86cbe77..0000000 --- a/src/vendor/glm/gtx/raw_data.hpp +++ /dev/null @@ -1,51 +0,0 @@ -/// @ref gtx_raw_data -/// @file glm/gtx/raw_data.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_raw_data GLM_GTX_raw_data -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Projection of a vector to other one - -#pragma once - -// Dependencies -#include "../ext/scalar_uint_sized.hpp" -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_raw_data is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_raw_data extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_raw_data - /// @{ - - //! Type for byte numbers. - //! From GLM_GTX_raw_data extension. - typedef detail::uint8 byte; - - //! Type for word numbers. - //! From GLM_GTX_raw_data extension. - typedef detail::uint16 word; - - //! Type for dword numbers. - //! From GLM_GTX_raw_data extension. - typedef detail::uint32 dword; - - //! Type for qword numbers. - //! From GLM_GTX_raw_data extension. - typedef detail::uint64 qword; - - /// @} -}// namespace glm - -#include "raw_data.inl" diff --git a/src/vendor/glm/gtx/raw_data.inl b/src/vendor/glm/gtx/raw_data.inl deleted file mode 100755 index c740317..0000000 --- a/src/vendor/glm/gtx/raw_data.inl +++ /dev/null @@ -1,2 +0,0 @@ -/// @ref gtx_raw_data - diff --git a/src/vendor/glm/gtx/rotate_normalized_axis.hpp b/src/vendor/glm/gtx/rotate_normalized_axis.hpp deleted file mode 100755 index 2103ca0..0000000 --- a/src/vendor/glm/gtx/rotate_normalized_axis.hpp +++ /dev/null @@ -1,68 +0,0 @@ -/// @ref gtx_rotate_normalized_axis -/// @file glm/gtx/rotate_normalized_axis.hpp -/// -/// @see core (dependence) -/// @see gtc_matrix_transform -/// @see gtc_quaternion -/// -/// @defgroup gtx_rotate_normalized_axis GLM_GTX_rotate_normalized_axis -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Quaternions and matrices rotations around normalized axis. - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/epsilon.hpp" -#include "../gtc/quaternion.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_rotate_normalized_axis is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_rotate_normalized_axis extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_rotate_normalized_axis - /// @{ - - /// Builds a rotation 4 * 4 matrix created from a normalized axis and an angle. - /// - /// @param m Input matrix multiplied by this rotation matrix. - /// @param angle Rotation angle expressed in radians. - /// @param axis Rotation axis, must be normalized. - /// @tparam T Value type used to build the matrix. Currently supported: half (not recommended), float or double. - /// - /// @see gtx_rotate_normalized_axis - /// @see - rotate(T angle, T x, T y, T z) - /// @see - rotate(mat<4, 4, T, Q> const& m, T angle, T x, T y, T z) - /// @see - rotate(T angle, vec<3, T, Q> const& v) - template - GLM_FUNC_DECL mat<4, 4, T, Q> rotateNormalizedAxis( - mat<4, 4, T, Q> const& m, - T const& angle, - vec<3, T, Q> const& axis); - - /// Rotates a quaternion from a vector of 3 components normalized axis and an angle. - /// - /// @param q Source orientation - /// @param angle Angle expressed in radians. - /// @param axis Normalized axis of the rotation, must be normalized. - /// - /// @see gtx_rotate_normalized_axis - template - GLM_FUNC_DECL qua rotateNormalizedAxis( - qua const& q, - T const& angle, - vec<3, T, Q> const& axis); - - /// @} -}//namespace glm - -#include "rotate_normalized_axis.inl" diff --git a/src/vendor/glm/gtx/rotate_normalized_axis.inl b/src/vendor/glm/gtx/rotate_normalized_axis.inl deleted file mode 100755 index b2e9278..0000000 --- a/src/vendor/glm/gtx/rotate_normalized_axis.inl +++ /dev/null @@ -1,58 +0,0 @@ -/// @ref gtx_rotate_normalized_axis - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rotateNormalizedAxis - ( - mat<4, 4, T, Q> const& m, - T const& angle, - vec<3, T, Q> const& v - ) - { - T const a = angle; - T const c = cos(a); - T const s = sin(a); - - vec<3, T, Q> const axis(v); - - vec<3, T, Q> const temp((static_cast(1) - c) * axis); - - mat<4, 4, T, Q> Rotate; - Rotate[0][0] = c + temp[0] * axis[0]; - Rotate[0][1] = 0 + temp[0] * axis[1] + s * axis[2]; - Rotate[0][2] = 0 + temp[0] * axis[2] - s * axis[1]; - - Rotate[1][0] = 0 + temp[1] * axis[0] - s * axis[2]; - Rotate[1][1] = c + temp[1] * axis[1]; - Rotate[1][2] = 0 + temp[1] * axis[2] + s * axis[0]; - - Rotate[2][0] = 0 + temp[2] * axis[0] + s * axis[1]; - Rotate[2][1] = 0 + temp[2] * axis[1] - s * axis[0]; - Rotate[2][2] = c + temp[2] * axis[2]; - - mat<4, 4, T, Q> Result; - Result[0] = m[0] * Rotate[0][0] + m[1] * Rotate[0][1] + m[2] * Rotate[0][2]; - Result[1] = m[0] * Rotate[1][0] + m[1] * Rotate[1][1] + m[2] * Rotate[1][2]; - Result[2] = m[0] * Rotate[2][0] + m[1] * Rotate[2][1] + m[2] * Rotate[2][2]; - Result[3] = m[3]; - return Result; - } - - template - GLM_FUNC_QUALIFIER qua rotateNormalizedAxis - ( - qua const& q, - T const& angle, - vec<3, T, Q> const& v - ) - { - vec<3, T, Q> const Tmp(v); - - T const AngleRad(angle); - T const Sin = sin(AngleRad * T(0.5)); - - return q * qua(cos(AngleRad * static_cast(0.5)), Tmp.x * Sin, Tmp.y * Sin, Tmp.z * Sin); - //return gtc::quaternion::cross(q, tquat(cos(AngleRad * T(0.5)), Tmp.x * fSin, Tmp.y * fSin, Tmp.z * fSin)); - } -}//namespace glm diff --git a/src/vendor/glm/gtx/rotate_vector.hpp b/src/vendor/glm/gtx/rotate_vector.hpp deleted file mode 100755 index dcd5b95..0000000 --- a/src/vendor/glm/gtx/rotate_vector.hpp +++ /dev/null @@ -1,123 +0,0 @@ -/// @ref gtx_rotate_vector -/// @file glm/gtx/rotate_vector.hpp -/// -/// @see core (dependence) -/// @see gtx_transform (dependence) -/// -/// @defgroup gtx_rotate_vector GLM_GTX_rotate_vector -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Function to directly rotate a vector - -#pragma once - -// Dependency: -#include "../gtx/transform.hpp" -#include "../gtc/epsilon.hpp" -#include "../ext/vector_relational.hpp" -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_rotate_vector is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_rotate_vector extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_rotate_vector - /// @{ - - /// Returns Spherical interpolation between two vectors - /// - /// @param x A first vector - /// @param y A second vector - /// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1]. - /// - /// @see gtx_rotate_vector - template - GLM_FUNC_DECL vec<3, T, Q> slerp( - vec<3, T, Q> const& x, - vec<3, T, Q> const& y, - T const& a); - - //! Rotate a two dimensional vector. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<2, T, Q> rotate( - vec<2, T, Q> const& v, - T const& angle); - - //! Rotate a three dimensional vector around an axis. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<3, T, Q> rotate( - vec<3, T, Q> const& v, - T const& angle, - vec<3, T, Q> const& normal); - - //! Rotate a four dimensional vector around an axis. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<4, T, Q> rotate( - vec<4, T, Q> const& v, - T const& angle, - vec<3, T, Q> const& normal); - - //! Rotate a three dimensional vector around the X axis. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<3, T, Q> rotateX( - vec<3, T, Q> const& v, - T const& angle); - - //! Rotate a three dimensional vector around the Y axis. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<3, T, Q> rotateY( - vec<3, T, Q> const& v, - T const& angle); - - //! Rotate a three dimensional vector around the Z axis. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<3, T, Q> rotateZ( - vec<3, T, Q> const& v, - T const& angle); - - //! Rotate a four dimensional vector around the X axis. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<4, T, Q> rotateX( - vec<4, T, Q> const& v, - T const& angle); - - //! Rotate a four dimensional vector around the Y axis. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<4, T, Q> rotateY( - vec<4, T, Q> const& v, - T const& angle); - - //! Rotate a four dimensional vector around the Z axis. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<4, T, Q> rotateZ( - vec<4, T, Q> const& v, - T const& angle); - - //! Build a rotation matrix from a normal and a up vector. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> orientation( - vec<3, T, Q> const& Normal, - vec<3, T, Q> const& Up); - - /// @} -}//namespace glm - -#include "rotate_vector.inl" diff --git a/src/vendor/glm/gtx/rotate_vector.inl b/src/vendor/glm/gtx/rotate_vector.inl deleted file mode 100755 index f8136e7..0000000 --- a/src/vendor/glm/gtx/rotate_vector.inl +++ /dev/null @@ -1,187 +0,0 @@ -/// @ref gtx_rotate_vector - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> slerp - ( - vec<3, T, Q> const& x, - vec<3, T, Q> const& y, - T const& a - ) - { - // get cosine of angle between vectors (-1 -> 1) - T CosAlpha = dot(x, y); - // get angle (0 -> pi) - T Alpha = acos(CosAlpha); - // get sine of angle between vectors (0 -> 1) - T SinAlpha = sin(Alpha); - // this breaks down when SinAlpha = 0, i.e. Alpha = 0 or pi - T t1 = sin((static_cast(1) - a) * Alpha) / SinAlpha; - T t2 = sin(a * Alpha) / SinAlpha; - - // interpolate src vectors - return x * t1 + y * t2; - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> rotate - ( - vec<2, T, Q> const& v, - T const& angle - ) - { - vec<2, T, Q> Result; - T const Cos(cos(angle)); - T const Sin(sin(angle)); - - Result.x = v.x * Cos - v.y * Sin; - Result.y = v.x * Sin + v.y * Cos; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rotate - ( - vec<3, T, Q> const& v, - T const& angle, - vec<3, T, Q> const& normal - ) - { - return mat<3, 3, T, Q>(glm::rotate(angle, normal)) * v; - } - /* - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rotateGTX( - const vec<3, T, Q>& x, - T angle, - const vec<3, T, Q>& normal) - { - const T Cos = cos(radians(angle)); - const T Sin = sin(radians(angle)); - return x * Cos + ((x * normal) * (T(1) - Cos)) * normal + cross(x, normal) * Sin; - } - */ - template - GLM_FUNC_QUALIFIER vec<4, T, Q> rotate - ( - vec<4, T, Q> const& v, - T const& angle, - vec<3, T, Q> const& normal - ) - { - return rotate(angle, normal) * v; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rotateX - ( - vec<3, T, Q> const& v, - T const& angle - ) - { - vec<3, T, Q> Result(v); - T const Cos(cos(angle)); - T const Sin(sin(angle)); - - Result.y = v.y * Cos - v.z * Sin; - Result.z = v.y * Sin + v.z * Cos; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rotateY - ( - vec<3, T, Q> const& v, - T const& angle - ) - { - vec<3, T, Q> Result = v; - T const Cos(cos(angle)); - T const Sin(sin(angle)); - - Result.x = v.x * Cos + v.z * Sin; - Result.z = -v.x * Sin + v.z * Cos; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rotateZ - ( - vec<3, T, Q> const& v, - T const& angle - ) - { - vec<3, T, Q> Result = v; - T const Cos(cos(angle)); - T const Sin(sin(angle)); - - Result.x = v.x * Cos - v.y * Sin; - Result.y = v.x * Sin + v.y * Cos; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> rotateX - ( - vec<4, T, Q> const& v, - T const& angle - ) - { - vec<4, T, Q> Result = v; - T const Cos(cos(angle)); - T const Sin(sin(angle)); - - Result.y = v.y * Cos - v.z * Sin; - Result.z = v.y * Sin + v.z * Cos; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> rotateY - ( - vec<4, T, Q> const& v, - T const& angle - ) - { - vec<4, T, Q> Result = v; - T const Cos(cos(angle)); - T const Sin(sin(angle)); - - Result.x = v.x * Cos + v.z * Sin; - Result.z = -v.x * Sin + v.z * Cos; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> rotateZ - ( - vec<4, T, Q> const& v, - T const& angle - ) - { - vec<4, T, Q> Result = v; - T const Cos(cos(angle)); - T const Sin(sin(angle)); - - Result.x = v.x * Cos - v.y * Sin; - Result.y = v.x * Sin + v.y * Cos; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> orientation - ( - vec<3, T, Q> const& Normal, - vec<3, T, Q> const& Up - ) - { - if(all(equal(Normal, Up, epsilon()))) - return mat<4, 4, T, Q>(static_cast(1)); - - vec<3, T, Q> RotationAxis = cross(Up, Normal); - T Angle = acos(dot(Normal, Up)); - - return rotate(Angle, RotationAxis); - } -}//namespace glm diff --git a/src/vendor/glm/gtx/scalar_multiplication.hpp b/src/vendor/glm/gtx/scalar_multiplication.hpp deleted file mode 100755 index 496ba19..0000000 --- a/src/vendor/glm/gtx/scalar_multiplication.hpp +++ /dev/null @@ -1,75 +0,0 @@ -/// @ref gtx -/// @file glm/gtx/scalar_multiplication.hpp -/// @author Joshua Moerman -/// -/// Include to use the features of this extension. -/// -/// Enables scalar multiplication for all types -/// -/// Since GLSL is very strict about types, the following (often used) combinations do not work: -/// double * vec4 -/// int * vec4 -/// vec4 / int -/// So we'll fix that! Of course "float * vec4" should remain the same (hence the enable_if magic) - -#pragma once - -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_scalar_multiplication is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_scalar_multiplication extension included") -# endif -#endif - -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include "../mat2x2.hpp" -#include - -namespace glm -{ - template - using return_type_scalar_multiplication = typename std::enable_if< - !std::is_same::value // T may not be a float - && std::is_arithmetic::value, Vec // But it may be an int or double (no vec3 or mat3, ...) - >::type; - -#define GLM_IMPLEMENT_SCAL_MULT(Vec) \ - template \ - return_type_scalar_multiplication \ - operator*(T const& s, Vec rh){ \ - return rh *= static_cast(s); \ - } \ - \ - template \ - return_type_scalar_multiplication \ - operator*(Vec lh, T const& s){ \ - return lh *= static_cast(s); \ - } \ - \ - template \ - return_type_scalar_multiplication \ - operator/(Vec lh, T const& s){ \ - return lh *= 1.0f / static_cast(s); \ - } - -GLM_IMPLEMENT_SCAL_MULT(vec2) -GLM_IMPLEMENT_SCAL_MULT(vec3) -GLM_IMPLEMENT_SCAL_MULT(vec4) - -GLM_IMPLEMENT_SCAL_MULT(mat2) -GLM_IMPLEMENT_SCAL_MULT(mat2x3) -GLM_IMPLEMENT_SCAL_MULT(mat2x4) -GLM_IMPLEMENT_SCAL_MULT(mat3x2) -GLM_IMPLEMENT_SCAL_MULT(mat3) -GLM_IMPLEMENT_SCAL_MULT(mat3x4) -GLM_IMPLEMENT_SCAL_MULT(mat4x2) -GLM_IMPLEMENT_SCAL_MULT(mat4x3) -GLM_IMPLEMENT_SCAL_MULT(mat4) - -#undef GLM_IMPLEMENT_SCAL_MULT -} // namespace glm diff --git a/src/vendor/glm/gtx/scalar_relational.hpp b/src/vendor/glm/gtx/scalar_relational.hpp deleted file mode 100755 index 8be9c57..0000000 --- a/src/vendor/glm/gtx/scalar_relational.hpp +++ /dev/null @@ -1,36 +0,0 @@ -/// @ref gtx_scalar_relational -/// @file glm/gtx/scalar_relational.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_scalar_relational GLM_GTX_scalar_relational -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Extend a position from a source to a position at a defined length. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_extend is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_extend extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_scalar_relational - /// @{ - - - - /// @} -}//namespace glm - -#include "scalar_relational.inl" diff --git a/src/vendor/glm/gtx/scalar_relational.inl b/src/vendor/glm/gtx/scalar_relational.inl deleted file mode 100755 index c2a121c..0000000 --- a/src/vendor/glm/gtx/scalar_relational.inl +++ /dev/null @@ -1,88 +0,0 @@ -/// @ref gtx_scalar_relational - -namespace glm -{ - template - GLM_FUNC_QUALIFIER bool lessThan - ( - T const& x, - T const& y - ) - { - return x < y; - } - - template - GLM_FUNC_QUALIFIER bool lessThanEqual - ( - T const& x, - T const& y - ) - { - return x <= y; - } - - template - GLM_FUNC_QUALIFIER bool greaterThan - ( - T const& x, - T const& y - ) - { - return x > y; - } - - template - GLM_FUNC_QUALIFIER bool greaterThanEqual - ( - T const& x, - T const& y - ) - { - return x >= y; - } - - template - GLM_FUNC_QUALIFIER bool equal - ( - T const& x, - T const& y - ) - { - return detail::compute_equal::is_iec559>::call(x, y); - } - - template - GLM_FUNC_QUALIFIER bool notEqual - ( - T const& x, - T const& y - ) - { - return !detail::compute_equal::is_iec559>::call(x, y); - } - - GLM_FUNC_QUALIFIER bool any - ( - bool const& x - ) - { - return x; - } - - GLM_FUNC_QUALIFIER bool all - ( - bool const& x - ) - { - return x; - } - - GLM_FUNC_QUALIFIER bool not_ - ( - bool const& x - ) - { - return !x; - } -}//namespace glm diff --git a/src/vendor/glm/gtx/spline.hpp b/src/vendor/glm/gtx/spline.hpp deleted file mode 100755 index 731c979..0000000 --- a/src/vendor/glm/gtx/spline.hpp +++ /dev/null @@ -1,65 +0,0 @@ -/// @ref gtx_spline -/// @file glm/gtx/spline.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_spline GLM_GTX_spline -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Spline functions - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtx/optimum_pow.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_spline is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_spline extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_spline - /// @{ - - /// Return a point from a catmull rom curve. - /// @see gtx_spline extension. - template - GLM_FUNC_DECL genType catmullRom( - genType const& v1, - genType const& v2, - genType const& v3, - genType const& v4, - typename genType::value_type const& s); - - /// Return a point from a hermite curve. - /// @see gtx_spline extension. - template - GLM_FUNC_DECL genType hermite( - genType const& v1, - genType const& t1, - genType const& v2, - genType const& t2, - typename genType::value_type const& s); - - /// Return a point from a cubic curve. - /// @see gtx_spline extension. - template - GLM_FUNC_DECL genType cubic( - genType const& v1, - genType const& v2, - genType const& v3, - genType const& v4, - typename genType::value_type const& s); - - /// @} -}//namespace glm - -#include "spline.inl" diff --git a/src/vendor/glm/gtx/spline.inl b/src/vendor/glm/gtx/spline.inl deleted file mode 100755 index c3fd056..0000000 --- a/src/vendor/glm/gtx/spline.inl +++ /dev/null @@ -1,60 +0,0 @@ -/// @ref gtx_spline - -namespace glm -{ - template - GLM_FUNC_QUALIFIER genType catmullRom - ( - genType const& v1, - genType const& v2, - genType const& v3, - genType const& v4, - typename genType::value_type const& s - ) - { - typename genType::value_type s2 = pow2(s); - typename genType::value_type s3 = pow3(s); - - typename genType::value_type f1 = -s3 + typename genType::value_type(2) * s2 - s; - typename genType::value_type f2 = typename genType::value_type(3) * s3 - typename genType::value_type(5) * s2 + typename genType::value_type(2); - typename genType::value_type f3 = typename genType::value_type(-3) * s3 + typename genType::value_type(4) * s2 + s; - typename genType::value_type f4 = s3 - s2; - - return (f1 * v1 + f2 * v2 + f3 * v3 + f4 * v4) / typename genType::value_type(2); - - } - - template - GLM_FUNC_QUALIFIER genType hermite - ( - genType const& v1, - genType const& t1, - genType const& v2, - genType const& t2, - typename genType::value_type const& s - ) - { - typename genType::value_type s2 = pow2(s); - typename genType::value_type s3 = pow3(s); - - typename genType::value_type f1 = typename genType::value_type(2) * s3 - typename genType::value_type(3) * s2 + typename genType::value_type(1); - typename genType::value_type f2 = typename genType::value_type(-2) * s3 + typename genType::value_type(3) * s2; - typename genType::value_type f3 = s3 - typename genType::value_type(2) * s2 + s; - typename genType::value_type f4 = s3 - s2; - - return f1 * v1 + f2 * v2 + f3 * t1 + f4 * t2; - } - - template - GLM_FUNC_QUALIFIER genType cubic - ( - genType const& v1, - genType const& v2, - genType const& v3, - genType const& v4, - typename genType::value_type const& s - ) - { - return ((v1 * s + v2) * s + v3) * s + v4; - } -}//namespace glm diff --git a/src/vendor/glm/gtx/std_based_type.hpp b/src/vendor/glm/gtx/std_based_type.hpp deleted file mode 100755 index cd3be8c..0000000 --- a/src/vendor/glm/gtx/std_based_type.hpp +++ /dev/null @@ -1,68 +0,0 @@ -/// @ref gtx_std_based_type -/// @file glm/gtx/std_based_type.hpp -/// -/// @see core (dependence) -/// @see gtx_extented_min_max (dependence) -/// -/// @defgroup gtx_std_based_type GLM_GTX_std_based_type -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Adds vector types based on STL value types. - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_std_based_type is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_std_based_type extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_std_based_type - /// @{ - - /// Vector type based of one std::size_t component. - /// @see GLM_GTX_std_based_type - typedef vec<1, std::size_t, defaultp> size1; - - /// Vector type based of two std::size_t components. - /// @see GLM_GTX_std_based_type - typedef vec<2, std::size_t, defaultp> size2; - - /// Vector type based of three std::size_t components. - /// @see GLM_GTX_std_based_type - typedef vec<3, std::size_t, defaultp> size3; - - /// Vector type based of four std::size_t components. - /// @see GLM_GTX_std_based_type - typedef vec<4, std::size_t, defaultp> size4; - - /// Vector type based of one std::size_t component. - /// @see GLM_GTX_std_based_type - typedef vec<1, std::size_t, defaultp> size1_t; - - /// Vector type based of two std::size_t components. - /// @see GLM_GTX_std_based_type - typedef vec<2, std::size_t, defaultp> size2_t; - - /// Vector type based of three std::size_t components. - /// @see GLM_GTX_std_based_type - typedef vec<3, std::size_t, defaultp> size3_t; - - /// Vector type based of four std::size_t components. - /// @see GLM_GTX_std_based_type - typedef vec<4, std::size_t, defaultp> size4_t; - - /// @} -}//namespace glm - -#include "std_based_type.inl" diff --git a/src/vendor/glm/gtx/std_based_type.inl b/src/vendor/glm/gtx/std_based_type.inl deleted file mode 100755 index 9c34bdb..0000000 --- a/src/vendor/glm/gtx/std_based_type.inl +++ /dev/null @@ -1,6 +0,0 @@ -/// @ref gtx_std_based_type - -namespace glm -{ - -} diff --git a/src/vendor/glm/gtx/string_cast.hpp b/src/vendor/glm/gtx/string_cast.hpp deleted file mode 100755 index 71f6ece..0000000 --- a/src/vendor/glm/gtx/string_cast.hpp +++ /dev/null @@ -1,46 +0,0 @@ -/// @ref gtx_string_cast -/// @file glm/gtx/string_cast.hpp -/// -/// @see core (dependence) -/// @see gtx_integer (dependence) -/// @see gtx_quaternion (dependence) -/// -/// @defgroup gtx_string_cast GLM_GTX_string_cast -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Setup strings for GLM type values - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/type_precision.hpp" -#include "../gtc/quaternion.hpp" -#include "../gtx/dual_quaternion.hpp" -#include -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_string_cast is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_string_cast extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_string_cast - /// @{ - - /// Create a string from a GLM vector or matrix typed variable. - /// @see gtx_string_cast extension. - template - GLM_FUNC_DECL std::string to_string(genType const& x); - - /// @} -}//namespace glm - -#include "string_cast.inl" diff --git a/src/vendor/glm/gtx/string_cast.inl b/src/vendor/glm/gtx/string_cast.inl deleted file mode 100755 index f67751d..0000000 --- a/src/vendor/glm/gtx/string_cast.inl +++ /dev/null @@ -1,492 +0,0 @@ -/// @ref gtx_string_cast - -#include -#include - -namespace glm{ -namespace detail -{ - template - struct cast - { - typedef T value_type; - }; - - template <> - struct cast - { - typedef double value_type; - }; - - GLM_FUNC_QUALIFIER std::string format(const char* msg, ...) - { - std::size_t const STRING_BUFFER(4096); - char text[STRING_BUFFER]; - va_list list; - - if(msg == GLM_NULLPTR) - return std::string(); - - va_start(list, msg); -# if (GLM_COMPILER & GLM_COMPILER_VC) - vsprintf_s(text, STRING_BUFFER, msg, list); -# else// - std::vsprintf(text, msg, list); -# endif// - va_end(list); - - return std::string(text); - } - - static const char* LabelTrue = "true"; - static const char* LabelFalse = "false"; - - template - struct literal - { - GLM_FUNC_QUALIFIER static char const * value() {return "%d";} - }; - - template - struct literal - { - GLM_FUNC_QUALIFIER static char const * value() {return "%f";} - }; - -# if GLM_MODEL == GLM_MODEL_32 && GLM_COMPILER && GLM_COMPILER_VC - template<> - struct literal - { - GLM_FUNC_QUALIFIER static char const * value() {return "%lld";} - }; - - template<> - struct literal - { - GLM_FUNC_QUALIFIER static char const * value() {return "%lld";} - }; -# endif//GLM_MODEL == GLM_MODEL_32 && GLM_COMPILER && GLM_COMPILER_VC - - template - struct prefix{}; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "d";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "b";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "u8";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "i8";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "u16";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "i16";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "u";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "i";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "u64";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "i64";} - }; - - template - struct compute_to_string - {}; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(vec<1, bool, Q> const& x) - { - return detail::format("bvec1(%s)", - x[0] ? detail::LabelTrue : detail::LabelFalse); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(vec<2, bool, Q> const& x) - { - return detail::format("bvec2(%s, %s)", - x[0] ? detail::LabelTrue : detail::LabelFalse, - x[1] ? detail::LabelTrue : detail::LabelFalse); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(vec<3, bool, Q> const& x) - { - return detail::format("bvec3(%s, %s, %s)", - x[0] ? detail::LabelTrue : detail::LabelFalse, - x[1] ? detail::LabelTrue : detail::LabelFalse, - x[2] ? detail::LabelTrue : detail::LabelFalse); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(vec<4, bool, Q> const& x) - { - return detail::format("bvec4(%s, %s, %s, %s)", - x[0] ? detail::LabelTrue : detail::LabelFalse, - x[1] ? detail::LabelTrue : detail::LabelFalse, - x[2] ? detail::LabelTrue : detail::LabelFalse, - x[3] ? detail::LabelTrue : detail::LabelFalse); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(vec<1, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%svec1(%s)", - PrefixStr, - LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(vec<2, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%svec2(%s, %s)", - PrefixStr, - LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0]), - static_cast::value_type>(x[1])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(vec<3, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%svec3(%s, %s, %s)", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0]), - static_cast::value_type>(x[1]), - static_cast::value_type>(x[2])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(vec<4, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%svec4(%s, %s, %s, %s)", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0]), - static_cast::value_type>(x[1]), - static_cast::value_type>(x[2]), - static_cast::value_type>(x[3])); - } - }; - - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<2, 2, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat2x2((%s, %s), (%s, %s))", - PrefixStr, - LiteralStr, LiteralStr, - LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<2, 3, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat2x3((%s, %s, %s), (%s, %s, %s))", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[0][2]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), static_cast::value_type>(x[1][2])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<2, 4, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat2x4((%s, %s, %s, %s), (%s, %s, %s, %s))", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[0][2]), static_cast::value_type>(x[0][3]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), static_cast::value_type>(x[1][2]), static_cast::value_type>(x[1][3])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<3, 2, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat3x2((%s, %s), (%s, %s), (%s, %s))", - PrefixStr, - LiteralStr, LiteralStr, - LiteralStr, LiteralStr, - LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), - static_cast::value_type>(x[2][0]), static_cast::value_type>(x[2][1])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<3, 3, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat3x3((%s, %s, %s), (%s, %s, %s), (%s, %s, %s))", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[0][2]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), static_cast::value_type>(x[1][2]), - static_cast::value_type>(x[2][0]), static_cast::value_type>(x[2][1]), static_cast::value_type>(x[2][2])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<3, 4, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat3x4((%s, %s, %s, %s), (%s, %s, %s, %s), (%s, %s, %s, %s))", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[0][2]), static_cast::value_type>(x[0][3]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), static_cast::value_type>(x[1][2]), static_cast::value_type>(x[1][3]), - static_cast::value_type>(x[2][0]), static_cast::value_type>(x[2][1]), static_cast::value_type>(x[2][2]), static_cast::value_type>(x[2][3])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<4, 2, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat4x2((%s, %s), (%s, %s), (%s, %s), (%s, %s))", - PrefixStr, - LiteralStr, LiteralStr, - LiteralStr, LiteralStr, - LiteralStr, LiteralStr, - LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), - static_cast::value_type>(x[2][0]), static_cast::value_type>(x[2][1]), - static_cast::value_type>(x[3][0]), static_cast::value_type>(x[3][1])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<4, 3, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat4x3((%s, %s, %s), (%s, %s, %s), (%s, %s, %s), (%s, %s, %s))", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[0][2]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), static_cast::value_type>(x[1][2]), - static_cast::value_type>(x[2][0]), static_cast::value_type>(x[2][1]), static_cast::value_type>(x[2][2]), - static_cast::value_type>(x[3][0]), static_cast::value_type>(x[3][1]), static_cast::value_type>(x[3][2])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<4, 4, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat4x4((%s, %s, %s, %s), (%s, %s, %s, %s), (%s, %s, %s, %s), (%s, %s, %s, %s))", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[0][2]), static_cast::value_type>(x[0][3]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), static_cast::value_type>(x[1][2]), static_cast::value_type>(x[1][3]), - static_cast::value_type>(x[2][0]), static_cast::value_type>(x[2][1]), static_cast::value_type>(x[2][2]), static_cast::value_type>(x[2][3]), - static_cast::value_type>(x[3][0]), static_cast::value_type>(x[3][1]), static_cast::value_type>(x[3][2]), static_cast::value_type>(x[3][3])); - } - }; - - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(qua const& q) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%squat(%s, {%s, %s, %s})", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(q.w), - static_cast::value_type>(q.x), - static_cast::value_type>(q.y), - static_cast::value_type>(q.z)); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(tdualquat const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%sdualquat((%s, {%s, %s, %s}), (%s, {%s, %s, %s}))", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x.real.w), - static_cast::value_type>(x.real.x), - static_cast::value_type>(x.real.y), - static_cast::value_type>(x.real.z), - static_cast::value_type>(x.dual.w), - static_cast::value_type>(x.dual.x), - static_cast::value_type>(x.dual.y), - static_cast::value_type>(x.dual.z)); - } - }; - -}//namespace detail - -template -GLM_FUNC_QUALIFIER std::string to_string(matType const& x) -{ - return detail::compute_to_string::call(x); -} - -}//namespace glm diff --git a/src/vendor/glm/gtx/texture.hpp b/src/vendor/glm/gtx/texture.hpp deleted file mode 100755 index 20585e6..0000000 --- a/src/vendor/glm/gtx/texture.hpp +++ /dev/null @@ -1,46 +0,0 @@ -/// @ref gtx_texture -/// @file glm/gtx/texture.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_texture GLM_GTX_texture -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Wrapping mode of texture coordinates. - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/integer.hpp" -#include "../gtx/component_wise.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_texture is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_texture extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_texture - /// @{ - - /// Compute the number of mipmaps levels necessary to create a mipmap complete texture - /// - /// @param Extent Extent of the texture base level mipmap - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or signed integer scalar types - /// @tparam Q Value from qualifier enum - template - T levels(vec const& Extent); - - /// @} -}// namespace glm - -#include "texture.inl" - diff --git a/src/vendor/glm/gtx/texture.inl b/src/vendor/glm/gtx/texture.inl deleted file mode 100755 index 593c826..0000000 --- a/src/vendor/glm/gtx/texture.inl +++ /dev/null @@ -1,17 +0,0 @@ -/// @ref gtx_texture - -namespace glm -{ - template - inline T levels(vec const& Extent) - { - return glm::log2(compMax(Extent)) + static_cast(1); - } - - template - inline T levels(T Extent) - { - return vec<1, T, defaultp>(Extent).x; - } -}//namespace glm - diff --git a/src/vendor/glm/gtx/transform.hpp b/src/vendor/glm/gtx/transform.hpp deleted file mode 100755 index 0279fc8..0000000 --- a/src/vendor/glm/gtx/transform.hpp +++ /dev/null @@ -1,60 +0,0 @@ -/// @ref gtx_transform -/// @file glm/gtx/transform.hpp -/// -/// @see core (dependence) -/// @see gtc_matrix_transform (dependence) -/// @see gtx_transform -/// @see gtx_transform2 -/// -/// @defgroup gtx_transform GLM_GTX_transform -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Add transformation matrices - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/matrix_transform.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_transform is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_transform extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_transform - /// @{ - - /// Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars. - /// @see gtc_matrix_transform - /// @see gtx_transform - template - GLM_FUNC_DECL mat<4, 4, T, Q> translate( - vec<3, T, Q> const& v); - - /// Builds a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in radians. - /// @see gtc_matrix_transform - /// @see gtx_transform - template - GLM_FUNC_DECL mat<4, 4, T, Q> rotate( - T angle, - vec<3, T, Q> const& v); - - /// Transforms a matrix with a scale 4 * 4 matrix created from a vector of 3 components. - /// @see gtc_matrix_transform - /// @see gtx_transform - template - GLM_FUNC_DECL mat<4, 4, T, Q> scale( - vec<3, T, Q> const& v); - - /// @} -}// namespace glm - -#include "transform.inl" diff --git a/src/vendor/glm/gtx/transform.inl b/src/vendor/glm/gtx/transform.inl deleted file mode 100755 index 48ee680..0000000 --- a/src/vendor/glm/gtx/transform.inl +++ /dev/null @@ -1,23 +0,0 @@ -/// @ref gtx_transform - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> translate(vec<3, T, Q> const& v) - { - return translate(mat<4, 4, T, Q>(static_cast(1)), v); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rotate(T angle, vec<3, T, Q> const& v) - { - return rotate(mat<4, 4, T, Q>(static_cast(1)), angle, v); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> scale(vec<3, T, Q> const& v) - { - return scale(mat<4, 4, T, Q>(static_cast(1)), v); - } - -}//namespace glm diff --git a/src/vendor/glm/gtx/transform2.hpp b/src/vendor/glm/gtx/transform2.hpp deleted file mode 100755 index 0d8ba9d..0000000 --- a/src/vendor/glm/gtx/transform2.hpp +++ /dev/null @@ -1,89 +0,0 @@ -/// @ref gtx_transform2 -/// @file glm/gtx/transform2.hpp -/// -/// @see core (dependence) -/// @see gtx_transform (dependence) -/// -/// @defgroup gtx_transform2 GLM_GTX_transform2 -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Add extra transformation matrices - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtx/transform.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_transform2 is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_transform2 extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_transform2 - /// @{ - - //! Transforms a matrix with a shearing on X axis. - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> shearX2D(mat<3, 3, T, Q> const& m, T y); - - //! Transforms a matrix with a shearing on Y axis. - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> shearY2D(mat<3, 3, T, Q> const& m, T x); - - //! Transforms a matrix with a shearing on X axis - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> shearX3D(mat<4, 4, T, Q> const& m, T y, T z); - - //! Transforms a matrix with a shearing on Y axis. - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> shearY3D(mat<4, 4, T, Q> const& m, T x, T z); - - //! Transforms a matrix with a shearing on Z axis. - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> shearZ3D(mat<4, 4, T, Q> const& m, T x, T y); - - //template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shear(const mat<4, 4, T, Q> & m, shearPlane, planePoint, angle) - // Identity + tan(angle) * cross(Normal, OnPlaneVector) 0 - // - dot(PointOnPlane, normal) * OnPlaneVector 1 - - // Reflect functions seem to don't work - //template mat<3, 3, T, Q> reflect2D(const mat<3, 3, T, Q> & m, const vec<3, T, Q>& normal){return reflect2DGTX(m, normal);} //!< \brief Build a reflection matrix (from GLM_GTX_transform2 extension) - //template mat<4, 4, T, Q> reflect3D(const mat<4, 4, T, Q> & m, const vec<3, T, Q>& normal){return reflect3DGTX(m, normal);} //!< \brief Build a reflection matrix (from GLM_GTX_transform2 extension) - - //! Build planar projection matrix along normal axis. - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> proj2D(mat<3, 3, T, Q> const& m, vec<3, T, Q> const& normal); - - //! Build planar projection matrix along normal axis. - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> proj3D(mat<4, 4, T, Q> const & m, vec<3, T, Q> const& normal); - - //! Build a scale bias matrix. - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> scaleBias(T scale, T bias); - - //! Build a scale bias matrix. - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> scaleBias(mat<4, 4, T, Q> const& m, T scale, T bias); - - /// @} -}// namespace glm - -#include "transform2.inl" diff --git a/src/vendor/glm/gtx/transform2.inl b/src/vendor/glm/gtx/transform2.inl deleted file mode 100755 index 0118ab0..0000000 --- a/src/vendor/glm/gtx/transform2.inl +++ /dev/null @@ -1,125 +0,0 @@ -/// @ref gtx_transform2 - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearX2D(mat<3, 3, T, Q> const& m, T s) - { - mat<3, 3, T, Q> r(1); - r[1][0] = s; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearY2D(mat<3, 3, T, Q> const& m, T s) - { - mat<3, 3, T, Q> r(1); - r[0][1] = s; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shearX3D(mat<4, 4, T, Q> const& m, T s, T t) - { - mat<4, 4, T, Q> r(1); - r[0][1] = s; - r[0][2] = t; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shearY3D(mat<4, 4, T, Q> const& m, T s, T t) - { - mat<4, 4, T, Q> r(1); - r[1][0] = s; - r[1][2] = t; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shearZ3D(mat<4, 4, T, Q> const& m, T s, T t) - { - mat<4, 4, T, Q> r(1); - r[2][0] = s; - r[2][1] = t; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> reflect2D(mat<3, 3, T, Q> const& m, vec<3, T, Q> const& normal) - { - mat<3, 3, T, Q> r(static_cast(1)); - r[0][0] = static_cast(1) - static_cast(2) * normal.x * normal.x; - r[0][1] = -static_cast(2) * normal.x * normal.y; - r[1][0] = -static_cast(2) * normal.x * normal.y; - r[1][1] = static_cast(1) - static_cast(2) * normal.y * normal.y; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> reflect3D(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& normal) - { - mat<4, 4, T, Q> r(static_cast(1)); - r[0][0] = static_cast(1) - static_cast(2) * normal.x * normal.x; - r[0][1] = -static_cast(2) * normal.x * normal.y; - r[0][2] = -static_cast(2) * normal.x * normal.z; - - r[1][0] = -static_cast(2) * normal.x * normal.y; - r[1][1] = static_cast(1) - static_cast(2) * normal.y * normal.y; - r[1][2] = -static_cast(2) * normal.y * normal.z; - - r[2][0] = -static_cast(2) * normal.x * normal.z; - r[2][1] = -static_cast(2) * normal.y * normal.z; - r[2][2] = static_cast(1) - static_cast(2) * normal.z * normal.z; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> proj2D( - const mat<3, 3, T, Q>& m, - const vec<3, T, Q>& normal) - { - mat<3, 3, T, Q> r(static_cast(1)); - r[0][0] = static_cast(1) - normal.x * normal.x; - r[0][1] = - normal.x * normal.y; - r[1][0] = - normal.x * normal.y; - r[1][1] = static_cast(1) - normal.y * normal.y; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> proj3D( - const mat<4, 4, T, Q>& m, - const vec<3, T, Q>& normal) - { - mat<4, 4, T, Q> r(static_cast(1)); - r[0][0] = static_cast(1) - normal.x * normal.x; - r[0][1] = - normal.x * normal.y; - r[0][2] = - normal.x * normal.z; - r[1][0] = - normal.x * normal.y; - r[1][1] = static_cast(1) - normal.y * normal.y; - r[1][2] = - normal.y * normal.z; - r[2][0] = - normal.x * normal.z; - r[2][1] = - normal.y * normal.z; - r[2][2] = static_cast(1) - normal.z * normal.z; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> scaleBias(T scale, T bias) - { - mat<4, 4, T, Q> result; - result[3] = vec<4, T, Q>(vec<3, T, Q>(bias), static_cast(1)); - result[0][0] = scale; - result[1][1] = scale; - result[2][2] = scale; - return result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> scaleBias(mat<4, 4, T, Q> const& m, T scale, T bias) - { - return m * scaleBias(scale, bias); - } -}//namespace glm - diff --git a/src/vendor/glm/gtx/type_aligned.hpp b/src/vendor/glm/gtx/type_aligned.hpp deleted file mode 100755 index 2ae522c..0000000 --- a/src/vendor/glm/gtx/type_aligned.hpp +++ /dev/null @@ -1,982 +0,0 @@ -/// @ref gtx_type_aligned -/// @file glm/gtx/type_aligned.hpp -/// -/// @see core (dependence) -/// @see gtc_quaternion (dependence) -/// -/// @defgroup gtx_type_aligned GLM_GTX_type_aligned -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Defines aligned types. - -#pragma once - -// Dependency: -#include "../gtc/type_precision.hpp" -#include "../gtc/quaternion.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_type_aligned is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_type_aligned extension included") -# endif -#endif - -namespace glm -{ - /////////////////////////// - // Signed int vector types - - /// @addtogroup gtx_type_aligned - /// @{ - - /// Low qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_int8, aligned_lowp_int8, 1); - - /// Low qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_int16, aligned_lowp_int16, 2); - - /// Low qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_int32, aligned_lowp_int32, 4); - - /// Low qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_int64, aligned_lowp_int64, 8); - - - /// Low qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_int8_t, aligned_lowp_int8_t, 1); - - /// Low qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_int16_t, aligned_lowp_int16_t, 2); - - /// Low qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_int32_t, aligned_lowp_int32_t, 4); - - /// Low qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_int64_t, aligned_lowp_int64_t, 8); - - - /// Low qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_i8, aligned_lowp_i8, 1); - - /// Low qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_i16, aligned_lowp_i16, 2); - - /// Low qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_i32, aligned_lowp_i32, 4); - - /// Low qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_i64, aligned_lowp_i64, 8); - - - /// Medium qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_int8, aligned_mediump_int8, 1); - - /// Medium qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_int16, aligned_mediump_int16, 2); - - /// Medium qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_int32, aligned_mediump_int32, 4); - - /// Medium qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_int64, aligned_mediump_int64, 8); - - - /// Medium qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_int8_t, aligned_mediump_int8_t, 1); - - /// Medium qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_int16_t, aligned_mediump_int16_t, 2); - - /// Medium qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_int32_t, aligned_mediump_int32_t, 4); - - /// Medium qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_int64_t, aligned_mediump_int64_t, 8); - - - /// Medium qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_i8, aligned_mediump_i8, 1); - - /// Medium qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_i16, aligned_mediump_i16, 2); - - /// Medium qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_i32, aligned_mediump_i32, 4); - - /// Medium qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_i64, aligned_mediump_i64, 8); - - - /// High qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_int8, aligned_highp_int8, 1); - - /// High qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_int16, aligned_highp_int16, 2); - - /// High qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_int32, aligned_highp_int32, 4); - - /// High qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_int64, aligned_highp_int64, 8); - - - /// High qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_int8_t, aligned_highp_int8_t, 1); - - /// High qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_int16_t, aligned_highp_int16_t, 2); - - /// High qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_int32_t, aligned_highp_int32_t, 4); - - /// High qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_int64_t, aligned_highp_int64_t, 8); - - - /// High qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_i8, aligned_highp_i8, 1); - - /// High qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_i16, aligned_highp_i16, 2); - - /// High qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_i32, aligned_highp_i32, 4); - - /// High qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_i64, aligned_highp_i64, 8); - - - /// Default qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(int8, aligned_int8, 1); - - /// Default qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(int16, aligned_int16, 2); - - /// Default qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(int32, aligned_int32, 4); - - /// Default qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(int64, aligned_int64, 8); - - - /// Default qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(int8_t, aligned_int8_t, 1); - - /// Default qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(int16_t, aligned_int16_t, 2); - - /// Default qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(int32_t, aligned_int32_t, 4); - - /// Default qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(int64_t, aligned_int64_t, 8); - - - /// Default qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i8, aligned_i8, 1); - - /// Default qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i16, aligned_i16, 2); - - /// Default qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i32, aligned_i32, 4); - - /// Default qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i64, aligned_i64, 8); - - - /// Default qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(ivec1, aligned_ivec1, 4); - - /// Default qualifier 32 bit signed integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(ivec2, aligned_ivec2, 8); - - /// Default qualifier 32 bit signed integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(ivec3, aligned_ivec3, 16); - - /// Default qualifier 32 bit signed integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(ivec4, aligned_ivec4, 16); - - - /// Default qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i8vec1, aligned_i8vec1, 1); - - /// Default qualifier 8 bit signed integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i8vec2, aligned_i8vec2, 2); - - /// Default qualifier 8 bit signed integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i8vec3, aligned_i8vec3, 4); - - /// Default qualifier 8 bit signed integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i8vec4, aligned_i8vec4, 4); - - - /// Default qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i16vec1, aligned_i16vec1, 2); - - /// Default qualifier 16 bit signed integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i16vec2, aligned_i16vec2, 4); - - /// Default qualifier 16 bit signed integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i16vec3, aligned_i16vec3, 8); - - /// Default qualifier 16 bit signed integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i16vec4, aligned_i16vec4, 8); - - - /// Default qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i32vec1, aligned_i32vec1, 4); - - /// Default qualifier 32 bit signed integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i32vec2, aligned_i32vec2, 8); - - /// Default qualifier 32 bit signed integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i32vec3, aligned_i32vec3, 16); - - /// Default qualifier 32 bit signed integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i32vec4, aligned_i32vec4, 16); - - - /// Default qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i64vec1, aligned_i64vec1, 8); - - /// Default qualifier 64 bit signed integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i64vec2, aligned_i64vec2, 16); - - /// Default qualifier 64 bit signed integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i64vec3, aligned_i64vec3, 32); - - /// Default qualifier 64 bit signed integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i64vec4, aligned_i64vec4, 32); - - - ///////////////////////////// - // Unsigned int vector types - - /// Low qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_uint8, aligned_lowp_uint8, 1); - - /// Low qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_uint16, aligned_lowp_uint16, 2); - - /// Low qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_uint32, aligned_lowp_uint32, 4); - - /// Low qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_uint64, aligned_lowp_uint64, 8); - - - /// Low qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_uint8_t, aligned_lowp_uint8_t, 1); - - /// Low qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_uint16_t, aligned_lowp_uint16_t, 2); - - /// Low qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_uint32_t, aligned_lowp_uint32_t, 4); - - /// Low qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_uint64_t, aligned_lowp_uint64_t, 8); - - - /// Low qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_u8, aligned_lowp_u8, 1); - - /// Low qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_u16, aligned_lowp_u16, 2); - - /// Low qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_u32, aligned_lowp_u32, 4); - - /// Low qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_u64, aligned_lowp_u64, 8); - - - /// Medium qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_uint8, aligned_mediump_uint8, 1); - - /// Medium qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_uint16, aligned_mediump_uint16, 2); - - /// Medium qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_uint32, aligned_mediump_uint32, 4); - - /// Medium qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_uint64, aligned_mediump_uint64, 8); - - - /// Medium qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_uint8_t, aligned_mediump_uint8_t, 1); - - /// Medium qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_uint16_t, aligned_mediump_uint16_t, 2); - - /// Medium qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_uint32_t, aligned_mediump_uint32_t, 4); - - /// Medium qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_uint64_t, aligned_mediump_uint64_t, 8); - - - /// Medium qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_u8, aligned_mediump_u8, 1); - - /// Medium qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_u16, aligned_mediump_u16, 2); - - /// Medium qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_u32, aligned_mediump_u32, 4); - - /// Medium qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_u64, aligned_mediump_u64, 8); - - - /// High qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_uint8, aligned_highp_uint8, 1); - - /// High qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_uint16, aligned_highp_uint16, 2); - - /// High qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_uint32, aligned_highp_uint32, 4); - - /// High qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_uint64, aligned_highp_uint64, 8); - - - /// High qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_uint8_t, aligned_highp_uint8_t, 1); - - /// High qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_uint16_t, aligned_highp_uint16_t, 2); - - /// High qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_uint32_t, aligned_highp_uint32_t, 4); - - /// High qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_uint64_t, aligned_highp_uint64_t, 8); - - - /// High qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_u8, aligned_highp_u8, 1); - - /// High qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_u16, aligned_highp_u16, 2); - - /// High qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_u32, aligned_highp_u32, 4); - - /// High qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_u64, aligned_highp_u64, 8); - - - /// Default qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uint8, aligned_uint8, 1); - - /// Default qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uint16, aligned_uint16, 2); - - /// Default qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uint32, aligned_uint32, 4); - - /// Default qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uint64, aligned_uint64, 8); - - - /// Default qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uint8_t, aligned_uint8_t, 1); - - /// Default qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uint16_t, aligned_uint16_t, 2); - - /// Default qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uint32_t, aligned_uint32_t, 4); - - /// Default qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uint64_t, aligned_uint64_t, 8); - - - /// Default qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u8, aligned_u8, 1); - - /// Default qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u16, aligned_u16, 2); - - /// Default qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u32, aligned_u32, 4); - - /// Default qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u64, aligned_u64, 8); - - - /// Default qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uvec1, aligned_uvec1, 4); - - /// Default qualifier 32 bit unsigned integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uvec2, aligned_uvec2, 8); - - /// Default qualifier 32 bit unsigned integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uvec3, aligned_uvec3, 16); - - /// Default qualifier 32 bit unsigned integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uvec4, aligned_uvec4, 16); - - - /// Default qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u8vec1, aligned_u8vec1, 1); - - /// Default qualifier 8 bit unsigned integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u8vec2, aligned_u8vec2, 2); - - /// Default qualifier 8 bit unsigned integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u8vec3, aligned_u8vec3, 4); - - /// Default qualifier 8 bit unsigned integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u8vec4, aligned_u8vec4, 4); - - - /// Default qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u16vec1, aligned_u16vec1, 2); - - /// Default qualifier 16 bit unsigned integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u16vec2, aligned_u16vec2, 4); - - /// Default qualifier 16 bit unsigned integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u16vec3, aligned_u16vec3, 8); - - /// Default qualifier 16 bit unsigned integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u16vec4, aligned_u16vec4, 8); - - - /// Default qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u32vec1, aligned_u32vec1, 4); - - /// Default qualifier 32 bit unsigned integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u32vec2, aligned_u32vec2, 8); - - /// Default qualifier 32 bit unsigned integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u32vec3, aligned_u32vec3, 16); - - /// Default qualifier 32 bit unsigned integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u32vec4, aligned_u32vec4, 16); - - - /// Default qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u64vec1, aligned_u64vec1, 8); - - /// Default qualifier 64 bit unsigned integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u64vec2, aligned_u64vec2, 16); - - /// Default qualifier 64 bit unsigned integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u64vec3, aligned_u64vec3, 32); - - /// Default qualifier 64 bit unsigned integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u64vec4, aligned_u64vec4, 32); - - - ////////////////////// - // Float vector types - - /// 32 bit single-qualifier floating-point aligned scalar. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(float32, aligned_float32, 4); - - /// 32 bit single-qualifier floating-point aligned scalar. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(float32_t, aligned_float32_t, 4); - - /// 32 bit single-qualifier floating-point aligned scalar. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(float32, aligned_f32, 4); - -# ifndef GLM_FORCE_SINGLE_ONLY - - /// 64 bit double-qualifier floating-point aligned scalar. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(float64, aligned_float64, 8); - - /// 64 bit double-qualifier floating-point aligned scalar. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(float64_t, aligned_float64_t, 8); - - /// 64 bit double-qualifier floating-point aligned scalar. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(float64, aligned_f64, 8); - -# endif//GLM_FORCE_SINGLE_ONLY - - - /// Single-qualifier floating-point aligned vector of 1 component. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(vec1, aligned_vec1, 4); - - /// Single-qualifier floating-point aligned vector of 2 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(vec2, aligned_vec2, 8); - - /// Single-qualifier floating-point aligned vector of 3 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(vec3, aligned_vec3, 16); - - /// Single-qualifier floating-point aligned vector of 4 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(vec4, aligned_vec4, 16); - - - /// Single-qualifier floating-point aligned vector of 1 component. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fvec1, aligned_fvec1, 4); - - /// Single-qualifier floating-point aligned vector of 2 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fvec2, aligned_fvec2, 8); - - /// Single-qualifier floating-point aligned vector of 3 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fvec3, aligned_fvec3, 16); - - /// Single-qualifier floating-point aligned vector of 4 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fvec4, aligned_fvec4, 16); - - - /// Single-qualifier floating-point aligned vector of 1 component. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32vec1, aligned_f32vec1, 4); - - /// Single-qualifier floating-point aligned vector of 2 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32vec2, aligned_f32vec2, 8); - - /// Single-qualifier floating-point aligned vector of 3 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32vec3, aligned_f32vec3, 16); - - /// Single-qualifier floating-point aligned vector of 4 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32vec4, aligned_f32vec4, 16); - - - /// Double-qualifier floating-point aligned vector of 1 component. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(dvec1, aligned_dvec1, 8); - - /// Double-qualifier floating-point aligned vector of 2 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(dvec2, aligned_dvec2, 16); - - /// Double-qualifier floating-point aligned vector of 3 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(dvec3, aligned_dvec3, 32); - - /// Double-qualifier floating-point aligned vector of 4 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(dvec4, aligned_dvec4, 32); - - -# ifndef GLM_FORCE_SINGLE_ONLY - - /// Double-qualifier floating-point aligned vector of 1 component. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64vec1, aligned_f64vec1, 8); - - /// Double-qualifier floating-point aligned vector of 2 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64vec2, aligned_f64vec2, 16); - - /// Double-qualifier floating-point aligned vector of 3 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64vec3, aligned_f64vec3, 32); - - /// Double-qualifier floating-point aligned vector of 4 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64vec4, aligned_f64vec4, 32); - -# endif//GLM_FORCE_SINGLE_ONLY - - ////////////////////// - // Float matrix types - - /// Single-qualifier floating-point aligned 1x1 matrix. - /// @see gtx_type_aligned - //typedef detail::tmat1 mat1; - - /// Single-qualifier floating-point aligned 2x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mat2, aligned_mat2, 16); - - /// Single-qualifier floating-point aligned 3x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mat3, aligned_mat3, 16); - - /// Single-qualifier floating-point aligned 4x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mat4, aligned_mat4, 16); - - - /// Single-qualifier floating-point aligned 1x1 matrix. - /// @see gtx_type_aligned - //typedef detail::tmat1x1 mat1; - - /// Single-qualifier floating-point aligned 2x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mat2x2, aligned_mat2x2, 16); - - /// Single-qualifier floating-point aligned 3x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mat3x3, aligned_mat3x3, 16); - - /// Single-qualifier floating-point aligned 4x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mat4x4, aligned_mat4x4, 16); - - - /// Single-qualifier floating-point aligned 1x1 matrix. - /// @see gtx_type_aligned - //typedef detail::tmat1x1 fmat1; - - /// Single-qualifier floating-point aligned 2x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2, 16); - - /// Single-qualifier floating-point aligned 3x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3, 16); - - /// Single-qualifier floating-point aligned 4x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4, 16); - - - /// Single-qualifier floating-point aligned 1x1 matrix. - /// @see gtx_type_aligned - //typedef f32 fmat1x1; - - /// Single-qualifier floating-point aligned 2x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2x2, 16); - - /// Single-qualifier floating-point aligned 2x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat2x3, aligned_fmat2x3, 16); - - /// Single-qualifier floating-point aligned 2x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat2x4, aligned_fmat2x4, 16); - - /// Single-qualifier floating-point aligned 3x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat3x2, aligned_fmat3x2, 16); - - /// Single-qualifier floating-point aligned 3x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3x3, 16); - - /// Single-qualifier floating-point aligned 3x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat3x4, aligned_fmat3x4, 16); - - /// Single-qualifier floating-point aligned 4x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat4x2, aligned_fmat4x2, 16); - - /// Single-qualifier floating-point aligned 4x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat4x3, aligned_fmat4x3, 16); - - /// Single-qualifier floating-point aligned 4x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4x4, 16); - - - /// Single-qualifier floating-point aligned 1x1 matrix. - /// @see gtx_type_aligned - //typedef detail::tmat1x1 f32mat1; - - /// Single-qualifier floating-point aligned 2x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2, 16); - - /// Single-qualifier floating-point aligned 3x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3, 16); - - /// Single-qualifier floating-point aligned 4x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4, 16); - - - /// Single-qualifier floating-point aligned 1x1 matrix. - /// @see gtx_type_aligned - //typedef f32 f32mat1x1; - - /// Single-qualifier floating-point aligned 2x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2x2, 16); - - /// Single-qualifier floating-point aligned 2x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat2x3, aligned_f32mat2x3, 16); - - /// Single-qualifier floating-point aligned 2x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat2x4, aligned_f32mat2x4, 16); - - /// Single-qualifier floating-point aligned 3x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat3x2, aligned_f32mat3x2, 16); - - /// Single-qualifier floating-point aligned 3x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3x3, 16); - - /// Single-qualifier floating-point aligned 3x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat3x4, aligned_f32mat3x4, 16); - - /// Single-qualifier floating-point aligned 4x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat4x2, aligned_f32mat4x2, 16); - - /// Single-qualifier floating-point aligned 4x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat4x3, aligned_f32mat4x3, 16); - - /// Single-qualifier floating-point aligned 4x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4x4, 16); - - -# ifndef GLM_FORCE_SINGLE_ONLY - - /// Double-qualifier floating-point aligned 1x1 matrix. - /// @see gtx_type_aligned - //typedef detail::tmat1x1 f64mat1; - - /// Double-qualifier floating-point aligned 2x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2, 32); - - /// Double-qualifier floating-point aligned 3x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3, 32); - - /// Double-qualifier floating-point aligned 4x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4, 32); - - - /// Double-qualifier floating-point aligned 1x1 matrix. - /// @see gtx_type_aligned - //typedef f64 f64mat1x1; - - /// Double-qualifier floating-point aligned 2x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2x2, 32); - - /// Double-qualifier floating-point aligned 2x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat2x3, aligned_f64mat2x3, 32); - - /// Double-qualifier floating-point aligned 2x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat2x4, aligned_f64mat2x4, 32); - - /// Double-qualifier floating-point aligned 3x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat3x2, aligned_f64mat3x2, 32); - - /// Double-qualifier floating-point aligned 3x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3x3, 32); - - /// Double-qualifier floating-point aligned 3x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat3x4, aligned_f64mat3x4, 32); - - /// Double-qualifier floating-point aligned 4x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat4x2, aligned_f64mat4x2, 32); - - /// Double-qualifier floating-point aligned 4x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat4x3, aligned_f64mat4x3, 32); - - /// Double-qualifier floating-point aligned 4x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4x4, 32); - -# endif//GLM_FORCE_SINGLE_ONLY - - - ////////////////////////// - // Quaternion types - - /// Single-qualifier floating-point aligned quaternion. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(quat, aligned_quat, 16); - - /// Single-qualifier floating-point aligned quaternion. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(quat, aligned_fquat, 16); - - /// Double-qualifier floating-point aligned quaternion. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(dquat, aligned_dquat, 32); - - /// Single-qualifier floating-point aligned quaternion. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32quat, aligned_f32quat, 16); - -# ifndef GLM_FORCE_SINGLE_ONLY - - /// Double-qualifier floating-point aligned quaternion. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64quat, aligned_f64quat, 32); - -# endif//GLM_FORCE_SINGLE_ONLY - - /// @} -}//namespace glm - -#include "type_aligned.inl" diff --git a/src/vendor/glm/gtx/type_aligned.inl b/src/vendor/glm/gtx/type_aligned.inl deleted file mode 100755 index 54c1b81..0000000 --- a/src/vendor/glm/gtx/type_aligned.inl +++ /dev/null @@ -1,6 +0,0 @@ -/// @ref gtc_type_aligned - -namespace glm -{ - -} diff --git a/src/vendor/glm/gtx/type_trait.hpp b/src/vendor/glm/gtx/type_trait.hpp deleted file mode 100755 index 56685c8..0000000 --- a/src/vendor/glm/gtx/type_trait.hpp +++ /dev/null @@ -1,85 +0,0 @@ -/// @ref gtx_type_trait -/// @file glm/gtx/type_trait.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_type_trait GLM_GTX_type_trait -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Defines traits for each type. - -#pragma once - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_type_trait is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_type_trait extension included") -# endif -#endif - -// Dependency: -#include "../detail/qualifier.hpp" -#include "../gtc/quaternion.hpp" -#include "../gtx/dual_quaternion.hpp" - -namespace glm -{ - /// @addtogroup gtx_type_trait - /// @{ - - template - struct type - { - static bool const is_vec = false; - static bool const is_mat = false; - static bool const is_quat = false; - static length_t const components = 0; - static length_t const cols = 0; - static length_t const rows = 0; - }; - - template - struct type > - { - static bool const is_vec = true; - static bool const is_mat = false; - static bool const is_quat = false; - static length_t const components = L; - }; - - template - struct type > - { - static bool const is_vec = false; - static bool const is_mat = true; - static bool const is_quat = false; - static length_t const components = C; - static length_t const cols = C; - static length_t const rows = R; - }; - - template - struct type > - { - static bool const is_vec = false; - static bool const is_mat = false; - static bool const is_quat = true; - static length_t const components = 4; - }; - - template - struct type > - { - static bool const is_vec = false; - static bool const is_mat = false; - static bool const is_quat = true; - static length_t const components = 8; - }; - - /// @} -}//namespace glm - -#include "type_trait.inl" diff --git a/src/vendor/glm/gtx/type_trait.inl b/src/vendor/glm/gtx/type_trait.inl deleted file mode 100755 index 045de95..0000000 --- a/src/vendor/glm/gtx/type_trait.inl +++ /dev/null @@ -1,61 +0,0 @@ -/// @ref gtx_type_trait - -namespace glm -{ - template - bool const type::is_vec; - template - bool const type::is_mat; - template - bool const type::is_quat; - template - length_t const type::components; - template - length_t const type::cols; - template - length_t const type::rows; - - // vec - template - bool const type >::is_vec; - template - bool const type >::is_mat; - template - bool const type >::is_quat; - template - length_t const type >::components; - - // mat - template - bool const type >::is_vec; - template - bool const type >::is_mat; - template - bool const type >::is_quat; - template - length_t const type >::components; - template - length_t const type >::cols; - template - length_t const type >::rows; - - // tquat - template - bool const type >::is_vec; - template - bool const type >::is_mat; - template - bool const type >::is_quat; - template - length_t const type >::components; - - // tdualquat - template - bool const type >::is_vec; - template - bool const type >::is_mat; - template - bool const type >::is_quat; - template - length_t const type >::components; -}//namespace glm diff --git a/src/vendor/glm/gtx/vec_swizzle.hpp b/src/vendor/glm/gtx/vec_swizzle.hpp deleted file mode 100755 index 1c49abc..0000000 --- a/src/vendor/glm/gtx/vec_swizzle.hpp +++ /dev/null @@ -1,2782 +0,0 @@ -/// @ref gtx_vec_swizzle -/// @file glm/gtx/vec_swizzle.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_vec_swizzle GLM_GTX_vec_swizzle -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Functions to perform swizzle operation. - -#pragma once - -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_vec_swizzle is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_vec_swizzle extension included") -# endif -#endif - -namespace glm { - // xx - template - GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<1, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.x); - } - - template - GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<2, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.x); - } - - template - GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.x); - } - - template - GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.x); - } - - // xy - template - GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<2, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.y); - } - - template - GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.y); - } - - template - GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.y); - } - - // xz - template - GLM_INLINE glm::vec<2, T, Q> xz(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.z); - } - - template - GLM_INLINE glm::vec<2, T, Q> xz(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.z); - } - - // xw - template - GLM_INLINE glm::vec<2, T, Q> xw(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.w); - } - - // yx - template - GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<2, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.x); - } - - template - GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.x); - } - - template - GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.x); - } - - // yy - template - GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<2, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.y); - } - - template - GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.y); - } - - template - GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.y); - } - - // yz - template - GLM_INLINE glm::vec<2, T, Q> yz(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.z); - } - - template - GLM_INLINE glm::vec<2, T, Q> yz(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.z); - } - - // yw - template - GLM_INLINE glm::vec<2, T, Q> yw(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.w); - } - - // zx - template - GLM_INLINE glm::vec<2, T, Q> zx(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.z, v.x); - } - - template - GLM_INLINE glm::vec<2, T, Q> zx(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.z, v.x); - } - - // zy - template - GLM_INLINE glm::vec<2, T, Q> zy(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.z, v.y); - } - - template - GLM_INLINE glm::vec<2, T, Q> zy(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.z, v.y); - } - - // zz - template - GLM_INLINE glm::vec<2, T, Q> zz(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.z, v.z); - } - - template - GLM_INLINE glm::vec<2, T, Q> zz(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.z, v.z); - } - - // zw - template - GLM_INLINE glm::vec<2, T, Q> zw(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.z, v.w); - } - - // wx - template - GLM_INLINE glm::vec<2, T, Q> wx(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.w, v.x); - } - - // wy - template - GLM_INLINE glm::vec<2, T, Q> wy(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.w, v.y); - } - - // wz - template - GLM_INLINE glm::vec<2, T, Q> wz(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.w, v.z); - } - - // ww - template - GLM_INLINE glm::vec<2, T, Q> ww(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.w, v.w); - } - - // xxx - template - GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<1, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<2, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.x); - } - - // xxy - template - GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<2, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.y); - } - - // xxz - template - GLM_INLINE glm::vec<3, T, Q> xxz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> xxz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.z); - } - - // xxw - template - GLM_INLINE glm::vec<3, T, Q> xxw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.w); - } - - // xyx - template - GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<2, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.x); - } - - // xyy - template - GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<2, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.y); - } - - // xyz - template - GLM_INLINE glm::vec<3, T, Q> xyz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> xyz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.z); - } - - // xyw - template - GLM_INLINE glm::vec<3, T, Q> xyw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.w); - } - - // xzx - template - GLM_INLINE glm::vec<3, T, Q> xzx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.z, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> xzx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.z, v.x); - } - - // xzy - template - GLM_INLINE glm::vec<3, T, Q> xzy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.z, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> xzy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.z, v.y); - } - - // xzz - template - GLM_INLINE glm::vec<3, T, Q> xzz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.z, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> xzz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.z, v.z); - } - - // xzw - template - GLM_INLINE glm::vec<3, T, Q> xzw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.z, v.w); - } - - // xwx - template - GLM_INLINE glm::vec<3, T, Q> xwx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.w, v.x); - } - - // xwy - template - GLM_INLINE glm::vec<3, T, Q> xwy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.w, v.y); - } - - // xwz - template - GLM_INLINE glm::vec<3, T, Q> xwz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.w, v.z); - } - - // xww - template - GLM_INLINE glm::vec<3, T, Q> xww(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.w, v.w); - } - - // yxx - template - GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<2, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.x); - } - - // yxy - template - GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<2, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.y); - } - - // yxz - template - GLM_INLINE glm::vec<3, T, Q> yxz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> yxz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.z); - } - - // yxw - template - GLM_INLINE glm::vec<3, T, Q> yxw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.w); - } - - // yyx - template - GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<2, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.x); - } - - // yyy - template - GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<2, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.y); - } - - // yyz - template - GLM_INLINE glm::vec<3, T, Q> yyz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> yyz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.z); - } - - // yyw - template - GLM_INLINE glm::vec<3, T, Q> yyw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.w); - } - - // yzx - template - GLM_INLINE glm::vec<3, T, Q> yzx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.z, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> yzx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.z, v.x); - } - - // yzy - template - GLM_INLINE glm::vec<3, T, Q> yzy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.z, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> yzy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.z, v.y); - } - - // yzz - template - GLM_INLINE glm::vec<3, T, Q> yzz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.z, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> yzz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.z, v.z); - } - - // yzw - template - GLM_INLINE glm::vec<3, T, Q> yzw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.z, v.w); - } - - // ywx - template - GLM_INLINE glm::vec<3, T, Q> ywx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.w, v.x); - } - - // ywy - template - GLM_INLINE glm::vec<3, T, Q> ywy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.w, v.y); - } - - // ywz - template - GLM_INLINE glm::vec<3, T, Q> ywz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.w, v.z); - } - - // yww - template - GLM_INLINE glm::vec<3, T, Q> yww(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.w, v.w); - } - - // zxx - template - GLM_INLINE glm::vec<3, T, Q> zxx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.x, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> zxx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.x, v.x); - } - - // zxy - template - GLM_INLINE glm::vec<3, T, Q> zxy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.x, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> zxy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.x, v.y); - } - - // zxz - template - GLM_INLINE glm::vec<3, T, Q> zxz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.x, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> zxz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.x, v.z); - } - - // zxw - template - GLM_INLINE glm::vec<3, T, Q> zxw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.x, v.w); - } - - // zyx - template - GLM_INLINE glm::vec<3, T, Q> zyx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.y, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> zyx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.y, v.x); - } - - // zyy - template - GLM_INLINE glm::vec<3, T, Q> zyy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.y, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> zyy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.y, v.y); - } - - // zyz - template - GLM_INLINE glm::vec<3, T, Q> zyz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.y, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> zyz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.y, v.z); - } - - // zyw - template - GLM_INLINE glm::vec<3, T, Q> zyw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.y, v.w); - } - - // zzx - template - GLM_INLINE glm::vec<3, T, Q> zzx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.z, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> zzx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.z, v.x); - } - - // zzy - template - GLM_INLINE glm::vec<3, T, Q> zzy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.z, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> zzy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.z, v.y); - } - - // zzz - template - GLM_INLINE glm::vec<3, T, Q> zzz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.z, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> zzz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.z, v.z); - } - - // zzw - template - GLM_INLINE glm::vec<3, T, Q> zzw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.z, v.w); - } - - // zwx - template - GLM_INLINE glm::vec<3, T, Q> zwx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.w, v.x); - } - - // zwy - template - GLM_INLINE glm::vec<3, T, Q> zwy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.w, v.y); - } - - // zwz - template - GLM_INLINE glm::vec<3, T, Q> zwz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.w, v.z); - } - - // zww - template - GLM_INLINE glm::vec<3, T, Q> zww(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.w, v.w); - } - - // wxx - template - GLM_INLINE glm::vec<3, T, Q> wxx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.x, v.x); - } - - // wxy - template - GLM_INLINE glm::vec<3, T, Q> wxy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.x, v.y); - } - - // wxz - template - GLM_INLINE glm::vec<3, T, Q> wxz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.x, v.z); - } - - // wxw - template - GLM_INLINE glm::vec<3, T, Q> wxw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.x, v.w); - } - - // wyx - template - GLM_INLINE glm::vec<3, T, Q> wyx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.y, v.x); - } - - // wyy - template - GLM_INLINE glm::vec<3, T, Q> wyy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.y, v.y); - } - - // wyz - template - GLM_INLINE glm::vec<3, T, Q> wyz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.y, v.z); - } - - // wyw - template - GLM_INLINE glm::vec<3, T, Q> wyw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.y, v.w); - } - - // wzx - template - GLM_INLINE glm::vec<3, T, Q> wzx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.z, v.x); - } - - // wzy - template - GLM_INLINE glm::vec<3, T, Q> wzy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.z, v.y); - } - - // wzz - template - GLM_INLINE glm::vec<3, T, Q> wzz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.z, v.z); - } - - // wzw - template - GLM_INLINE glm::vec<3, T, Q> wzw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.z, v.w); - } - - // wwx - template - GLM_INLINE glm::vec<3, T, Q> wwx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.w, v.x); - } - - // wwy - template - GLM_INLINE glm::vec<3, T, Q> wwy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.w, v.y); - } - - // wwz - template - GLM_INLINE glm::vec<3, T, Q> wwz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.w, v.z); - } - - // www - template - GLM_INLINE glm::vec<3, T, Q> www(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.w, v.w); - } - - // xxxx - template - GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<1, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x); - } - - // xxxy - template - GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y); - } - - // xxxz - template - GLM_INLINE glm::vec<4, T, Q> xxxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.z); - } - - // xxxw - template - GLM_INLINE glm::vec<4, T, Q> xxxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.w); - } - - // xxyx - template - GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x); - } - - // xxyy - template - GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y); - } - - // xxyz - template - GLM_INLINE glm::vec<4, T, Q> xxyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.z); - } - - // xxyw - template - GLM_INLINE glm::vec<4, T, Q> xxyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.w); - } - - // xxzx - template - GLM_INLINE glm::vec<4, T, Q> xxzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.z, v.x); - } - - // xxzy - template - GLM_INLINE glm::vec<4, T, Q> xxzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.z, v.y); - } - - // xxzz - template - GLM_INLINE glm::vec<4, T, Q> xxzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.z, v.z); - } - - // xxzw - template - GLM_INLINE glm::vec<4, T, Q> xxzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.z, v.w); - } - - // xxwx - template - GLM_INLINE glm::vec<4, T, Q> xxwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.w, v.x); - } - - // xxwy - template - GLM_INLINE glm::vec<4, T, Q> xxwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.w, v.y); - } - - // xxwz - template - GLM_INLINE glm::vec<4, T, Q> xxwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.w, v.z); - } - - // xxww - template - GLM_INLINE glm::vec<4, T, Q> xxww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.w, v.w); - } - - // xyxx - template - GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x); - } - - // xyxy - template - GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y); - } - - // xyxz - template - GLM_INLINE glm::vec<4, T, Q> xyxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.z); - } - - // xyxw - template - GLM_INLINE glm::vec<4, T, Q> xyxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.w); - } - - // xyyx - template - GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x); - } - - // xyyy - template - GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y); - } - - // xyyz - template - GLM_INLINE glm::vec<4, T, Q> xyyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.z); - } - - // xyyw - template - GLM_INLINE glm::vec<4, T, Q> xyyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.w); - } - - // xyzx - template - GLM_INLINE glm::vec<4, T, Q> xyzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.z, v.x); - } - - // xyzy - template - GLM_INLINE glm::vec<4, T, Q> xyzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.z, v.y); - } - - // xyzz - template - GLM_INLINE glm::vec<4, T, Q> xyzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.z, v.z); - } - - // xyzw - template - GLM_INLINE glm::vec<4, T, Q> xyzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.z, v.w); - } - - // xywx - template - GLM_INLINE glm::vec<4, T, Q> xywx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.w, v.x); - } - - // xywy - template - GLM_INLINE glm::vec<4, T, Q> xywy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.w, v.y); - } - - // xywz - template - GLM_INLINE glm::vec<4, T, Q> xywz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.w, v.z); - } - - // xyww - template - GLM_INLINE glm::vec<4, T, Q> xyww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.w, v.w); - } - - // xzxx - template - GLM_INLINE glm::vec<4, T, Q> xzxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.x, v.x); - } - - // xzxy - template - GLM_INLINE glm::vec<4, T, Q> xzxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.x, v.y); - } - - // xzxz - template - GLM_INLINE glm::vec<4, T, Q> xzxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.x, v.z); - } - - // xzxw - template - GLM_INLINE glm::vec<4, T, Q> xzxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.x, v.w); - } - - // xzyx - template - GLM_INLINE glm::vec<4, T, Q> xzyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.y, v.x); - } - - // xzyy - template - GLM_INLINE glm::vec<4, T, Q> xzyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.y, v.y); - } - - // xzyz - template - GLM_INLINE glm::vec<4, T, Q> xzyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.y, v.z); - } - - // xzyw - template - GLM_INLINE glm::vec<4, T, Q> xzyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.y, v.w); - } - - // xzzx - template - GLM_INLINE glm::vec<4, T, Q> xzzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.z, v.x); - } - - // xzzy - template - GLM_INLINE glm::vec<4, T, Q> xzzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.z, v.y); - } - - // xzzz - template - GLM_INLINE glm::vec<4, T, Q> xzzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.z, v.z); - } - - // xzzw - template - GLM_INLINE glm::vec<4, T, Q> xzzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.z, v.w); - } - - // xzwx - template - GLM_INLINE glm::vec<4, T, Q> xzwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.w, v.x); - } - - // xzwy - template - GLM_INLINE glm::vec<4, T, Q> xzwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.w, v.y); - } - - // xzwz - template - GLM_INLINE glm::vec<4, T, Q> xzwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.w, v.z); - } - - // xzww - template - GLM_INLINE glm::vec<4, T, Q> xzww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.w, v.w); - } - - // xwxx - template - GLM_INLINE glm::vec<4, T, Q> xwxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.x, v.x); - } - - // xwxy - template - GLM_INLINE glm::vec<4, T, Q> xwxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.x, v.y); - } - - // xwxz - template - GLM_INLINE glm::vec<4, T, Q> xwxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.x, v.z); - } - - // xwxw - template - GLM_INLINE glm::vec<4, T, Q> xwxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.x, v.w); - } - - // xwyx - template - GLM_INLINE glm::vec<4, T, Q> xwyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.y, v.x); - } - - // xwyy - template - GLM_INLINE glm::vec<4, T, Q> xwyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.y, v.y); - } - - // xwyz - template - GLM_INLINE glm::vec<4, T, Q> xwyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.y, v.z); - } - - // xwyw - template - GLM_INLINE glm::vec<4, T, Q> xwyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.y, v.w); - } - - // xwzx - template - GLM_INLINE glm::vec<4, T, Q> xwzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.z, v.x); - } - - // xwzy - template - GLM_INLINE glm::vec<4, T, Q> xwzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.z, v.y); - } - - // xwzz - template - GLM_INLINE glm::vec<4, T, Q> xwzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.z, v.z); - } - - // xwzw - template - GLM_INLINE glm::vec<4, T, Q> xwzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.z, v.w); - } - - // xwwx - template - GLM_INLINE glm::vec<4, T, Q> xwwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.w, v.x); - } - - // xwwy - template - GLM_INLINE glm::vec<4, T, Q> xwwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.w, v.y); - } - - // xwwz - template - GLM_INLINE glm::vec<4, T, Q> xwwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.w, v.z); - } - - // xwww - template - GLM_INLINE glm::vec<4, T, Q> xwww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.w, v.w); - } - - // yxxx - template - GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x); - } - - // yxxy - template - GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y); - } - - // yxxz - template - GLM_INLINE glm::vec<4, T, Q> yxxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.z); - } - - // yxxw - template - GLM_INLINE glm::vec<4, T, Q> yxxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.w); - } - - // yxyx - template - GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x); - } - - // yxyy - template - GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y); - } - - // yxyz - template - GLM_INLINE glm::vec<4, T, Q> yxyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.z); - } - - // yxyw - template - GLM_INLINE glm::vec<4, T, Q> yxyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.w); - } - - // yxzx - template - GLM_INLINE glm::vec<4, T, Q> yxzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.z, v.x); - } - - // yxzy - template - GLM_INLINE glm::vec<4, T, Q> yxzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.z, v.y); - } - - // yxzz - template - GLM_INLINE glm::vec<4, T, Q> yxzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.z, v.z); - } - - // yxzw - template - GLM_INLINE glm::vec<4, T, Q> yxzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.z, v.w); - } - - // yxwx - template - GLM_INLINE glm::vec<4, T, Q> yxwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.w, v.x); - } - - // yxwy - template - GLM_INLINE glm::vec<4, T, Q> yxwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.w, v.y); - } - - // yxwz - template - GLM_INLINE glm::vec<4, T, Q> yxwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.w, v.z); - } - - // yxww - template - GLM_INLINE glm::vec<4, T, Q> yxww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.w, v.w); - } - - // yyxx - template - GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x); - } - - // yyxy - template - GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y); - } - - // yyxz - template - GLM_INLINE glm::vec<4, T, Q> yyxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.z); - } - - // yyxw - template - GLM_INLINE glm::vec<4, T, Q> yyxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.w); - } - - // yyyx - template - GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x); - } - - // yyyy - template - GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y); - } - - // yyyz - template - GLM_INLINE glm::vec<4, T, Q> yyyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.z); - } - - // yyyw - template - GLM_INLINE glm::vec<4, T, Q> yyyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.w); - } - - // yyzx - template - GLM_INLINE glm::vec<4, T, Q> yyzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.z, v.x); - } - - // yyzy - template - GLM_INLINE glm::vec<4, T, Q> yyzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.z, v.y); - } - - // yyzz - template - GLM_INLINE glm::vec<4, T, Q> yyzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.z, v.z); - } - - // yyzw - template - GLM_INLINE glm::vec<4, T, Q> yyzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.z, v.w); - } - - // yywx - template - GLM_INLINE glm::vec<4, T, Q> yywx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.w, v.x); - } - - // yywy - template - GLM_INLINE glm::vec<4, T, Q> yywy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.w, v.y); - } - - // yywz - template - GLM_INLINE glm::vec<4, T, Q> yywz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.w, v.z); - } - - // yyww - template - GLM_INLINE glm::vec<4, T, Q> yyww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.w, v.w); - } - - // yzxx - template - GLM_INLINE glm::vec<4, T, Q> yzxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.x, v.x); - } - - // yzxy - template - GLM_INLINE glm::vec<4, T, Q> yzxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.x, v.y); - } - - // yzxz - template - GLM_INLINE glm::vec<4, T, Q> yzxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.x, v.z); - } - - // yzxw - template - GLM_INLINE glm::vec<4, T, Q> yzxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.x, v.w); - } - - // yzyx - template - GLM_INLINE glm::vec<4, T, Q> yzyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.y, v.x); - } - - // yzyy - template - GLM_INLINE glm::vec<4, T, Q> yzyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.y, v.y); - } - - // yzyz - template - GLM_INLINE glm::vec<4, T, Q> yzyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.y, v.z); - } - - // yzyw - template - GLM_INLINE glm::vec<4, T, Q> yzyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.y, v.w); - } - - // yzzx - template - GLM_INLINE glm::vec<4, T, Q> yzzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.z, v.x); - } - - // yzzy - template - GLM_INLINE glm::vec<4, T, Q> yzzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.z, v.y); - } - - // yzzz - template - GLM_INLINE glm::vec<4, T, Q> yzzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.z, v.z); - } - - // yzzw - template - GLM_INLINE glm::vec<4, T, Q> yzzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.z, v.w); - } - - // yzwx - template - GLM_INLINE glm::vec<4, T, Q> yzwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.w, v.x); - } - - // yzwy - template - GLM_INLINE glm::vec<4, T, Q> yzwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.w, v.y); - } - - // yzwz - template - GLM_INLINE glm::vec<4, T, Q> yzwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.w, v.z); - } - - // yzww - template - GLM_INLINE glm::vec<4, T, Q> yzww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.w, v.w); - } - - // ywxx - template - GLM_INLINE glm::vec<4, T, Q> ywxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.x, v.x); - } - - // ywxy - template - GLM_INLINE glm::vec<4, T, Q> ywxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.x, v.y); - } - - // ywxz - template - GLM_INLINE glm::vec<4, T, Q> ywxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.x, v.z); - } - - // ywxw - template - GLM_INLINE glm::vec<4, T, Q> ywxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.x, v.w); - } - - // ywyx - template - GLM_INLINE glm::vec<4, T, Q> ywyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.y, v.x); - } - - // ywyy - template - GLM_INLINE glm::vec<4, T, Q> ywyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.y, v.y); - } - - // ywyz - template - GLM_INLINE glm::vec<4, T, Q> ywyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.y, v.z); - } - - // ywyw - template - GLM_INLINE glm::vec<4, T, Q> ywyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.y, v.w); - } - - // ywzx - template - GLM_INLINE glm::vec<4, T, Q> ywzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.z, v.x); - } - - // ywzy - template - GLM_INLINE glm::vec<4, T, Q> ywzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.z, v.y); - } - - // ywzz - template - GLM_INLINE glm::vec<4, T, Q> ywzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.z, v.z); - } - - // ywzw - template - GLM_INLINE glm::vec<4, T, Q> ywzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.z, v.w); - } - - // ywwx - template - GLM_INLINE glm::vec<4, T, Q> ywwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.w, v.x); - } - - // ywwy - template - GLM_INLINE glm::vec<4, T, Q> ywwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.w, v.y); - } - - // ywwz - template - GLM_INLINE glm::vec<4, T, Q> ywwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.w, v.z); - } - - // ywww - template - GLM_INLINE glm::vec<4, T, Q> ywww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.w, v.w); - } - - // zxxx - template - GLM_INLINE glm::vec<4, T, Q> zxxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.x, v.x); - } - - // zxxy - template - GLM_INLINE glm::vec<4, T, Q> zxxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.x, v.y); - } - - // zxxz - template - GLM_INLINE glm::vec<4, T, Q> zxxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.x, v.z); - } - - // zxxw - template - GLM_INLINE glm::vec<4, T, Q> zxxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.x, v.w); - } - - // zxyx - template - GLM_INLINE glm::vec<4, T, Q> zxyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.y, v.x); - } - - // zxyy - template - GLM_INLINE glm::vec<4, T, Q> zxyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.y, v.y); - } - - // zxyz - template - GLM_INLINE glm::vec<4, T, Q> zxyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.y, v.z); - } - - // zxyw - template - GLM_INLINE glm::vec<4, T, Q> zxyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.y, v.w); - } - - // zxzx - template - GLM_INLINE glm::vec<4, T, Q> zxzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.z, v.x); - } - - // zxzy - template - GLM_INLINE glm::vec<4, T, Q> zxzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.z, v.y); - } - - // zxzz - template - GLM_INLINE glm::vec<4, T, Q> zxzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.z, v.z); - } - - // zxzw - template - GLM_INLINE glm::vec<4, T, Q> zxzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.z, v.w); - } - - // zxwx - template - GLM_INLINE glm::vec<4, T, Q> zxwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.w, v.x); - } - - // zxwy - template - GLM_INLINE glm::vec<4, T, Q> zxwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.w, v.y); - } - - // zxwz - template - GLM_INLINE glm::vec<4, T, Q> zxwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.w, v.z); - } - - // zxww - template - GLM_INLINE glm::vec<4, T, Q> zxww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.w, v.w); - } - - // zyxx - template - GLM_INLINE glm::vec<4, T, Q> zyxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.x, v.x); - } - - // zyxy - template - GLM_INLINE glm::vec<4, T, Q> zyxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.x, v.y); - } - - // zyxz - template - GLM_INLINE glm::vec<4, T, Q> zyxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.x, v.z); - } - - // zyxw - template - GLM_INLINE glm::vec<4, T, Q> zyxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.x, v.w); - } - - // zyyx - template - GLM_INLINE glm::vec<4, T, Q> zyyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.y, v.x); - } - - // zyyy - template - GLM_INLINE glm::vec<4, T, Q> zyyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.y, v.y); - } - - // zyyz - template - GLM_INLINE glm::vec<4, T, Q> zyyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.y, v.z); - } - - // zyyw - template - GLM_INLINE glm::vec<4, T, Q> zyyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.y, v.w); - } - - // zyzx - template - GLM_INLINE glm::vec<4, T, Q> zyzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.z, v.x); - } - - // zyzy - template - GLM_INLINE glm::vec<4, T, Q> zyzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.z, v.y); - } - - // zyzz - template - GLM_INLINE glm::vec<4, T, Q> zyzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.z, v.z); - } - - // zyzw - template - GLM_INLINE glm::vec<4, T, Q> zyzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.z, v.w); - } - - // zywx - template - GLM_INLINE glm::vec<4, T, Q> zywx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.w, v.x); - } - - // zywy - template - GLM_INLINE glm::vec<4, T, Q> zywy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.w, v.y); - } - - // zywz - template - GLM_INLINE glm::vec<4, T, Q> zywz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.w, v.z); - } - - // zyww - template - GLM_INLINE glm::vec<4, T, Q> zyww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.w, v.w); - } - - // zzxx - template - GLM_INLINE glm::vec<4, T, Q> zzxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.x, v.x); - } - - // zzxy - template - GLM_INLINE glm::vec<4, T, Q> zzxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.x, v.y); - } - - // zzxz - template - GLM_INLINE glm::vec<4, T, Q> zzxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.x, v.z); - } - - // zzxw - template - GLM_INLINE glm::vec<4, T, Q> zzxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.x, v.w); - } - - // zzyx - template - GLM_INLINE glm::vec<4, T, Q> zzyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.y, v.x); - } - - // zzyy - template - GLM_INLINE glm::vec<4, T, Q> zzyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.y, v.y); - } - - // zzyz - template - GLM_INLINE glm::vec<4, T, Q> zzyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.y, v.z); - } - - // zzyw - template - GLM_INLINE glm::vec<4, T, Q> zzyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.y, v.w); - } - - // zzzx - template - GLM_INLINE glm::vec<4, T, Q> zzzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.z, v.x); - } - - // zzzy - template - GLM_INLINE glm::vec<4, T, Q> zzzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.z, v.y); - } - - // zzzz - template - GLM_INLINE glm::vec<4, T, Q> zzzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.z, v.z); - } - - // zzzw - template - GLM_INLINE glm::vec<4, T, Q> zzzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.z, v.w); - } - - // zzwx - template - GLM_INLINE glm::vec<4, T, Q> zzwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.w, v.x); - } - - // zzwy - template - GLM_INLINE glm::vec<4, T, Q> zzwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.w, v.y); - } - - // zzwz - template - GLM_INLINE glm::vec<4, T, Q> zzwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.w, v.z); - } - - // zzww - template - GLM_INLINE glm::vec<4, T, Q> zzww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.w, v.w); - } - - // zwxx - template - GLM_INLINE glm::vec<4, T, Q> zwxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.x, v.x); - } - - // zwxy - template - GLM_INLINE glm::vec<4, T, Q> zwxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.x, v.y); - } - - // zwxz - template - GLM_INLINE glm::vec<4, T, Q> zwxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.x, v.z); - } - - // zwxw - template - GLM_INLINE glm::vec<4, T, Q> zwxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.x, v.w); - } - - // zwyx - template - GLM_INLINE glm::vec<4, T, Q> zwyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.y, v.x); - } - - // zwyy - template - GLM_INLINE glm::vec<4, T, Q> zwyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.y, v.y); - } - - // zwyz - template - GLM_INLINE glm::vec<4, T, Q> zwyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.y, v.z); - } - - // zwyw - template - GLM_INLINE glm::vec<4, T, Q> zwyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.y, v.w); - } - - // zwzx - template - GLM_INLINE glm::vec<4, T, Q> zwzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.z, v.x); - } - - // zwzy - template - GLM_INLINE glm::vec<4, T, Q> zwzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.z, v.y); - } - - // zwzz - template - GLM_INLINE glm::vec<4, T, Q> zwzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.z, v.z); - } - - // zwzw - template - GLM_INLINE glm::vec<4, T, Q> zwzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.z, v.w); - } - - // zwwx - template - GLM_INLINE glm::vec<4, T, Q> zwwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.w, v.x); - } - - // zwwy - template - GLM_INLINE glm::vec<4, T, Q> zwwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.w, v.y); - } - - // zwwz - template - GLM_INLINE glm::vec<4, T, Q> zwwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.w, v.z); - } - - // zwww - template - GLM_INLINE glm::vec<4, T, Q> zwww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.w, v.w); - } - - // wxxx - template - GLM_INLINE glm::vec<4, T, Q> wxxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.x, v.x); - } - - // wxxy - template - GLM_INLINE glm::vec<4, T, Q> wxxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.x, v.y); - } - - // wxxz - template - GLM_INLINE glm::vec<4, T, Q> wxxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.x, v.z); - } - - // wxxw - template - GLM_INLINE glm::vec<4, T, Q> wxxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.x, v.w); - } - - // wxyx - template - GLM_INLINE glm::vec<4, T, Q> wxyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.y, v.x); - } - - // wxyy - template - GLM_INLINE glm::vec<4, T, Q> wxyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.y, v.y); - } - - // wxyz - template - GLM_INLINE glm::vec<4, T, Q> wxyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.y, v.z); - } - - // wxyw - template - GLM_INLINE glm::vec<4, T, Q> wxyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.y, v.w); - } - - // wxzx - template - GLM_INLINE glm::vec<4, T, Q> wxzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.z, v.x); - } - - // wxzy - template - GLM_INLINE glm::vec<4, T, Q> wxzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.z, v.y); - } - - // wxzz - template - GLM_INLINE glm::vec<4, T, Q> wxzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.z, v.z); - } - - // wxzw - template - GLM_INLINE glm::vec<4, T, Q> wxzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.z, v.w); - } - - // wxwx - template - GLM_INLINE glm::vec<4, T, Q> wxwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.w, v.x); - } - - // wxwy - template - GLM_INLINE glm::vec<4, T, Q> wxwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.w, v.y); - } - - // wxwz - template - GLM_INLINE glm::vec<4, T, Q> wxwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.w, v.z); - } - - // wxww - template - GLM_INLINE glm::vec<4, T, Q> wxww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.w, v.w); - } - - // wyxx - template - GLM_INLINE glm::vec<4, T, Q> wyxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.x, v.x); - } - - // wyxy - template - GLM_INLINE glm::vec<4, T, Q> wyxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.x, v.y); - } - - // wyxz - template - GLM_INLINE glm::vec<4, T, Q> wyxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.x, v.z); - } - - // wyxw - template - GLM_INLINE glm::vec<4, T, Q> wyxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.x, v.w); - } - - // wyyx - template - GLM_INLINE glm::vec<4, T, Q> wyyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.y, v.x); - } - - // wyyy - template - GLM_INLINE glm::vec<4, T, Q> wyyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.y, v.y); - } - - // wyyz - template - GLM_INLINE glm::vec<4, T, Q> wyyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.y, v.z); - } - - // wyyw - template - GLM_INLINE glm::vec<4, T, Q> wyyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.y, v.w); - } - - // wyzx - template - GLM_INLINE glm::vec<4, T, Q> wyzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.z, v.x); - } - - // wyzy - template - GLM_INLINE glm::vec<4, T, Q> wyzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.z, v.y); - } - - // wyzz - template - GLM_INLINE glm::vec<4, T, Q> wyzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.z, v.z); - } - - // wyzw - template - GLM_INLINE glm::vec<4, T, Q> wyzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.z, v.w); - } - - // wywx - template - GLM_INLINE glm::vec<4, T, Q> wywx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.w, v.x); - } - - // wywy - template - GLM_INLINE glm::vec<4, T, Q> wywy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.w, v.y); - } - - // wywz - template - GLM_INLINE glm::vec<4, T, Q> wywz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.w, v.z); - } - - // wyww - template - GLM_INLINE glm::vec<4, T, Q> wyww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.w, v.w); - } - - // wzxx - template - GLM_INLINE glm::vec<4, T, Q> wzxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.x, v.x); - } - - // wzxy - template - GLM_INLINE glm::vec<4, T, Q> wzxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.x, v.y); - } - - // wzxz - template - GLM_INLINE glm::vec<4, T, Q> wzxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.x, v.z); - } - - // wzxw - template - GLM_INLINE glm::vec<4, T, Q> wzxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.x, v.w); - } - - // wzyx - template - GLM_INLINE glm::vec<4, T, Q> wzyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.y, v.x); - } - - // wzyy - template - GLM_INLINE glm::vec<4, T, Q> wzyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.y, v.y); - } - - // wzyz - template - GLM_INLINE glm::vec<4, T, Q> wzyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.y, v.z); - } - - // wzyw - template - GLM_INLINE glm::vec<4, T, Q> wzyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.y, v.w); - } - - // wzzx - template - GLM_INLINE glm::vec<4, T, Q> wzzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.z, v.x); - } - - // wzzy - template - GLM_INLINE glm::vec<4, T, Q> wzzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.z, v.y); - } - - // wzzz - template - GLM_INLINE glm::vec<4, T, Q> wzzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.z, v.z); - } - - // wzzw - template - GLM_INLINE glm::vec<4, T, Q> wzzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.z, v.w); - } - - // wzwx - template - GLM_INLINE glm::vec<4, T, Q> wzwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.w, v.x); - } - - // wzwy - template - GLM_INLINE glm::vec<4, T, Q> wzwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.w, v.y); - } - - // wzwz - template - GLM_INLINE glm::vec<4, T, Q> wzwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.w, v.z); - } - - // wzww - template - GLM_INLINE glm::vec<4, T, Q> wzww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.w, v.w); - } - - // wwxx - template - GLM_INLINE glm::vec<4, T, Q> wwxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.x, v.x); - } - - // wwxy - template - GLM_INLINE glm::vec<4, T, Q> wwxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.x, v.y); - } - - // wwxz - template - GLM_INLINE glm::vec<4, T, Q> wwxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.x, v.z); - } - - // wwxw - template - GLM_INLINE glm::vec<4, T, Q> wwxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.x, v.w); - } - - // wwyx - template - GLM_INLINE glm::vec<4, T, Q> wwyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.y, v.x); - } - - // wwyy - template - GLM_INLINE glm::vec<4, T, Q> wwyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.y, v.y); - } - - // wwyz - template - GLM_INLINE glm::vec<4, T, Q> wwyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.y, v.z); - } - - // wwyw - template - GLM_INLINE glm::vec<4, T, Q> wwyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.y, v.w); - } - - // wwzx - template - GLM_INLINE glm::vec<4, T, Q> wwzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.z, v.x); - } - - // wwzy - template - GLM_INLINE glm::vec<4, T, Q> wwzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.z, v.y); - } - - // wwzz - template - GLM_INLINE glm::vec<4, T, Q> wwzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.z, v.z); - } - - // wwzw - template - GLM_INLINE glm::vec<4, T, Q> wwzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.z, v.w); - } - - // wwwx - template - GLM_INLINE glm::vec<4, T, Q> wwwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.w, v.x); - } - - // wwwy - template - GLM_INLINE glm::vec<4, T, Q> wwwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.w, v.y); - } - - // wwwz - template - GLM_INLINE glm::vec<4, T, Q> wwwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.w, v.z); - } - - // wwww - template - GLM_INLINE glm::vec<4, T, Q> wwww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.w, v.w); - } - -} diff --git a/src/vendor/glm/gtx/vector_angle.hpp b/src/vendor/glm/gtx/vector_angle.hpp deleted file mode 100755 index 9ae4371..0000000 --- a/src/vendor/glm/gtx/vector_angle.hpp +++ /dev/null @@ -1,57 +0,0 @@ -/// @ref gtx_vector_angle -/// @file glm/gtx/vector_angle.hpp -/// -/// @see core (dependence) -/// @see gtx_quaternion (dependence) -/// @see gtx_epsilon (dependence) -/// -/// @defgroup gtx_vector_angle GLM_GTX_vector_angle -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Compute angle between vectors - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/epsilon.hpp" -#include "../gtx/quaternion.hpp" -#include "../gtx/rotate_vector.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_vector_angle is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_vector_angle extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_vector_angle - /// @{ - - //! Returns the absolute angle between two vectors. - //! Parameters need to be normalized. - /// @see gtx_vector_angle extension. - template - GLM_FUNC_DECL T angle(vec const& x, vec const& y); - - //! Returns the oriented angle between two 2d vectors. - //! Parameters need to be normalized. - /// @see gtx_vector_angle extension. - template - GLM_FUNC_DECL T orientedAngle(vec<2, T, Q> const& x, vec<2, T, Q> const& y); - - //! Returns the oriented angle between two 3d vectors based from a reference axis. - //! Parameters need to be normalized. - /// @see gtx_vector_angle extension. - template - GLM_FUNC_DECL T orientedAngle(vec<3, T, Q> const& x, vec<3, T, Q> const& y, vec<3, T, Q> const& ref); - - /// @} -}// namespace glm - -#include "vector_angle.inl" diff --git a/src/vendor/glm/gtx/vector_angle.inl b/src/vendor/glm/gtx/vector_angle.inl deleted file mode 100755 index 878160d..0000000 --- a/src/vendor/glm/gtx/vector_angle.inl +++ /dev/null @@ -1,45 +0,0 @@ -/// @ref gtx_vector_angle - -namespace glm -{ - template - GLM_FUNC_QUALIFIER genType angle - ( - genType const& x, - genType const& y - ) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'angle' only accept floating-point inputs"); - return acos(clamp(dot(x, y), genType(-1), genType(1))); - } - - template - GLM_FUNC_QUALIFIER T angle(vec const& x, vec const& y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'angle' only accept floating-point inputs"); - return acos(clamp(dot(x, y), T(-1), T(1))); - } - - template - GLM_FUNC_QUALIFIER T orientedAngle(vec<2, T, Q> const& x, vec<2, T, Q> const& y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'orientedAngle' only accept floating-point inputs"); - T const Angle(acos(clamp(dot(x, y), T(-1), T(1)))); - - T const partialCross = x.x * y.y - y.x * x.y; - - if (partialCross > T(0)) - return Angle; - else - return -Angle; - } - - template - GLM_FUNC_QUALIFIER T orientedAngle(vec<3, T, Q> const& x, vec<3, T, Q> const& y, vec<3, T, Q> const& ref) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'orientedAngle' only accept floating-point inputs"); - - T const Angle(acos(clamp(dot(x, y), T(-1), T(1)))); - return mix(Angle, -Angle, dot(ref, cross(x, y)) < T(0)); - } -}//namespace glm diff --git a/src/vendor/glm/gtx/vector_query.hpp b/src/vendor/glm/gtx/vector_query.hpp deleted file mode 100755 index 77c7b97..0000000 --- a/src/vendor/glm/gtx/vector_query.hpp +++ /dev/null @@ -1,66 +0,0 @@ -/// @ref gtx_vector_query -/// @file glm/gtx/vector_query.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_vector_query GLM_GTX_vector_query -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Query informations of vector types - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_vector_query is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_vector_query extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_vector_query - /// @{ - - //! Check whether two vectors are collinears. - /// @see gtx_vector_query extensions. - template - GLM_FUNC_DECL bool areCollinear(vec const& v0, vec const& v1, T const& epsilon); - - //! Check whether two vectors are orthogonals. - /// @see gtx_vector_query extensions. - template - GLM_FUNC_DECL bool areOrthogonal(vec const& v0, vec const& v1, T const& epsilon); - - //! Check whether a vector is normalized. - /// @see gtx_vector_query extensions. - template - GLM_FUNC_DECL bool isNormalized(vec const& v, T const& epsilon); - - //! Check whether a vector is null. - /// @see gtx_vector_query extensions. - template - GLM_FUNC_DECL bool isNull(vec const& v, T const& epsilon); - - //! Check whether a each component of a vector is null. - /// @see gtx_vector_query extensions. - template - GLM_FUNC_DECL vec isCompNull(vec const& v, T const& epsilon); - - //! Check whether two vectors are orthonormal. - /// @see gtx_vector_query extensions. - template - GLM_FUNC_DECL bool areOrthonormal(vec const& v0, vec const& v1, T const& epsilon); - - /// @} -}// namespace glm - -#include "vector_query.inl" diff --git a/src/vendor/glm/gtx/vector_query.inl b/src/vendor/glm/gtx/vector_query.inl deleted file mode 100755 index d1a5c9b..0000000 --- a/src/vendor/glm/gtx/vector_query.inl +++ /dev/null @@ -1,154 +0,0 @@ -/// @ref gtx_vector_query - -#include - -namespace glm{ -namespace detail -{ - template - struct compute_areCollinear{}; - - template - struct compute_areCollinear<2, T, Q> - { - GLM_FUNC_QUALIFIER static bool call(vec<2, T, Q> const& v0, vec<2, T, Q> const& v1, T const& epsilon) - { - return length(cross(vec<3, T, Q>(v0, static_cast(0)), vec<3, T, Q>(v1, static_cast(0)))) < epsilon; - } - }; - - template - struct compute_areCollinear<3, T, Q> - { - GLM_FUNC_QUALIFIER static bool call(vec<3, T, Q> const& v0, vec<3, T, Q> const& v1, T const& epsilon) - { - return length(cross(v0, v1)) < epsilon; - } - }; - - template - struct compute_areCollinear<4, T, Q> - { - GLM_FUNC_QUALIFIER static bool call(vec<4, T, Q> const& v0, vec<4, T, Q> const& v1, T const& epsilon) - { - return length(cross(vec<3, T, Q>(v0), vec<3, T, Q>(v1))) < epsilon; - } - }; - - template - struct compute_isCompNull{}; - - template - struct compute_isCompNull<2, T, Q> - { - GLM_FUNC_QUALIFIER static vec<2, bool, Q> call(vec<2, T, Q> const& v, T const& epsilon) - { - return vec<2, bool, Q>( - (abs(v.x) < epsilon), - (abs(v.y) < epsilon)); - } - }; - - template - struct compute_isCompNull<3, T, Q> - { - GLM_FUNC_QUALIFIER static vec<3, bool, Q> call(vec<3, T, Q> const& v, T const& epsilon) - { - return vec<3, bool, Q>( - (abs(v.x) < epsilon), - (abs(v.y) < epsilon), - (abs(v.z) < epsilon)); - } - }; - - template - struct compute_isCompNull<4, T, Q> - { - GLM_FUNC_QUALIFIER static vec<4, bool, Q> call(vec<4, T, Q> const& v, T const& epsilon) - { - return vec<4, bool, Q>( - (abs(v.x) < epsilon), - (abs(v.y) < epsilon), - (abs(v.z) < epsilon), - (abs(v.w) < epsilon)); - } - }; - -}//namespace detail - - template - GLM_FUNC_QUALIFIER bool areCollinear(vec const& v0, vec const& v1, T const& epsilon) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'areCollinear' only accept floating-point inputs"); - - return detail::compute_areCollinear::call(v0, v1, epsilon); - } - - template - GLM_FUNC_QUALIFIER bool areOrthogonal(vec const& v0, vec const& v1, T const& epsilon) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'areOrthogonal' only accept floating-point inputs"); - - return abs(dot(v0, v1)) <= max( - static_cast(1), - length(v0)) * max(static_cast(1), length(v1)) * epsilon; - } - - template - GLM_FUNC_QUALIFIER bool isNormalized(vec const& v, T const& epsilon) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isNormalized' only accept floating-point inputs"); - - return abs(length(v) - static_cast(1)) <= static_cast(2) * epsilon; - } - - template - GLM_FUNC_QUALIFIER bool isNull(vec const& v, T const& epsilon) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isNull' only accept floating-point inputs"); - - return length(v) <= epsilon; - } - - template - GLM_FUNC_QUALIFIER vec isCompNull(vec const& v, T const& epsilon) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isCompNull' only accept floating-point inputs"); - - return detail::compute_isCompNull::call(v, epsilon); - } - - template - GLM_FUNC_QUALIFIER vec<2, bool, Q> isCompNull(vec<2, T, Q> const& v, T const& epsilon) - { - return vec<2, bool, Q>( - abs(v.x) < epsilon, - abs(v.y) < epsilon); - } - - template - GLM_FUNC_QUALIFIER vec<3, bool, Q> isCompNull(vec<3, T, Q> const& v, T const& epsilon) - { - return vec<3, bool, Q>( - abs(v.x) < epsilon, - abs(v.y) < epsilon, - abs(v.z) < epsilon); - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> isCompNull(vec<4, T, Q> const& v, T const& epsilon) - { - return vec<4, bool, Q>( - abs(v.x) < epsilon, - abs(v.y) < epsilon, - abs(v.z) < epsilon, - abs(v.w) < epsilon); - } - - template - GLM_FUNC_QUALIFIER bool areOrthonormal(vec const& v0, vec const& v1, T const& epsilon) - { - return isNormalized(v0, epsilon) && isNormalized(v1, epsilon) && (abs(dot(v0, v1)) <= epsilon); - } - -}//namespace glm diff --git a/src/vendor/glm/gtx/wrap.hpp b/src/vendor/glm/gtx/wrap.hpp deleted file mode 100755 index ad4eb3f..0000000 --- a/src/vendor/glm/gtx/wrap.hpp +++ /dev/null @@ -1,37 +0,0 @@ -/// @ref gtx_wrap -/// @file glm/gtx/wrap.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_wrap GLM_GTX_wrap -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Wrapping mode of texture coordinates. - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../ext/scalar_common.hpp" -#include "../ext/vector_common.hpp" -#include "../gtc/vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_wrap is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_wrap extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_wrap - /// @{ - - /// @} -}// namespace glm - -#include "wrap.inl" diff --git a/src/vendor/glm/gtx/wrap.inl b/src/vendor/glm/gtx/wrap.inl deleted file mode 100755 index 4be3b4c..0000000 --- a/src/vendor/glm/gtx/wrap.inl +++ /dev/null @@ -1,6 +0,0 @@ -/// @ref gtx_wrap - -namespace glm -{ - -}//namespace glm diff --git a/src/vendor/glm/integer.hpp b/src/vendor/glm/integer.hpp deleted file mode 100755 index 8817db3..0000000 --- a/src/vendor/glm/integer.hpp +++ /dev/null @@ -1,212 +0,0 @@ -/// @ref core -/// @file glm/integer.hpp -/// -/// @see GLSL 4.20.8 specification, section 8.8 Integer Functions -/// -/// @defgroup core_func_integer Integer functions -/// @ingroup core -/// -/// Provides GLSL functions on integer types -/// -/// These all operate component-wise. The description is per component. -/// The notation [a, b] means the set of bits from bit-number a through bit-number -/// b, inclusive. The lowest-order bit is bit 0. -/// -/// Include to use these core features. - -#pragma once - -#include "detail/qualifier.hpp" -#include "common.hpp" -#include "vector_relational.hpp" - -namespace glm -{ - /// @addtogroup core_func_integer - /// @{ - - /// Adds 32-bit unsigned integer x and y, returning the sum - /// modulo pow(2, 32). The value carry is set to 0 if the sum was - /// less than pow(2, 32), or to 1 otherwise. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// - /// @see GLSL uaddCarry man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL vec uaddCarry( - vec const& x, - vec const& y, - vec & carry); - - /// Subtracts the 32-bit unsigned integer y from x, returning - /// the difference if non-negative, or pow(2, 32) plus the difference - /// otherwise. The value borrow is set to 0 if x >= y, or to 1 otherwise. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// - /// @see GLSL usubBorrow man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL vec usubBorrow( - vec const& x, - vec const& y, - vec & borrow); - - /// Multiplies 32-bit integers x and y, producing a 64-bit - /// result. The 32 least-significant bits are returned in lsb. - /// The 32 most-significant bits are returned in msb. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// - /// @see GLSL umulExtended man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL void umulExtended( - vec const& x, - vec const& y, - vec & msb, - vec & lsb); - - /// Multiplies 32-bit integers x and y, producing a 64-bit - /// result. The 32 least-significant bits are returned in lsb. - /// The 32 most-significant bits are returned in msb. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// - /// @see GLSL imulExtended man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL void imulExtended( - vec const& x, - vec const& y, - vec & msb, - vec & lsb); - - /// Extracts bits [offset, offset + bits - 1] from value, - /// returning them in the least significant bits of the result. - /// For unsigned data types, the most significant bits of the - /// result will be set to zero. For signed data types, the - /// most significant bits will be set to the value of bit offset + base - 1. - /// - /// If bits is zero, the result will be zero. The result will be - /// undefined if offset or bits is negative, or if the sum of - /// offset and bits is greater than the number of bits used - /// to store the operand. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Signed or unsigned integer scalar types. - /// - /// @see GLSL bitfieldExtract man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL vec bitfieldExtract( - vec const& Value, - int Offset, - int Bits); - - /// Returns the insertion the bits least-significant bits of insert into base. - /// - /// The result will have bits [offset, offset + bits - 1] taken - /// from bits [0, bits - 1] of insert, and all other bits taken - /// directly from the corresponding bits of base. If bits is - /// zero, the result will simply be base. The result will be - /// undefined if offset or bits is negative, or if the sum of - /// offset and bits is greater than the number of bits used to - /// store the operand. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Signed or unsigned integer scalar or vector types. - /// - /// @see GLSL bitfieldInsert man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL vec bitfieldInsert( - vec const& Base, - vec const& Insert, - int Offset, - int Bits); - - /// Returns the reversal of the bits of value. - /// The bit numbered n of the result will be taken from bit (bits - 1) - n of value, - /// where bits is the total number of bits used to represent value. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Signed or unsigned integer scalar or vector types. - /// - /// @see GLSL bitfieldReverse man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL vec bitfieldReverse(vec const& v); - - /// Returns the number of bits set to 1 in the binary representation of value. - /// - /// @tparam genType Signed or unsigned integer scalar or vector types. - /// - /// @see GLSL bitCount man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL int bitCount(genType v); - - /// Returns the number of bits set to 1 in the binary representation of value. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Signed or unsigned integer scalar or vector types. - /// - /// @see GLSL bitCount man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL vec bitCount(vec const& v); - - /// Returns the bit number of the least significant bit set to - /// 1 in the binary representation of value. - /// If value is zero, -1 will be returned. - /// - /// @tparam genIUType Signed or unsigned integer scalar types. - /// - /// @see GLSL findLSB man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL int findLSB(genIUType x); - - /// Returns the bit number of the least significant bit set to - /// 1 in the binary representation of value. - /// If value is zero, -1 will be returned. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Signed or unsigned integer scalar types. - /// - /// @see GLSL findLSB man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL vec findLSB(vec const& v); - - /// Returns the bit number of the most significant bit in the binary representation of value. - /// For positive integers, the result will be the bit number of the most significant bit set to 1. - /// For negative integers, the result will be the bit number of the most significant - /// bit set to 0. For a value of zero or negative one, -1 will be returned. - /// - /// @tparam genIUType Signed or unsigned integer scalar types. - /// - /// @see GLSL findMSB man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL int findMSB(genIUType x); - - /// Returns the bit number of the most significant bit in the binary representation of value. - /// For positive integers, the result will be the bit number of the most significant bit set to 1. - /// For negative integers, the result will be the bit number of the most significant - /// bit set to 0. For a value of zero or negative one, -1 will be returned. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Signed or unsigned integer scalar types. - /// - /// @see GLSL findMSB man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL vec findMSB(vec const& v); - - /// @} -}//namespace glm - -#include "detail/func_integer.inl" diff --git a/src/vendor/glm/mat2x2.hpp b/src/vendor/glm/mat2x2.hpp deleted file mode 100755 index 96bec96..0000000 --- a/src/vendor/glm/mat2x2.hpp +++ /dev/null @@ -1,9 +0,0 @@ -/// @ref core -/// @file glm/mat2x2.hpp - -#pragma once -#include "./ext/matrix_double2x2.hpp" -#include "./ext/matrix_double2x2_precision.hpp" -#include "./ext/matrix_float2x2.hpp" -#include "./ext/matrix_float2x2_precision.hpp" - diff --git a/src/vendor/glm/mat2x3.hpp b/src/vendor/glm/mat2x3.hpp deleted file mode 100755 index d68dc25..0000000 --- a/src/vendor/glm/mat2x3.hpp +++ /dev/null @@ -1,9 +0,0 @@ -/// @ref core -/// @file glm/mat2x3.hpp - -#pragma once -#include "./ext/matrix_double2x3.hpp" -#include "./ext/matrix_double2x3_precision.hpp" -#include "./ext/matrix_float2x3.hpp" -#include "./ext/matrix_float2x3_precision.hpp" - diff --git a/src/vendor/glm/mat2x4.hpp b/src/vendor/glm/mat2x4.hpp deleted file mode 100755 index b04b738..0000000 --- a/src/vendor/glm/mat2x4.hpp +++ /dev/null @@ -1,9 +0,0 @@ -/// @ref core -/// @file glm/mat2x4.hpp - -#pragma once -#include "./ext/matrix_double2x4.hpp" -#include "./ext/matrix_double2x4_precision.hpp" -#include "./ext/matrix_float2x4.hpp" -#include "./ext/matrix_float2x4_precision.hpp" - diff --git a/src/vendor/glm/mat3x2.hpp b/src/vendor/glm/mat3x2.hpp deleted file mode 100755 index c853153..0000000 --- a/src/vendor/glm/mat3x2.hpp +++ /dev/null @@ -1,9 +0,0 @@ -/// @ref core -/// @file glm/mat3x2.hpp - -#pragma once -#include "./ext/matrix_double3x2.hpp" -#include "./ext/matrix_double3x2_precision.hpp" -#include "./ext/matrix_float3x2.hpp" -#include "./ext/matrix_float3x2_precision.hpp" - diff --git a/src/vendor/glm/mat3x3.hpp b/src/vendor/glm/mat3x3.hpp deleted file mode 100755 index fd4fa31..0000000 --- a/src/vendor/glm/mat3x3.hpp +++ /dev/null @@ -1,8 +0,0 @@ -/// @ref core -/// @file glm/mat3x3.hpp - -#pragma once -#include "./ext/matrix_double3x3.hpp" -#include "./ext/matrix_double3x3_precision.hpp" -#include "./ext/matrix_float3x3.hpp" -#include "./ext/matrix_float3x3_precision.hpp" diff --git a/src/vendor/glm/mat3x4.hpp b/src/vendor/glm/mat3x4.hpp deleted file mode 100755 index 6342bf5..0000000 --- a/src/vendor/glm/mat3x4.hpp +++ /dev/null @@ -1,8 +0,0 @@ -/// @ref core -/// @file glm/mat3x4.hpp - -#pragma once -#include "./ext/matrix_double3x4.hpp" -#include "./ext/matrix_double3x4_precision.hpp" -#include "./ext/matrix_float3x4.hpp" -#include "./ext/matrix_float3x4_precision.hpp" diff --git a/src/vendor/glm/mat4x2.hpp b/src/vendor/glm/mat4x2.hpp deleted file mode 100755 index e013e46..0000000 --- a/src/vendor/glm/mat4x2.hpp +++ /dev/null @@ -1,9 +0,0 @@ -/// @ref core -/// @file glm/mat4x2.hpp - -#pragma once -#include "./ext/matrix_double4x2.hpp" -#include "./ext/matrix_double4x2_precision.hpp" -#include "./ext/matrix_float4x2.hpp" -#include "./ext/matrix_float4x2_precision.hpp" - diff --git a/src/vendor/glm/mat4x3.hpp b/src/vendor/glm/mat4x3.hpp deleted file mode 100755 index 205725a..0000000 --- a/src/vendor/glm/mat4x3.hpp +++ /dev/null @@ -1,8 +0,0 @@ -/// @ref core -/// @file glm/mat4x3.hpp - -#pragma once -#include "./ext/matrix_double4x3.hpp" -#include "./ext/matrix_double4x3_precision.hpp" -#include "./ext/matrix_float4x3.hpp" -#include "./ext/matrix_float4x3_precision.hpp" diff --git a/src/vendor/glm/mat4x4.hpp b/src/vendor/glm/mat4x4.hpp deleted file mode 100755 index 3515f7f..0000000 --- a/src/vendor/glm/mat4x4.hpp +++ /dev/null @@ -1,9 +0,0 @@ -/// @ref core -/// @file glm/mat4x4.hpp - -#pragma once -#include "./ext/matrix_double4x4.hpp" -#include "./ext/matrix_double4x4_precision.hpp" -#include "./ext/matrix_float4x4.hpp" -#include "./ext/matrix_float4x4_precision.hpp" - diff --git a/src/vendor/glm/matrix.hpp b/src/vendor/glm/matrix.hpp deleted file mode 100755 index 4584c92..0000000 --- a/src/vendor/glm/matrix.hpp +++ /dev/null @@ -1,161 +0,0 @@ -/// @ref core -/// @file glm/matrix.hpp -/// -/// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions -/// -/// @defgroup core_func_matrix Matrix functions -/// @ingroup core -/// -/// Provides GLSL matrix functions. -/// -/// Include to use these core features. - -#pragma once - -// Dependencies -#include "detail/qualifier.hpp" -#include "detail/setup.hpp" -#include "vec2.hpp" -#include "vec3.hpp" -#include "vec4.hpp" -#include "mat2x2.hpp" -#include "mat2x3.hpp" -#include "mat2x4.hpp" -#include "mat3x2.hpp" -#include "mat3x3.hpp" -#include "mat3x4.hpp" -#include "mat4x2.hpp" -#include "mat4x3.hpp" -#include "mat4x4.hpp" - -namespace glm { -namespace detail -{ - template - struct outerProduct_trait{}; - - template - struct outerProduct_trait<2, 2, T, Q> - { - typedef mat<2, 2, T, Q> type; - }; - - template - struct outerProduct_trait<2, 3, T, Q> - { - typedef mat<3, 2, T, Q> type; - }; - - template - struct outerProduct_trait<2, 4, T, Q> - { - typedef mat<4, 2, T, Q> type; - }; - - template - struct outerProduct_trait<3, 2, T, Q> - { - typedef mat<2, 3, T, Q> type; - }; - - template - struct outerProduct_trait<3, 3, T, Q> - { - typedef mat<3, 3, T, Q> type; - }; - - template - struct outerProduct_trait<3, 4, T, Q> - { - typedef mat<4, 3, T, Q> type; - }; - - template - struct outerProduct_trait<4, 2, T, Q> - { - typedef mat<2, 4, T, Q> type; - }; - - template - struct outerProduct_trait<4, 3, T, Q> - { - typedef mat<3, 4, T, Q> type; - }; - - template - struct outerProduct_trait<4, 4, T, Q> - { - typedef mat<4, 4, T, Q> type; - }; -}//namespace detail - - /// @addtogroup core_func_matrix - /// @{ - - /// Multiply matrix x by matrix y component-wise, i.e., - /// result[i][j] is the scalar product of x[i][j] and y[i][j]. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number a column - /// @tparam R Integer between 1 and 4 included that qualify the number a row - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL matrixCompMult man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - template - GLM_FUNC_DECL mat matrixCompMult(mat const& x, mat const& y); - - /// Treats the first parameter c as a column vector - /// and the second parameter r as a row vector - /// and does a linear algebraic matrix multiply c * r. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number a column - /// @tparam R Integer between 1 and 4 included that qualify the number a row - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL outerProduct man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - template - GLM_FUNC_DECL typename detail::outerProduct_trait::type outerProduct(vec const& c, vec const& r); - - /// Returns the transposed matrix of x - /// - /// @tparam C Integer between 1 and 4 included that qualify the number a column - /// @tparam R Integer between 1 and 4 included that qualify the number a row - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL transpose man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - template - GLM_FUNC_DECL typename mat::transpose_type transpose(mat const& x); - - /// Return the determinant of a squared matrix. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number a column - /// @tparam R Integer between 1 and 4 included that qualify the number a row - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL determinant man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - template - GLM_FUNC_DECL T determinant(mat const& m); - - /// Return the inverse of a squared matrix. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number a column - /// @tparam R Integer between 1 and 4 included that qualify the number a row - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL inverse man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - template - GLM_FUNC_DECL mat inverse(mat const& m); - - /// @} -}//namespace glm - -#include "detail/func_matrix.inl" diff --git a/src/vendor/glm/packing.hpp b/src/vendor/glm/packing.hpp deleted file mode 100755 index ca83ac1..0000000 --- a/src/vendor/glm/packing.hpp +++ /dev/null @@ -1,173 +0,0 @@ -/// @ref core -/// @file glm/packing.hpp -/// -/// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions -/// @see gtc_packing -/// -/// @defgroup core_func_packing Floating-Point Pack and Unpack Functions -/// @ingroup core -/// -/// Provides GLSL functions to pack and unpack half, single and double-precision floating point values into more compact integer types. -/// -/// These functions do not operate component-wise, rather as described in each case. -/// -/// Include to use these core features. - -#pragma once - -#include "./ext/vector_uint2.hpp" -#include "./ext/vector_float2.hpp" -#include "./ext/vector_float4.hpp" - -namespace glm -{ - /// @addtogroup core_func_packing - /// @{ - - /// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packUnorm2x16: round(clamp(c, 0, +1) * 65535.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see GLSL packUnorm2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint packUnorm2x16(vec2 const& v); - - /// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packSnorm2x16: round(clamp(v, -1, +1) * 32767.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see GLSL packSnorm2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint packSnorm2x16(vec2 const& v); - - /// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packUnorm4x8: round(clamp(c, 0, +1) * 255.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see GLSL packUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint packUnorm4x8(vec4 const& v); - - /// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packSnorm4x8: round(clamp(c, -1, +1) * 127.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see GLSL packSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint packSnorm4x8(vec4 const& v); - - /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackUnorm2x16: f / 65535.0 - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see GLSL unpackUnorm2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec2 unpackUnorm2x16(uint p); - - /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm2x16: clamp(f / 32767.0, -1, +1) - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see GLSL unpackSnorm2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec2 unpackSnorm2x16(uint p); - - /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackUnorm4x8: f / 255.0 - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see GLSL unpackUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec4 unpackUnorm4x8(uint p); - - /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm4x8: clamp(f / 127.0, -1, +1) - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see GLSL unpackSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec4 unpackSnorm4x8(uint p); - - /// Returns a double-qualifier value obtained by packing the components of v into a 64-bit value. - /// If an IEEE 754 Inf or NaN is created, it will not signal, and the resulting floating point value is unspecified. - /// Otherwise, the bit- level representation of v is preserved. - /// The first vector component specifies the 32 least significant bits; - /// the second component specifies the 32 most significant bits. - /// - /// @see GLSL packDouble2x32 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL double packDouble2x32(uvec2 const& v); - - /// Returns a two-component unsigned integer vector representation of v. - /// The bit-level representation of v is preserved. - /// The first component of the vector contains the 32 least significant bits of the double; - /// the second component consists the 32 most significant bits. - /// - /// @see GLSL unpackDouble2x32 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uvec2 unpackDouble2x32(double v); - - /// Returns an unsigned integer obtained by converting the components of a two-component floating-point vector - /// to the 16-bit floating-point representation found in the OpenGL Specification, - /// and then packing these two 16- bit integers into a 32-bit unsigned integer. - /// The first vector component specifies the 16 least-significant bits of the result; - /// the second component specifies the 16 most-significant bits. - /// - /// @see GLSL packHalf2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint packHalf2x16(vec2 const& v); - - /// Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned integer into a pair of 16-bit values, - /// interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, - /// and converting them to 32-bit floating-point values. - /// The first component of the vector is obtained from the 16 least-significant bits of v; - /// the second component is obtained from the 16 most-significant bits of v. - /// - /// @see GLSL unpackHalf2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec2 unpackHalf2x16(uint v); - - /// @} -}//namespace glm - -#include "detail/func_packing.inl" diff --git a/src/vendor/glm/simd/common.h b/src/vendor/glm/simd/common.h deleted file mode 100755 index 9b017cb..0000000 --- a/src/vendor/glm/simd/common.h +++ /dev/null @@ -1,240 +0,0 @@ -/// @ref simd -/// @file glm/simd/common.h - -#pragma once - -#include "platform.h" - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_add(glm_f32vec4 a, glm_f32vec4 b) -{ - return _mm_add_ps(a, b); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_add(glm_f32vec4 a, glm_f32vec4 b) -{ - return _mm_add_ss(a, b); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_sub(glm_f32vec4 a, glm_f32vec4 b) -{ - return _mm_sub_ps(a, b); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_sub(glm_f32vec4 a, glm_f32vec4 b) -{ - return _mm_sub_ss(a, b); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_mul(glm_f32vec4 a, glm_f32vec4 b) -{ - return _mm_mul_ps(a, b); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_mul(glm_f32vec4 a, glm_f32vec4 b) -{ - return _mm_mul_ss(a, b); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_div(glm_f32vec4 a, glm_f32vec4 b) -{ - return _mm_div_ps(a, b); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_div(glm_f32vec4 a, glm_f32vec4 b) -{ - return _mm_div_ss(a, b); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_div_lowp(glm_f32vec4 a, glm_f32vec4 b) -{ - return glm_vec4_mul(a, _mm_rcp_ps(b)); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_swizzle_xyzw(glm_f32vec4 a) -{ -# if GLM_ARCH & GLM_ARCH_AVX2_BIT - return _mm_permute_ps(a, _MM_SHUFFLE(3, 2, 1, 0)); -# else - return _mm_shuffle_ps(a, a, _MM_SHUFFLE(3, 2, 1, 0)); -# endif -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_fma(glm_f32vec4 a, glm_f32vec4 b, glm_f32vec4 c) -{ -# if (GLM_ARCH & GLM_ARCH_AVX2_BIT) && !(GLM_COMPILER & GLM_COMPILER_CLANG) - return _mm_fmadd_ss(a, b, c); -# else - return _mm_add_ss(_mm_mul_ss(a, b), c); -# endif -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_fma(glm_f32vec4 a, glm_f32vec4 b, glm_f32vec4 c) -{ -# if (GLM_ARCH & GLM_ARCH_AVX2_BIT) && !(GLM_COMPILER & GLM_COMPILER_CLANG) - return _mm_fmadd_ps(a, b, c); -# else - return glm_vec4_add(glm_vec4_mul(a, b), c); -# endif -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_abs(glm_f32vec4 x) -{ - return _mm_and_ps(x, _mm_castsi128_ps(_mm_set1_epi32(0x7FFFFFFF))); -} - -GLM_FUNC_QUALIFIER glm_ivec4 glm_ivec4_abs(glm_ivec4 x) -{ -# if GLM_ARCH & GLM_ARCH_SSSE3_BIT - return _mm_sign_epi32(x, x); -# else - glm_ivec4 const sgn0 = _mm_srai_epi32(x, 31); - glm_ivec4 const inv0 = _mm_xor_si128(x, sgn0); - glm_ivec4 const sub0 = _mm_sub_epi32(inv0, sgn0); - return sub0; -# endif -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_sign(glm_vec4 x) -{ - glm_vec4 const zro0 = _mm_setzero_ps(); - glm_vec4 const cmp0 = _mm_cmplt_ps(x, zro0); - glm_vec4 const cmp1 = _mm_cmpgt_ps(x, zro0); - glm_vec4 const and0 = _mm_and_ps(cmp0, _mm_set1_ps(-1.0f)); - glm_vec4 const and1 = _mm_and_ps(cmp1, _mm_set1_ps(1.0f)); - glm_vec4 const or0 = _mm_or_ps(and0, and1); - return or0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_round(glm_vec4 x) -{ -# if GLM_ARCH & GLM_ARCH_SSE41_BIT - return _mm_round_ps(x, _MM_FROUND_TO_NEAREST_INT); -# else - glm_vec4 const sgn0 = _mm_castsi128_ps(_mm_set1_epi32(int(0x80000000))); - glm_vec4 const and0 = _mm_and_ps(sgn0, x); - glm_vec4 const or0 = _mm_or_ps(and0, _mm_set_ps1(8388608.0f)); - glm_vec4 const add0 = glm_vec4_add(x, or0); - glm_vec4 const sub0 = glm_vec4_sub(add0, or0); - return sub0; -# endif -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_floor(glm_vec4 x) -{ -# if GLM_ARCH & GLM_ARCH_SSE41_BIT - return _mm_floor_ps(x); -# else - glm_vec4 const rnd0 = glm_vec4_round(x); - glm_vec4 const cmp0 = _mm_cmplt_ps(x, rnd0); - glm_vec4 const and0 = _mm_and_ps(cmp0, _mm_set1_ps(1.0f)); - glm_vec4 const sub0 = glm_vec4_sub(rnd0, and0); - return sub0; -# endif -} - -/* trunc TODO -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_trunc(glm_vec4 x) -{ - return glm_vec4(); -} -*/ - -//roundEven -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_roundEven(glm_vec4 x) -{ - glm_vec4 const sgn0 = _mm_castsi128_ps(_mm_set1_epi32(int(0x80000000))); - glm_vec4 const and0 = _mm_and_ps(sgn0, x); - glm_vec4 const or0 = _mm_or_ps(and0, _mm_set_ps1(8388608.0f)); - glm_vec4 const add0 = glm_vec4_add(x, or0); - glm_vec4 const sub0 = glm_vec4_sub(add0, or0); - return sub0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_ceil(glm_vec4 x) -{ -# if GLM_ARCH & GLM_ARCH_SSE41_BIT - return _mm_ceil_ps(x); -# else - glm_vec4 const rnd0 = glm_vec4_round(x); - glm_vec4 const cmp0 = _mm_cmpgt_ps(x, rnd0); - glm_vec4 const and0 = _mm_and_ps(cmp0, _mm_set1_ps(1.0f)); - glm_vec4 const add0 = glm_vec4_add(rnd0, and0); - return add0; -# endif -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_fract(glm_vec4 x) -{ - glm_vec4 const flr0 = glm_vec4_floor(x); - glm_vec4 const sub0 = glm_vec4_sub(x, flr0); - return sub0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_mod(glm_vec4 x, glm_vec4 y) -{ - glm_vec4 const div0 = glm_vec4_div(x, y); - glm_vec4 const flr0 = glm_vec4_floor(div0); - glm_vec4 const mul0 = glm_vec4_mul(y, flr0); - glm_vec4 const sub0 = glm_vec4_sub(x, mul0); - return sub0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_clamp(glm_vec4 v, glm_vec4 minVal, glm_vec4 maxVal) -{ - glm_vec4 const min0 = _mm_min_ps(v, maxVal); - glm_vec4 const max0 = _mm_max_ps(min0, minVal); - return max0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_mix(glm_vec4 v1, glm_vec4 v2, glm_vec4 a) -{ - glm_vec4 const sub0 = glm_vec4_sub(_mm_set1_ps(1.0f), a); - glm_vec4 const mul0 = glm_vec4_mul(v1, sub0); - glm_vec4 const mad0 = glm_vec4_fma(v2, a, mul0); - return mad0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_step(glm_vec4 edge, glm_vec4 x) -{ - glm_vec4 const cmp = _mm_cmple_ps(x, edge); - return _mm_movemask_ps(cmp) == 0 ? _mm_set1_ps(1.0f) : _mm_setzero_ps(); -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_smoothstep(glm_vec4 edge0, glm_vec4 edge1, glm_vec4 x) -{ - glm_vec4 const sub0 = glm_vec4_sub(x, edge0); - glm_vec4 const sub1 = glm_vec4_sub(edge1, edge0); - glm_vec4 const div0 = glm_vec4_sub(sub0, sub1); - glm_vec4 const clp0 = glm_vec4_clamp(div0, _mm_setzero_ps(), _mm_set1_ps(1.0f)); - glm_vec4 const mul0 = glm_vec4_mul(_mm_set1_ps(2.0f), clp0); - glm_vec4 const sub2 = glm_vec4_sub(_mm_set1_ps(3.0f), mul0); - glm_vec4 const mul1 = glm_vec4_mul(clp0, clp0); - glm_vec4 const mul2 = glm_vec4_mul(mul1, sub2); - return mul2; -} - -// Agner Fog method -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_nan(glm_vec4 x) -{ - glm_ivec4 const t1 = _mm_castps_si128(x); // reinterpret as 32-bit integer - glm_ivec4 const t2 = _mm_sll_epi32(t1, _mm_cvtsi32_si128(1)); // shift out sign bit - glm_ivec4 const t3 = _mm_set1_epi32(int(0xFF000000)); // exponent mask - glm_ivec4 const t4 = _mm_and_si128(t2, t3); // exponent - glm_ivec4 const t5 = _mm_andnot_si128(t3, t2); // fraction - glm_ivec4 const Equal = _mm_cmpeq_epi32(t3, t4); - glm_ivec4 const Nequal = _mm_cmpeq_epi32(t5, _mm_setzero_si128()); - glm_ivec4 const And = _mm_and_si128(Equal, Nequal); - return _mm_castsi128_ps(And); // exponent = all 1s and fraction != 0 -} - -// Agner Fog method -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_inf(glm_vec4 x) -{ - glm_ivec4 const t1 = _mm_castps_si128(x); // reinterpret as 32-bit integer - glm_ivec4 const t2 = _mm_sll_epi32(t1, _mm_cvtsi32_si128(1)); // shift out sign bit - return _mm_castsi128_ps(_mm_cmpeq_epi32(t2, _mm_set1_epi32(int(0xFF000000)))); // exponent is all 1s, fraction is 0 -} - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/src/vendor/glm/simd/exponential.h b/src/vendor/glm/simd/exponential.h deleted file mode 100755 index bc351d0..0000000 --- a/src/vendor/glm/simd/exponential.h +++ /dev/null @@ -1,20 +0,0 @@ -/// @ref simd -/// @file glm/simd/experimental.h - -#pragma once - -#include "platform.h" - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_sqrt_lowp(glm_f32vec4 x) -{ - return _mm_mul_ss(_mm_rsqrt_ss(x), x); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_sqrt_lowp(glm_f32vec4 x) -{ - return _mm_mul_ps(_mm_rsqrt_ps(x), x); -} - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/src/vendor/glm/simd/geometric.h b/src/vendor/glm/simd/geometric.h deleted file mode 100755 index 07d7cbc..0000000 --- a/src/vendor/glm/simd/geometric.h +++ /dev/null @@ -1,124 +0,0 @@ -/// @ref simd -/// @file glm/simd/geometric.h - -#pragma once - -#include "common.h" - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -GLM_FUNC_DECL glm_vec4 glm_vec4_dot(glm_vec4 v1, glm_vec4 v2); -GLM_FUNC_DECL glm_vec4 glm_vec1_dot(glm_vec4 v1, glm_vec4 v2); - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_length(glm_vec4 x) -{ - glm_vec4 const dot0 = glm_vec4_dot(x, x); - glm_vec4 const sqt0 = _mm_sqrt_ps(dot0); - return sqt0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_distance(glm_vec4 p0, glm_vec4 p1) -{ - glm_vec4 const sub0 = _mm_sub_ps(p0, p1); - glm_vec4 const len0 = glm_vec4_length(sub0); - return len0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_dot(glm_vec4 v1, glm_vec4 v2) -{ -# if GLM_ARCH & GLM_ARCH_AVX_BIT - return _mm_dp_ps(v1, v2, 0xff); -# elif GLM_ARCH & GLM_ARCH_SSE3_BIT - glm_vec4 const mul0 = _mm_mul_ps(v1, v2); - glm_vec4 const hadd0 = _mm_hadd_ps(mul0, mul0); - glm_vec4 const hadd1 = _mm_hadd_ps(hadd0, hadd0); - return hadd1; -# else - glm_vec4 const mul0 = _mm_mul_ps(v1, v2); - glm_vec4 const swp0 = _mm_shuffle_ps(mul0, mul0, _MM_SHUFFLE(2, 3, 0, 1)); - glm_vec4 const add0 = _mm_add_ps(mul0, swp0); - glm_vec4 const swp1 = _mm_shuffle_ps(add0, add0, _MM_SHUFFLE(0, 1, 2, 3)); - glm_vec4 const add1 = _mm_add_ps(add0, swp1); - return add1; -# endif -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec1_dot(glm_vec4 v1, glm_vec4 v2) -{ -# if GLM_ARCH & GLM_ARCH_AVX_BIT - return _mm_dp_ps(v1, v2, 0xff); -# elif GLM_ARCH & GLM_ARCH_SSE3_BIT - glm_vec4 const mul0 = _mm_mul_ps(v1, v2); - glm_vec4 const had0 = _mm_hadd_ps(mul0, mul0); - glm_vec4 const had1 = _mm_hadd_ps(had0, had0); - return had1; -# else - glm_vec4 const mul0 = _mm_mul_ps(v1, v2); - glm_vec4 const mov0 = _mm_movehl_ps(mul0, mul0); - glm_vec4 const add0 = _mm_add_ps(mov0, mul0); - glm_vec4 const swp1 = _mm_shuffle_ps(add0, add0, 1); - glm_vec4 const add1 = _mm_add_ss(add0, swp1); - return add1; -# endif -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_cross(glm_vec4 v1, glm_vec4 v2) -{ - glm_vec4 const swp0 = _mm_shuffle_ps(v1, v1, _MM_SHUFFLE(3, 0, 2, 1)); - glm_vec4 const swp1 = _mm_shuffle_ps(v1, v1, _MM_SHUFFLE(3, 1, 0, 2)); - glm_vec4 const swp2 = _mm_shuffle_ps(v2, v2, _MM_SHUFFLE(3, 0, 2, 1)); - glm_vec4 const swp3 = _mm_shuffle_ps(v2, v2, _MM_SHUFFLE(3, 1, 0, 2)); - glm_vec4 const mul0 = _mm_mul_ps(swp0, swp3); - glm_vec4 const mul1 = _mm_mul_ps(swp1, swp2); - glm_vec4 const sub0 = _mm_sub_ps(mul0, mul1); - return sub0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_normalize(glm_vec4 v) -{ - glm_vec4 const dot0 = glm_vec4_dot(v, v); - glm_vec4 const isr0 = _mm_rsqrt_ps(dot0); - glm_vec4 const mul0 = _mm_mul_ps(v, isr0); - return mul0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_faceforward(glm_vec4 N, glm_vec4 I, glm_vec4 Nref) -{ - glm_vec4 const dot0 = glm_vec4_dot(Nref, I); - glm_vec4 const sgn0 = glm_vec4_sign(dot0); - glm_vec4 const mul0 = _mm_mul_ps(sgn0, _mm_set1_ps(-1.0f)); - glm_vec4 const mul1 = _mm_mul_ps(N, mul0); - return mul1; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_reflect(glm_vec4 I, glm_vec4 N) -{ - glm_vec4 const dot0 = glm_vec4_dot(N, I); - glm_vec4 const mul0 = _mm_mul_ps(N, dot0); - glm_vec4 const mul1 = _mm_mul_ps(mul0, _mm_set1_ps(2.0f)); - glm_vec4 const sub0 = _mm_sub_ps(I, mul1); - return sub0; -} - -GLM_FUNC_QUALIFIER __m128 glm_vec4_refract(glm_vec4 I, glm_vec4 N, glm_vec4 eta) -{ - glm_vec4 const dot0 = glm_vec4_dot(N, I); - glm_vec4 const mul0 = _mm_mul_ps(eta, eta); - glm_vec4 const mul1 = _mm_mul_ps(dot0, dot0); - glm_vec4 const sub0 = _mm_sub_ps(_mm_set1_ps(1.0f), mul0); - glm_vec4 const sub1 = _mm_sub_ps(_mm_set1_ps(1.0f), mul1); - glm_vec4 const mul2 = _mm_mul_ps(sub0, sub1); - - if(_mm_movemask_ps(_mm_cmplt_ss(mul2, _mm_set1_ps(0.0f))) == 0) - return _mm_set1_ps(0.0f); - - glm_vec4 const sqt0 = _mm_sqrt_ps(mul2); - glm_vec4 const mad0 = glm_vec4_fma(eta, dot0, sqt0); - glm_vec4 const mul4 = _mm_mul_ps(mad0, N); - glm_vec4 const mul5 = _mm_mul_ps(eta, I); - glm_vec4 const sub2 = _mm_sub_ps(mul5, mul4); - - return sub2; -} - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/src/vendor/glm/simd/integer.h b/src/vendor/glm/simd/integer.h deleted file mode 100755 index 9381418..0000000 --- a/src/vendor/glm/simd/integer.h +++ /dev/null @@ -1,115 +0,0 @@ -/// @ref simd -/// @file glm/simd/integer.h - -#pragma once - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -GLM_FUNC_QUALIFIER glm_uvec4 glm_i128_interleave(glm_uvec4 x) -{ - glm_uvec4 const Mask4 = _mm_set1_epi32(0x0000FFFF); - glm_uvec4 const Mask3 = _mm_set1_epi32(0x00FF00FF); - glm_uvec4 const Mask2 = _mm_set1_epi32(0x0F0F0F0F); - glm_uvec4 const Mask1 = _mm_set1_epi32(0x33333333); - glm_uvec4 const Mask0 = _mm_set1_epi32(0x55555555); - - glm_uvec4 Reg1; - glm_uvec4 Reg2; - - // REG1 = x; - // REG2 = y; - //Reg1 = _mm_unpacklo_epi64(x, y); - Reg1 = x; - - //REG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFF); - //REG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFF); - Reg2 = _mm_slli_si128(Reg1, 2); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask4); - - //REG1 = ((REG1 << 8) | REG1) & glm::uint64(0x00FF00FF00FF00FF); - //REG2 = ((REG2 << 8) | REG2) & glm::uint64(0x00FF00FF00FF00FF); - Reg2 = _mm_slli_si128(Reg1, 1); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask3); - - //REG1 = ((REG1 << 4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0F); - //REG2 = ((REG2 << 4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0F); - Reg2 = _mm_slli_epi32(Reg1, 4); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask2); - - //REG1 = ((REG1 << 2) | REG1) & glm::uint64(0x3333333333333333); - //REG2 = ((REG2 << 2) | REG2) & glm::uint64(0x3333333333333333); - Reg2 = _mm_slli_epi32(Reg1, 2); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask1); - - //REG1 = ((REG1 << 1) | REG1) & glm::uint64(0x5555555555555555); - //REG2 = ((REG2 << 1) | REG2) & glm::uint64(0x5555555555555555); - Reg2 = _mm_slli_epi32(Reg1, 1); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask0); - - //return REG1 | (REG2 << 1); - Reg2 = _mm_slli_epi32(Reg1, 1); - Reg2 = _mm_srli_si128(Reg2, 8); - Reg1 = _mm_or_si128(Reg1, Reg2); - - return Reg1; -} - -GLM_FUNC_QUALIFIER glm_uvec4 glm_i128_interleave2(glm_uvec4 x, glm_uvec4 y) -{ - glm_uvec4 const Mask4 = _mm_set1_epi32(0x0000FFFF); - glm_uvec4 const Mask3 = _mm_set1_epi32(0x00FF00FF); - glm_uvec4 const Mask2 = _mm_set1_epi32(0x0F0F0F0F); - glm_uvec4 const Mask1 = _mm_set1_epi32(0x33333333); - glm_uvec4 const Mask0 = _mm_set1_epi32(0x55555555); - - glm_uvec4 Reg1; - glm_uvec4 Reg2; - - // REG1 = x; - // REG2 = y; - Reg1 = _mm_unpacklo_epi64(x, y); - - //REG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFF); - //REG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFF); - Reg2 = _mm_slli_si128(Reg1, 2); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask4); - - //REG1 = ((REG1 << 8) | REG1) & glm::uint64(0x00FF00FF00FF00FF); - //REG2 = ((REG2 << 8) | REG2) & glm::uint64(0x00FF00FF00FF00FF); - Reg2 = _mm_slli_si128(Reg1, 1); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask3); - - //REG1 = ((REG1 << 4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0F); - //REG2 = ((REG2 << 4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0F); - Reg2 = _mm_slli_epi32(Reg1, 4); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask2); - - //REG1 = ((REG1 << 2) | REG1) & glm::uint64(0x3333333333333333); - //REG2 = ((REG2 << 2) | REG2) & glm::uint64(0x3333333333333333); - Reg2 = _mm_slli_epi32(Reg1, 2); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask1); - - //REG1 = ((REG1 << 1) | REG1) & glm::uint64(0x5555555555555555); - //REG2 = ((REG2 << 1) | REG2) & glm::uint64(0x5555555555555555); - Reg2 = _mm_slli_epi32(Reg1, 1); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask0); - - //return REG1 | (REG2 << 1); - Reg2 = _mm_slli_epi32(Reg1, 1); - Reg2 = _mm_srli_si128(Reg2, 8); - Reg1 = _mm_or_si128(Reg1, Reg2); - - return Reg1; -} - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/src/vendor/glm/simd/matrix.h b/src/vendor/glm/simd/matrix.h deleted file mode 100755 index b6c42ea..0000000 --- a/src/vendor/glm/simd/matrix.h +++ /dev/null @@ -1,1028 +0,0 @@ -/// @ref simd -/// @file glm/simd/matrix.h - -#pragma once - -#include "geometric.h" - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -GLM_FUNC_QUALIFIER void glm_mat4_matrixCompMult(glm_vec4 const in1[4], glm_vec4 const in2[4], glm_vec4 out[4]) -{ - out[0] = _mm_mul_ps(in1[0], in2[0]); - out[1] = _mm_mul_ps(in1[1], in2[1]); - out[2] = _mm_mul_ps(in1[2], in2[2]); - out[3] = _mm_mul_ps(in1[3], in2[3]); -} - -GLM_FUNC_QUALIFIER void glm_mat4_add(glm_vec4 const in1[4], glm_vec4 const in2[4], glm_vec4 out[4]) -{ - out[0] = _mm_add_ps(in1[0], in2[0]); - out[1] = _mm_add_ps(in1[1], in2[1]); - out[2] = _mm_add_ps(in1[2], in2[2]); - out[3] = _mm_add_ps(in1[3], in2[3]); -} - -GLM_FUNC_QUALIFIER void glm_mat4_sub(glm_vec4 const in1[4], glm_vec4 const in2[4], glm_vec4 out[4]) -{ - out[0] = _mm_sub_ps(in1[0], in2[0]); - out[1] = _mm_sub_ps(in1[1], in2[1]); - out[2] = _mm_sub_ps(in1[2], in2[2]); - out[3] = _mm_sub_ps(in1[3], in2[3]); -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_mat4_mul_vec4(glm_vec4 const m[4], glm_vec4 v) -{ - __m128 v0 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 v1 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(1, 1, 1, 1)); - __m128 v2 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(2, 2, 2, 2)); - __m128 v3 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 m0 = _mm_mul_ps(m[0], v0); - __m128 m1 = _mm_mul_ps(m[1], v1); - __m128 m2 = _mm_mul_ps(m[2], v2); - __m128 m3 = _mm_mul_ps(m[3], v3); - - __m128 a0 = _mm_add_ps(m0, m1); - __m128 a1 = _mm_add_ps(m2, m3); - __m128 a2 = _mm_add_ps(a0, a1); - - return a2; -} - -GLM_FUNC_QUALIFIER __m128 glm_vec4_mul_mat4(glm_vec4 v, glm_vec4 const m[4]) -{ - __m128 i0 = m[0]; - __m128 i1 = m[1]; - __m128 i2 = m[2]; - __m128 i3 = m[3]; - - __m128 m0 = _mm_mul_ps(v, i0); - __m128 m1 = _mm_mul_ps(v, i1); - __m128 m2 = _mm_mul_ps(v, i2); - __m128 m3 = _mm_mul_ps(v, i3); - - __m128 u0 = _mm_unpacklo_ps(m0, m1); - __m128 u1 = _mm_unpackhi_ps(m0, m1); - __m128 a0 = _mm_add_ps(u0, u1); - - __m128 u2 = _mm_unpacklo_ps(m2, m3); - __m128 u3 = _mm_unpackhi_ps(m2, m3); - __m128 a1 = _mm_add_ps(u2, u3); - - __m128 f0 = _mm_movelh_ps(a0, a1); - __m128 f1 = _mm_movehl_ps(a1, a0); - __m128 f2 = _mm_add_ps(f0, f1); - - return f2; -} - -GLM_FUNC_QUALIFIER void glm_mat4_mul(glm_vec4 const in1[4], glm_vec4 const in2[4], glm_vec4 out[4]) -{ - { - __m128 e0 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 e1 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 e2 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 e3 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 m0 = _mm_mul_ps(in1[0], e0); - __m128 m1 = _mm_mul_ps(in1[1], e1); - __m128 m2 = _mm_mul_ps(in1[2], e2); - __m128 m3 = _mm_mul_ps(in1[3], e3); - - __m128 a0 = _mm_add_ps(m0, m1); - __m128 a1 = _mm_add_ps(m2, m3); - __m128 a2 = _mm_add_ps(a0, a1); - - out[0] = a2; - } - - { - __m128 e0 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 e1 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 e2 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 e3 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 m0 = _mm_mul_ps(in1[0], e0); - __m128 m1 = _mm_mul_ps(in1[1], e1); - __m128 m2 = _mm_mul_ps(in1[2], e2); - __m128 m3 = _mm_mul_ps(in1[3], e3); - - __m128 a0 = _mm_add_ps(m0, m1); - __m128 a1 = _mm_add_ps(m2, m3); - __m128 a2 = _mm_add_ps(a0, a1); - - out[1] = a2; - } - - { - __m128 e0 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 e1 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 e2 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 e3 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 m0 = _mm_mul_ps(in1[0], e0); - __m128 m1 = _mm_mul_ps(in1[1], e1); - __m128 m2 = _mm_mul_ps(in1[2], e2); - __m128 m3 = _mm_mul_ps(in1[3], e3); - - __m128 a0 = _mm_add_ps(m0, m1); - __m128 a1 = _mm_add_ps(m2, m3); - __m128 a2 = _mm_add_ps(a0, a1); - - out[2] = a2; - } - - { - //(__m128&)_mm_shuffle_epi32(__m128i&)in2[0], _MM_SHUFFLE(3, 3, 3, 3)) - __m128 e0 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 e1 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 e2 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 e3 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 m0 = _mm_mul_ps(in1[0], e0); - __m128 m1 = _mm_mul_ps(in1[1], e1); - __m128 m2 = _mm_mul_ps(in1[2], e2); - __m128 m3 = _mm_mul_ps(in1[3], e3); - - __m128 a0 = _mm_add_ps(m0, m1); - __m128 a1 = _mm_add_ps(m2, m3); - __m128 a2 = _mm_add_ps(a0, a1); - - out[3] = a2; - } -} - -GLM_FUNC_QUALIFIER void glm_mat4_transpose(glm_vec4 const in[4], glm_vec4 out[4]) -{ - __m128 tmp0 = _mm_shuffle_ps(in[0], in[1], 0x44); - __m128 tmp2 = _mm_shuffle_ps(in[0], in[1], 0xEE); - __m128 tmp1 = _mm_shuffle_ps(in[2], in[3], 0x44); - __m128 tmp3 = _mm_shuffle_ps(in[2], in[3], 0xEE); - - out[0] = _mm_shuffle_ps(tmp0, tmp1, 0x88); - out[1] = _mm_shuffle_ps(tmp0, tmp1, 0xDD); - out[2] = _mm_shuffle_ps(tmp2, tmp3, 0x88); - out[3] = _mm_shuffle_ps(tmp2, tmp3, 0xDD); -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_mat4_determinant_highp(glm_vec4 const in[4]) -{ - __m128 Fac0; - { - // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - // valType SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; - // valType SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac0 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac1; - { - // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - // valType SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; - // valType SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac1 = _mm_sub_ps(Mul00, Mul01); - } - - - __m128 Fac2; - { - // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - // valType SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; - // valType SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac2 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac3; - { - // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - // valType SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; - // valType SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac3 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac4; - { - // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - // valType SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; - // valType SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac4 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac5; - { - // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - // valType SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; - // valType SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac5 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 SignA = _mm_set_ps( 1.0f,-1.0f, 1.0f,-1.0f); - __m128 SignB = _mm_set_ps(-1.0f, 1.0f,-1.0f, 1.0f); - - // m[1][0] - // m[0][0] - // m[0][0] - // m[0][0] - __m128 Temp0 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Vec0 = _mm_shuffle_ps(Temp0, Temp0, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][1] - // m[0][1] - // m[0][1] - // m[0][1] - __m128 Temp1 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Vec1 = _mm_shuffle_ps(Temp1, Temp1, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][2] - // m[0][2] - // m[0][2] - // m[0][2] - __m128 Temp2 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Vec2 = _mm_shuffle_ps(Temp2, Temp2, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][3] - // m[0][3] - // m[0][3] - // m[0][3] - __m128 Temp3 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Vec3 = _mm_shuffle_ps(Temp3, Temp3, _MM_SHUFFLE(2, 2, 2, 0)); - - // col0 - // + (Vec1[0] * Fac0[0] - Vec2[0] * Fac1[0] + Vec3[0] * Fac2[0]), - // - (Vec1[1] * Fac0[1] - Vec2[1] * Fac1[1] + Vec3[1] * Fac2[1]), - // + (Vec1[2] * Fac0[2] - Vec2[2] * Fac1[2] + Vec3[2] * Fac2[2]), - // - (Vec1[3] * Fac0[3] - Vec2[3] * Fac1[3] + Vec3[3] * Fac2[3]), - __m128 Mul00 = _mm_mul_ps(Vec1, Fac0); - __m128 Mul01 = _mm_mul_ps(Vec2, Fac1); - __m128 Mul02 = _mm_mul_ps(Vec3, Fac2); - __m128 Sub00 = _mm_sub_ps(Mul00, Mul01); - __m128 Add00 = _mm_add_ps(Sub00, Mul02); - __m128 Inv0 = _mm_mul_ps(SignB, Add00); - - // col1 - // - (Vec0[0] * Fac0[0] - Vec2[0] * Fac3[0] + Vec3[0] * Fac4[0]), - // + (Vec0[0] * Fac0[1] - Vec2[1] * Fac3[1] + Vec3[1] * Fac4[1]), - // - (Vec0[0] * Fac0[2] - Vec2[2] * Fac3[2] + Vec3[2] * Fac4[2]), - // + (Vec0[0] * Fac0[3] - Vec2[3] * Fac3[3] + Vec3[3] * Fac4[3]), - __m128 Mul03 = _mm_mul_ps(Vec0, Fac0); - __m128 Mul04 = _mm_mul_ps(Vec2, Fac3); - __m128 Mul05 = _mm_mul_ps(Vec3, Fac4); - __m128 Sub01 = _mm_sub_ps(Mul03, Mul04); - __m128 Add01 = _mm_add_ps(Sub01, Mul05); - __m128 Inv1 = _mm_mul_ps(SignA, Add01); - - // col2 - // + (Vec0[0] * Fac1[0] - Vec1[0] * Fac3[0] + Vec3[0] * Fac5[0]), - // - (Vec0[0] * Fac1[1] - Vec1[1] * Fac3[1] + Vec3[1] * Fac5[1]), - // + (Vec0[0] * Fac1[2] - Vec1[2] * Fac3[2] + Vec3[2] * Fac5[2]), - // - (Vec0[0] * Fac1[3] - Vec1[3] * Fac3[3] + Vec3[3] * Fac5[3]), - __m128 Mul06 = _mm_mul_ps(Vec0, Fac1); - __m128 Mul07 = _mm_mul_ps(Vec1, Fac3); - __m128 Mul08 = _mm_mul_ps(Vec3, Fac5); - __m128 Sub02 = _mm_sub_ps(Mul06, Mul07); - __m128 Add02 = _mm_add_ps(Sub02, Mul08); - __m128 Inv2 = _mm_mul_ps(SignB, Add02); - - // col3 - // - (Vec1[0] * Fac2[0] - Vec1[0] * Fac4[0] + Vec2[0] * Fac5[0]), - // + (Vec1[0] * Fac2[1] - Vec1[1] * Fac4[1] + Vec2[1] * Fac5[1]), - // - (Vec1[0] * Fac2[2] - Vec1[2] * Fac4[2] + Vec2[2] * Fac5[2]), - // + (Vec1[0] * Fac2[3] - Vec1[3] * Fac4[3] + Vec2[3] * Fac5[3])); - __m128 Mul09 = _mm_mul_ps(Vec0, Fac2); - __m128 Mul10 = _mm_mul_ps(Vec1, Fac4); - __m128 Mul11 = _mm_mul_ps(Vec2, Fac5); - __m128 Sub03 = _mm_sub_ps(Mul09, Mul10); - __m128 Add03 = _mm_add_ps(Sub03, Mul11); - __m128 Inv3 = _mm_mul_ps(SignA, Add03); - - __m128 Row0 = _mm_shuffle_ps(Inv0, Inv1, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Row1 = _mm_shuffle_ps(Inv2, Inv3, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Row2 = _mm_shuffle_ps(Row0, Row1, _MM_SHUFFLE(2, 0, 2, 0)); - - // valType Determinant = m[0][0] * Inverse[0][0] - // + m[0][1] * Inverse[1][0] - // + m[0][2] * Inverse[2][0] - // + m[0][3] * Inverse[3][0]; - __m128 Det0 = glm_vec4_dot(in[0], Row2); - return Det0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_mat4_determinant_lowp(glm_vec4 const m[4]) -{ - // _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128( - - //T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - //T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - //T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - //T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - //T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - //T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - - // First 2 columns - __m128 Swp2A = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[2]), _MM_SHUFFLE(0, 1, 1, 2))); - __m128 Swp3A = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[3]), _MM_SHUFFLE(3, 2, 3, 3))); - __m128 MulA = _mm_mul_ps(Swp2A, Swp3A); - - // Second 2 columns - __m128 Swp2B = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[2]), _MM_SHUFFLE(3, 2, 3, 3))); - __m128 Swp3B = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[3]), _MM_SHUFFLE(0, 1, 1, 2))); - __m128 MulB = _mm_mul_ps(Swp2B, Swp3B); - - // Columns subtraction - __m128 SubE = _mm_sub_ps(MulA, MulB); - - // Last 2 rows - __m128 Swp2C = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[2]), _MM_SHUFFLE(0, 0, 1, 2))); - __m128 Swp3C = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[3]), _MM_SHUFFLE(1, 2, 0, 0))); - __m128 MulC = _mm_mul_ps(Swp2C, Swp3C); - __m128 SubF = _mm_sub_ps(_mm_movehl_ps(MulC, MulC), MulC); - - //vec<4, T, Q> DetCof( - // + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02), - // - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04), - // + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05), - // - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05)); - - __m128 SubFacA = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(SubE), _MM_SHUFFLE(2, 1, 0, 0))); - __m128 SwpFacA = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[1]), _MM_SHUFFLE(0, 0, 0, 1))); - __m128 MulFacA = _mm_mul_ps(SwpFacA, SubFacA); - - __m128 SubTmpB = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(0, 0, 3, 1)); - __m128 SubFacB = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(SubTmpB), _MM_SHUFFLE(3, 1, 1, 0)));//SubF[0], SubE[3], SubE[3], SubE[1]; - __m128 SwpFacB = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[1]), _MM_SHUFFLE(1, 1, 2, 2))); - __m128 MulFacB = _mm_mul_ps(SwpFacB, SubFacB); - - __m128 SubRes = _mm_sub_ps(MulFacA, MulFacB); - - __m128 SubTmpC = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(1, 0, 2, 2)); - __m128 SubFacC = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(SubTmpC), _MM_SHUFFLE(3, 3, 2, 0))); - __m128 SwpFacC = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[1]), _MM_SHUFFLE(2, 3, 3, 3))); - __m128 MulFacC = _mm_mul_ps(SwpFacC, SubFacC); - - __m128 AddRes = _mm_add_ps(SubRes, MulFacC); - __m128 DetCof = _mm_mul_ps(AddRes, _mm_setr_ps( 1.0f,-1.0f, 1.0f,-1.0f)); - - //return m[0][0] * DetCof[0] - // + m[0][1] * DetCof[1] - // + m[0][2] * DetCof[2] - // + m[0][3] * DetCof[3]; - - return glm_vec4_dot(m[0], DetCof); -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_mat4_determinant(glm_vec4 const m[4]) -{ - // _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(add) - - //T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - //T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - //T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - //T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - //T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - //T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - - // First 2 columns - __m128 Swp2A = _mm_shuffle_ps(m[2], m[2], _MM_SHUFFLE(0, 1, 1, 2)); - __m128 Swp3A = _mm_shuffle_ps(m[3], m[3], _MM_SHUFFLE(3, 2, 3, 3)); - __m128 MulA = _mm_mul_ps(Swp2A, Swp3A); - - // Second 2 columns - __m128 Swp2B = _mm_shuffle_ps(m[2], m[2], _MM_SHUFFLE(3, 2, 3, 3)); - __m128 Swp3B = _mm_shuffle_ps(m[3], m[3], _MM_SHUFFLE(0, 1, 1, 2)); - __m128 MulB = _mm_mul_ps(Swp2B, Swp3B); - - // Columns subtraction - __m128 SubE = _mm_sub_ps(MulA, MulB); - - // Last 2 rows - __m128 Swp2C = _mm_shuffle_ps(m[2], m[2], _MM_SHUFFLE(0, 0, 1, 2)); - __m128 Swp3C = _mm_shuffle_ps(m[3], m[3], _MM_SHUFFLE(1, 2, 0, 0)); - __m128 MulC = _mm_mul_ps(Swp2C, Swp3C); - __m128 SubF = _mm_sub_ps(_mm_movehl_ps(MulC, MulC), MulC); - - //vec<4, T, Q> DetCof( - // + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02), - // - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04), - // + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05), - // - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05)); - - __m128 SubFacA = _mm_shuffle_ps(SubE, SubE, _MM_SHUFFLE(2, 1, 0, 0)); - __m128 SwpFacA = _mm_shuffle_ps(m[1], m[1], _MM_SHUFFLE(0, 0, 0, 1)); - __m128 MulFacA = _mm_mul_ps(SwpFacA, SubFacA); - - __m128 SubTmpB = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(0, 0, 3, 1)); - __m128 SubFacB = _mm_shuffle_ps(SubTmpB, SubTmpB, _MM_SHUFFLE(3, 1, 1, 0));//SubF[0], SubE[3], SubE[3], SubE[1]; - __m128 SwpFacB = _mm_shuffle_ps(m[1], m[1], _MM_SHUFFLE(1, 1, 2, 2)); - __m128 MulFacB = _mm_mul_ps(SwpFacB, SubFacB); - - __m128 SubRes = _mm_sub_ps(MulFacA, MulFacB); - - __m128 SubTmpC = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(1, 0, 2, 2)); - __m128 SubFacC = _mm_shuffle_ps(SubTmpC, SubTmpC, _MM_SHUFFLE(3, 3, 2, 0)); - __m128 SwpFacC = _mm_shuffle_ps(m[1], m[1], _MM_SHUFFLE(2, 3, 3, 3)); - __m128 MulFacC = _mm_mul_ps(SwpFacC, SubFacC); - - __m128 AddRes = _mm_add_ps(SubRes, MulFacC); - __m128 DetCof = _mm_mul_ps(AddRes, _mm_setr_ps( 1.0f,-1.0f, 1.0f,-1.0f)); - - //return m[0][0] * DetCof[0] - // + m[0][1] * DetCof[1] - // + m[0][2] * DetCof[2] - // + m[0][3] * DetCof[3]; - - return glm_vec4_dot(m[0], DetCof); -} - -GLM_FUNC_QUALIFIER void glm_mat4_inverse(glm_vec4 const in[4], glm_vec4 out[4]) -{ - __m128 Fac0; - { - // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - // valType SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; - // valType SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac0 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac1; - { - // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - // valType SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; - // valType SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac1 = _mm_sub_ps(Mul00, Mul01); - } - - - __m128 Fac2; - { - // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - // valType SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; - // valType SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac2 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac3; - { - // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - // valType SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; - // valType SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac3 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac4; - { - // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - // valType SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; - // valType SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac4 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac5; - { - // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - // valType SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; - // valType SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac5 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 SignA = _mm_set_ps( 1.0f,-1.0f, 1.0f,-1.0f); - __m128 SignB = _mm_set_ps(-1.0f, 1.0f,-1.0f, 1.0f); - - // m[1][0] - // m[0][0] - // m[0][0] - // m[0][0] - __m128 Temp0 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Vec0 = _mm_shuffle_ps(Temp0, Temp0, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][1] - // m[0][1] - // m[0][1] - // m[0][1] - __m128 Temp1 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Vec1 = _mm_shuffle_ps(Temp1, Temp1, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][2] - // m[0][2] - // m[0][2] - // m[0][2] - __m128 Temp2 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Vec2 = _mm_shuffle_ps(Temp2, Temp2, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][3] - // m[0][3] - // m[0][3] - // m[0][3] - __m128 Temp3 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Vec3 = _mm_shuffle_ps(Temp3, Temp3, _MM_SHUFFLE(2, 2, 2, 0)); - - // col0 - // + (Vec1[0] * Fac0[0] - Vec2[0] * Fac1[0] + Vec3[0] * Fac2[0]), - // - (Vec1[1] * Fac0[1] - Vec2[1] * Fac1[1] + Vec3[1] * Fac2[1]), - // + (Vec1[2] * Fac0[2] - Vec2[2] * Fac1[2] + Vec3[2] * Fac2[2]), - // - (Vec1[3] * Fac0[3] - Vec2[3] * Fac1[3] + Vec3[3] * Fac2[3]), - __m128 Mul00 = _mm_mul_ps(Vec1, Fac0); - __m128 Mul01 = _mm_mul_ps(Vec2, Fac1); - __m128 Mul02 = _mm_mul_ps(Vec3, Fac2); - __m128 Sub00 = _mm_sub_ps(Mul00, Mul01); - __m128 Add00 = _mm_add_ps(Sub00, Mul02); - __m128 Inv0 = _mm_mul_ps(SignB, Add00); - - // col1 - // - (Vec0[0] * Fac0[0] - Vec2[0] * Fac3[0] + Vec3[0] * Fac4[0]), - // + (Vec0[0] * Fac0[1] - Vec2[1] * Fac3[1] + Vec3[1] * Fac4[1]), - // - (Vec0[0] * Fac0[2] - Vec2[2] * Fac3[2] + Vec3[2] * Fac4[2]), - // + (Vec0[0] * Fac0[3] - Vec2[3] * Fac3[3] + Vec3[3] * Fac4[3]), - __m128 Mul03 = _mm_mul_ps(Vec0, Fac0); - __m128 Mul04 = _mm_mul_ps(Vec2, Fac3); - __m128 Mul05 = _mm_mul_ps(Vec3, Fac4); - __m128 Sub01 = _mm_sub_ps(Mul03, Mul04); - __m128 Add01 = _mm_add_ps(Sub01, Mul05); - __m128 Inv1 = _mm_mul_ps(SignA, Add01); - - // col2 - // + (Vec0[0] * Fac1[0] - Vec1[0] * Fac3[0] + Vec3[0] * Fac5[0]), - // - (Vec0[0] * Fac1[1] - Vec1[1] * Fac3[1] + Vec3[1] * Fac5[1]), - // + (Vec0[0] * Fac1[2] - Vec1[2] * Fac3[2] + Vec3[2] * Fac5[2]), - // - (Vec0[0] * Fac1[3] - Vec1[3] * Fac3[3] + Vec3[3] * Fac5[3]), - __m128 Mul06 = _mm_mul_ps(Vec0, Fac1); - __m128 Mul07 = _mm_mul_ps(Vec1, Fac3); - __m128 Mul08 = _mm_mul_ps(Vec3, Fac5); - __m128 Sub02 = _mm_sub_ps(Mul06, Mul07); - __m128 Add02 = _mm_add_ps(Sub02, Mul08); - __m128 Inv2 = _mm_mul_ps(SignB, Add02); - - // col3 - // - (Vec1[0] * Fac2[0] - Vec1[0] * Fac4[0] + Vec2[0] * Fac5[0]), - // + (Vec1[0] * Fac2[1] - Vec1[1] * Fac4[1] + Vec2[1] * Fac5[1]), - // - (Vec1[0] * Fac2[2] - Vec1[2] * Fac4[2] + Vec2[2] * Fac5[2]), - // + (Vec1[0] * Fac2[3] - Vec1[3] * Fac4[3] + Vec2[3] * Fac5[3])); - __m128 Mul09 = _mm_mul_ps(Vec0, Fac2); - __m128 Mul10 = _mm_mul_ps(Vec1, Fac4); - __m128 Mul11 = _mm_mul_ps(Vec2, Fac5); - __m128 Sub03 = _mm_sub_ps(Mul09, Mul10); - __m128 Add03 = _mm_add_ps(Sub03, Mul11); - __m128 Inv3 = _mm_mul_ps(SignA, Add03); - - __m128 Row0 = _mm_shuffle_ps(Inv0, Inv1, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Row1 = _mm_shuffle_ps(Inv2, Inv3, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Row2 = _mm_shuffle_ps(Row0, Row1, _MM_SHUFFLE(2, 0, 2, 0)); - - // valType Determinant = m[0][0] * Inverse[0][0] - // + m[0][1] * Inverse[1][0] - // + m[0][2] * Inverse[2][0] - // + m[0][3] * Inverse[3][0]; - __m128 Det0 = glm_vec4_dot(in[0], Row2); - __m128 Rcp0 = _mm_div_ps(_mm_set1_ps(1.0f), Det0); - //__m128 Rcp0 = _mm_rcp_ps(Det0); - - // Inverse /= Determinant; - out[0] = _mm_mul_ps(Inv0, Rcp0); - out[1] = _mm_mul_ps(Inv1, Rcp0); - out[2] = _mm_mul_ps(Inv2, Rcp0); - out[3] = _mm_mul_ps(Inv3, Rcp0); -} - -GLM_FUNC_QUALIFIER void glm_mat4_inverse_lowp(glm_vec4 const in[4], glm_vec4 out[4]) -{ - __m128 Fac0; - { - // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - // valType SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; - // valType SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac0 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac1; - { - // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - // valType SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; - // valType SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac1 = _mm_sub_ps(Mul00, Mul01); - } - - - __m128 Fac2; - { - // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - // valType SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; - // valType SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac2 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac3; - { - // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - // valType SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; - // valType SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac3 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac4; - { - // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - // valType SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; - // valType SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac4 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac5; - { - // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - // valType SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; - // valType SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac5 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 SignA = _mm_set_ps( 1.0f,-1.0f, 1.0f,-1.0f); - __m128 SignB = _mm_set_ps(-1.0f, 1.0f,-1.0f, 1.0f); - - // m[1][0] - // m[0][0] - // m[0][0] - // m[0][0] - __m128 Temp0 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Vec0 = _mm_shuffle_ps(Temp0, Temp0, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][1] - // m[0][1] - // m[0][1] - // m[0][1] - __m128 Temp1 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Vec1 = _mm_shuffle_ps(Temp1, Temp1, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][2] - // m[0][2] - // m[0][2] - // m[0][2] - __m128 Temp2 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Vec2 = _mm_shuffle_ps(Temp2, Temp2, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][3] - // m[0][3] - // m[0][3] - // m[0][3] - __m128 Temp3 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Vec3 = _mm_shuffle_ps(Temp3, Temp3, _MM_SHUFFLE(2, 2, 2, 0)); - - // col0 - // + (Vec1[0] * Fac0[0] - Vec2[0] * Fac1[0] + Vec3[0] * Fac2[0]), - // - (Vec1[1] * Fac0[1] - Vec2[1] * Fac1[1] + Vec3[1] * Fac2[1]), - // + (Vec1[2] * Fac0[2] - Vec2[2] * Fac1[2] + Vec3[2] * Fac2[2]), - // - (Vec1[3] * Fac0[3] - Vec2[3] * Fac1[3] + Vec3[3] * Fac2[3]), - __m128 Mul00 = _mm_mul_ps(Vec1, Fac0); - __m128 Mul01 = _mm_mul_ps(Vec2, Fac1); - __m128 Mul02 = _mm_mul_ps(Vec3, Fac2); - __m128 Sub00 = _mm_sub_ps(Mul00, Mul01); - __m128 Add00 = _mm_add_ps(Sub00, Mul02); - __m128 Inv0 = _mm_mul_ps(SignB, Add00); - - // col1 - // - (Vec0[0] * Fac0[0] - Vec2[0] * Fac3[0] + Vec3[0] * Fac4[0]), - // + (Vec0[0] * Fac0[1] - Vec2[1] * Fac3[1] + Vec3[1] * Fac4[1]), - // - (Vec0[0] * Fac0[2] - Vec2[2] * Fac3[2] + Vec3[2] * Fac4[2]), - // + (Vec0[0] * Fac0[3] - Vec2[3] * Fac3[3] + Vec3[3] * Fac4[3]), - __m128 Mul03 = _mm_mul_ps(Vec0, Fac0); - __m128 Mul04 = _mm_mul_ps(Vec2, Fac3); - __m128 Mul05 = _mm_mul_ps(Vec3, Fac4); - __m128 Sub01 = _mm_sub_ps(Mul03, Mul04); - __m128 Add01 = _mm_add_ps(Sub01, Mul05); - __m128 Inv1 = _mm_mul_ps(SignA, Add01); - - // col2 - // + (Vec0[0] * Fac1[0] - Vec1[0] * Fac3[0] + Vec3[0] * Fac5[0]), - // - (Vec0[0] * Fac1[1] - Vec1[1] * Fac3[1] + Vec3[1] * Fac5[1]), - // + (Vec0[0] * Fac1[2] - Vec1[2] * Fac3[2] + Vec3[2] * Fac5[2]), - // - (Vec0[0] * Fac1[3] - Vec1[3] * Fac3[3] + Vec3[3] * Fac5[3]), - __m128 Mul06 = _mm_mul_ps(Vec0, Fac1); - __m128 Mul07 = _mm_mul_ps(Vec1, Fac3); - __m128 Mul08 = _mm_mul_ps(Vec3, Fac5); - __m128 Sub02 = _mm_sub_ps(Mul06, Mul07); - __m128 Add02 = _mm_add_ps(Sub02, Mul08); - __m128 Inv2 = _mm_mul_ps(SignB, Add02); - - // col3 - // - (Vec1[0] * Fac2[0] - Vec1[0] * Fac4[0] + Vec2[0] * Fac5[0]), - // + (Vec1[0] * Fac2[1] - Vec1[1] * Fac4[1] + Vec2[1] * Fac5[1]), - // - (Vec1[0] * Fac2[2] - Vec1[2] * Fac4[2] + Vec2[2] * Fac5[2]), - // + (Vec1[0] * Fac2[3] - Vec1[3] * Fac4[3] + Vec2[3] * Fac5[3])); - __m128 Mul09 = _mm_mul_ps(Vec0, Fac2); - __m128 Mul10 = _mm_mul_ps(Vec1, Fac4); - __m128 Mul11 = _mm_mul_ps(Vec2, Fac5); - __m128 Sub03 = _mm_sub_ps(Mul09, Mul10); - __m128 Add03 = _mm_add_ps(Sub03, Mul11); - __m128 Inv3 = _mm_mul_ps(SignA, Add03); - - __m128 Row0 = _mm_shuffle_ps(Inv0, Inv1, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Row1 = _mm_shuffle_ps(Inv2, Inv3, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Row2 = _mm_shuffle_ps(Row0, Row1, _MM_SHUFFLE(2, 0, 2, 0)); - - // valType Determinant = m[0][0] * Inverse[0][0] - // + m[0][1] * Inverse[1][0] - // + m[0][2] * Inverse[2][0] - // + m[0][3] * Inverse[3][0]; - __m128 Det0 = glm_vec4_dot(in[0], Row2); - __m128 Rcp0 = _mm_rcp_ps(Det0); - //__m128 Rcp0 = _mm_div_ps(one, Det0); - // Inverse /= Determinant; - out[0] = _mm_mul_ps(Inv0, Rcp0); - out[1] = _mm_mul_ps(Inv1, Rcp0); - out[2] = _mm_mul_ps(Inv2, Rcp0); - out[3] = _mm_mul_ps(Inv3, Rcp0); -} -/* -GLM_FUNC_QUALIFIER void glm_mat4_rotate(__m128 const in[4], float Angle, float const v[3], __m128 out[4]) -{ - float a = glm::radians(Angle); - float c = cos(a); - float s = sin(a); - - glm::vec4 AxisA(v[0], v[1], v[2], float(0)); - __m128 AxisB = _mm_set_ps(AxisA.w, AxisA.z, AxisA.y, AxisA.x); - __m128 AxisC = detail::sse_nrm_ps(AxisB); - - __m128 Cos0 = _mm_set_ss(c); - __m128 CosA = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Sin0 = _mm_set_ss(s); - __m128 SinA = _mm_shuffle_ps(Sin0, Sin0, _MM_SHUFFLE(0, 0, 0, 0)); - - // vec<3, T, Q> temp = (valType(1) - c) * axis; - __m128 Temp0 = _mm_sub_ps(one, CosA); - __m128 Temp1 = _mm_mul_ps(Temp0, AxisC); - - //Rotate[0][0] = c + temp[0] * axis[0]; - //Rotate[0][1] = 0 + temp[0] * axis[1] + s * axis[2]; - //Rotate[0][2] = 0 + temp[0] * axis[2] - s * axis[1]; - __m128 Axis0 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 TmpA0 = _mm_mul_ps(Axis0, AxisC); - __m128 CosA0 = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(1, 1, 1, 0)); - __m128 TmpA1 = _mm_add_ps(CosA0, TmpA0); - __m128 SinA0 = SinA;//_mm_set_ps(0.0f, s, -s, 0.0f); - __m128 TmpA2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(3, 1, 2, 3)); - __m128 TmpA3 = _mm_mul_ps(SinA0, TmpA2); - __m128 TmpA4 = _mm_add_ps(TmpA1, TmpA3); - - //Rotate[1][0] = 0 + temp[1] * axis[0] - s * axis[2]; - //Rotate[1][1] = c + temp[1] * axis[1]; - //Rotate[1][2] = 0 + temp[1] * axis[2] + s * axis[0]; - __m128 Axis1 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(1, 1, 1, 1)); - __m128 TmpB0 = _mm_mul_ps(Axis1, AxisC); - __m128 CosA1 = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(1, 1, 0, 1)); - __m128 TmpB1 = _mm_add_ps(CosA1, TmpB0); - __m128 SinB0 = SinA;//_mm_set_ps(-s, 0.0f, s, 0.0f); - __m128 TmpB2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(3, 0, 3, 2)); - __m128 TmpB3 = _mm_mul_ps(SinA0, TmpB2); - __m128 TmpB4 = _mm_add_ps(TmpB1, TmpB3); - - //Rotate[2][0] = 0 + temp[2] * axis[0] + s * axis[1]; - //Rotate[2][1] = 0 + temp[2] * axis[1] - s * axis[0]; - //Rotate[2][2] = c + temp[2] * axis[2]; - __m128 Axis2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(2, 2, 2, 2)); - __m128 TmpC0 = _mm_mul_ps(Axis2, AxisC); - __m128 CosA2 = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(1, 0, 1, 1)); - __m128 TmpC1 = _mm_add_ps(CosA2, TmpC0); - __m128 SinC0 = SinA;//_mm_set_ps(s, -s, 0.0f, 0.0f); - __m128 TmpC2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(3, 3, 0, 1)); - __m128 TmpC3 = _mm_mul_ps(SinA0, TmpC2); - __m128 TmpC4 = _mm_add_ps(TmpC1, TmpC3); - - __m128 Result[4]; - Result[0] = TmpA4; - Result[1] = TmpB4; - Result[2] = TmpC4; - Result[3] = _mm_set_ps(1, 0, 0, 0); - - //mat<4, 4, valType> Result; - //Result[0] = m[0] * Rotate[0][0] + m[1] * Rotate[0][1] + m[2] * Rotate[0][2]; - //Result[1] = m[0] * Rotate[1][0] + m[1] * Rotate[1][1] + m[2] * Rotate[1][2]; - //Result[2] = m[0] * Rotate[2][0] + m[1] * Rotate[2][1] + m[2] * Rotate[2][2]; - //Result[3] = m[3]; - //return Result; - sse_mul_ps(in, Result, out); -} -*/ -GLM_FUNC_QUALIFIER void glm_mat4_outerProduct(__m128 const& c, __m128 const& r, __m128 out[4]) -{ - out[0] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(0, 0, 0, 0))); - out[1] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(1, 1, 1, 1))); - out[2] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(2, 2, 2, 2))); - out[3] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(3, 3, 3, 3))); -} - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/src/vendor/glm/simd/neon.h b/src/vendor/glm/simd/neon.h deleted file mode 100755 index f85947f..0000000 --- a/src/vendor/glm/simd/neon.h +++ /dev/null @@ -1,155 +0,0 @@ -/// @ref simd_neon -/// @file glm/simd/neon.h - -#pragma once - -#if GLM_ARCH & GLM_ARCH_NEON_BIT -#include - -namespace glm { - namespace neon { - static inline float32x4_t dupq_lane(float32x4_t vsrc, int lane) { - switch(lane) { -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - case 0: return vdupq_laneq_f32(vsrc, 0); - case 1: return vdupq_laneq_f32(vsrc, 1); - case 2: return vdupq_laneq_f32(vsrc, 2); - case 3: return vdupq_laneq_f32(vsrc, 3); -#else - case 0: return vdupq_n_f32(vgetq_lane_f32(vsrc, 0)); - case 1: return vdupq_n_f32(vgetq_lane_f32(vsrc, 1)); - case 2: return vdupq_n_f32(vgetq_lane_f32(vsrc, 2)); - case 3: return vdupq_n_f32(vgetq_lane_f32(vsrc, 3)); -#endif - } - assert(!"Unreachable code executed!"); - return vdupq_n_f32(0.0f); - } - - static inline float32x2_t dup_lane(float32x4_t vsrc, int lane) { - switch(lane) { -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - case 0: return vdup_laneq_f32(vsrc, 0); - case 1: return vdup_laneq_f32(vsrc, 1); - case 2: return vdup_laneq_f32(vsrc, 2); - case 3: return vdup_laneq_f32(vsrc, 3); -#else - case 0: return vdup_n_f32(vgetq_lane_f32(vsrc, 0)); - case 1: return vdup_n_f32(vgetq_lane_f32(vsrc, 1)); - case 2: return vdup_n_f32(vgetq_lane_f32(vsrc, 2)); - case 3: return vdup_n_f32(vgetq_lane_f32(vsrc, 3)); -#endif - } - assert(!"Unreachable code executed!"); - return vdup_n_f32(0.0f); - } - - static inline float32x4_t copy_lane(float32x4_t vdst, int dlane, float32x4_t vsrc, int slane) { -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - switch(dlane) { - case 0: - switch(slane) { - case 0: return vcopyq_laneq_f32(vdst, 0, vsrc, 0); - case 1: return vcopyq_laneq_f32(vdst, 0, vsrc, 1); - case 2: return vcopyq_laneq_f32(vdst, 0, vsrc, 2); - case 3: return vcopyq_laneq_f32(vdst, 0, vsrc, 3); - } - assert(!"Unreachable code executed!"); - case 1: - switch(slane) { - case 0: return vcopyq_laneq_f32(vdst, 1, vsrc, 0); - case 1: return vcopyq_laneq_f32(vdst, 1, vsrc, 1); - case 2: return vcopyq_laneq_f32(vdst, 1, vsrc, 2); - case 3: return vcopyq_laneq_f32(vdst, 1, vsrc, 3); - } - assert(!"Unreachable code executed!"); - case 2: - switch(slane) { - case 0: return vcopyq_laneq_f32(vdst, 2, vsrc, 0); - case 1: return vcopyq_laneq_f32(vdst, 2, vsrc, 1); - case 2: return vcopyq_laneq_f32(vdst, 2, vsrc, 2); - case 3: return vcopyq_laneq_f32(vdst, 2, vsrc, 3); - } - assert(!"Unreachable code executed!"); - case 3: - switch(slane) { - case 0: return vcopyq_laneq_f32(vdst, 3, vsrc, 0); - case 1: return vcopyq_laneq_f32(vdst, 3, vsrc, 1); - case 2: return vcopyq_laneq_f32(vdst, 3, vsrc, 2); - case 3: return vcopyq_laneq_f32(vdst, 3, vsrc, 3); - } - assert(!"Unreachable code executed!"); - } -#else - - float l; - switch(slane) { - case 0: l = vgetq_lane_f32(vsrc, 0); break; - case 1: l = vgetq_lane_f32(vsrc, 1); break; - case 2: l = vgetq_lane_f32(vsrc, 2); break; - case 3: l = vgetq_lane_f32(vsrc, 3); break; - default: - assert(!"Unreachable code executed!"); - } - switch(dlane) { - case 0: return vsetq_lane_f32(l, vdst, 0); - case 1: return vsetq_lane_f32(l, vdst, 1); - case 2: return vsetq_lane_f32(l, vdst, 2); - case 3: return vsetq_lane_f32(l, vdst, 3); - } -#endif - assert(!"Unreachable code executed!"); - return vdupq_n_f32(0.0f); - } - - static inline float32x4_t mul_lane(float32x4_t v, float32x4_t vlane, int lane) { -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - switch(lane) { - case 0: return vmulq_laneq_f32(v, vlane, 0); break; - case 1: return vmulq_laneq_f32(v, vlane, 1); break; - case 2: return vmulq_laneq_f32(v, vlane, 2); break; - case 3: return vmulq_laneq_f32(v, vlane, 3); break; - default: - assert(!"Unreachable code executed!"); - } - assert(!"Unreachable code executed!"); - return vdupq_n_f32(0.0f); -#else - return vmulq_f32(v, dupq_lane(vlane, lane)); -#endif - } - - static inline float32x4_t madd_lane(float32x4_t acc, float32x4_t v, float32x4_t vlane, int lane) { -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT -#ifdef GLM_CONFIG_FORCE_FMA -# define FMADD_LANE(acc, x, y, L) do { asm volatile ("fmla %0.4s, %1.4s, %2.4s" : "+w"(acc) : "w"(x), "w"(dup_lane(y, L))); } while(0) -#else -# define FMADD_LANE(acc, x, y, L) do { acc = vmlaq_laneq_f32(acc, x, y, L); } while(0) -#endif - - switch(lane) { - case 0: - FMADD_LANE(acc, v, vlane, 0); - return acc; - case 1: - FMADD_LANE(acc, v, vlane, 1); - return acc; - case 2: - FMADD_LANE(acc, v, vlane, 2); - return acc; - case 3: - FMADD_LANE(acc, v, vlane, 3); - return acc; - default: - assert(!"Unreachable code executed!"); - } - assert(!"Unreachable code executed!"); - return vdupq_n_f32(0.0f); -# undef FMADD_LANE -#else - return vaddq_f32(acc, vmulq_f32(v, dupq_lane(vlane, lane))); -#endif - } - } //namespace neon -} // namespace glm -#endif // GLM_ARCH & GLM_ARCH_NEON_BIT diff --git a/src/vendor/glm/simd/packing.h b/src/vendor/glm/simd/packing.h deleted file mode 100755 index 609163e..0000000 --- a/src/vendor/glm/simd/packing.h +++ /dev/null @@ -1,8 +0,0 @@ -/// @ref simd -/// @file glm/simd/packing.h - -#pragma once - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/src/vendor/glm/simd/platform.h b/src/vendor/glm/simd/platform.h deleted file mode 100755 index 12a7b72..0000000 --- a/src/vendor/glm/simd/platform.h +++ /dev/null @@ -1,408 +0,0 @@ -#pragma once - -/////////////////////////////////////////////////////////////////////////////////// -// Platform - -#define GLM_PLATFORM_UNKNOWN 0x00000000 -#define GLM_PLATFORM_WINDOWS 0x00010000 -#define GLM_PLATFORM_LINUX 0x00020000 -#define GLM_PLATFORM_APPLE 0x00040000 -//#define GLM_PLATFORM_IOS 0x00080000 -#define GLM_PLATFORM_ANDROID 0x00100000 -#define GLM_PLATFORM_CHROME_NACL 0x00200000 -#define GLM_PLATFORM_UNIX 0x00400000 -#define GLM_PLATFORM_QNXNTO 0x00800000 -#define GLM_PLATFORM_WINCE 0x01000000 -#define GLM_PLATFORM_CYGWIN 0x02000000 - -#ifdef GLM_FORCE_PLATFORM_UNKNOWN -# define GLM_PLATFORM GLM_PLATFORM_UNKNOWN -#elif defined(__CYGWIN__) -# define GLM_PLATFORM GLM_PLATFORM_CYGWIN -#elif defined(__QNXNTO__) -# define GLM_PLATFORM GLM_PLATFORM_QNXNTO -#elif defined(__APPLE__) -# define GLM_PLATFORM GLM_PLATFORM_APPLE -#elif defined(WINCE) -# define GLM_PLATFORM GLM_PLATFORM_WINCE -#elif defined(_WIN32) -# define GLM_PLATFORM GLM_PLATFORM_WINDOWS -#elif defined(__native_client__) -# define GLM_PLATFORM GLM_PLATFORM_CHROME_NACL -#elif defined(__ANDROID__) -# define GLM_PLATFORM GLM_PLATFORM_ANDROID -#elif defined(__linux) -# define GLM_PLATFORM GLM_PLATFORM_LINUX -#elif defined(__unix) -# define GLM_PLATFORM GLM_PLATFORM_UNIX -#else -# define GLM_PLATFORM GLM_PLATFORM_UNKNOWN -#endif// - -/////////////////////////////////////////////////////////////////////////////////// -// Compiler - -#define GLM_COMPILER_UNKNOWN 0x00000000 - -// Intel -#define GLM_COMPILER_INTEL 0x00100000 -#define GLM_COMPILER_INTEL14 0x00100040 -#define GLM_COMPILER_INTEL15 0x00100050 -#define GLM_COMPILER_INTEL16 0x00100060 -#define GLM_COMPILER_INTEL17 0x00100070 - -// Visual C++ defines -#define GLM_COMPILER_VC 0x01000000 -#define GLM_COMPILER_VC12 0x01000001 -#define GLM_COMPILER_VC14 0x01000002 -#define GLM_COMPILER_VC15 0x01000003 -#define GLM_COMPILER_VC15_3 0x01000004 -#define GLM_COMPILER_VC15_5 0x01000005 -#define GLM_COMPILER_VC15_6 0x01000006 -#define GLM_COMPILER_VC15_7 0x01000007 -#define GLM_COMPILER_VC15_8 0x01000008 -#define GLM_COMPILER_VC15_9 0x01000009 -#define GLM_COMPILER_VC16 0x0100000A - -// GCC defines -#define GLM_COMPILER_GCC 0x02000000 -#define GLM_COMPILER_GCC46 0x020000D0 -#define GLM_COMPILER_GCC47 0x020000E0 -#define GLM_COMPILER_GCC48 0x020000F0 -#define GLM_COMPILER_GCC49 0x02000100 -#define GLM_COMPILER_GCC5 0x02000200 -#define GLM_COMPILER_GCC6 0x02000300 -#define GLM_COMPILER_GCC7 0x02000400 -#define GLM_COMPILER_GCC8 0x02000500 - -// CUDA -#define GLM_COMPILER_CUDA 0x10000000 -#define GLM_COMPILER_CUDA75 0x10000001 -#define GLM_COMPILER_CUDA80 0x10000002 -#define GLM_COMPILER_CUDA90 0x10000004 -#define GLM_COMPILER_CUDA_RTC 0x10000100 - -// SYCL -#define GLM_COMPILER_SYCL 0x00300000 - -// Clang -#define GLM_COMPILER_CLANG 0x20000000 -#define GLM_COMPILER_CLANG34 0x20000050 -#define GLM_COMPILER_CLANG35 0x20000060 -#define GLM_COMPILER_CLANG36 0x20000070 -#define GLM_COMPILER_CLANG37 0x20000080 -#define GLM_COMPILER_CLANG38 0x20000090 -#define GLM_COMPILER_CLANG39 0x200000A0 -#define GLM_COMPILER_CLANG40 0x200000B0 -#define GLM_COMPILER_CLANG41 0x200000C0 -#define GLM_COMPILER_CLANG42 0x200000D0 - -// HIP -#define GLM_COMPILER_HIP 0x40000000 - -// Build model -#define GLM_MODEL_32 0x00000010 -#define GLM_MODEL_64 0x00000020 - -// Force generic C++ compiler -#ifdef GLM_FORCE_COMPILER_UNKNOWN -# define GLM_COMPILER GLM_COMPILER_UNKNOWN - -#elif defined(__INTEL_COMPILER) -# if __INTEL_COMPILER >= 1700 -# define GLM_COMPILER GLM_COMPILER_INTEL17 -# elif __INTEL_COMPILER >= 1600 -# define GLM_COMPILER GLM_COMPILER_INTEL16 -# elif __INTEL_COMPILER >= 1500 -# define GLM_COMPILER GLM_COMPILER_INTEL15 -# elif __INTEL_COMPILER >= 1400 -# define GLM_COMPILER GLM_COMPILER_INTEL14 -# elif __INTEL_COMPILER < 1400 -# error "GLM requires ICC 2013 SP1 or newer" -# endif - -// CUDA -#elif defined(__CUDACC__) -# if !defined(CUDA_VERSION) && !defined(GLM_FORCE_CUDA) -# include // make sure version is defined since nvcc does not define it itself! -# endif -# if defined(__CUDACC_RTC__) -# define GLM_COMPILER GLM_COMPILER_CUDA_RTC -# elif CUDA_VERSION >= 8000 -# define GLM_COMPILER GLM_COMPILER_CUDA80 -# elif CUDA_VERSION >= 7500 -# define GLM_COMPILER GLM_COMPILER_CUDA75 -# elif CUDA_VERSION >= 7000 -# define GLM_COMPILER GLM_COMPILER_CUDA70 -# elif CUDA_VERSION < 7000 -# error "GLM requires CUDA 7.0 or higher" -# endif - -// HIP -#elif defined(__HIP__) -# define GLM_COMPILER GLM_COMPILER_HIP - -// SYCL -#elif defined(__SYCL_DEVICE_ONLY__) -# define GLM_COMPILER GLM_COMPILER_SYCL - -// Clang -#elif defined(__clang__) -# if defined(__apple_build_version__) -# if (__clang_major__ < 6) -# error "GLM requires Clang 3.4 / Apple Clang 6.0 or higher" -# elif __clang_major__ == 6 && __clang_minor__ == 0 -# define GLM_COMPILER GLM_COMPILER_CLANG35 -# elif __clang_major__ == 6 && __clang_minor__ >= 1 -# define GLM_COMPILER GLM_COMPILER_CLANG36 -# elif __clang_major__ >= 7 -# define GLM_COMPILER GLM_COMPILER_CLANG37 -# endif -# else -# if ((__clang_major__ == 3) && (__clang_minor__ < 4)) || (__clang_major__ < 3) -# error "GLM requires Clang 3.4 or higher" -# elif __clang_major__ == 3 && __clang_minor__ == 4 -# define GLM_COMPILER GLM_COMPILER_CLANG34 -# elif __clang_major__ == 3 && __clang_minor__ == 5 -# define GLM_COMPILER GLM_COMPILER_CLANG35 -# elif __clang_major__ == 3 && __clang_minor__ == 6 -# define GLM_COMPILER GLM_COMPILER_CLANG36 -# elif __clang_major__ == 3 && __clang_minor__ == 7 -# define GLM_COMPILER GLM_COMPILER_CLANG37 -# elif __clang_major__ == 3 && __clang_minor__ == 8 -# define GLM_COMPILER GLM_COMPILER_CLANG38 -# elif __clang_major__ == 3 && __clang_minor__ >= 9 -# define GLM_COMPILER GLM_COMPILER_CLANG39 -# elif __clang_major__ == 4 && __clang_minor__ == 0 -# define GLM_COMPILER GLM_COMPILER_CLANG40 -# elif __clang_major__ == 4 && __clang_minor__ == 1 -# define GLM_COMPILER GLM_COMPILER_CLANG41 -# elif __clang_major__ == 4 && __clang_minor__ >= 2 -# define GLM_COMPILER GLM_COMPILER_CLANG42 -# elif __clang_major__ >= 4 -# define GLM_COMPILER GLM_COMPILER_CLANG42 -# endif -# endif - -// Visual C++ -#elif defined(_MSC_VER) -# if _MSC_VER >= 1920 -# define GLM_COMPILER GLM_COMPILER_VC16 -# elif _MSC_VER >= 1916 -# define GLM_COMPILER GLM_COMPILER_VC15_9 -# elif _MSC_VER >= 1915 -# define GLM_COMPILER GLM_COMPILER_VC15_8 -# elif _MSC_VER >= 1914 -# define GLM_COMPILER GLM_COMPILER_VC15_7 -# elif _MSC_VER >= 1913 -# define GLM_COMPILER GLM_COMPILER_VC15_6 -# elif _MSC_VER >= 1912 -# define GLM_COMPILER GLM_COMPILER_VC15_5 -# elif _MSC_VER >= 1911 -# define GLM_COMPILER GLM_COMPILER_VC15_3 -# elif _MSC_VER >= 1910 -# define GLM_COMPILER GLM_COMPILER_VC15 -# elif _MSC_VER >= 1900 -# define GLM_COMPILER GLM_COMPILER_VC14 -# elif _MSC_VER >= 1800 -# define GLM_COMPILER GLM_COMPILER_VC12 -# elif _MSC_VER < 1800 -# error "GLM requires Visual C++ 12 - 2013 or higher" -# endif//_MSC_VER - -// G++ -#elif defined(__GNUC__) || defined(__MINGW32__) -# if __GNUC__ >= 8 -# define GLM_COMPILER GLM_COMPILER_GCC8 -# elif __GNUC__ >= 7 -# define GLM_COMPILER GLM_COMPILER_GCC7 -# elif __GNUC__ >= 6 -# define GLM_COMPILER GLM_COMPILER_GCC6 -# elif __GNUC__ >= 5 -# define GLM_COMPILER GLM_COMPILER_GCC5 -# elif __GNUC__ == 4 && __GNUC_MINOR__ >= 9 -# define GLM_COMPILER GLM_COMPILER_GCC49 -# elif __GNUC__ == 4 && __GNUC_MINOR__ >= 8 -# define GLM_COMPILER GLM_COMPILER_GCC48 -# elif __GNUC__ == 4 && __GNUC_MINOR__ >= 7 -# define GLM_COMPILER GLM_COMPILER_GCC47 -# elif __GNUC__ == 4 && __GNUC_MINOR__ >= 6 -# define GLM_COMPILER GLM_COMPILER_GCC46 -# elif ((__GNUC__ == 4) && (__GNUC_MINOR__ < 6)) || (__GNUC__ < 4) -# error "GLM requires GCC 4.6 or higher" -# endif - -#else -# define GLM_COMPILER GLM_COMPILER_UNKNOWN -#endif - -#ifndef GLM_COMPILER -# error "GLM_COMPILER undefined, your compiler may not be supported by GLM. Add #define GLM_COMPILER 0 to ignore this message." -#endif//GLM_COMPILER - -/////////////////////////////////////////////////////////////////////////////////// -// Instruction sets - -// User defines: GLM_FORCE_PURE GLM_FORCE_INTRINSICS GLM_FORCE_SSE2 GLM_FORCE_SSE3 GLM_FORCE_AVX GLM_FORCE_AVX2 GLM_FORCE_AVX2 - -#define GLM_ARCH_MIPS_BIT (0x10000000) -#define GLM_ARCH_PPC_BIT (0x20000000) -#define GLM_ARCH_ARM_BIT (0x40000000) -#define GLM_ARCH_ARMV8_BIT (0x01000000) -#define GLM_ARCH_X86_BIT (0x80000000) - -#define GLM_ARCH_SIMD_BIT (0x00001000) - -#define GLM_ARCH_NEON_BIT (0x00000001) -#define GLM_ARCH_SSE_BIT (0x00000002) -#define GLM_ARCH_SSE2_BIT (0x00000004) -#define GLM_ARCH_SSE3_BIT (0x00000008) -#define GLM_ARCH_SSSE3_BIT (0x00000010) -#define GLM_ARCH_SSE41_BIT (0x00000020) -#define GLM_ARCH_SSE42_BIT (0x00000040) -#define GLM_ARCH_AVX_BIT (0x00000080) -#define GLM_ARCH_AVX2_BIT (0x00000100) - -#define GLM_ARCH_UNKNOWN (0) -#define GLM_ARCH_X86 (GLM_ARCH_X86_BIT) -#define GLM_ARCH_SSE (GLM_ARCH_SSE_BIT | GLM_ARCH_SIMD_BIT | GLM_ARCH_X86) -#define GLM_ARCH_SSE2 (GLM_ARCH_SSE2_BIT | GLM_ARCH_SSE) -#define GLM_ARCH_SSE3 (GLM_ARCH_SSE3_BIT | GLM_ARCH_SSE2) -#define GLM_ARCH_SSSE3 (GLM_ARCH_SSSE3_BIT | GLM_ARCH_SSE3) -#define GLM_ARCH_SSE41 (GLM_ARCH_SSE41_BIT | GLM_ARCH_SSSE3) -#define GLM_ARCH_SSE42 (GLM_ARCH_SSE42_BIT | GLM_ARCH_SSE41) -#define GLM_ARCH_AVX (GLM_ARCH_AVX_BIT | GLM_ARCH_SSE42) -#define GLM_ARCH_AVX2 (GLM_ARCH_AVX2_BIT | GLM_ARCH_AVX) -#define GLM_ARCH_ARM (GLM_ARCH_ARM_BIT) -#define GLM_ARCH_ARMV8 (GLM_ARCH_NEON_BIT | GLM_ARCH_SIMD_BIT | GLM_ARCH_ARM | GLM_ARCH_ARMV8_BIT) -#define GLM_ARCH_NEON (GLM_ARCH_NEON_BIT | GLM_ARCH_SIMD_BIT | GLM_ARCH_ARM) -#define GLM_ARCH_MIPS (GLM_ARCH_MIPS_BIT) -#define GLM_ARCH_PPC (GLM_ARCH_PPC_BIT) - -#if defined(GLM_FORCE_ARCH_UNKNOWN) || defined(GLM_FORCE_PURE) -# define GLM_ARCH GLM_ARCH_UNKNOWN -#elif defined(GLM_FORCE_NEON) -# if __ARM_ARCH >= 8 -# define GLM_ARCH (GLM_ARCH_ARMV8) -# else -# define GLM_ARCH (GLM_ARCH_NEON) -# endif -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_AVX2) -# define GLM_ARCH (GLM_ARCH_AVX2) -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_AVX) -# define GLM_ARCH (GLM_ARCH_AVX) -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_SSE42) -# define GLM_ARCH (GLM_ARCH_SSE42) -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_SSE41) -# define GLM_ARCH (GLM_ARCH_SSE41) -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_SSSE3) -# define GLM_ARCH (GLM_ARCH_SSSE3) -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_SSE3) -# define GLM_ARCH (GLM_ARCH_SSE3) -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_SSE2) -# define GLM_ARCH (GLM_ARCH_SSE2) -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_SSE) -# define GLM_ARCH (GLM_ARCH_SSE) -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_INTRINSICS) && !defined(GLM_FORCE_XYZW_ONLY) -# if defined(__AVX2__) -# define GLM_ARCH (GLM_ARCH_AVX2) -# elif defined(__AVX__) -# define GLM_ARCH (GLM_ARCH_AVX) -# elif defined(__SSE4_2__) -# define GLM_ARCH (GLM_ARCH_SSE42) -# elif defined(__SSE4_1__) -# define GLM_ARCH (GLM_ARCH_SSE41) -# elif defined(__SSSE3__) -# define GLM_ARCH (GLM_ARCH_SSSE3) -# elif defined(__SSE3__) -# define GLM_ARCH (GLM_ARCH_SSE3) -# elif defined(__SSE2__) || defined(__x86_64__) || defined(_M_X64) || defined(_M_IX86_FP) -# define GLM_ARCH (GLM_ARCH_SSE2) -# elif defined(__i386__) -# define GLM_ARCH (GLM_ARCH_X86) -# elif defined(__ARM_ARCH) && (__ARM_ARCH >= 8) -# define GLM_ARCH (GLM_ARCH_ARMV8) -# elif defined(__ARM_NEON) -# define GLM_ARCH (GLM_ARCH_ARM | GLM_ARCH_NEON) -# elif defined(__arm__ ) || defined(_M_ARM) -# define GLM_ARCH (GLM_ARCH_ARM) -# elif defined(__mips__ ) -# define GLM_ARCH (GLM_ARCH_MIPS) -# elif defined(__powerpc__ ) || defined(_M_PPC) -# define GLM_ARCH (GLM_ARCH_PPC) -# else -# define GLM_ARCH (GLM_ARCH_UNKNOWN) -# endif -#else -# if defined(__x86_64__) || defined(_M_X64) || defined(_M_IX86) || defined(__i386__) -# define GLM_ARCH (GLM_ARCH_X86) -# elif defined(__arm__) || defined(_M_ARM) -# define GLM_ARCH (GLM_ARCH_ARM) -# elif defined(__powerpc__) || defined(_M_PPC) -# define GLM_ARCH (GLM_ARCH_PPC) -# elif defined(__mips__) -# define GLM_ARCH (GLM_ARCH_MIPS) -# else -# define GLM_ARCH (GLM_ARCH_UNKNOWN) -# endif -#endif - -#if GLM_ARCH & GLM_ARCH_AVX2_BIT -# include -#elif GLM_ARCH & GLM_ARCH_AVX_BIT -# include -#elif GLM_ARCH & GLM_ARCH_SSE42_BIT -# if GLM_COMPILER & GLM_COMPILER_CLANG -# include -# endif -# include -#elif GLM_ARCH & GLM_ARCH_SSE41_BIT -# include -#elif GLM_ARCH & GLM_ARCH_SSSE3_BIT -# include -#elif GLM_ARCH & GLM_ARCH_SSE3_BIT -# include -#elif GLM_ARCH & GLM_ARCH_SSE2_BIT -# include -#elif GLM_ARCH & GLM_ARCH_NEON_BIT -# include "neon.h" -#endif//GLM_ARCH - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - typedef __m128 glm_f32vec4; - typedef __m128i glm_i32vec4; - typedef __m128i glm_u32vec4; - typedef __m128d glm_f64vec2; - typedef __m128i glm_i64vec2; - typedef __m128i glm_u64vec2; - - typedef glm_f32vec4 glm_vec4; - typedef glm_i32vec4 glm_ivec4; - typedef glm_u32vec4 glm_uvec4; - typedef glm_f64vec2 glm_dvec2; -#endif - -#if GLM_ARCH & GLM_ARCH_AVX_BIT - typedef __m256d glm_f64vec4; - typedef glm_f64vec4 glm_dvec4; -#endif - -#if GLM_ARCH & GLM_ARCH_AVX2_BIT - typedef __m256i glm_i64vec4; - typedef __m256i glm_u64vec4; -#endif - -#if GLM_ARCH & GLM_ARCH_NEON_BIT - typedef float32x4_t glm_f32vec4; - typedef int32x4_t glm_i32vec4; - typedef uint32x4_t glm_u32vec4; -#endif diff --git a/src/vendor/glm/simd/trigonometric.h b/src/vendor/glm/simd/trigonometric.h deleted file mode 100755 index 739b796..0000000 --- a/src/vendor/glm/simd/trigonometric.h +++ /dev/null @@ -1,9 +0,0 @@ -/// @ref simd -/// @file glm/simd/trigonometric.h - -#pragma once - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT - diff --git a/src/vendor/glm/simd/vector_relational.h b/src/vendor/glm/simd/vector_relational.h deleted file mode 100755 index f7385e9..0000000 --- a/src/vendor/glm/simd/vector_relational.h +++ /dev/null @@ -1,8 +0,0 @@ -/// @ref simd -/// @file glm/simd/vector_relational.h - -#pragma once - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/src/vendor/glm/trigonometric.hpp b/src/vendor/glm/trigonometric.hpp deleted file mode 100755 index 51d49c1..0000000 --- a/src/vendor/glm/trigonometric.hpp +++ /dev/null @@ -1,210 +0,0 @@ -/// @ref core -/// @file glm/trigonometric.hpp -/// -/// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions -/// -/// @defgroup core_func_trigonometric Angle and Trigonometry Functions -/// @ingroup core -/// -/// Function parameters specified as angle are assumed to be in units of radians. -/// In no case will any of these functions result in a divide by zero error. If -/// the divisor of a ratio is 0, then results will be undefined. -/// -/// These all operate component-wise. The description is per component. -/// -/// Include to use these core features. -/// -/// @see ext_vector_trigonometric - -#pragma once - -#include "detail/setup.hpp" -#include "detail/qualifier.hpp" - -namespace glm -{ - /// @addtogroup core_func_trigonometric - /// @{ - - /// Converts degrees to radians and returns the result. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL radians man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec radians(vec const& degrees); - - /// Converts radians to degrees and returns the result. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL degrees man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec degrees(vec const& radians); - - /// The standard trigonometric sine function. - /// The values returned by this function will range from [-1, 1]. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL sin man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec sin(vec const& angle); - - /// The standard trigonometric cosine function. - /// The values returned by this function will range from [-1, 1]. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL cos man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec cos(vec const& angle); - - /// The standard trigonometric tangent function. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL tan man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec tan(vec const& angle); - - /// Arc sine. Returns an angle whose sine is x. - /// The range of values returned by this function is [-PI/2, PI/2]. - /// Results are undefined if |x| > 1. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL asin man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec asin(vec const& x); - - /// Arc cosine. Returns an angle whose cosine is x. - /// The range of values returned by this function is [0, PI]. - /// Results are undefined if |x| > 1. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL acos man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec acos(vec const& x); - - /// Arc tangent. Returns an angle whose tangent is y/x. - /// The signs of x and y are used to determine what - /// quadrant the angle is in. The range of values returned - /// by this function is [-PI, PI]. Results are undefined - /// if x and y are both 0. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL atan man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec atan(vec const& y, vec const& x); - - /// Arc tangent. Returns an angle whose tangent is y_over_x. - /// The range of values returned by this function is [-PI/2, PI/2]. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL atan man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec atan(vec const& y_over_x); - - /// Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2 - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL sinh man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec sinh(vec const& angle); - - /// Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2 - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL cosh man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec cosh(vec const& angle); - - /// Returns the hyperbolic tangent function, sinh(angle) / cosh(angle) - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL tanh man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec tanh(vec const& angle); - - /// Arc hyperbolic sine; returns the inverse of sinh. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL asinh man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec asinh(vec const& x); - - /// Arc hyperbolic cosine; returns the non-negative inverse - /// of cosh. Results are undefined if x < 1. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL acosh man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec acosh(vec const& x); - - /// Arc hyperbolic tangent; returns the inverse of tanh. - /// Results are undefined if abs(x) >= 1. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL atanh man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec atanh(vec const& x); - - /// @} -}//namespace glm - -#include "detail/func_trigonometric.inl" diff --git a/src/vendor/glm/vec2.hpp b/src/vendor/glm/vec2.hpp deleted file mode 100755 index cd4e070..0000000 --- a/src/vendor/glm/vec2.hpp +++ /dev/null @@ -1,14 +0,0 @@ -/// @ref core -/// @file glm/vec2.hpp - -#pragma once -#include "./ext/vector_bool2.hpp" -#include "./ext/vector_bool2_precision.hpp" -#include "./ext/vector_float2.hpp" -#include "./ext/vector_float2_precision.hpp" -#include "./ext/vector_double2.hpp" -#include "./ext/vector_double2_precision.hpp" -#include "./ext/vector_int2.hpp" -#include "./ext/vector_int2_sized.hpp" -#include "./ext/vector_uint2.hpp" -#include "./ext/vector_uint2_sized.hpp" diff --git a/src/vendor/glm/vec3.hpp b/src/vendor/glm/vec3.hpp deleted file mode 100755 index f5a927d..0000000 --- a/src/vendor/glm/vec3.hpp +++ /dev/null @@ -1,14 +0,0 @@ -/// @ref core -/// @file glm/vec3.hpp - -#pragma once -#include "./ext/vector_bool3.hpp" -#include "./ext/vector_bool3_precision.hpp" -#include "./ext/vector_float3.hpp" -#include "./ext/vector_float3_precision.hpp" -#include "./ext/vector_double3.hpp" -#include "./ext/vector_double3_precision.hpp" -#include "./ext/vector_int3.hpp" -#include "./ext/vector_int3_sized.hpp" -#include "./ext/vector_uint3.hpp" -#include "./ext/vector_uint3_sized.hpp" diff --git a/src/vendor/glm/vec4.hpp b/src/vendor/glm/vec4.hpp deleted file mode 100755 index c6ea9f1..0000000 --- a/src/vendor/glm/vec4.hpp +++ /dev/null @@ -1,15 +0,0 @@ -/// @ref core -/// @file glm/vec4.hpp - -#pragma once -#include "./ext/vector_bool4.hpp" -#include "./ext/vector_bool4_precision.hpp" -#include "./ext/vector_float4.hpp" -#include "./ext/vector_float4_precision.hpp" -#include "./ext/vector_double4.hpp" -#include "./ext/vector_double4_precision.hpp" -#include "./ext/vector_int4.hpp" -#include "./ext/vector_int4_sized.hpp" -#include "./ext/vector_uint4.hpp" -#include "./ext/vector_uint4_sized.hpp" - diff --git a/src/vendor/glm/vector_relational.hpp b/src/vendor/glm/vector_relational.hpp deleted file mode 100755 index a0fe17e..0000000 --- a/src/vendor/glm/vector_relational.hpp +++ /dev/null @@ -1,121 +0,0 @@ -/// @ref core -/// @file glm/vector_relational.hpp -/// -/// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions -/// -/// @defgroup core_func_vector_relational Vector Relational Functions -/// @ingroup core -/// -/// Relational and equality operators (<, <=, >, >=, ==, !=) are defined to -/// operate on scalars and produce scalar Boolean results. For vector results, -/// use the following built-in functions. -/// -/// In all cases, the sizes of all the input and return vectors for any particular -/// call must match. -/// -/// Include to use these core features. -/// -/// @see ext_vector_relational - -#pragma once - -#include "detail/qualifier.hpp" -#include "detail/setup.hpp" - -namespace glm -{ - /// @addtogroup core_func_vector_relational - /// @{ - - /// Returns the component-wise comparison result of x < y. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T A floating-point or integer scalar type. - /// - /// @see GLSL lessThan man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec lessThan(vec const& x, vec const& y); - - /// Returns the component-wise comparison of result x <= y. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T A floating-point or integer scalar type. - /// - /// @see GLSL lessThanEqual man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec lessThanEqual(vec const& x, vec const& y); - - /// Returns the component-wise comparison of result x > y. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T A floating-point or integer scalar type. - /// - /// @see GLSL greaterThan man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec greaterThan(vec const& x, vec const& y); - - /// Returns the component-wise comparison of result x >= y. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T A floating-point or integer scalar type. - /// - /// @see GLSL greaterThanEqual man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec greaterThanEqual(vec const& x, vec const& y); - - /// Returns the component-wise comparison of result x == y. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T A floating-point, integer or bool scalar type. - /// - /// @see GLSL equal man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(vec const& x, vec const& y); - - /// Returns the component-wise comparison of result x != y. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T A floating-point, integer or bool scalar type. - /// - /// @see GLSL notEqual man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y); - - /// Returns true if any component of x is true. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// - /// @see GLSL any man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR bool any(vec const& v); - - /// Returns true if all components of x are true. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// - /// @see GLSL all man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR bool all(vec const& v); - - /// Returns the component-wise logical complement of x. - /// /!\ Because of language incompatibilities between C++ and GLSL, GLM defines the function not but not_ instead. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// - /// @see GLSL not man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec not_(vec const& v); - - /// @} -}//namespace glm - -#include "detail/func_vector_relational.inl" diff --git a/src/vendor/stb_image/stb_image.h b/src/vendor/stb_image/stb_image.h deleted file mode 100755 index 64e6c8f..0000000 --- a/src/vendor/stb_image/stb_image.h +++ /dev/null @@ -1,7897 +0,0 @@ -/* stb_image - v2.27 - public domain image loader - http://nothings.org/stb - no warranty implied; use at your own risk - - Do this: - #define STB_IMAGE_IMPLEMENTATION - before you include this file in *one* C or C++ file to create the implementation. - - // i.e. it should look like this: - #include ... - #include ... - #include ... - #define STB_IMAGE_IMPLEMENTATION - #include "stb_image.h" - - You can #define STBI_ASSERT(x) before the #include to avoid using assert.h. - And #define STBI_MALLOC, STBI_REALLOC, and STBI_FREE to avoid using malloc,realloc,free - - - QUICK NOTES: - Primarily of interest to game developers and other people who can - avoid problematic images and only need the trivial interface - - JPEG baseline & progressive (12 bpc/arithmetic not supported, same as stock IJG lib) - PNG 1/2/4/8/16-bit-per-channel - - TGA (not sure what subset, if a subset) - BMP non-1bpp, non-RLE - PSD (composited view only, no extra channels, 8/16 bit-per-channel) - - GIF (*comp always reports as 4-channel) - HDR (radiance rgbE format) - PIC (Softimage PIC) - PNM (PPM and PGM binary only) - - Animated GIF still needs a proper API, but here's one way to do it: - http://gist.github.com/urraka/685d9a6340b26b830d49 - - - decode from memory or through FILE (define STBI_NO_STDIO to remove code) - - decode from arbitrary I/O callbacks - - SIMD acceleration on x86/x64 (SSE2) and ARM (NEON) - - Full documentation under "DOCUMENTATION" below. - - -LICENSE - - See end of file for license information. - -RECENT REVISION HISTORY: - - 2.27 (2021-07-11) document stbi_info better, 16-bit PNM support, bug fixes - 2.26 (2020-07-13) many minor fixes - 2.25 (2020-02-02) fix warnings - 2.24 (2020-02-02) fix warnings; thread-local failure_reason and flip_vertically - 2.23 (2019-08-11) fix clang static analysis warning - 2.22 (2019-03-04) gif fixes, fix warnings - 2.21 (2019-02-25) fix typo in comment - 2.20 (2019-02-07) support utf8 filenames in Windows; fix warnings and platform ifdefs - 2.19 (2018-02-11) fix warning - 2.18 (2018-01-30) fix warnings - 2.17 (2018-01-29) bugfix, 1-bit BMP, 16-bitness query, fix warnings - 2.16 (2017-07-23) all functions have 16-bit variants; optimizations; bugfixes - 2.15 (2017-03-18) fix png-1,2,4; all Imagenet JPGs; no runtime SSE detection on GCC - 2.14 (2017-03-03) remove deprecated STBI_JPEG_OLD; fixes for Imagenet JPGs - 2.13 (2016-12-04) experimental 16-bit API, only for PNG so far; fixes - 2.12 (2016-04-02) fix typo in 2.11 PSD fix that caused crashes - 2.11 (2016-04-02) 16-bit PNGS; enable SSE2 in non-gcc x64 - RGB-format JPEG; remove white matting in PSD; - allocate large structures on the stack; - correct channel count for PNG & BMP - 2.10 (2016-01-22) avoid warning introduced in 2.09 - 2.09 (2016-01-16) 16-bit TGA; comments in PNM files; STBI_REALLOC_SIZED - - See end of file for full revision history. - - - ============================ Contributors ========================= - - Image formats Extensions, features - Sean Barrett (jpeg, png, bmp) Jetro Lauha (stbi_info) - Nicolas Schulz (hdr, psd) Martin "SpartanJ" Golini (stbi_info) - Jonathan Dummer (tga) James "moose2000" Brown (iPhone PNG) - Jean-Marc Lienher (gif) Ben "Disch" Wenger (io callbacks) - Tom Seddon (pic) Omar Cornut (1/2/4-bit PNG) - Thatcher Ulrich (psd) Nicolas Guillemot (vertical flip) - Ken Miller (pgm, ppm) Richard Mitton (16-bit PSD) - github:urraka (animated gif) Junggon Kim (PNM comments) - Christopher Forseth (animated gif) Daniel Gibson (16-bit TGA) - socks-the-fox (16-bit PNG) - Jeremy Sawicki (handle all ImageNet JPGs) - Optimizations & bugfixes Mikhail Morozov (1-bit BMP) - Fabian "ryg" Giesen Anael Seghezzi (is-16-bit query) - Arseny Kapoulkine Simon Breuss (16-bit PNM) - John-Mark Allen - Carmelo J Fdez-Aguera - - Bug & warning fixes - Marc LeBlanc David Woo Guillaume George Martins Mozeiko - Christpher Lloyd Jerry Jansson Joseph Thomson Blazej Dariusz Roszkowski - Phil Jordan Dave Moore Roy Eltham - Hayaki Saito Nathan Reed Won Chun - Luke Graham Johan Duparc Nick Verigakis the Horde3D community - Thomas Ruf Ronny Chevalier github:rlyeh - Janez Zemva John Bartholomew Michal Cichon github:romigrou - Jonathan Blow Ken Hamada Tero Hanninen github:svdijk - Eugene Golushkov Laurent Gomila Cort Stratton github:snagar - Aruelien Pocheville Sergio Gonzalez Thibault Reuille github:Zelex - Cass Everitt Ryamond Barbiero github:grim210 - Paul Du Bois Engin Manap Aldo Culquicondor github:sammyhw - Philipp Wiesemann Dale Weiler Oriol Ferrer Mesia github:phprus - Josh Tobin Matthew Gregan github:poppolopoppo - Julian Raschke Gregory Mullen Christian Floisand github:darealshinji - Baldur Karlsson Kevin Schmidt JR Smith github:Michaelangel007 - Brad Weinberger Matvey Cherevko github:mosra - Luca Sas Alexander Veselov Zack Middleton [reserved] - Ryan C. Gordon [reserved] [reserved] - DO NOT ADD YOUR NAME HERE - - Jacko Dirks - - To add your name to the credits, pick a random blank space in the middle and fill it. - 80% of merge conflicts on stb PRs are due to people adding their name at the end - of the credits. -*/ - -#ifndef STBI_INCLUDE_STB_IMAGE_H -#define STBI_INCLUDE_STB_IMAGE_H - -// DOCUMENTATION -// -// Limitations: -// - no 12-bit-per-channel JPEG -// - no JPEGs with arithmetic coding -// - GIF always returns *comp=4 -// -// Basic usage (see HDR discussion below for HDR usage): -// int x,y,n; -// unsigned char *data = stbi_load(filename, &x, &y, &n, 0); -// // ... process data if not NULL ... -// // ... x = width, y = height, n = # 8-bit components per pixel ... -// // ... replace '0' with '1'..'4' to force that many components per pixel -// // ... but 'n' will always be the number that it would have been if you said 0 -// stbi_image_free(data) -// -// Standard parameters: -// int *x -- outputs image width in pixels -// int *y -- outputs image height in pixels -// int *channels_in_file -- outputs # of image components in image file -// int desired_channels -- if non-zero, # of image components requested in result -// -// The return value from an image loader is an 'unsigned char *' which points -// to the pixel data, or NULL on an allocation failure or if the image is -// corrupt or invalid. The pixel data consists of *y scanlines of *x pixels, -// with each pixel consisting of N interleaved 8-bit components; the first -// pixel pointed to is top-left-most in the image. There is no padding between -// image scanlines or between pixels, regardless of format. The number of -// components N is 'desired_channels' if desired_channels is non-zero, or -// *channels_in_file otherwise. If desired_channels is non-zero, -// *channels_in_file has the number of components that _would_ have been -// output otherwise. E.g. if you set desired_channels to 4, you will always -// get RGBA output, but you can check *channels_in_file to see if it's trivially -// opaque because e.g. there were only 3 channels in the source image. -// -// An output image with N components has the following components interleaved -// in this order in each pixel: -// -// N=#comp components -// 1 grey -// 2 grey, alpha -// 3 red, green, blue -// 4 red, green, blue, alpha -// -// If image loading fails for any reason, the return value will be NULL, -// and *x, *y, *channels_in_file will be unchanged. The function -// stbi_failure_reason() can be queried for an extremely brief, end-user -// unfriendly explanation of why the load failed. Define STBI_NO_FAILURE_STRINGS -// to avoid compiling these strings at all, and STBI_FAILURE_USERMSG to get slightly -// more user-friendly ones. -// -// Paletted PNG, BMP, GIF, and PIC images are automatically depalettized. -// -// To query the width, height and component count of an image without having to -// decode the full file, you can use the stbi_info family of functions: -// -// int x,y,n,ok; -// ok = stbi_info(filename, &x, &y, &n); -// // returns ok=1 and sets x, y, n if image is a supported format, -// // 0 otherwise. -// -// Note that stb_image pervasively uses ints in its public API for sizes, -// including sizes of memory buffers. This is now part of the API and thus -// hard to change without causing breakage. As a result, the various image -// loaders all have certain limits on image size; these differ somewhat -// by format but generally boil down to either just under 2GB or just under -// 1GB. When the decoded image would be larger than this, stb_image decoding -// will fail. -// -// Additionally, stb_image will reject image files that have any of their -// dimensions set to a larger value than the configurable STBI_MAX_DIMENSIONS, -// which defaults to 2**24 = 16777216 pixels. Due to the above memory limit, -// the only way to have an image with such dimensions load correctly -// is for it to have a rather extreme aspect ratio. Either way, the -// assumption here is that such larger images are likely to be malformed -// or malicious. If you do need to load an image with individual dimensions -// larger than that, and it still fits in the overall size limit, you can -// #define STBI_MAX_DIMENSIONS on your own to be something larger. -// -// =========================================================================== -// -// UNICODE: -// -// If compiling for Windows and you wish to use Unicode filenames, compile -// with -// #define STBI_WINDOWS_UTF8 -// and pass utf8-encoded filenames. Call stbi_convert_wchar_to_utf8 to convert -// Windows wchar_t filenames to utf8. -// -// =========================================================================== -// -// Philosophy -// -// stb libraries are designed with the following priorities: -// -// 1. easy to use -// 2. easy to maintain -// 3. good performance -// -// Sometimes I let "good performance" creep up in priority over "easy to maintain", -// and for best performance I may provide less-easy-to-use APIs that give higher -// performance, in addition to the easy-to-use ones. Nevertheless, it's important -// to keep in mind that from the standpoint of you, a client of this library, -// all you care about is #1 and #3, and stb libraries DO NOT emphasize #3 above all. -// -// Some secondary priorities arise directly from the first two, some of which -// provide more explicit reasons why performance can't be emphasized. -// -// - Portable ("ease of use") -// - Small source code footprint ("easy to maintain") -// - No dependencies ("ease of use") -// -// =========================================================================== -// -// I/O callbacks -// -// I/O callbacks allow you to read from arbitrary sources, like packaged -// files or some other source. Data read from callbacks are processed -// through a small internal buffer (currently 128 bytes) to try to reduce -// overhead. -// -// The three functions you must define are "read" (reads some bytes of data), -// "skip" (skips some bytes of data), "eof" (reports if the stream is at the end). -// -// =========================================================================== -// -// SIMD support -// -// The JPEG decoder will try to automatically use SIMD kernels on x86 when -// supported by the compiler. For ARM Neon support, you must explicitly -// request it. -// -// (The old do-it-yourself SIMD API is no longer supported in the current -// code.) -// -// On x86, SSE2 will automatically be used when available based on a run-time -// test; if not, the generic C versions are used as a fall-back. On ARM targets, -// the typical path is to have separate builds for NEON and non-NEON devices -// (at least this is true for iOS and Android). Therefore, the NEON support is -// toggled by a build flag: define STBI_NEON to get NEON loops. -// -// If for some reason you do not want to use any of SIMD code, or if -// you have issues compiling it, you can disable it entirely by -// defining STBI_NO_SIMD. -// -// =========================================================================== -// -// HDR image support (disable by defining STBI_NO_HDR) -// -// stb_image supports loading HDR images in general, and currently the Radiance -// .HDR file format specifically. You can still load any file through the existing -// interface; if you attempt to load an HDR file, it will be automatically remapped -// to LDR, assuming gamma 2.2 and an arbitrary scale factor defaulting to 1; -// both of these constants can be reconfigured through this interface: -// -// stbi_hdr_to_ldr_gamma(2.2f); -// stbi_hdr_to_ldr_scale(1.0f); -// -// (note, do not use _inverse_ constants; stbi_image will invert them -// appropriately). -// -// Additionally, there is a new, parallel interface for loading files as -// (linear) floats to preserve the full dynamic range: -// -// float *data = stbi_loadf(filename, &x, &y, &n, 0); -// -// If you load LDR images through this interface, those images will -// be promoted to floating point values, run through the inverse of -// constants corresponding to the above: -// -// stbi_ldr_to_hdr_scale(1.0f); -// stbi_ldr_to_hdr_gamma(2.2f); -// -// Finally, given a filename (or an open file or memory block--see header -// file for details) containing image data, you can query for the "most -// appropriate" interface to use (that is, whether the image is HDR or -// not), using: -// -// stbi_is_hdr(char *filename); -// -// =========================================================================== -// -// iPhone PNG support: -// -// We optionally support converting iPhone-formatted PNGs (which store -// premultiplied BGRA) back to RGB, even though they're internally encoded -// differently. To enable this conversion, call -// stbi_convert_iphone_png_to_rgb(1). -// -// Call stbi_set_unpremultiply_on_load(1) as well to force a divide per -// pixel to remove any premultiplied alpha *only* if the image file explicitly -// says there's premultiplied data (currently only happens in iPhone images, -// and only if iPhone convert-to-rgb processing is on). -// -// =========================================================================== -// -// ADDITIONAL CONFIGURATION -// -// - You can suppress implementation of any of the decoders to reduce -// your code footprint by #defining one or more of the following -// symbols before creating the implementation. -// -// STBI_NO_JPEG -// STBI_NO_PNG -// STBI_NO_BMP -// STBI_NO_PSD -// STBI_NO_TGA -// STBI_NO_GIF -// STBI_NO_HDR -// STBI_NO_PIC -// STBI_NO_PNM (.ppm and .pgm) -// -// - You can request *only* certain decoders and suppress all other ones -// (this will be more forward-compatible, as addition of new decoders -// doesn't require you to disable them explicitly): -// -// STBI_ONLY_JPEG -// STBI_ONLY_PNG -// STBI_ONLY_BMP -// STBI_ONLY_PSD -// STBI_ONLY_TGA -// STBI_ONLY_GIF -// STBI_ONLY_HDR -// STBI_ONLY_PIC -// STBI_ONLY_PNM (.ppm and .pgm) -// -// - If you use STBI_NO_PNG (or _ONLY_ without PNG), and you still -// want the zlib decoder to be available, #define STBI_SUPPORT_ZLIB -// -// - If you define STBI_MAX_DIMENSIONS, stb_image will reject images greater -// than that size (in either width or height) without further processing. -// This is to let programs in the wild set an upper bound to prevent -// denial-of-service attacks on untrusted data, as one could generate a -// valid image of gigantic dimensions and force stb_image to allocate a -// huge block of memory and spend disproportionate time decoding it. By -// default this is set to (1 << 24), which is 16777216, but that's still -// very big. - -#ifndef STBI_NO_STDIO -#include -#endif // STBI_NO_STDIO - -#define STBI_VERSION 1 - -enum -{ - STBI_default = 0, // only used for desired_channels - - STBI_grey = 1, - STBI_grey_alpha = 2, - STBI_rgb = 3, - STBI_rgb_alpha = 4 -}; - -#include -typedef unsigned char stbi_uc; -typedef unsigned short stbi_us; - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef STBIDEF -#ifdef STB_IMAGE_STATIC -#define STBIDEF static -#else -#define STBIDEF extern -#endif -#endif - -////////////////////////////////////////////////////////////////////////////// -// -// PRIMARY API - works on images of any type -// - -// -// load image by filename, open file, or memory buffer -// - -typedef struct -{ - int (*read) (void *user,char *data,int size); // fill 'data' with 'size' bytes. return number of bytes actually read - void (*skip) (void *user,int n); // skip the next 'n' bytes, or 'unget' the last -n bytes if negative - int (*eof) (void *user); // returns nonzero if we are at end of file/data -} stbi_io_callbacks; - -//////////////////////////////////// -// -// 8-bits-per-channel interface -// - -STBIDEF stbi_uc *stbi_load_from_memory (stbi_uc const *buffer, int len , int *x, int *y, int *channels_in_file, int desired_channels); -STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk , void *user, int *x, int *y, int *channels_in_file, int desired_channels); - -#ifndef STBI_NO_STDIO -STBIDEF stbi_uc *stbi_load (char const *filename, int *x, int *y, int *channels_in_file, int desired_channels); -STBIDEF stbi_uc *stbi_load_from_file (FILE *f, int *x, int *y, int *channels_in_file, int desired_channels); -// for stbi_load_from_file, file pointer is left pointing immediately after image -#endif - -#ifndef STBI_NO_GIF -STBIDEF stbi_uc *stbi_load_gif_from_memory(stbi_uc const *buffer, int len, int **delays, int *x, int *y, int *z, int *comp, int req_comp); -#endif - -#ifdef STBI_WINDOWS_UTF8 -STBIDEF int stbi_convert_wchar_to_utf8(char *buffer, size_t bufferlen, const wchar_t* input); -#endif - -//////////////////////////////////// -// -// 16-bits-per-channel interface -// - -STBIDEF stbi_us *stbi_load_16_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *channels_in_file, int desired_channels); -STBIDEF stbi_us *stbi_load_16_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *channels_in_file, int desired_channels); - -#ifndef STBI_NO_STDIO -STBIDEF stbi_us *stbi_load_16 (char const *filename, int *x, int *y, int *channels_in_file, int desired_channels); -STBIDEF stbi_us *stbi_load_from_file_16(FILE *f, int *x, int *y, int *channels_in_file, int desired_channels); -#endif - -//////////////////////////////////// -// -// float-per-channel interface -// -#ifndef STBI_NO_LINEAR - STBIDEF float *stbi_loadf_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *channels_in_file, int desired_channels); - STBIDEF float *stbi_loadf_from_callbacks (stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *channels_in_file, int desired_channels); - - #ifndef STBI_NO_STDIO - STBIDEF float *stbi_loadf (char const *filename, int *x, int *y, int *channels_in_file, int desired_channels); - STBIDEF float *stbi_loadf_from_file (FILE *f, int *x, int *y, int *channels_in_file, int desired_channels); - #endif -#endif - -#ifndef STBI_NO_HDR - STBIDEF void stbi_hdr_to_ldr_gamma(float gamma); - STBIDEF void stbi_hdr_to_ldr_scale(float scale); -#endif // STBI_NO_HDR - -#ifndef STBI_NO_LINEAR - STBIDEF void stbi_ldr_to_hdr_gamma(float gamma); - STBIDEF void stbi_ldr_to_hdr_scale(float scale); -#endif // STBI_NO_LINEAR - -// stbi_is_hdr is always defined, but always returns false if STBI_NO_HDR -STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user); -STBIDEF int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len); -#ifndef STBI_NO_STDIO -STBIDEF int stbi_is_hdr (char const *filename); -STBIDEF int stbi_is_hdr_from_file(FILE *f); -#endif // STBI_NO_STDIO - - -// get a VERY brief reason for failure -// on most compilers (and ALL modern mainstream compilers) this is threadsafe -STBIDEF const char *stbi_failure_reason (void); - -// free the loaded image -- this is just free() -STBIDEF void stbi_image_free (void *retval_from_stbi_load); - -// get image dimensions & components without fully decoding -STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp); -STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp); -STBIDEF int stbi_is_16_bit_from_memory(stbi_uc const *buffer, int len); -STBIDEF int stbi_is_16_bit_from_callbacks(stbi_io_callbacks const *clbk, void *user); - -#ifndef STBI_NO_STDIO -STBIDEF int stbi_info (char const *filename, int *x, int *y, int *comp); -STBIDEF int stbi_info_from_file (FILE *f, int *x, int *y, int *comp); -STBIDEF int stbi_is_16_bit (char const *filename); -STBIDEF int stbi_is_16_bit_from_file(FILE *f); -#endif - - - -// for image formats that explicitly notate that they have premultiplied alpha, -// we just return the colors as stored in the file. set this flag to force -// unpremultiplication. results are undefined if the unpremultiply overflow. -STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply); - -// indicate whether we should process iphone images back to canonical format, -// or just pass them through "as-is" -STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert); - -// flip the image vertically, so the first pixel in the output array is the bottom left -STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip); - -// as above, but only applies to images loaded on the thread that calls the function -// this function is only available if your compiler supports thread-local variables; -// calling it will fail to link if your compiler doesn't -STBIDEF void stbi_set_unpremultiply_on_load_thread(int flag_true_if_should_unpremultiply); -STBIDEF void stbi_convert_iphone_png_to_rgb_thread(int flag_true_if_should_convert); -STBIDEF void stbi_set_flip_vertically_on_load_thread(int flag_true_if_should_flip); - -// ZLIB client - used by PNG, available for other purposes - -STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen); -STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, int len, int initial_size, int *outlen, int parse_header); -STBIDEF char *stbi_zlib_decode_malloc(const char *buffer, int len, int *outlen); -STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); - -STBIDEF char *stbi_zlib_decode_noheader_malloc(const char *buffer, int len, int *outlen); -STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); - - -#ifdef __cplusplus -} -#endif - -// -// -//// end header file ///////////////////////////////////////////////////// -#endif // STBI_INCLUDE_STB_IMAGE_H - -#ifdef STB_IMAGE_IMPLEMENTATION - -#if defined(STBI_ONLY_JPEG) || defined(STBI_ONLY_PNG) || defined(STBI_ONLY_BMP) \ - || defined(STBI_ONLY_TGA) || defined(STBI_ONLY_GIF) || defined(STBI_ONLY_PSD) \ - || defined(STBI_ONLY_HDR) || defined(STBI_ONLY_PIC) || defined(STBI_ONLY_PNM) \ - || defined(STBI_ONLY_ZLIB) - #ifndef STBI_ONLY_JPEG - #define STBI_NO_JPEG - #endif - #ifndef STBI_ONLY_PNG - #define STBI_NO_PNG - #endif - #ifndef STBI_ONLY_BMP - #define STBI_NO_BMP - #endif - #ifndef STBI_ONLY_PSD - #define STBI_NO_PSD - #endif - #ifndef STBI_ONLY_TGA - #define STBI_NO_TGA - #endif - #ifndef STBI_ONLY_GIF - #define STBI_NO_GIF - #endif - #ifndef STBI_ONLY_HDR - #define STBI_NO_HDR - #endif - #ifndef STBI_ONLY_PIC - #define STBI_NO_PIC - #endif - #ifndef STBI_ONLY_PNM - #define STBI_NO_PNM - #endif -#endif - -#if defined(STBI_NO_PNG) && !defined(STBI_SUPPORT_ZLIB) && !defined(STBI_NO_ZLIB) -#define STBI_NO_ZLIB -#endif - - -#include -#include // ptrdiff_t on osx -#include -#include -#include - -#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) -#include // ldexp, pow -#endif - -#ifndef STBI_NO_STDIO -#include -#endif - -#ifndef STBI_ASSERT -#include -#define STBI_ASSERT(x) assert(x) -#endif - -#ifdef __cplusplus -#define STBI_EXTERN extern "C" -#else -#define STBI_EXTERN extern -#endif - - -#ifndef _MSC_VER - #ifdef __cplusplus - #define stbi_inline inline - #else - #define stbi_inline - #endif -#else - #define stbi_inline __forceinline -#endif - -#ifndef STBI_NO_THREAD_LOCALS - #if defined(__cplusplus) && __cplusplus >= 201103L - #define STBI_THREAD_LOCAL thread_local - #elif defined(__GNUC__) && __GNUC__ < 5 - #define STBI_THREAD_LOCAL __thread - #elif defined(_MSC_VER) - #define STBI_THREAD_LOCAL __declspec(thread) - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L && !defined(__STDC_NO_THREADS__) - #define STBI_THREAD_LOCAL _Thread_local - #endif - - #ifndef STBI_THREAD_LOCAL - #if defined(__GNUC__) - #define STBI_THREAD_LOCAL __thread - #endif - #endif -#endif - -#ifdef _MSC_VER -typedef unsigned short stbi__uint16; -typedef signed short stbi__int16; -typedef unsigned int stbi__uint32; -typedef signed int stbi__int32; -#else -#include -typedef uint16_t stbi__uint16; -typedef int16_t stbi__int16; -typedef uint32_t stbi__uint32; -typedef int32_t stbi__int32; -#endif - -// should produce compiler error if size is wrong -typedef unsigned char validate_uint32[sizeof(stbi__uint32)==4 ? 1 : -1]; - -#ifdef _MSC_VER -#define STBI_NOTUSED(v) (void)(v) -#else -#define STBI_NOTUSED(v) (void)sizeof(v) -#endif - -#ifdef _MSC_VER -#define STBI_HAS_LROTL -#endif - -#ifdef STBI_HAS_LROTL - #define stbi_lrot(x,y) _lrotl(x,y) -#else - #define stbi_lrot(x,y) (((x) << (y)) | ((x) >> (-(y) & 31))) -#endif - -#if defined(STBI_MALLOC) && defined(STBI_FREE) && (defined(STBI_REALLOC) || defined(STBI_REALLOC_SIZED)) -// ok -#elif !defined(STBI_MALLOC) && !defined(STBI_FREE) && !defined(STBI_REALLOC) && !defined(STBI_REALLOC_SIZED) -// ok -#else -#error "Must define all or none of STBI_MALLOC, STBI_FREE, and STBI_REALLOC (or STBI_REALLOC_SIZED)." -#endif - -#ifndef STBI_MALLOC -#define STBI_MALLOC(sz) malloc(sz) -#define STBI_REALLOC(p,newsz) realloc(p,newsz) -#define STBI_FREE(p) free(p) -#endif - -#ifndef STBI_REALLOC_SIZED -#define STBI_REALLOC_SIZED(p,oldsz,newsz) STBI_REALLOC(p,newsz) -#endif - -// x86/x64 detection -#if defined(__x86_64__) || defined(_M_X64) -#define STBI__X64_TARGET -#elif defined(__i386) || defined(_M_IX86) -#define STBI__X86_TARGET -#endif - -#if defined(__GNUC__) && defined(STBI__X86_TARGET) && !defined(__SSE2__) && !defined(STBI_NO_SIMD) -// gcc doesn't support sse2 intrinsics unless you compile with -msse2, -// which in turn means it gets to use SSE2 everywhere. This is unfortunate, -// but previous attempts to provide the SSE2 functions with runtime -// detection caused numerous issues. The way architecture extensions are -// exposed in GCC/Clang is, sadly, not really suited for one-file libs. -// New behavior: if compiled with -msse2, we use SSE2 without any -// detection; if not, we don't use it at all. -#define STBI_NO_SIMD -#endif - -#if defined(__MINGW32__) && defined(STBI__X86_TARGET) && !defined(STBI_MINGW_ENABLE_SSE2) && !defined(STBI_NO_SIMD) -// Note that __MINGW32__ doesn't actually mean 32-bit, so we have to avoid STBI__X64_TARGET -// -// 32-bit MinGW wants ESP to be 16-byte aligned, but this is not in the -// Windows ABI and VC++ as well as Windows DLLs don't maintain that invariant. -// As a result, enabling SSE2 on 32-bit MinGW is dangerous when not -// simultaneously enabling "-mstackrealign". -// -// See https://github.com/nothings/stb/issues/81 for more information. -// -// So default to no SSE2 on 32-bit MinGW. If you've read this far and added -// -mstackrealign to your build settings, feel free to #define STBI_MINGW_ENABLE_SSE2. -#define STBI_NO_SIMD -#endif - -#if !defined(STBI_NO_SIMD) && (defined(STBI__X86_TARGET) || defined(STBI__X64_TARGET)) -#define STBI_SSE2 -#include - -#ifdef _MSC_VER - -#if _MSC_VER >= 1400 // not VC6 -#include // __cpuid -static int stbi__cpuid3(void) -{ - int info[4]; - __cpuid(info,1); - return info[3]; -} -#else -static int stbi__cpuid3(void) -{ - int res; - __asm { - mov eax,1 - cpuid - mov res,edx - } - return res; -} -#endif - -#define STBI_SIMD_ALIGN(type, name) __declspec(align(16)) type name - -#if !defined(STBI_NO_JPEG) && defined(STBI_SSE2) -static int stbi__sse2_available(void) -{ - int info3 = stbi__cpuid3(); - return ((info3 >> 26) & 1) != 0; -} -#endif - -#else // assume GCC-style if not VC++ -#define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16))) - -#if !defined(STBI_NO_JPEG) && defined(STBI_SSE2) -static int stbi__sse2_available(void) -{ - // If we're even attempting to compile this on GCC/Clang, that means - // -msse2 is on, which means the compiler is allowed to use SSE2 - // instructions at will, and so are we. - return 1; -} -#endif - -#endif -#endif - -// ARM NEON -#if defined(STBI_NO_SIMD) && defined(STBI_NEON) -#undef STBI_NEON -#endif - -#ifdef STBI_NEON -#include -#ifdef _MSC_VER -#define STBI_SIMD_ALIGN(type, name) __declspec(align(16)) type name -#else -#define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16))) -#endif -#endif - -#ifndef STBI_SIMD_ALIGN -#define STBI_SIMD_ALIGN(type, name) type name -#endif - -#ifndef STBI_MAX_DIMENSIONS -#define STBI_MAX_DIMENSIONS (1 << 24) -#endif - -/////////////////////////////////////////////// -// -// stbi__context struct and start_xxx functions - -// stbi__context structure is our basic context used by all images, so it -// contains all the IO context, plus some basic image information -typedef struct -{ - stbi__uint32 img_x, img_y; - int img_n, img_out_n; - - stbi_io_callbacks io; - void *io_user_data; - - int read_from_callbacks; - int buflen; - stbi_uc buffer_start[128]; - int callback_already_read; - - stbi_uc *img_buffer, *img_buffer_end; - stbi_uc *img_buffer_original, *img_buffer_original_end; -} stbi__context; - - -static void stbi__refill_buffer(stbi__context *s); - -// initialize a memory-decode context -static void stbi__start_mem(stbi__context *s, stbi_uc const *buffer, int len) -{ - s->io.read = NULL; - s->read_from_callbacks = 0; - s->callback_already_read = 0; - s->img_buffer = s->img_buffer_original = (stbi_uc *) buffer; - s->img_buffer_end = s->img_buffer_original_end = (stbi_uc *) buffer+len; -} - -// initialize a callback-based context -static void stbi__start_callbacks(stbi__context *s, stbi_io_callbacks *c, void *user) -{ - s->io = *c; - s->io_user_data = user; - s->buflen = sizeof(s->buffer_start); - s->read_from_callbacks = 1; - s->callback_already_read = 0; - s->img_buffer = s->img_buffer_original = s->buffer_start; - stbi__refill_buffer(s); - s->img_buffer_original_end = s->img_buffer_end; -} - -#ifndef STBI_NO_STDIO - -static int stbi__stdio_read(void *user, char *data, int size) -{ - return (int) fread(data,1,size,(FILE*) user); -} - -static void stbi__stdio_skip(void *user, int n) -{ - int ch; - fseek((FILE*) user, n, SEEK_CUR); - ch = fgetc((FILE*) user); /* have to read a byte to reset feof()'s flag */ - if (ch != EOF) { - ungetc(ch, (FILE *) user); /* push byte back onto stream if valid. */ - } -} - -static int stbi__stdio_eof(void *user) -{ - return feof((FILE*) user) || ferror((FILE *) user); -} - -static stbi_io_callbacks stbi__stdio_callbacks = -{ - stbi__stdio_read, - stbi__stdio_skip, - stbi__stdio_eof, -}; - -static void stbi__start_file(stbi__context *s, FILE *f) -{ - stbi__start_callbacks(s, &stbi__stdio_callbacks, (void *) f); -} - -//static void stop_file(stbi__context *s) { } - -#endif // !STBI_NO_STDIO - -static void stbi__rewind(stbi__context *s) -{ - // conceptually rewind SHOULD rewind to the beginning of the stream, - // but we just rewind to the beginning of the initial buffer, because - // we only use it after doing 'test', which only ever looks at at most 92 bytes - s->img_buffer = s->img_buffer_original; - s->img_buffer_end = s->img_buffer_original_end; -} - -enum -{ - STBI_ORDER_RGB, - STBI_ORDER_BGR -}; - -typedef struct -{ - int bits_per_channel; - int num_channels; - int channel_order; -} stbi__result_info; - -#ifndef STBI_NO_JPEG -static int stbi__jpeg_test(stbi__context *s); -static void *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); -static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp); -#endif - -#ifndef STBI_NO_PNG -static int stbi__png_test(stbi__context *s); -static void *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); -static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp); -static int stbi__png_is16(stbi__context *s); -#endif - -#ifndef STBI_NO_BMP -static int stbi__bmp_test(stbi__context *s); -static void *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); -static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp); -#endif - -#ifndef STBI_NO_TGA -static int stbi__tga_test(stbi__context *s); -static void *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); -static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp); -#endif - -#ifndef STBI_NO_PSD -static int stbi__psd_test(stbi__context *s); -static void *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc); -static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp); -static int stbi__psd_is16(stbi__context *s); -#endif - -#ifndef STBI_NO_HDR -static int stbi__hdr_test(stbi__context *s); -static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); -static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp); -#endif - -#ifndef STBI_NO_PIC -static int stbi__pic_test(stbi__context *s); -static void *stbi__pic_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); -static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp); -#endif - -#ifndef STBI_NO_GIF -static int stbi__gif_test(stbi__context *s); -static void *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); -static void *stbi__load_gif_main(stbi__context *s, int **delays, int *x, int *y, int *z, int *comp, int req_comp); -static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp); -#endif - -#ifndef STBI_NO_PNM -static int stbi__pnm_test(stbi__context *s); -static void *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); -static int stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp); -static int stbi__pnm_is16(stbi__context *s); -#endif - -static -#ifdef STBI_THREAD_LOCAL -STBI_THREAD_LOCAL -#endif -const char *stbi__g_failure_reason; - -STBIDEF const char *stbi_failure_reason(void) -{ - return stbi__g_failure_reason; -} - -#ifndef STBI_NO_FAILURE_STRINGS -static int stbi__err(const char *str) -{ - stbi__g_failure_reason = str; - return 0; -} -#endif - -static void *stbi__malloc(size_t size) -{ - return STBI_MALLOC(size); -} - -// stb_image uses ints pervasively, including for offset calculations. -// therefore the largest decoded image size we can support with the -// current code, even on 64-bit targets, is INT_MAX. this is not a -// significant limitation for the intended use case. -// -// we do, however, need to make sure our size calculations don't -// overflow. hence a few helper functions for size calculations that -// multiply integers together, making sure that they're non-negative -// and no overflow occurs. - -// return 1 if the sum is valid, 0 on overflow. -// negative terms are considered invalid. -static int stbi__addsizes_valid(int a, int b) -{ - if (b < 0) return 0; - // now 0 <= b <= INT_MAX, hence also - // 0 <= INT_MAX - b <= INTMAX. - // And "a + b <= INT_MAX" (which might overflow) is the - // same as a <= INT_MAX - b (no overflow) - return a <= INT_MAX - b; -} - -// returns 1 if the product is valid, 0 on overflow. -// negative factors are considered invalid. -static int stbi__mul2sizes_valid(int a, int b) -{ - if (a < 0 || b < 0) return 0; - if (b == 0) return 1; // mul-by-0 is always safe - // portable way to check for no overflows in a*b - return a <= INT_MAX/b; -} - -#if !defined(STBI_NO_JPEG) || !defined(STBI_NO_PNG) || !defined(STBI_NO_TGA) || !defined(STBI_NO_HDR) -// returns 1 if "a*b + add" has no negative terms/factors and doesn't overflow -static int stbi__mad2sizes_valid(int a, int b, int add) -{ - return stbi__mul2sizes_valid(a, b) && stbi__addsizes_valid(a*b, add); -} -#endif - -// returns 1 if "a*b*c + add" has no negative terms/factors and doesn't overflow -static int stbi__mad3sizes_valid(int a, int b, int c, int add) -{ - return stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a*b, c) && - stbi__addsizes_valid(a*b*c, add); -} - -// returns 1 if "a*b*c*d + add" has no negative terms/factors and doesn't overflow -#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) || !defined(STBI_NO_PNM) -static int stbi__mad4sizes_valid(int a, int b, int c, int d, int add) -{ - return stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a*b, c) && - stbi__mul2sizes_valid(a*b*c, d) && stbi__addsizes_valid(a*b*c*d, add); -} -#endif - -#if !defined(STBI_NO_JPEG) || !defined(STBI_NO_PNG) || !defined(STBI_NO_TGA) || !defined(STBI_NO_HDR) -// mallocs with size overflow checking -static void *stbi__malloc_mad2(int a, int b, int add) -{ - if (!stbi__mad2sizes_valid(a, b, add)) return NULL; - return stbi__malloc(a*b + add); -} -#endif - -static void *stbi__malloc_mad3(int a, int b, int c, int add) -{ - if (!stbi__mad3sizes_valid(a, b, c, add)) return NULL; - return stbi__malloc(a*b*c + add); -} - -#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) || !defined(STBI_NO_PNM) -static void *stbi__malloc_mad4(int a, int b, int c, int d, int add) -{ - if (!stbi__mad4sizes_valid(a, b, c, d, add)) return NULL; - return stbi__malloc(a*b*c*d + add); -} -#endif - -// stbi__err - error -// stbi__errpf - error returning pointer to float -// stbi__errpuc - error returning pointer to unsigned char - -#ifdef STBI_NO_FAILURE_STRINGS - #define stbi__err(x,y) 0 -#elif defined(STBI_FAILURE_USERMSG) - #define stbi__err(x,y) stbi__err(y) -#else - #define stbi__err(x,y) stbi__err(x) -#endif - -#define stbi__errpf(x,y) ((float *)(size_t) (stbi__err(x,y)?NULL:NULL)) -#define stbi__errpuc(x,y) ((unsigned char *)(size_t) (stbi__err(x,y)?NULL:NULL)) - -STBIDEF void stbi_image_free(void *retval_from_stbi_load) -{ - STBI_FREE(retval_from_stbi_load); -} - -#ifndef STBI_NO_LINEAR -static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp); -#endif - -#ifndef STBI_NO_HDR -static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp); -#endif - -static int stbi__vertically_flip_on_load_global = 0; - -STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip) -{ - stbi__vertically_flip_on_load_global = flag_true_if_should_flip; -} - -#ifndef STBI_THREAD_LOCAL -#define stbi__vertically_flip_on_load stbi__vertically_flip_on_load_global -#else -static STBI_THREAD_LOCAL int stbi__vertically_flip_on_load_local, stbi__vertically_flip_on_load_set; - -STBIDEF void stbi_set_flip_vertically_on_load_thread(int flag_true_if_should_flip) -{ - stbi__vertically_flip_on_load_local = flag_true_if_should_flip; - stbi__vertically_flip_on_load_set = 1; -} - -#define stbi__vertically_flip_on_load (stbi__vertically_flip_on_load_set \ - ? stbi__vertically_flip_on_load_local \ - : stbi__vertically_flip_on_load_global) -#endif // STBI_THREAD_LOCAL - -static void *stbi__load_main(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc) -{ - memset(ri, 0, sizeof(*ri)); // make sure it's initialized if we add new fields - ri->bits_per_channel = 8; // default is 8 so most paths don't have to be changed - ri->channel_order = STBI_ORDER_RGB; // all current input & output are this, but this is here so we can add BGR order - ri->num_channels = 0; - - // test the formats with a very explicit header first (at least a FOURCC - // or distinctive magic number first) - #ifndef STBI_NO_PNG - if (stbi__png_test(s)) return stbi__png_load(s,x,y,comp,req_comp, ri); - #endif - #ifndef STBI_NO_BMP - if (stbi__bmp_test(s)) return stbi__bmp_load(s,x,y,comp,req_comp, ri); - #endif - #ifndef STBI_NO_GIF - if (stbi__gif_test(s)) return stbi__gif_load(s,x,y,comp,req_comp, ri); - #endif - #ifndef STBI_NO_PSD - if (stbi__psd_test(s)) return stbi__psd_load(s,x,y,comp,req_comp, ri, bpc); - #else - STBI_NOTUSED(bpc); - #endif - #ifndef STBI_NO_PIC - if (stbi__pic_test(s)) return stbi__pic_load(s,x,y,comp,req_comp, ri); - #endif - - // then the formats that can end up attempting to load with just 1 or 2 - // bytes matching expectations; these are prone to false positives, so - // try them later - #ifndef STBI_NO_JPEG - if (stbi__jpeg_test(s)) return stbi__jpeg_load(s,x,y,comp,req_comp, ri); - #endif - #ifndef STBI_NO_PNM - if (stbi__pnm_test(s)) return stbi__pnm_load(s,x,y,comp,req_comp, ri); - #endif - - #ifndef STBI_NO_HDR - if (stbi__hdr_test(s)) { - float *hdr = stbi__hdr_load(s, x,y,comp,req_comp, ri); - return stbi__hdr_to_ldr(hdr, *x, *y, req_comp ? req_comp : *comp); - } - #endif - - #ifndef STBI_NO_TGA - // test tga last because it's a crappy test! - if (stbi__tga_test(s)) - return stbi__tga_load(s,x,y,comp,req_comp, ri); - #endif - - return stbi__errpuc("unknown image type", "Image not of any known type, or corrupt"); -} - -static stbi_uc *stbi__convert_16_to_8(stbi__uint16 *orig, int w, int h, int channels) -{ - int i; - int img_len = w * h * channels; - stbi_uc *reduced; - - reduced = (stbi_uc *) stbi__malloc(img_len); - if (reduced == NULL) return stbi__errpuc("outofmem", "Out of memory"); - - for (i = 0; i < img_len; ++i) - reduced[i] = (stbi_uc)((orig[i] >> 8) & 0xFF); // top half of each byte is sufficient approx of 16->8 bit scaling - - STBI_FREE(orig); - return reduced; -} - -static stbi__uint16 *stbi__convert_8_to_16(stbi_uc *orig, int w, int h, int channels) -{ - int i; - int img_len = w * h * channels; - stbi__uint16 *enlarged; - - enlarged = (stbi__uint16 *) stbi__malloc(img_len*2); - if (enlarged == NULL) return (stbi__uint16 *) stbi__errpuc("outofmem", "Out of memory"); - - for (i = 0; i < img_len; ++i) - enlarged[i] = (stbi__uint16)((orig[i] << 8) + orig[i]); // replicate to high and low byte, maps 0->0, 255->0xffff - - STBI_FREE(orig); - return enlarged; -} - -static void stbi__vertical_flip(void *image, int w, int h, int bytes_per_pixel) -{ - int row; - size_t bytes_per_row = (size_t)w * bytes_per_pixel; - stbi_uc temp[2048]; - stbi_uc *bytes = (stbi_uc *)image; - - for (row = 0; row < (h>>1); row++) { - stbi_uc *row0 = bytes + row*bytes_per_row; - stbi_uc *row1 = bytes + (h - row - 1)*bytes_per_row; - // swap row0 with row1 - size_t bytes_left = bytes_per_row; - while (bytes_left) { - size_t bytes_copy = (bytes_left < sizeof(temp)) ? bytes_left : sizeof(temp); - memcpy(temp, row0, bytes_copy); - memcpy(row0, row1, bytes_copy); - memcpy(row1, temp, bytes_copy); - row0 += bytes_copy; - row1 += bytes_copy; - bytes_left -= bytes_copy; - } - } -} - -#ifndef STBI_NO_GIF -static void stbi__vertical_flip_slices(void *image, int w, int h, int z, int bytes_per_pixel) -{ - int slice; - int slice_size = w * h * bytes_per_pixel; - - stbi_uc *bytes = (stbi_uc *)image; - for (slice = 0; slice < z; ++slice) { - stbi__vertical_flip(bytes, w, h, bytes_per_pixel); - bytes += slice_size; - } -} -#endif - -static unsigned char *stbi__load_and_postprocess_8bit(stbi__context *s, int *x, int *y, int *comp, int req_comp) -{ - stbi__result_info ri; - void *result = stbi__load_main(s, x, y, comp, req_comp, &ri, 8); - - if (result == NULL) - return NULL; - - // it is the responsibility of the loaders to make sure we get either 8 or 16 bit. - STBI_ASSERT(ri.bits_per_channel == 8 || ri.bits_per_channel == 16); - - if (ri.bits_per_channel != 8) { - result = stbi__convert_16_to_8((stbi__uint16 *) result, *x, *y, req_comp == 0 ? *comp : req_comp); - ri.bits_per_channel = 8; - } - - // @TODO_: move stbi__convert_format to here - - if (stbi__vertically_flip_on_load) { - int channels = req_comp ? req_comp : *comp; - stbi__vertical_flip(result, *x, *y, channels * sizeof(stbi_uc)); - } - - return (unsigned char *) result; -} - -static stbi__uint16 *stbi__load_and_postprocess_16bit(stbi__context *s, int *x, int *y, int *comp, int req_comp) -{ - stbi__result_info ri; - void *result = stbi__load_main(s, x, y, comp, req_comp, &ri, 16); - - if (result == NULL) - return NULL; - - // it is the responsibility of the loaders to make sure we get either 8 or 16 bit. - STBI_ASSERT(ri.bits_per_channel == 8 || ri.bits_per_channel == 16); - - if (ri.bits_per_channel != 16) { - result = stbi__convert_8_to_16((stbi_uc *) result, *x, *y, req_comp == 0 ? *comp : req_comp); - ri.bits_per_channel = 16; - } - - // @TODO_: move stbi__convert_format16 to here - // @TODO_: special case RGB-to-Y (and RGBA-to-YA) for 8-bit-to-16-bit case to keep more precision - - if (stbi__vertically_flip_on_load) { - int channels = req_comp ? req_comp : *comp; - stbi__vertical_flip(result, *x, *y, channels * sizeof(stbi__uint16)); - } - - return (stbi__uint16 *) result; -} - -#if !defined(STBI_NO_HDR) && !defined(STBI_NO_LINEAR) -static void stbi__float_postprocess(float *result, int *x, int *y, int *comp, int req_comp) -{ - if (stbi__vertically_flip_on_load && result != NULL) { - int channels = req_comp ? req_comp : *comp; - stbi__vertical_flip(result, *x, *y, channels * sizeof(float)); - } -} -#endif - -#ifndef STBI_NO_STDIO - -#if defined(_WIN32) && defined(STBI_WINDOWS_UTF8) -STBI_EXTERN __declspec(dllimport) int __stdcall MultiByteToWideChar(unsigned int cp, unsigned long flags, const char *str, int cbmb, wchar_t *widestr, int cchwide); -STBI_EXTERN __declspec(dllimport) int __stdcall WideCharToMultiByte(unsigned int cp, unsigned long flags, const wchar_t *widestr, int cchwide, char *str, int cbmb, const char *defchar, int *used_default); -#endif - -#if defined(_WIN32) && defined(STBI_WINDOWS_UTF8) -STBIDEF int stbi_convert_wchar_to_utf8(char *buffer, size_t bufferlen, const wchar_t* input) -{ - return WideCharToMultiByte(65001 /* UTF8 */, 0, input, -1, buffer, (int) bufferlen, NULL, NULL); -} -#endif - -static FILE *stbi__fopen(char const *filename, char const *mode) -{ - FILE *f; -#if defined(_WIN32) && defined(STBI_WINDOWS_UTF8) - wchar_t wMode[64]; - wchar_t wFilename[1024]; - if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, filename, -1, wFilename, sizeof(wFilename)/sizeof(*wFilename))) - return 0; - - if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, mode, -1, wMode, sizeof(wMode)/sizeof(*wMode))) - return 0; - -#if defined(_MSC_VER) && _MSC_VER >= 1400 - if (0 != _wfopen_s(&f, wFilename, wMode)) - f = 0; -#else - f = _wfopen(wFilename, wMode); -#endif - -#elif defined(_MSC_VER) && _MSC_VER >= 1400 - if (0 != fopen_s(&f, filename, mode)) - f=0; -#else - f = fopen(filename, mode); -#endif - return f; -} - - -STBIDEF stbi_uc *stbi_load(char const *filename, int *x, int *y, int *comp, int req_comp) -{ - FILE *f = stbi__fopen(filename, "rb"); - unsigned char *result; - if (!f) return stbi__errpuc("can't fopen", "Unable to open file"); - result = stbi_load_from_file(f,x,y,comp,req_comp); - fclose(f); - return result; -} - -STBIDEF stbi_uc *stbi_load_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) -{ - unsigned char *result; - stbi__context s; - stbi__start_file(&s,f); - result = stbi__load_and_postprocess_8bit(&s,x,y,comp,req_comp); - if (result) { - // need to 'unget' all the characters in the IO buffer - fseek(f, - (int) (s.img_buffer_end - s.img_buffer), SEEK_CUR); - } - return result; -} - -STBIDEF stbi__uint16 *stbi_load_from_file_16(FILE *f, int *x, int *y, int *comp, int req_comp) -{ - stbi__uint16 *result; - stbi__context s; - stbi__start_file(&s,f); - result = stbi__load_and_postprocess_16bit(&s,x,y,comp,req_comp); - if (result) { - // need to 'unget' all the characters in the IO buffer - fseek(f, - (int) (s.img_buffer_end - s.img_buffer), SEEK_CUR); - } - return result; -} - -STBIDEF stbi_us *stbi_load_16(char const *filename, int *x, int *y, int *comp, int req_comp) -{ - FILE *f = stbi__fopen(filename, "rb"); - stbi__uint16 *result; - if (!f) return (stbi_us *) stbi__errpuc("can't fopen", "Unable to open file"); - result = stbi_load_from_file_16(f,x,y,comp,req_comp); - fclose(f); - return result; -} - - -#endif //!STBI_NO_STDIO - -STBIDEF stbi_us *stbi_load_16_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *channels_in_file, int desired_channels) -{ - stbi__context s; - stbi__start_mem(&s,buffer,len); - return stbi__load_and_postprocess_16bit(&s,x,y,channels_in_file,desired_channels); -} - -STBIDEF stbi_us *stbi_load_16_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *channels_in_file, int desired_channels) -{ - stbi__context s; - stbi__start_callbacks(&s, (stbi_io_callbacks *)clbk, user); - return stbi__load_and_postprocess_16bit(&s,x,y,channels_in_file,desired_channels); -} - -STBIDEF stbi_uc *stbi_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) -{ - stbi__context s; - stbi__start_mem(&s,buffer,len); - return stbi__load_and_postprocess_8bit(&s,x,y,comp,req_comp); -} - -STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp) -{ - stbi__context s; - stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); - return stbi__load_and_postprocess_8bit(&s,x,y,comp,req_comp); -} - -#ifndef STBI_NO_GIF -STBIDEF stbi_uc *stbi_load_gif_from_memory(stbi_uc const *buffer, int len, int **delays, int *x, int *y, int *z, int *comp, int req_comp) -{ - unsigned char *result; - stbi__context s; - stbi__start_mem(&s,buffer,len); - - result = (unsigned char*) stbi__load_gif_main(&s, delays, x, y, z, comp, req_comp); - if (stbi__vertically_flip_on_load) { - stbi__vertical_flip_slices( result, *x, *y, *z, *comp ); - } - - return result; -} -#endif - -#ifndef STBI_NO_LINEAR -static float *stbi__loadf_main(stbi__context *s, int *x, int *y, int *comp, int req_comp) -{ - unsigned char *data; - #ifndef STBI_NO_HDR - if (stbi__hdr_test(s)) { - stbi__result_info ri; - float *hdr_data = stbi__hdr_load(s,x,y,comp,req_comp, &ri); - if (hdr_data) - stbi__float_postprocess(hdr_data,x,y,comp,req_comp); - return hdr_data; - } - #endif - data = stbi__load_and_postprocess_8bit(s, x, y, comp, req_comp); - if (data) - return stbi__ldr_to_hdr(data, *x, *y, req_comp ? req_comp : *comp); - return stbi__errpf("unknown image type", "Image not of any known type, or corrupt"); -} - -STBIDEF float *stbi_loadf_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) -{ - stbi__context s; - stbi__start_mem(&s,buffer,len); - return stbi__loadf_main(&s,x,y,comp,req_comp); -} - -STBIDEF float *stbi_loadf_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp) -{ - stbi__context s; - stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); - return stbi__loadf_main(&s,x,y,comp,req_comp); -} - -#ifndef STBI_NO_STDIO -STBIDEF float *stbi_loadf(char const *filename, int *x, int *y, int *comp, int req_comp) -{ - float *result; - FILE *f = stbi__fopen(filename, "rb"); - if (!f) return stbi__errpf("can't fopen", "Unable to open file"); - result = stbi_loadf_from_file(f,x,y,comp,req_comp); - fclose(f); - return result; -} - -STBIDEF float *stbi_loadf_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) -{ - stbi__context s; - stbi__start_file(&s,f); - return stbi__loadf_main(&s,x,y,comp,req_comp); -} -#endif // !STBI_NO_STDIO - -#endif // !STBI_NO_LINEAR - -// these is-hdr-or-not is defined independent of whether STBI_NO_LINEAR is -// defined, for API simplicity; if STBI_NO_LINEAR is defined, it always -// reports false! - -STBIDEF int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len) -{ - #ifndef STBI_NO_HDR - stbi__context s; - stbi__start_mem(&s,buffer,len); - return stbi__hdr_test(&s); - #else - STBI_NOTUSED(buffer); - STBI_NOTUSED(len); - return 0; - #endif -} - -#ifndef STBI_NO_STDIO -STBIDEF int stbi_is_hdr (char const *filename) -{ - FILE *f = stbi__fopen(filename, "rb"); - int result=0; - if (f) { - result = stbi_is_hdr_from_file(f); - fclose(f); - } - return result; -} - -STBIDEF int stbi_is_hdr_from_file(FILE *f) -{ - #ifndef STBI_NO_HDR - long pos = ftell(f); - int res; - stbi__context s; - stbi__start_file(&s,f); - res = stbi__hdr_test(&s); - fseek(f, pos, SEEK_SET); - return res; - #else - STBI_NOTUSED(f); - return 0; - #endif -} -#endif // !STBI_NO_STDIO - -STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user) -{ - #ifndef STBI_NO_HDR - stbi__context s; - stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); - return stbi__hdr_test(&s); - #else - STBI_NOTUSED(clbk); - STBI_NOTUSED(user); - return 0; - #endif -} - -#ifndef STBI_NO_LINEAR -static float stbi__l2h_gamma=2.2f, stbi__l2h_scale=1.0f; - -STBIDEF void stbi_ldr_to_hdr_gamma(float gamma) { stbi__l2h_gamma = gamma; } -STBIDEF void stbi_ldr_to_hdr_scale(float scale) { stbi__l2h_scale = scale; } -#endif - -static float stbi__h2l_gamma_i=1.0f/2.2f, stbi__h2l_scale_i=1.0f; - -STBIDEF void stbi_hdr_to_ldr_gamma(float gamma) { stbi__h2l_gamma_i = 1/gamma; } -STBIDEF void stbi_hdr_to_ldr_scale(float scale) { stbi__h2l_scale_i = 1/scale; } - - -////////////////////////////////////////////////////////////////////////////// -// -// Common code used by all image loaders -// - -enum -{ - STBI__SCAN_load=0, - STBI__SCAN_type, - STBI__SCAN_header -}; - -static void stbi__refill_buffer(stbi__context *s) -{ - int n = (s->io.read)(s->io_user_data,(char*)s->buffer_start,s->buflen); - s->callback_already_read += (int) (s->img_buffer - s->img_buffer_original); - if (n == 0) { - // at end of file, treat same as if from memory, but need to handle case - // where s->img_buffer isn't pointing to safe memory, e.g. 0-byte file - s->read_from_callbacks = 0; - s->img_buffer = s->buffer_start; - s->img_buffer_end = s->buffer_start+1; - *s->img_buffer = 0; - } else { - s->img_buffer = s->buffer_start; - s->img_buffer_end = s->buffer_start + n; - } -} - -stbi_inline static stbi_uc stbi__get8(stbi__context *s) -{ - if (s->img_buffer < s->img_buffer_end) - return *s->img_buffer++; - if (s->read_from_callbacks) { - stbi__refill_buffer(s); - return *s->img_buffer++; - } - return 0; -} - -#if defined(STBI_NO_JPEG) && defined(STBI_NO_HDR) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) -// nothing -#else -stbi_inline static int stbi__at_eof(stbi__context *s) -{ - if (s->io.read) { - if (!(s->io.eof)(s->io_user_data)) return 0; - // if feof() is true, check if buffer = end - // special case: we've only got the special 0 character at the end - if (s->read_from_callbacks == 0) return 1; - } - - return s->img_buffer >= s->img_buffer_end; -} -#endif - -#if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) -// nothing -#else -static void stbi__skip(stbi__context *s, int n) -{ - if (n == 0) return; // already there! - if (n < 0) { - s->img_buffer = s->img_buffer_end; - return; - } - if (s->io.read) { - int blen = (int) (s->img_buffer_end - s->img_buffer); - if (blen < n) { - s->img_buffer = s->img_buffer_end; - (s->io.skip)(s->io_user_data, n - blen); - return; - } - } - s->img_buffer += n; -} -#endif - -#if defined(STBI_NO_PNG) && defined(STBI_NO_TGA) && defined(STBI_NO_HDR) && defined(STBI_NO_PNM) -// nothing -#else -static int stbi__getn(stbi__context *s, stbi_uc *buffer, int n) -{ - if (s->io.read) { - int blen = (int) (s->img_buffer_end - s->img_buffer); - if (blen < n) { - int res, count; - - memcpy(buffer, s->img_buffer, blen); - - count = (s->io.read)(s->io_user_data, (char*) buffer + blen, n - blen); - res = (count == (n-blen)); - s->img_buffer = s->img_buffer_end; - return res; - } - } - - if (s->img_buffer+n <= s->img_buffer_end) { - memcpy(buffer, s->img_buffer, n); - s->img_buffer += n; - return 1; - } else - return 0; -} -#endif - -#if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_PSD) && defined(STBI_NO_PIC) -// nothing -#else -static int stbi__get16be(stbi__context *s) -{ - int z = stbi__get8(s); - return (z << 8) + stbi__get8(s); -} -#endif - -#if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) && defined(STBI_NO_PIC) -// nothing -#else -static stbi__uint32 stbi__get32be(stbi__context *s) -{ - stbi__uint32 z = stbi__get16be(s); - return (z << 16) + stbi__get16be(s); -} -#endif - -#if defined(STBI_NO_BMP) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) -// nothing -#else -static int stbi__get16le(stbi__context *s) -{ - int z = stbi__get8(s); - return z + (stbi__get8(s) << 8); -} -#endif - -#ifndef STBI_NO_BMP -static stbi__uint32 stbi__get32le(stbi__context *s) -{ - stbi__uint32 z = stbi__get16le(s); - z += (stbi__uint32)stbi__get16le(s) << 16; - return z; -} -#endif - -#define STBI__BYTECAST(x) ((stbi_uc) ((x) & 255)) // truncate int to byte without warnings - -#if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) -// nothing -#else -////////////////////////////////////////////////////////////////////////////// -// -// generic converter from built-in img_n to req_comp -// individual types do this automatically as much as possible (e.g. jpeg -// does all cases internally since it needs to colorspace convert anyway, -// and it never has alpha, so very few cases ). png can automatically -// interleave an alpha=255 channel, but falls back to this for other cases -// -// assume data buffer is malloced, so malloc a new one and free that one -// only failure mode is malloc failing - -static stbi_uc stbi__compute_y(int r, int g, int b) -{ - return (stbi_uc) (((r*77) + (g*150) + (29*b)) >> 8); -} -#endif - -#if defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) -// nothing -#else -static unsigned char *stbi__convert_format(unsigned char *data, int img_n, int req_comp, unsigned int x, unsigned int y) -{ - int i,j; - unsigned char *good; - - if (req_comp == img_n) return data; - STBI_ASSERT(req_comp >= 1 && req_comp <= 4); - - good = (unsigned char *) stbi__malloc_mad3(req_comp, x, y, 0); - if (good == NULL) { - STBI_FREE(data); - return stbi__errpuc("outofmem", "Out of memory"); - } - - for (j=0; j < (int) y; ++j) { - unsigned char *src = data + j * x * img_n ; - unsigned char *dest = good + j * x * req_comp; - - #define STBI__COMBO(a,b) ((a)*8+(b)) - #define STBI__CASE(a,b) case STBI__COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b) - // convert source image with img_n components to one with req_comp components; - // avoid switch per pixel, so use switch per scanline and massive macros - switch (STBI__COMBO(img_n, req_comp)) { - STBI__CASE(1,2) { dest[0]=src[0]; dest[1]=255; } break; - STBI__CASE(1,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; - STBI__CASE(1,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=255; } break; - STBI__CASE(2,1) { dest[0]=src[0]; } break; - STBI__CASE(2,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; - STBI__CASE(2,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=src[1]; } break; - STBI__CASE(3,4) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2];dest[3]=255; } break; - STBI__CASE(3,1) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); } break; - STBI__CASE(3,2) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); dest[1] = 255; } break; - STBI__CASE(4,1) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); } break; - STBI__CASE(4,2) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); dest[1] = src[3]; } break; - STBI__CASE(4,3) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2]; } break; - default: STBI_ASSERT(0); STBI_FREE(data); STBI_FREE(good); return stbi__errpuc("unsupported", "Unsupported format conversion"); - } - #undef STBI__CASE - } - - STBI_FREE(data); - return good; -} -#endif - -#if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) -// nothing -#else -static stbi__uint16 stbi__compute_y_16(int r, int g, int b) -{ - return (stbi__uint16) (((r*77) + (g*150) + (29*b)) >> 8); -} -#endif - -#if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) -// nothing -#else -static stbi__uint16 *stbi__convert_format16(stbi__uint16 *data, int img_n, int req_comp, unsigned int x, unsigned int y) -{ - int i,j; - stbi__uint16 *good; - - if (req_comp == img_n) return data; - STBI_ASSERT(req_comp >= 1 && req_comp <= 4); - - good = (stbi__uint16 *) stbi__malloc(req_comp * x * y * 2); - if (good == NULL) { - STBI_FREE(data); - return (stbi__uint16 *) stbi__errpuc("outofmem", "Out of memory"); - } - - for (j=0; j < (int) y; ++j) { - stbi__uint16 *src = data + j * x * img_n ; - stbi__uint16 *dest = good + j * x * req_comp; - - #define STBI__COMBO(a,b) ((a)*8+(b)) - #define STBI__CASE(a,b) case STBI__COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b) - // convert source image with img_n components to one with req_comp components; - // avoid switch per pixel, so use switch per scanline and massive macros - switch (STBI__COMBO(img_n, req_comp)) { - STBI__CASE(1,2) { dest[0]=src[0]; dest[1]=0xffff; } break; - STBI__CASE(1,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; - STBI__CASE(1,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=0xffff; } break; - STBI__CASE(2,1) { dest[0]=src[0]; } break; - STBI__CASE(2,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; - STBI__CASE(2,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=src[1]; } break; - STBI__CASE(3,4) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2];dest[3]=0xffff; } break; - STBI__CASE(3,1) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); } break; - STBI__CASE(3,2) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); dest[1] = 0xffff; } break; - STBI__CASE(4,1) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); } break; - STBI__CASE(4,2) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); dest[1] = src[3]; } break; - STBI__CASE(4,3) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2]; } break; - default: STBI_ASSERT(0); STBI_FREE(data); STBI_FREE(good); return (stbi__uint16*) stbi__errpuc("unsupported", "Unsupported format conversion"); - } - #undef STBI__CASE - } - - STBI_FREE(data); - return good; -} -#endif - -#ifndef STBI_NO_LINEAR -static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp) -{ - int i,k,n; - float *output; - if (!data) return NULL; - output = (float *) stbi__malloc_mad4(x, y, comp, sizeof(float), 0); - if (output == NULL) { STBI_FREE(data); return stbi__errpf("outofmem", "Out of memory"); } - // compute number of non-alpha components - if (comp & 1) n = comp; else n = comp-1; - for (i=0; i < x*y; ++i) { - for (k=0; k < n; ++k) { - output[i*comp + k] = (float) (pow(data[i*comp+k]/255.0f, stbi__l2h_gamma) * stbi__l2h_scale); - } - } - if (n < comp) { - for (i=0; i < x*y; ++i) { - output[i*comp + n] = data[i*comp + n]/255.0f; - } - } - STBI_FREE(data); - return output; -} -#endif - -#ifndef STBI_NO_HDR -#define stbi__float2int(x) ((int) (x)) -static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp) -{ - int i,k,n; - stbi_uc *output; - if (!data) return NULL; - output = (stbi_uc *) stbi__malloc_mad3(x, y, comp, 0); - if (output == NULL) { STBI_FREE(data); return stbi__errpuc("outofmem", "Out of memory"); } - // compute number of non-alpha components - if (comp & 1) n = comp; else n = comp-1; - for (i=0; i < x*y; ++i) { - for (k=0; k < n; ++k) { - float z = (float) pow(data[i*comp+k]*stbi__h2l_scale_i, stbi__h2l_gamma_i) * 255 + 0.5f; - if (z < 0) z = 0; - if (z > 255) z = 255; - output[i*comp + k] = (stbi_uc) stbi__float2int(z); - } - if (k < comp) { - float z = data[i*comp+k] * 255 + 0.5f; - if (z < 0) z = 0; - if (z > 255) z = 255; - output[i*comp + k] = (stbi_uc) stbi__float2int(z); - } - } - STBI_FREE(data); - return output; -} -#endif - -////////////////////////////////////////////////////////////////////////////// -// -// "baseline" JPEG/JFIF decoder -// -// simple implementation -// - doesn't support delayed output of y-dimension -// - simple interface (only one output format: 8-bit interleaved RGB) -// - doesn't try to recover corrupt jpegs -// - doesn't allow partial loading, loading multiple at once -// - still fast on x86 (copying globals into locals doesn't help x86) -// - allocates lots of intermediate memory (full size of all components) -// - non-interleaved case requires this anyway -// - allows good upsampling (see next) -// high-quality -// - upsampled channels are bilinearly interpolated, even across blocks -// - quality integer IDCT derived from IJG's 'slow' -// performance -// - fast huffman; reasonable integer IDCT -// - some SIMD kernels for common paths on targets with SSE2/NEON -// - uses a lot of intermediate memory, could cache poorly - -#ifndef STBI_NO_JPEG - -// huffman decoding acceleration -#define FAST_BITS 9 // larger handles more cases; smaller stomps less cache - -typedef struct -{ - stbi_uc fast[1 << FAST_BITS]; - // weirdly, repacking this into AoS is a 10% speed loss, instead of a win - stbi__uint16 code[256]; - stbi_uc values[256]; - stbi_uc size[257]; - unsigned int maxcode[18]; - int delta[17]; // old 'firstsymbol' - old 'firstcode' -} stbi__huffman; - -typedef struct -{ - stbi__context *s; - stbi__huffman huff_dc[4]; - stbi__huffman huff_ac[4]; - stbi__uint16 dequant[4][64]; - stbi__int16 fast_ac[4][1 << FAST_BITS]; - -// sizes for components, interleaved MCUs - int img_h_max, img_v_max; - int img_mcu_x, img_mcu_y; - int img_mcu_w, img_mcu_h; - -// definition of jpeg image component - struct - { - int id; - int h,v; - int tq; - int hd,ha; - int dc_pred; - - int x,y,w2,h2; - stbi_uc *data; - void *raw_data, *raw_coeff; - stbi_uc *linebuf; - short *coeff; // progressive only - int coeff_w, coeff_h; // number of 8x8 coefficient blocks - } img_comp[4]; - - stbi__uint32 code_buffer; // jpeg entropy-coded buffer - int code_bits; // number of valid bits - unsigned char marker; // marker seen while filling entropy buffer - int nomore; // flag if we saw a marker so must stop - - int progressive; - int spec_start; - int spec_end; - int succ_high; - int succ_low; - int eob_run; - int jfif; - int app14_color_transform; // Adobe APP14 tag - int rgb; - - int scan_n, order[4]; - int restart_interval, todo; - -// kernels - void (*idct_block_kernel)(stbi_uc *out, int out_stride, short data[64]); - void (*YCbCr_to_RGB_kernel)(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step); - stbi_uc *(*resample_row_hv_2_kernel)(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs); -} stbi__jpeg; - -static int stbi__build_huffman(stbi__huffman *h, int *count) -{ - int i,j,k=0; - unsigned int code; - // build size list for each symbol (from JPEG spec) - for (i=0; i < 16; ++i) - for (j=0; j < count[i]; ++j) - h->size[k++] = (stbi_uc) (i+1); - h->size[k] = 0; - - // compute actual symbols (from jpeg spec) - code = 0; - k = 0; - for(j=1; j <= 16; ++j) { - // compute delta to add to code to compute symbol id - h->delta[j] = k - code; - if (h->size[k] == j) { - while (h->size[k] == j) - h->code[k++] = (stbi__uint16) (code++); - if (code-1 >= (1u << j)) return stbi__err("bad code lengths","Corrupt JPEG"); - } - // compute largest code + 1 for this size, preshifted as needed later - h->maxcode[j] = code << (16-j); - code <<= 1; - } - h->maxcode[j] = 0xffffffff; - - // build non-spec acceleration table; 255 is flag for not-accelerated - memset(h->fast, 255, 1 << FAST_BITS); - for (i=0; i < k; ++i) { - int s = h->size[i]; - if (s <= FAST_BITS) { - int c = h->code[i] << (FAST_BITS-s); - int m = 1 << (FAST_BITS-s); - for (j=0; j < m; ++j) { - h->fast[c+j] = (stbi_uc) i; - } - } - } - return 1; -} - -// build a table that decodes both magnitude and value of small ACs in -// one go. -static void stbi__build_fast_ac(stbi__int16 *fast_ac, stbi__huffman *h) -{ - int i; - for (i=0; i < (1 << FAST_BITS); ++i) { - stbi_uc fast = h->fast[i]; - fast_ac[i] = 0; - if (fast < 255) { - int rs = h->values[fast]; - int run = (rs >> 4) & 15; - int magbits = rs & 15; - int len = h->size[fast]; - - if (magbits && len + magbits <= FAST_BITS) { - // magnitude code followed by receive_extend code - int k = ((i << len) & ((1 << FAST_BITS) - 1)) >> (FAST_BITS - magbits); - int m = 1 << (magbits - 1); - if (k < m) k += (~0U << magbits) + 1; - // if the result is small enough, we can fit it in fast_ac table - if (k >= -128 && k <= 127) - fast_ac[i] = (stbi__int16) ((k * 256) + (run * 16) + (len + magbits)); - } - } - } -} - -static void stbi__grow_buffer_unsafe(stbi__jpeg *j) -{ - do { - unsigned int b = j->nomore ? 0 : stbi__get8(j->s); - if (b == 0xff) { - int c = stbi__get8(j->s); - while (c == 0xff) c = stbi__get8(j->s); // consume fill bytes - if (c != 0) { - j->marker = (unsigned char) c; - j->nomore = 1; - return; - } - } - j->code_buffer |= b << (24 - j->code_bits); - j->code_bits += 8; - } while (j->code_bits <= 24); -} - -// (1 << n) - 1 -static const stbi__uint32 stbi__bmask[17]={0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535}; - -// decode a jpeg huffman value from the bitstream -stbi_inline static int stbi__jpeg_huff_decode(stbi__jpeg *j, stbi__huffman *h) -{ - unsigned int temp; - int c,k; - - if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); - - // look at the top FAST_BITS and determine what symbol ID it is, - // if the code is <= FAST_BITS - c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); - k = h->fast[c]; - if (k < 255) { - int s = h->size[k]; - if (s > j->code_bits) - return -1; - j->code_buffer <<= s; - j->code_bits -= s; - return h->values[k]; - } - - // naive test is to shift the code_buffer down so k bits are - // valid, then test against maxcode. To speed this up, we've - // preshifted maxcode left so that it has (16-k) 0s at the - // end; in other words, regardless of the number of bits, it - // wants to be compared against something shifted to have 16; - // that way we don't need to shift inside the loop. - temp = j->code_buffer >> 16; - for (k=FAST_BITS+1 ; ; ++k) - if (temp < h->maxcode[k]) - break; - if (k == 17) { - // error! code not found - j->code_bits -= 16; - return -1; - } - - if (k > j->code_bits) - return -1; - - // convert the huffman code to the symbol id - c = ((j->code_buffer >> (32 - k)) & stbi__bmask[k]) + h->delta[k]; - STBI_ASSERT((((j->code_buffer) >> (32 - h->size[c])) & stbi__bmask[h->size[c]]) == h->code[c]); - - // convert the id to a symbol - j->code_bits -= k; - j->code_buffer <<= k; - return h->values[c]; -} - -// bias[n] = (-1<code_bits < n) stbi__grow_buffer_unsafe(j); - - sgn = j->code_buffer >> 31; // sign bit always in MSB; 0 if MSB clear (positive), 1 if MSB set (negative) - k = stbi_lrot(j->code_buffer, n); - j->code_buffer = k & ~stbi__bmask[n]; - k &= stbi__bmask[n]; - j->code_bits -= n; - return k + (stbi__jbias[n] & (sgn - 1)); -} - -// get some unsigned bits -stbi_inline static int stbi__jpeg_get_bits(stbi__jpeg *j, int n) -{ - unsigned int k; - if (j->code_bits < n) stbi__grow_buffer_unsafe(j); - k = stbi_lrot(j->code_buffer, n); - j->code_buffer = k & ~stbi__bmask[n]; - k &= stbi__bmask[n]; - j->code_bits -= n; - return k; -} - -stbi_inline static int stbi__jpeg_get_bit(stbi__jpeg *j) -{ - unsigned int k; - if (j->code_bits < 1) stbi__grow_buffer_unsafe(j); - k = j->code_buffer; - j->code_buffer <<= 1; - --j->code_bits; - return k & 0x80000000; -} - -// given a value that's at position X in the zigzag stream, -// where does it appear in the 8x8 matrix coded as row-major? -static const stbi_uc stbi__jpeg_dezigzag[64+15] = -{ - 0, 1, 8, 16, 9, 2, 3, 10, - 17, 24, 32, 25, 18, 11, 4, 5, - 12, 19, 26, 33, 40, 48, 41, 34, - 27, 20, 13, 6, 7, 14, 21, 28, - 35, 42, 49, 56, 57, 50, 43, 36, - 29, 22, 15, 23, 30, 37, 44, 51, - 58, 59, 52, 45, 38, 31, 39, 46, - 53, 60, 61, 54, 47, 55, 62, 63, - // let corrupt input sample past end - 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63 -}; - -// decode one 64-entry block-- -static int stbi__jpeg_decode_block(stbi__jpeg *j, short data[64], stbi__huffman *hdc, stbi__huffman *hac, stbi__int16 *fac, int b, stbi__uint16 *dequant) -{ - int diff,dc,k; - int t; - - if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); - t = stbi__jpeg_huff_decode(j, hdc); - if (t < 0 || t > 15) return stbi__err("bad huffman code","Corrupt JPEG"); - - // 0 all the ac values now so we can do it 32-bits at a time - memset(data,0,64*sizeof(data[0])); - - diff = t ? stbi__extend_receive(j, t) : 0; - dc = j->img_comp[b].dc_pred + diff; - j->img_comp[b].dc_pred = dc; - data[0] = (short) (dc * dequant[0]); - - // decode AC components, see JPEG spec - k = 1; - do { - unsigned int zig; - int c,r,s; - if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); - c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); - r = fac[c]; - if (r) { // fast-AC path - k += (r >> 4) & 15; // run - s = r & 15; // combined length - j->code_buffer <<= s; - j->code_bits -= s; - // decode into unzigzag'd location - zig = stbi__jpeg_dezigzag[k++]; - data[zig] = (short) ((r >> 8) * dequant[zig]); - } else { - int rs = stbi__jpeg_huff_decode(j, hac); - if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); - s = rs & 15; - r = rs >> 4; - if (s == 0) { - if (rs != 0xf0) break; // end block - k += 16; - } else { - k += r; - // decode into unzigzag'd location - zig = stbi__jpeg_dezigzag[k++]; - data[zig] = (short) (stbi__extend_receive(j,s) * dequant[zig]); - } - } - } while (k < 64); - return 1; -} - -static int stbi__jpeg_decode_block_prog_dc(stbi__jpeg *j, short data[64], stbi__huffman *hdc, int b) -{ - int diff,dc; - int t; - if (j->spec_end != 0) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); - - if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); - - if (j->succ_high == 0) { - // first scan for DC coefficient, must be first - memset(data,0,64*sizeof(data[0])); // 0 all the ac values now - t = stbi__jpeg_huff_decode(j, hdc); - if (t < 0 || t > 15) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); - diff = t ? stbi__extend_receive(j, t) : 0; - - dc = j->img_comp[b].dc_pred + diff; - j->img_comp[b].dc_pred = dc; - data[0] = (short) (dc * (1 << j->succ_low)); - } else { - // refinement scan for DC coefficient - if (stbi__jpeg_get_bit(j)) - data[0] += (short) (1 << j->succ_low); - } - return 1; -} - -// @OPTIMIZE: store non-zigzagged during the decode passes, -// and only de-zigzag when dequantizing -static int stbi__jpeg_decode_block_prog_ac(stbi__jpeg *j, short data[64], stbi__huffman *hac, stbi__int16 *fac) -{ - int k; - if (j->spec_start == 0) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); - - if (j->succ_high == 0) { - int shift = j->succ_low; - - if (j->eob_run) { - --j->eob_run; - return 1; - } - - k = j->spec_start; - do { - unsigned int zig; - int c,r,s; - if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); - c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); - r = fac[c]; - if (r) { // fast-AC path - k += (r >> 4) & 15; // run - s = r & 15; // combined length - j->code_buffer <<= s; - j->code_bits -= s; - zig = stbi__jpeg_dezigzag[k++]; - data[zig] = (short) ((r >> 8) * (1 << shift)); - } else { - int rs = stbi__jpeg_huff_decode(j, hac); - if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); - s = rs & 15; - r = rs >> 4; - if (s == 0) { - if (r < 15) { - j->eob_run = (1 << r); - if (r) - j->eob_run += stbi__jpeg_get_bits(j, r); - --j->eob_run; - break; - } - k += 16; - } else { - k += r; - zig = stbi__jpeg_dezigzag[k++]; - data[zig] = (short) (stbi__extend_receive(j,s) * (1 << shift)); - } - } - } while (k <= j->spec_end); - } else { - // refinement scan for these AC coefficients - - short bit = (short) (1 << j->succ_low); - - if (j->eob_run) { - --j->eob_run; - for (k = j->spec_start; k <= j->spec_end; ++k) { - short *p = &data[stbi__jpeg_dezigzag[k]]; - if (*p != 0) - if (stbi__jpeg_get_bit(j)) - if ((*p & bit)==0) { - if (*p > 0) - *p += bit; - else - *p -= bit; - } - } - } else { - k = j->spec_start; - do { - int r,s; - int rs = stbi__jpeg_huff_decode(j, hac); // @OPTIMIZE see if we can use the fast path here, advance-by-r is so slow, eh - if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); - s = rs & 15; - r = rs >> 4; - if (s == 0) { - if (r < 15) { - j->eob_run = (1 << r) - 1; - if (r) - j->eob_run += stbi__jpeg_get_bits(j, r); - r = 64; // force end of block - } else { - // r=15 s=0 should write 16 0s, so we just do - // a run of 15 0s and then write s (which is 0), - // so we don't have to do anything special here - } - } else { - if (s != 1) return stbi__err("bad huffman code", "Corrupt JPEG"); - // sign bit - if (stbi__jpeg_get_bit(j)) - s = bit; - else - s = -bit; - } - - // advance by r - while (k <= j->spec_end) { - short *p = &data[stbi__jpeg_dezigzag[k++]]; - if (*p != 0) { - if (stbi__jpeg_get_bit(j)) - if ((*p & bit)==0) { - if (*p > 0) - *p += bit; - else - *p -= bit; - } - } else { - if (r == 0) { - *p = (short) s; - break; - } - --r; - } - } - } while (k <= j->spec_end); - } - } - return 1; -} - -// take a -128..127 value and stbi__clamp it and convert to 0..255 -stbi_inline static stbi_uc stbi__clamp(int x) -{ - // trick to use a single test to catch both cases - if ((unsigned int) x > 255) { - if (x < 0) return 0; - if (x > 255) return 255; - } - return (stbi_uc) x; -} - -#define stbi__f2f(x) ((int) (((x) * 4096 + 0.5))) -#define stbi__fsh(x) ((x) * 4096) - -// derived from jidctint -- DCT_ISLOW -#define STBI__IDCT_1D(s0,s1,s2,s3,s4,s5,s6,s7) \ - int t0,t1,t2,t3,p1,p2,p3,p4,p5,x0,x1,x2,x3; \ - p2 = s2; \ - p3 = s6; \ - p1 = (p2+p3) * stbi__f2f(0.5411961f); \ - t2 = p1 + p3*stbi__f2f(-1.847759065f); \ - t3 = p1 + p2*stbi__f2f( 0.765366865f); \ - p2 = s0; \ - p3 = s4; \ - t0 = stbi__fsh(p2+p3); \ - t1 = stbi__fsh(p2-p3); \ - x0 = t0+t3; \ - x3 = t0-t3; \ - x1 = t1+t2; \ - x2 = t1-t2; \ - t0 = s7; \ - t1 = s5; \ - t2 = s3; \ - t3 = s1; \ - p3 = t0+t2; \ - p4 = t1+t3; \ - p1 = t0+t3; \ - p2 = t1+t2; \ - p5 = (p3+p4)*stbi__f2f( 1.175875602f); \ - t0 = t0*stbi__f2f( 0.298631336f); \ - t1 = t1*stbi__f2f( 2.053119869f); \ - t2 = t2*stbi__f2f( 3.072711026f); \ - t3 = t3*stbi__f2f( 1.501321110f); \ - p1 = p5 + p1*stbi__f2f(-0.899976223f); \ - p2 = p5 + p2*stbi__f2f(-2.562915447f); \ - p3 = p3*stbi__f2f(-1.961570560f); \ - p4 = p4*stbi__f2f(-0.390180644f); \ - t3 += p1+p4; \ - t2 += p2+p3; \ - t1 += p2+p4; \ - t0 += p1+p3; - -static void stbi__idct_block(stbi_uc *out, int out_stride, short data[64]) -{ - int i,val[64],*v=val; - stbi_uc *o; - short *d = data; - - // columns - for (i=0; i < 8; ++i,++d, ++v) { - // if all zeroes, shortcut -- this avoids dequantizing 0s and IDCTing - if (d[ 8]==0 && d[16]==0 && d[24]==0 && d[32]==0 - && d[40]==0 && d[48]==0 && d[56]==0) { - // no shortcut 0 seconds - // (1|2|3|4|5|6|7)==0 0 seconds - // all separate -0.047 seconds - // 1 && 2|3 && 4|5 && 6|7: -0.047 seconds - int dcterm = d[0]*4; - v[0] = v[8] = v[16] = v[24] = v[32] = v[40] = v[48] = v[56] = dcterm; - } else { - STBI__IDCT_1D(d[ 0],d[ 8],d[16],d[24],d[32],d[40],d[48],d[56]) - // constants scaled things up by 1<<12; let's bring them back - // down, but keep 2 extra bits of precision - x0 += 512; x1 += 512; x2 += 512; x3 += 512; - v[ 0] = (x0+t3) >> 10; - v[56] = (x0-t3) >> 10; - v[ 8] = (x1+t2) >> 10; - v[48] = (x1-t2) >> 10; - v[16] = (x2+t1) >> 10; - v[40] = (x2-t1) >> 10; - v[24] = (x3+t0) >> 10; - v[32] = (x3-t0) >> 10; - } - } - - for (i=0, v=val, o=out; i < 8; ++i,v+=8,o+=out_stride) { - // no fast case since the first 1D IDCT spread components out - STBI__IDCT_1D(v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7]) - // constants scaled things up by 1<<12, plus we had 1<<2 from first - // loop, plus horizontal and vertical each scale by sqrt(8) so together - // we've got an extra 1<<3, so 1<<17 total we need to remove. - // so we want to round that, which means adding 0.5 * 1<<17, - // aka 65536. Also, we'll end up with -128 to 127 that we want - // to encode as 0..255 by adding 128, so we'll add that before the shift - x0 += 65536 + (128<<17); - x1 += 65536 + (128<<17); - x2 += 65536 + (128<<17); - x3 += 65536 + (128<<17); - // tried computing the shifts into temps, or'ing the temps to see - // if any were out of range, but that was slower - o[0] = stbi__clamp((x0+t3) >> 17); - o[7] = stbi__clamp((x0-t3) >> 17); - o[1] = stbi__clamp((x1+t2) >> 17); - o[6] = stbi__clamp((x1-t2) >> 17); - o[2] = stbi__clamp((x2+t1) >> 17); - o[5] = stbi__clamp((x2-t1) >> 17); - o[3] = stbi__clamp((x3+t0) >> 17); - o[4] = stbi__clamp((x3-t0) >> 17); - } -} - -#ifdef STBI_SSE2 -// sse2 integer IDCT. not the fastest possible implementation but it -// produces bit-identical results to the generic C version so it's -// fully "transparent". -static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64]) -{ - // This is constructed to match our regular (generic) integer IDCT exactly. - __m128i row0, row1, row2, row3, row4, row5, row6, row7; - __m128i tmp; - - // dot product constant: even elems=x, odd elems=y - #define dct_const(x,y) _mm_setr_epi16((x),(y),(x),(y),(x),(y),(x),(y)) - - // out(0) = c0[even]*x + c0[odd]*y (c0, x, y 16-bit, out 32-bit) - // out(1) = c1[even]*x + c1[odd]*y - #define dct_rot(out0,out1, x,y,c0,c1) \ - __m128i c0##lo = _mm_unpacklo_epi16((x),(y)); \ - __m128i c0##hi = _mm_unpackhi_epi16((x),(y)); \ - __m128i out0##_l = _mm_madd_epi16(c0##lo, c0); \ - __m128i out0##_h = _mm_madd_epi16(c0##hi, c0); \ - __m128i out1##_l = _mm_madd_epi16(c0##lo, c1); \ - __m128i out1##_h = _mm_madd_epi16(c0##hi, c1) - - // out = in << 12 (in 16-bit, out 32-bit) - #define dct_widen(out, in) \ - __m128i out##_l = _mm_srai_epi32(_mm_unpacklo_epi16(_mm_setzero_si128(), (in)), 4); \ - __m128i out##_h = _mm_srai_epi32(_mm_unpackhi_epi16(_mm_setzero_si128(), (in)), 4) - - // wide add - #define dct_wadd(out, a, b) \ - __m128i out##_l = _mm_add_epi32(a##_l, b##_l); \ - __m128i out##_h = _mm_add_epi32(a##_h, b##_h) - - // wide sub - #define dct_wsub(out, a, b) \ - __m128i out##_l = _mm_sub_epi32(a##_l, b##_l); \ - __m128i out##_h = _mm_sub_epi32(a##_h, b##_h) - - // butterfly a/b, add bias, then shift by "s" and pack - #define dct_bfly32o(out0, out1, a,b,bias,s) \ - { \ - __m128i abiased_l = _mm_add_epi32(a##_l, bias); \ - __m128i abiased_h = _mm_add_epi32(a##_h, bias); \ - dct_wadd(sum, abiased, b); \ - dct_wsub(dif, abiased, b); \ - out0 = _mm_packs_epi32(_mm_srai_epi32(sum_l, s), _mm_srai_epi32(sum_h, s)); \ - out1 = _mm_packs_epi32(_mm_srai_epi32(dif_l, s), _mm_srai_epi32(dif_h, s)); \ - } - - // 8-bit interleave step (for transposes) - #define dct_interleave8(a, b) \ - tmp = a; \ - a = _mm_unpacklo_epi8(a, b); \ - b = _mm_unpackhi_epi8(tmp, b) - - // 16-bit interleave step (for transposes) - #define dct_interleave16(a, b) \ - tmp = a; \ - a = _mm_unpacklo_epi16(a, b); \ - b = _mm_unpackhi_epi16(tmp, b) - - #define dct_pass(bias,shift) \ - { \ - /* even part */ \ - dct_rot(t2e,t3e, row2,row6, rot0_0,rot0_1); \ - __m128i sum04 = _mm_add_epi16(row0, row4); \ - __m128i dif04 = _mm_sub_epi16(row0, row4); \ - dct_widen(t0e, sum04); \ - dct_widen(t1e, dif04); \ - dct_wadd(x0, t0e, t3e); \ - dct_wsub(x3, t0e, t3e); \ - dct_wadd(x1, t1e, t2e); \ - dct_wsub(x2, t1e, t2e); \ - /* odd part */ \ - dct_rot(y0o,y2o, row7,row3, rot2_0,rot2_1); \ - dct_rot(y1o,y3o, row5,row1, rot3_0,rot3_1); \ - __m128i sum17 = _mm_add_epi16(row1, row7); \ - __m128i sum35 = _mm_add_epi16(row3, row5); \ - dct_rot(y4o,y5o, sum17,sum35, rot1_0,rot1_1); \ - dct_wadd(x4, y0o, y4o); \ - dct_wadd(x5, y1o, y5o); \ - dct_wadd(x6, y2o, y5o); \ - dct_wadd(x7, y3o, y4o); \ - dct_bfly32o(row0,row7, x0,x7,bias,shift); \ - dct_bfly32o(row1,row6, x1,x6,bias,shift); \ - dct_bfly32o(row2,row5, x2,x5,bias,shift); \ - dct_bfly32o(row3,row4, x3,x4,bias,shift); \ - } - - __m128i rot0_0 = dct_const(stbi__f2f(0.5411961f), stbi__f2f(0.5411961f) + stbi__f2f(-1.847759065f)); - __m128i rot0_1 = dct_const(stbi__f2f(0.5411961f) + stbi__f2f( 0.765366865f), stbi__f2f(0.5411961f)); - __m128i rot1_0 = dct_const(stbi__f2f(1.175875602f) + stbi__f2f(-0.899976223f), stbi__f2f(1.175875602f)); - __m128i rot1_1 = dct_const(stbi__f2f(1.175875602f), stbi__f2f(1.175875602f) + stbi__f2f(-2.562915447f)); - __m128i rot2_0 = dct_const(stbi__f2f(-1.961570560f) + stbi__f2f( 0.298631336f), stbi__f2f(-1.961570560f)); - __m128i rot2_1 = dct_const(stbi__f2f(-1.961570560f), stbi__f2f(-1.961570560f) + stbi__f2f( 3.072711026f)); - __m128i rot3_0 = dct_const(stbi__f2f(-0.390180644f) + stbi__f2f( 2.053119869f), stbi__f2f(-0.390180644f)); - __m128i rot3_1 = dct_const(stbi__f2f(-0.390180644f), stbi__f2f(-0.390180644f) + stbi__f2f( 1.501321110f)); - - // rounding biases in column/row passes, see stbi__idct_block for explanation. - __m128i bias_0 = _mm_set1_epi32(512); - __m128i bias_1 = _mm_set1_epi32(65536 + (128<<17)); - - // load - row0 = _mm_load_si128((const __m128i *) (data + 0*8)); - row1 = _mm_load_si128((const __m128i *) (data + 1*8)); - row2 = _mm_load_si128((const __m128i *) (data + 2*8)); - row3 = _mm_load_si128((const __m128i *) (data + 3*8)); - row4 = _mm_load_si128((const __m128i *) (data + 4*8)); - row5 = _mm_load_si128((const __m128i *) (data + 5*8)); - row6 = _mm_load_si128((const __m128i *) (data + 6*8)); - row7 = _mm_load_si128((const __m128i *) (data + 7*8)); - - // column pass - dct_pass(bias_0, 10); - - { - // 16bit 8x8 transpose pass 1 - dct_interleave16(row0, row4); - dct_interleave16(row1, row5); - dct_interleave16(row2, row6); - dct_interleave16(row3, row7); - - // transpose pass 2 - dct_interleave16(row0, row2); - dct_interleave16(row1, row3); - dct_interleave16(row4, row6); - dct_interleave16(row5, row7); - - // transpose pass 3 - dct_interleave16(row0, row1); - dct_interleave16(row2, row3); - dct_interleave16(row4, row5); - dct_interleave16(row6, row7); - } - - // row pass - dct_pass(bias_1, 17); - - { - // pack - __m128i p0 = _mm_packus_epi16(row0, row1); // a0a1a2a3...a7b0b1b2b3...b7 - __m128i p1 = _mm_packus_epi16(row2, row3); - __m128i p2 = _mm_packus_epi16(row4, row5); - __m128i p3 = _mm_packus_epi16(row6, row7); - - // 8bit 8x8 transpose pass 1 - dct_interleave8(p0, p2); // a0e0a1e1... - dct_interleave8(p1, p3); // c0g0c1g1... - - // transpose pass 2 - dct_interleave8(p0, p1); // a0c0e0g0... - dct_interleave8(p2, p3); // b0d0f0h0... - - // transpose pass 3 - dct_interleave8(p0, p2); // a0b0c0d0... - dct_interleave8(p1, p3); // a4b4c4d4... - - // store - _mm_storel_epi64((__m128i *) out, p0); out += out_stride; - _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p0, 0x4e)); out += out_stride; - _mm_storel_epi64((__m128i *) out, p2); out += out_stride; - _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p2, 0x4e)); out += out_stride; - _mm_storel_epi64((__m128i *) out, p1); out += out_stride; - _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p1, 0x4e)); out += out_stride; - _mm_storel_epi64((__m128i *) out, p3); out += out_stride; - _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p3, 0x4e)); - } - -#undef dct_const -#undef dct_rot -#undef dct_widen -#undef dct_wadd -#undef dct_wsub -#undef dct_bfly32o -#undef dct_interleave8 -#undef dct_interleave16 -#undef dct_pass -} - -#endif // STBI_SSE2 - -#ifdef STBI_NEON - -// NEON integer IDCT. should produce bit-identical -// results to the generic C version. -static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64]) -{ - int16x8_t row0, row1, row2, row3, row4, row5, row6, row7; - - int16x4_t rot0_0 = vdup_n_s16(stbi__f2f(0.5411961f)); - int16x4_t rot0_1 = vdup_n_s16(stbi__f2f(-1.847759065f)); - int16x4_t rot0_2 = vdup_n_s16(stbi__f2f( 0.765366865f)); - int16x4_t rot1_0 = vdup_n_s16(stbi__f2f( 1.175875602f)); - int16x4_t rot1_1 = vdup_n_s16(stbi__f2f(-0.899976223f)); - int16x4_t rot1_2 = vdup_n_s16(stbi__f2f(-2.562915447f)); - int16x4_t rot2_0 = vdup_n_s16(stbi__f2f(-1.961570560f)); - int16x4_t rot2_1 = vdup_n_s16(stbi__f2f(-0.390180644f)); - int16x4_t rot3_0 = vdup_n_s16(stbi__f2f( 0.298631336f)); - int16x4_t rot3_1 = vdup_n_s16(stbi__f2f( 2.053119869f)); - int16x4_t rot3_2 = vdup_n_s16(stbi__f2f( 3.072711026f)); - int16x4_t rot3_3 = vdup_n_s16(stbi__f2f( 1.501321110f)); - -#define dct_long_mul(out, inq, coeff) \ - int32x4_t out##_l = vmull_s16(vget_low_s16(inq), coeff); \ - int32x4_t out##_h = vmull_s16(vget_high_s16(inq), coeff) - -#define dct_long_mac(out, acc, inq, coeff) \ - int32x4_t out##_l = vmlal_s16(acc##_l, vget_low_s16(inq), coeff); \ - int32x4_t out##_h = vmlal_s16(acc##_h, vget_high_s16(inq), coeff) - -#define dct_widen(out, inq) \ - int32x4_t out##_l = vshll_n_s16(vget_low_s16(inq), 12); \ - int32x4_t out##_h = vshll_n_s16(vget_high_s16(inq), 12) - -// wide add -#define dct_wadd(out, a, b) \ - int32x4_t out##_l = vaddq_s32(a##_l, b##_l); \ - int32x4_t out##_h = vaddq_s32(a##_h, b##_h) - -// wide sub -#define dct_wsub(out, a, b) \ - int32x4_t out##_l = vsubq_s32(a##_l, b##_l); \ - int32x4_t out##_h = vsubq_s32(a##_h, b##_h) - -// butterfly a/b, then shift using "shiftop" by "s" and pack -#define dct_bfly32o(out0,out1, a,b,shiftop,s) \ - { \ - dct_wadd(sum, a, b); \ - dct_wsub(dif, a, b); \ - out0 = vcombine_s16(shiftop(sum_l, s), shiftop(sum_h, s)); \ - out1 = vcombine_s16(shiftop(dif_l, s), shiftop(dif_h, s)); \ - } - -#define dct_pass(shiftop, shift) \ - { \ - /* even part */ \ - int16x8_t sum26 = vaddq_s16(row2, row6); \ - dct_long_mul(p1e, sum26, rot0_0); \ - dct_long_mac(t2e, p1e, row6, rot0_1); \ - dct_long_mac(t3e, p1e, row2, rot0_2); \ - int16x8_t sum04 = vaddq_s16(row0, row4); \ - int16x8_t dif04 = vsubq_s16(row0, row4); \ - dct_widen(t0e, sum04); \ - dct_widen(t1e, dif04); \ - dct_wadd(x0, t0e, t3e); \ - dct_wsub(x3, t0e, t3e); \ - dct_wadd(x1, t1e, t2e); \ - dct_wsub(x2, t1e, t2e); \ - /* odd part */ \ - int16x8_t sum15 = vaddq_s16(row1, row5); \ - int16x8_t sum17 = vaddq_s16(row1, row7); \ - int16x8_t sum35 = vaddq_s16(row3, row5); \ - int16x8_t sum37 = vaddq_s16(row3, row7); \ - int16x8_t sumodd = vaddq_s16(sum17, sum35); \ - dct_long_mul(p5o, sumodd, rot1_0); \ - dct_long_mac(p1o, p5o, sum17, rot1_1); \ - dct_long_mac(p2o, p5o, sum35, rot1_2); \ - dct_long_mul(p3o, sum37, rot2_0); \ - dct_long_mul(p4o, sum15, rot2_1); \ - dct_wadd(sump13o, p1o, p3o); \ - dct_wadd(sump24o, p2o, p4o); \ - dct_wadd(sump23o, p2o, p3o); \ - dct_wadd(sump14o, p1o, p4o); \ - dct_long_mac(x4, sump13o, row7, rot3_0); \ - dct_long_mac(x5, sump24o, row5, rot3_1); \ - dct_long_mac(x6, sump23o, row3, rot3_2); \ - dct_long_mac(x7, sump14o, row1, rot3_3); \ - dct_bfly32o(row0,row7, x0,x7,shiftop,shift); \ - dct_bfly32o(row1,row6, x1,x6,shiftop,shift); \ - dct_bfly32o(row2,row5, x2,x5,shiftop,shift); \ - dct_bfly32o(row3,row4, x3,x4,shiftop,shift); \ - } - - // load - row0 = vld1q_s16(data + 0*8); - row1 = vld1q_s16(data + 1*8); - row2 = vld1q_s16(data + 2*8); - row3 = vld1q_s16(data + 3*8); - row4 = vld1q_s16(data + 4*8); - row5 = vld1q_s16(data + 5*8); - row6 = vld1q_s16(data + 6*8); - row7 = vld1q_s16(data + 7*8); - - // add DC bias - row0 = vaddq_s16(row0, vsetq_lane_s16(1024, vdupq_n_s16(0), 0)); - - // column pass - dct_pass(vrshrn_n_s32, 10); - - // 16bit 8x8 transpose - { -// these three map to a single VTRN.16, VTRN.32, and VSWP, respectively. -// whether compilers actually get this is another story, sadly. -#define dct_trn16(x, y) { int16x8x2_t t = vtrnq_s16(x, y); x = t.val[0]; y = t.val[1]; } -#define dct_trn32(x, y) { int32x4x2_t t = vtrnq_s32(vreinterpretq_s32_s16(x), vreinterpretq_s32_s16(y)); x = vreinterpretq_s16_s32(t.val[0]); y = vreinterpretq_s16_s32(t.val[1]); } -#define dct_trn64(x, y) { int16x8_t x0 = x; int16x8_t y0 = y; x = vcombine_s16(vget_low_s16(x0), vget_low_s16(y0)); y = vcombine_s16(vget_high_s16(x0), vget_high_s16(y0)); } - - // pass 1 - dct_trn16(row0, row1); // a0b0a2b2a4b4a6b6 - dct_trn16(row2, row3); - dct_trn16(row4, row5); - dct_trn16(row6, row7); - - // pass 2 - dct_trn32(row0, row2); // a0b0c0d0a4b4c4d4 - dct_trn32(row1, row3); - dct_trn32(row4, row6); - dct_trn32(row5, row7); - - // pass 3 - dct_trn64(row0, row4); // a0b0c0d0e0f0g0h0 - dct_trn64(row1, row5); - dct_trn64(row2, row6); - dct_trn64(row3, row7); - -#undef dct_trn16 -#undef dct_trn32 -#undef dct_trn64 - } - - // row pass - // vrshrn_n_s32 only supports shifts up to 16, we need - // 17. so do a non-rounding shift of 16 first then follow - // up with a rounding shift by 1. - dct_pass(vshrn_n_s32, 16); - - { - // pack and round - uint8x8_t p0 = vqrshrun_n_s16(row0, 1); - uint8x8_t p1 = vqrshrun_n_s16(row1, 1); - uint8x8_t p2 = vqrshrun_n_s16(row2, 1); - uint8x8_t p3 = vqrshrun_n_s16(row3, 1); - uint8x8_t p4 = vqrshrun_n_s16(row4, 1); - uint8x8_t p5 = vqrshrun_n_s16(row5, 1); - uint8x8_t p6 = vqrshrun_n_s16(row6, 1); - uint8x8_t p7 = vqrshrun_n_s16(row7, 1); - - // again, these can translate into one instruction, but often don't. -#define dct_trn8_8(x, y) { uint8x8x2_t t = vtrn_u8(x, y); x = t.val[0]; y = t.val[1]; } -#define dct_trn8_16(x, y) { uint16x4x2_t t = vtrn_u16(vreinterpret_u16_u8(x), vreinterpret_u16_u8(y)); x = vreinterpret_u8_u16(t.val[0]); y = vreinterpret_u8_u16(t.val[1]); } -#define dct_trn8_32(x, y) { uint32x2x2_t t = vtrn_u32(vreinterpret_u32_u8(x), vreinterpret_u32_u8(y)); x = vreinterpret_u8_u32(t.val[0]); y = vreinterpret_u8_u32(t.val[1]); } - - // sadly can't use interleaved stores here since we only write - // 8 bytes to each scan line! - - // 8x8 8-bit transpose pass 1 - dct_trn8_8(p0, p1); - dct_trn8_8(p2, p3); - dct_trn8_8(p4, p5); - dct_trn8_8(p6, p7); - - // pass 2 - dct_trn8_16(p0, p2); - dct_trn8_16(p1, p3); - dct_trn8_16(p4, p6); - dct_trn8_16(p5, p7); - - // pass 3 - dct_trn8_32(p0, p4); - dct_trn8_32(p1, p5); - dct_trn8_32(p2, p6); - dct_trn8_32(p3, p7); - - // store - vst1_u8(out, p0); out += out_stride; - vst1_u8(out, p1); out += out_stride; - vst1_u8(out, p2); out += out_stride; - vst1_u8(out, p3); out += out_stride; - vst1_u8(out, p4); out += out_stride; - vst1_u8(out, p5); out += out_stride; - vst1_u8(out, p6); out += out_stride; - vst1_u8(out, p7); - -#undef dct_trn8_8 -#undef dct_trn8_16 -#undef dct_trn8_32 - } - -#undef dct_long_mul -#undef dct_long_mac -#undef dct_widen -#undef dct_wadd -#undef dct_wsub -#undef dct_bfly32o -#undef dct_pass -} - -#endif // STBI_NEON - -#define STBI__MARKER_none 0xff -// if there's a pending marker from the entropy stream, return that -// otherwise, fetch from the stream and get a marker. if there's no -// marker, return 0xff, which is never a valid marker value -static stbi_uc stbi__get_marker(stbi__jpeg *j) -{ - stbi_uc x; - if (j->marker != STBI__MARKER_none) { x = j->marker; j->marker = STBI__MARKER_none; return x; } - x = stbi__get8(j->s); - if (x != 0xff) return STBI__MARKER_none; - while (x == 0xff) - x = stbi__get8(j->s); // consume repeated 0xff fill bytes - return x; -} - -// in each scan, we'll have scan_n components, and the order -// of the components is specified by order[] -#define STBI__RESTART(x) ((x) >= 0xd0 && (x) <= 0xd7) - -// after a restart interval, stbi__jpeg_reset the entropy decoder and -// the dc prediction -static void stbi__jpeg_reset(stbi__jpeg *j) -{ - j->code_bits = 0; - j->code_buffer = 0; - j->nomore = 0; - j->img_comp[0].dc_pred = j->img_comp[1].dc_pred = j->img_comp[2].dc_pred = j->img_comp[3].dc_pred = 0; - j->marker = STBI__MARKER_none; - j->todo = j->restart_interval ? j->restart_interval : 0x7fffffff; - j->eob_run = 0; - // no more than 1<<31 MCUs if no restart_interal? that's plenty safe, - // since we don't even allow 1<<30 pixels -} - -static int stbi__parse_entropy_coded_data(stbi__jpeg *z) -{ - stbi__jpeg_reset(z); - if (!z->progressive) { - if (z->scan_n == 1) { - int i,j; - STBI_SIMD_ALIGN(short, data[64]); - int n = z->order[0]; - // non-interleaved data, we just need to process one block at a time, - // in trivial scanline order - // number of blocks to do just depends on how many actual "pixels" this - // component has, independent of interleaved MCU blocking and such - int w = (z->img_comp[n].x+7) >> 3; - int h = (z->img_comp[n].y+7) >> 3; - for (j=0; j < h; ++j) { - for (i=0; i < w; ++i) { - int ha = z->img_comp[n].ha; - if (!stbi__jpeg_decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+ha, z->fast_ac[ha], n, z->dequant[z->img_comp[n].tq])) return 0; - z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data); - // every data block is an MCU, so countdown the restart interval - if (--z->todo <= 0) { - if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); - // if it's NOT a restart, then just bail, so we get corrupt data - // rather than no data - if (!STBI__RESTART(z->marker)) return 1; - stbi__jpeg_reset(z); - } - } - } - return 1; - } else { // interleaved - int i,j,k,x,y; - STBI_SIMD_ALIGN(short, data[64]); - for (j=0; j < z->img_mcu_y; ++j) { - for (i=0; i < z->img_mcu_x; ++i) { - // scan an interleaved mcu... process scan_n components in order - for (k=0; k < z->scan_n; ++k) { - int n = z->order[k]; - // scan out an mcu's worth of this component; that's just determined - // by the basic H and V specified for the component - for (y=0; y < z->img_comp[n].v; ++y) { - for (x=0; x < z->img_comp[n].h; ++x) { - int x2 = (i*z->img_comp[n].h + x)*8; - int y2 = (j*z->img_comp[n].v + y)*8; - int ha = z->img_comp[n].ha; - if (!stbi__jpeg_decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+ha, z->fast_ac[ha], n, z->dequant[z->img_comp[n].tq])) return 0; - z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*y2+x2, z->img_comp[n].w2, data); - } - } - } - // after all interleaved components, that's an interleaved MCU, - // so now count down the restart interval - if (--z->todo <= 0) { - if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); - if (!STBI__RESTART(z->marker)) return 1; - stbi__jpeg_reset(z); - } - } - } - return 1; - } - } else { - if (z->scan_n == 1) { - int i,j; - int n = z->order[0]; - // non-interleaved data, we just need to process one block at a time, - // in trivial scanline order - // number of blocks to do just depends on how many actual "pixels" this - // component has, independent of interleaved MCU blocking and such - int w = (z->img_comp[n].x+7) >> 3; - int h = (z->img_comp[n].y+7) >> 3; - for (j=0; j < h; ++j) { - for (i=0; i < w; ++i) { - short *data = z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w); - if (z->spec_start == 0) { - if (!stbi__jpeg_decode_block_prog_dc(z, data, &z->huff_dc[z->img_comp[n].hd], n)) - return 0; - } else { - int ha = z->img_comp[n].ha; - if (!stbi__jpeg_decode_block_prog_ac(z, data, &z->huff_ac[ha], z->fast_ac[ha])) - return 0; - } - // every data block is an MCU, so countdown the restart interval - if (--z->todo <= 0) { - if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); - if (!STBI__RESTART(z->marker)) return 1; - stbi__jpeg_reset(z); - } - } - } - return 1; - } else { // interleaved - int i,j,k,x,y; - for (j=0; j < z->img_mcu_y; ++j) { - for (i=0; i < z->img_mcu_x; ++i) { - // scan an interleaved mcu... process scan_n components in order - for (k=0; k < z->scan_n; ++k) { - int n = z->order[k]; - // scan out an mcu's worth of this component; that's just determined - // by the basic H and V specified for the component - for (y=0; y < z->img_comp[n].v; ++y) { - for (x=0; x < z->img_comp[n].h; ++x) { - int x2 = (i*z->img_comp[n].h + x); - int y2 = (j*z->img_comp[n].v + y); - short *data = z->img_comp[n].coeff + 64 * (x2 + y2 * z->img_comp[n].coeff_w); - if (!stbi__jpeg_decode_block_prog_dc(z, data, &z->huff_dc[z->img_comp[n].hd], n)) - return 0; - } - } - } - // after all interleaved components, that's an interleaved MCU, - // so now count down the restart interval - if (--z->todo <= 0) { - if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); - if (!STBI__RESTART(z->marker)) return 1; - stbi__jpeg_reset(z); - } - } - } - return 1; - } - } -} - -static void stbi__jpeg_dequantize(short *data, stbi__uint16 *dequant) -{ - int i; - for (i=0; i < 64; ++i) - data[i] *= dequant[i]; -} - -static void stbi__jpeg_finish(stbi__jpeg *z) -{ - if (z->progressive) { - // dequantize and idct the data - int i,j,n; - for (n=0; n < z->s->img_n; ++n) { - int w = (z->img_comp[n].x+7) >> 3; - int h = (z->img_comp[n].y+7) >> 3; - for (j=0; j < h; ++j) { - for (i=0; i < w; ++i) { - short *data = z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w); - stbi__jpeg_dequantize(data, z->dequant[z->img_comp[n].tq]); - z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data); - } - } - } - } -} - -static int stbi__process_marker(stbi__jpeg *z, int m) -{ - int L; - switch (m) { - case STBI__MARKER_none: // no marker found - return stbi__err("expected marker","Corrupt JPEG"); - - case 0xDD: // DRI - specify restart interval - if (stbi__get16be(z->s) != 4) return stbi__err("bad DRI len","Corrupt JPEG"); - z->restart_interval = stbi__get16be(z->s); - return 1; - - case 0xDB: // DQT - define quantization table - L = stbi__get16be(z->s)-2; - while (L > 0) { - int q = stbi__get8(z->s); - int p = q >> 4, sixteen = (p != 0); - int t = q & 15,i; - if (p != 0 && p != 1) return stbi__err("bad DQT type","Corrupt JPEG"); - if (t > 3) return stbi__err("bad DQT table","Corrupt JPEG"); - - for (i=0; i < 64; ++i) - z->dequant[t][stbi__jpeg_dezigzag[i]] = (stbi__uint16)(sixteen ? stbi__get16be(z->s) : stbi__get8(z->s)); - L -= (sixteen ? 129 : 65); - } - return L==0; - - case 0xC4: // DHT - define huffman table - L = stbi__get16be(z->s)-2; - while (L > 0) { - stbi_uc *v; - int sizes[16],i,n=0; - int q = stbi__get8(z->s); - int tc = q >> 4; - int th = q & 15; - if (tc > 1 || th > 3) return stbi__err("bad DHT header","Corrupt JPEG"); - for (i=0; i < 16; ++i) { - sizes[i] = stbi__get8(z->s); - n += sizes[i]; - } - L -= 17; - if (tc == 0) { - if (!stbi__build_huffman(z->huff_dc+th, sizes)) return 0; - v = z->huff_dc[th].values; - } else { - if (!stbi__build_huffman(z->huff_ac+th, sizes)) return 0; - v = z->huff_ac[th].values; - } - for (i=0; i < n; ++i) - v[i] = stbi__get8(z->s); - if (tc != 0) - stbi__build_fast_ac(z->fast_ac[th], z->huff_ac + th); - L -= n; - } - return L==0; - } - - // check for comment block or APP blocks - if ((m >= 0xE0 && m <= 0xEF) || m == 0xFE) { - L = stbi__get16be(z->s); - if (L < 2) { - if (m == 0xFE) - return stbi__err("bad COM len","Corrupt JPEG"); - else - return stbi__err("bad APP len","Corrupt JPEG"); - } - L -= 2; - - if (m == 0xE0 && L >= 5) { // JFIF APP0 segment - static const unsigned char tag[5] = {'J','F','I','F','\0'}; - int ok = 1; - int i; - for (i=0; i < 5; ++i) - if (stbi__get8(z->s) != tag[i]) - ok = 0; - L -= 5; - if (ok) - z->jfif = 1; - } else if (m == 0xEE && L >= 12) { // Adobe APP14 segment - static const unsigned char tag[6] = {'A','d','o','b','e','\0'}; - int ok = 1; - int i; - for (i=0; i < 6; ++i) - if (stbi__get8(z->s) != tag[i]) - ok = 0; - L -= 6; - if (ok) { - stbi__get8(z->s); // version - stbi__get16be(z->s); // flags0 - stbi__get16be(z->s); // flags1 - z->app14_color_transform = stbi__get8(z->s); // color transform - L -= 6; - } - } - - stbi__skip(z->s, L); - return 1; - } - - return stbi__err("unknown marker","Corrupt JPEG"); -} - -// after we see SOS -static int stbi__process_scan_header(stbi__jpeg *z) -{ - int i; - int Ls = stbi__get16be(z->s); - z->scan_n = stbi__get8(z->s); - if (z->scan_n < 1 || z->scan_n > 4 || z->scan_n > (int) z->s->img_n) return stbi__err("bad SOS component count","Corrupt JPEG"); - if (Ls != 6+2*z->scan_n) return stbi__err("bad SOS len","Corrupt JPEG"); - for (i=0; i < z->scan_n; ++i) { - int id = stbi__get8(z->s), which; - int q = stbi__get8(z->s); - for (which = 0; which < z->s->img_n; ++which) - if (z->img_comp[which].id == id) - break; - if (which == z->s->img_n) return 0; // no match - z->img_comp[which].hd = q >> 4; if (z->img_comp[which].hd > 3) return stbi__err("bad DC huff","Corrupt JPEG"); - z->img_comp[which].ha = q & 15; if (z->img_comp[which].ha > 3) return stbi__err("bad AC huff","Corrupt JPEG"); - z->order[i] = which; - } - - { - int aa; - z->spec_start = stbi__get8(z->s); - z->spec_end = stbi__get8(z->s); // should be 63, but might be 0 - aa = stbi__get8(z->s); - z->succ_high = (aa >> 4); - z->succ_low = (aa & 15); - if (z->progressive) { - if (z->spec_start > 63 || z->spec_end > 63 || z->spec_start > z->spec_end || z->succ_high > 13 || z->succ_low > 13) - return stbi__err("bad SOS", "Corrupt JPEG"); - } else { - if (z->spec_start != 0) return stbi__err("bad SOS","Corrupt JPEG"); - if (z->succ_high != 0 || z->succ_low != 0) return stbi__err("bad SOS","Corrupt JPEG"); - z->spec_end = 63; - } - } - - return 1; -} - -static int stbi__free_jpeg_components(stbi__jpeg *z, int ncomp, int why) -{ - int i; - for (i=0; i < ncomp; ++i) { - if (z->img_comp[i].raw_data) { - STBI_FREE(z->img_comp[i].raw_data); - z->img_comp[i].raw_data = NULL; - z->img_comp[i].data = NULL; - } - if (z->img_comp[i].raw_coeff) { - STBI_FREE(z->img_comp[i].raw_coeff); - z->img_comp[i].raw_coeff = 0; - z->img_comp[i].coeff = 0; - } - if (z->img_comp[i].linebuf) { - STBI_FREE(z->img_comp[i].linebuf); - z->img_comp[i].linebuf = NULL; - } - } - return why; -} - -static int stbi__process_frame_header(stbi__jpeg *z, int scan) -{ - stbi__context *s = z->s; - int Lf,p,i,q, h_max=1,v_max=1,c; - Lf = stbi__get16be(s); if (Lf < 11) return stbi__err("bad SOF len","Corrupt JPEG"); // JPEG - p = stbi__get8(s); if (p != 8) return stbi__err("only 8-bit","JPEG format not supported: 8-bit only"); // JPEG baseline - s->img_y = stbi__get16be(s); if (s->img_y == 0) return stbi__err("no header height", "JPEG format not supported: delayed height"); // Legal, but we don't handle it--but neither does IJG - s->img_x = stbi__get16be(s); if (s->img_x == 0) return stbi__err("0 width","Corrupt JPEG"); // JPEG requires - if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); - if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); - c = stbi__get8(s); - if (c != 3 && c != 1 && c != 4) return stbi__err("bad component count","Corrupt JPEG"); - s->img_n = c; - for (i=0; i < c; ++i) { - z->img_comp[i].data = NULL; - z->img_comp[i].linebuf = NULL; - } - - if (Lf != 8+3*s->img_n) return stbi__err("bad SOF len","Corrupt JPEG"); - - z->rgb = 0; - for (i=0; i < s->img_n; ++i) { - static const unsigned char rgb[3] = { 'R', 'G', 'B' }; - z->img_comp[i].id = stbi__get8(s); - if (s->img_n == 3 && z->img_comp[i].id == rgb[i]) - ++z->rgb; - q = stbi__get8(s); - z->img_comp[i].h = (q >> 4); if (!z->img_comp[i].h || z->img_comp[i].h > 4) return stbi__err("bad H","Corrupt JPEG"); - z->img_comp[i].v = q & 15; if (!z->img_comp[i].v || z->img_comp[i].v > 4) return stbi__err("bad V","Corrupt JPEG"); - z->img_comp[i].tq = stbi__get8(s); if (z->img_comp[i].tq > 3) return stbi__err("bad TQ","Corrupt JPEG"); - } - - if (scan != STBI__SCAN_load) return 1; - - if (!stbi__mad3sizes_valid(s->img_x, s->img_y, s->img_n, 0)) return stbi__err("too large", "Image too large to decode"); - - for (i=0; i < s->img_n; ++i) { - if (z->img_comp[i].h > h_max) h_max = z->img_comp[i].h; - if (z->img_comp[i].v > v_max) v_max = z->img_comp[i].v; - } - - // check that plane subsampling factors are integer ratios; our resamplers can't deal with fractional ratios - // and I've never seen a non-corrupted JPEG file actually use them - for (i=0; i < s->img_n; ++i) { - if (h_max % z->img_comp[i].h != 0) return stbi__err("bad H","Corrupt JPEG"); - if (v_max % z->img_comp[i].v != 0) return stbi__err("bad V","Corrupt JPEG"); - } - - // compute interleaved mcu info - z->img_h_max = h_max; - z->img_v_max = v_max; - z->img_mcu_w = h_max * 8; - z->img_mcu_h = v_max * 8; - // these sizes can't be more than 17 bits - z->img_mcu_x = (s->img_x + z->img_mcu_w-1) / z->img_mcu_w; - z->img_mcu_y = (s->img_y + z->img_mcu_h-1) / z->img_mcu_h; - - for (i=0; i < s->img_n; ++i) { - // number of effective pixels (e.g. for non-interleaved MCU) - z->img_comp[i].x = (s->img_x * z->img_comp[i].h + h_max-1) / h_max; - z->img_comp[i].y = (s->img_y * z->img_comp[i].v + v_max-1) / v_max; - // to simplify generation, we'll allocate enough memory to decode - // the bogus oversized data from using interleaved MCUs and their - // big blocks (e.g. a 16x16 iMCU on an image of width 33); we won't - // discard the extra data until colorspace conversion - // - // img_mcu_x, img_mcu_y: <=17 bits; comp[i].h and .v are <=4 (checked earlier) - // so these muls can't overflow with 32-bit ints (which we require) - z->img_comp[i].w2 = z->img_mcu_x * z->img_comp[i].h * 8; - z->img_comp[i].h2 = z->img_mcu_y * z->img_comp[i].v * 8; - z->img_comp[i].coeff = 0; - z->img_comp[i].raw_coeff = 0; - z->img_comp[i].linebuf = NULL; - z->img_comp[i].raw_data = stbi__malloc_mad2(z->img_comp[i].w2, z->img_comp[i].h2, 15); - if (z->img_comp[i].raw_data == NULL) - return stbi__free_jpeg_components(z, i+1, stbi__err("outofmem", "Out of memory")); - // align blocks for idct using mmx/sse - z->img_comp[i].data = (stbi_uc*) (((size_t) z->img_comp[i].raw_data + 15) & ~15); - if (z->progressive) { - // w2, h2 are multiples of 8 (see above) - z->img_comp[i].coeff_w = z->img_comp[i].w2 / 8; - z->img_comp[i].coeff_h = z->img_comp[i].h2 / 8; - z->img_comp[i].raw_coeff = stbi__malloc_mad3(z->img_comp[i].w2, z->img_comp[i].h2, sizeof(short), 15); - if (z->img_comp[i].raw_coeff == NULL) - return stbi__free_jpeg_components(z, i+1, stbi__err("outofmem", "Out of memory")); - z->img_comp[i].coeff = (short*) (((size_t) z->img_comp[i].raw_coeff + 15) & ~15); - } - } - - return 1; -} - -// use comparisons since in some cases we handle more than one case (e.g. SOF) -#define stbi__DNL(x) ((x) == 0xdc) -#define stbi__SOI(x) ((x) == 0xd8) -#define stbi__EOI(x) ((x) == 0xd9) -#define stbi__SOF(x) ((x) == 0xc0 || (x) == 0xc1 || (x) == 0xc2) -#define stbi__SOS(x) ((x) == 0xda) - -#define stbi__SOF_progressive(x) ((x) == 0xc2) - -static int stbi__decode_jpeg_header(stbi__jpeg *z, int scan) -{ - int m; - z->jfif = 0; - z->app14_color_transform = -1; // valid values are 0,1,2 - z->marker = STBI__MARKER_none; // initialize cached marker to empty - m = stbi__get_marker(z); - if (!stbi__SOI(m)) return stbi__err("no SOI","Corrupt JPEG"); - if (scan == STBI__SCAN_type) return 1; - m = stbi__get_marker(z); - while (!stbi__SOF(m)) { - if (!stbi__process_marker(z,m)) return 0; - m = stbi__get_marker(z); - while (m == STBI__MARKER_none) { - // some files have extra padding after their blocks, so ok, we'll scan - if (stbi__at_eof(z->s)) return stbi__err("no SOF", "Corrupt JPEG"); - m = stbi__get_marker(z); - } - } - z->progressive = stbi__SOF_progressive(m); - if (!stbi__process_frame_header(z, scan)) return 0; - return 1; -} - -// decode image to YCbCr format -static int stbi__decode_jpeg_image(stbi__jpeg *j) -{ - int m; - for (m = 0; m < 4; m++) { - j->img_comp[m].raw_data = NULL; - j->img_comp[m].raw_coeff = NULL; - } - j->restart_interval = 0; - if (!stbi__decode_jpeg_header(j, STBI__SCAN_load)) return 0; - m = stbi__get_marker(j); - while (!stbi__EOI(m)) { - if (stbi__SOS(m)) { - if (!stbi__process_scan_header(j)) return 0; - if (!stbi__parse_entropy_coded_data(j)) return 0; - if (j->marker == STBI__MARKER_none ) { - // handle 0s at the end of image data from IP Kamera 9060 - while (!stbi__at_eof(j->s)) { - int x = stbi__get8(j->s); - if (x == 255) { - j->marker = stbi__get8(j->s); - break; - } - } - // if we reach eof without hitting a marker, stbi__get_marker() below will fail and we'll eventually return 0 - } - } else if (stbi__DNL(m)) { - int Ld = stbi__get16be(j->s); - stbi__uint32 NL = stbi__get16be(j->s); - if (Ld != 4) return stbi__err("bad DNL len", "Corrupt JPEG"); - if (NL != j->s->img_y) return stbi__err("bad DNL height", "Corrupt JPEG"); - } else { - if (!stbi__process_marker(j, m)) return 0; - } - m = stbi__get_marker(j); - } - if (j->progressive) - stbi__jpeg_finish(j); - return 1; -} - -// static jfif-centered resampling (across block boundaries) - -typedef stbi_uc *(*resample_row_func)(stbi_uc *out, stbi_uc *in0, stbi_uc *in1, - int w, int hs); - -#define stbi__div4(x) ((stbi_uc) ((x) >> 2)) - -static stbi_uc *resample_row_1(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) -{ - STBI_NOTUSED(out); - STBI_NOTUSED(in_far); - STBI_NOTUSED(w); - STBI_NOTUSED(hs); - return in_near; -} - -static stbi_uc* stbi__resample_row_v_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) -{ - // need to generate two samples vertically for every one in input - int i; - STBI_NOTUSED(hs); - for (i=0; i < w; ++i) - out[i] = stbi__div4(3*in_near[i] + in_far[i] + 2); - return out; -} - -static stbi_uc* stbi__resample_row_h_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) -{ - // need to generate two samples horizontally for every one in input - int i; - stbi_uc *input = in_near; - - if (w == 1) { - // if only one sample, can't do any interpolation - out[0] = out[1] = input[0]; - return out; - } - - out[0] = input[0]; - out[1] = stbi__div4(input[0]*3 + input[1] + 2); - for (i=1; i < w-1; ++i) { - int n = 3*input[i]+2; - out[i*2+0] = stbi__div4(n+input[i-1]); - out[i*2+1] = stbi__div4(n+input[i+1]); - } - out[i*2+0] = stbi__div4(input[w-2]*3 + input[w-1] + 2); - out[i*2+1] = input[w-1]; - - STBI_NOTUSED(in_far); - STBI_NOTUSED(hs); - - return out; -} - -#define stbi__div16(x) ((stbi_uc) ((x) >> 4)) - -static stbi_uc *stbi__resample_row_hv_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) -{ - // need to generate 2x2 samples for every one in input - int i,t0,t1; - if (w == 1) { - out[0] = out[1] = stbi__div4(3*in_near[0] + in_far[0] + 2); - return out; - } - - t1 = 3*in_near[0] + in_far[0]; - out[0] = stbi__div4(t1+2); - for (i=1; i < w; ++i) { - t0 = t1; - t1 = 3*in_near[i]+in_far[i]; - out[i*2-1] = stbi__div16(3*t0 + t1 + 8); - out[i*2 ] = stbi__div16(3*t1 + t0 + 8); - } - out[w*2-1] = stbi__div4(t1+2); - - STBI_NOTUSED(hs); - - return out; -} - -#if defined(STBI_SSE2) || defined(STBI_NEON) -static stbi_uc *stbi__resample_row_hv_2_simd(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) -{ - // need to generate 2x2 samples for every one in input - int i=0,t0,t1; - - if (w == 1) { - out[0] = out[1] = stbi__div4(3*in_near[0] + in_far[0] + 2); - return out; - } - - t1 = 3*in_near[0] + in_far[0]; - // process groups of 8 pixels for as long as we can. - // note we can't handle the last pixel in a row in this loop - // because we need to handle the filter boundary conditions. - for (; i < ((w-1) & ~7); i += 8) { -#if defined(STBI_SSE2) - // load and perform the vertical filtering pass - // this uses 3*x + y = 4*x + (y - x) - __m128i zero = _mm_setzero_si128(); - __m128i farb = _mm_loadl_epi64((__m128i *) (in_far + i)); - __m128i nearb = _mm_loadl_epi64((__m128i *) (in_near + i)); - __m128i farw = _mm_unpacklo_epi8(farb, zero); - __m128i nearw = _mm_unpacklo_epi8(nearb, zero); - __m128i diff = _mm_sub_epi16(farw, nearw); - __m128i nears = _mm_slli_epi16(nearw, 2); - __m128i curr = _mm_add_epi16(nears, diff); // current row - - // horizontal filter works the same based on shifted vers of current - // row. "prev" is current row shifted right by 1 pixel; we need to - // insert the previous pixel value (from t1). - // "next" is current row shifted left by 1 pixel, with first pixel - // of next block of 8 pixels added in. - __m128i prv0 = _mm_slli_si128(curr, 2); - __m128i nxt0 = _mm_srli_si128(curr, 2); - __m128i prev = _mm_insert_epi16(prv0, t1, 0); - __m128i next = _mm_insert_epi16(nxt0, 3*in_near[i+8] + in_far[i+8], 7); - - // horizontal filter, polyphase implementation since it's convenient: - // even pixels = 3*cur + prev = cur*4 + (prev - cur) - // odd pixels = 3*cur + next = cur*4 + (next - cur) - // note the shared term. - __m128i bias = _mm_set1_epi16(8); - __m128i curs = _mm_slli_epi16(curr, 2); - __m128i prvd = _mm_sub_epi16(prev, curr); - __m128i nxtd = _mm_sub_epi16(next, curr); - __m128i curb = _mm_add_epi16(curs, bias); - __m128i even = _mm_add_epi16(prvd, curb); - __m128i odd = _mm_add_epi16(nxtd, curb); - - // interleave even and odd pixels, then undo scaling. - __m128i int0 = _mm_unpacklo_epi16(even, odd); - __m128i int1 = _mm_unpackhi_epi16(even, odd); - __m128i de0 = _mm_srli_epi16(int0, 4); - __m128i de1 = _mm_srli_epi16(int1, 4); - - // pack and write output - __m128i outv = _mm_packus_epi16(de0, de1); - _mm_storeu_si128((__m128i *) (out + i*2), outv); -#elif defined(STBI_NEON) - // load and perform the vertical filtering pass - // this uses 3*x + y = 4*x + (y - x) - uint8x8_t farb = vld1_u8(in_far + i); - uint8x8_t nearb = vld1_u8(in_near + i); - int16x8_t diff = vreinterpretq_s16_u16(vsubl_u8(farb, nearb)); - int16x8_t nears = vreinterpretq_s16_u16(vshll_n_u8(nearb, 2)); - int16x8_t curr = vaddq_s16(nears, diff); // current row - - // horizontal filter works the same based on shifted vers of current - // row. "prev" is current row shifted right by 1 pixel; we need to - // insert the previous pixel value (from t1). - // "next" is current row shifted left by 1 pixel, with first pixel - // of next block of 8 pixels added in. - int16x8_t prv0 = vextq_s16(curr, curr, 7); - int16x8_t nxt0 = vextq_s16(curr, curr, 1); - int16x8_t prev = vsetq_lane_s16(t1, prv0, 0); - int16x8_t next = vsetq_lane_s16(3*in_near[i+8] + in_far[i+8], nxt0, 7); - - // horizontal filter, polyphase implementation since it's convenient: - // even pixels = 3*cur + prev = cur*4 + (prev - cur) - // odd pixels = 3*cur + next = cur*4 + (next - cur) - // note the shared term. - int16x8_t curs = vshlq_n_s16(curr, 2); - int16x8_t prvd = vsubq_s16(prev, curr); - int16x8_t nxtd = vsubq_s16(next, curr); - int16x8_t even = vaddq_s16(curs, prvd); - int16x8_t odd = vaddq_s16(curs, nxtd); - - // undo scaling and round, then store with even/odd phases interleaved - uint8x8x2_t o; - o.val[0] = vqrshrun_n_s16(even, 4); - o.val[1] = vqrshrun_n_s16(odd, 4); - vst2_u8(out + i*2, o); -#endif - - // "previous" value for next iter - t1 = 3*in_near[i+7] + in_far[i+7]; - } - - t0 = t1; - t1 = 3*in_near[i] + in_far[i]; - out[i*2] = stbi__div16(3*t1 + t0 + 8); - - for (++i; i < w; ++i) { - t0 = t1; - t1 = 3*in_near[i]+in_far[i]; - out[i*2-1] = stbi__div16(3*t0 + t1 + 8); - out[i*2 ] = stbi__div16(3*t1 + t0 + 8); - } - out[w*2-1] = stbi__div4(t1+2); - - STBI_NOTUSED(hs); - - return out; -} -#endif - -static stbi_uc *stbi__resample_row_generic(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) -{ - // resample with nearest-neighbor - int i,j; - STBI_NOTUSED(in_far); - for (i=0; i < w; ++i) - for (j=0; j < hs; ++j) - out[i*hs+j] = in_near[i]; - return out; -} - -// this is a reduced-precision calculation of YCbCr-to-RGB introduced -// to make sure the code produces the same results in both SIMD and scalar -#define stbi__float2fixed(x) (((int) ((x) * 4096.0f + 0.5f)) << 8) -static void stbi__YCbCr_to_RGB_row(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step) -{ - int i; - for (i=0; i < count; ++i) { - int y_fixed = (y[i] << 20) + (1<<19); // rounding - int r,g,b; - int cr = pcr[i] - 128; - int cb = pcb[i] - 128; - r = y_fixed + cr* stbi__float2fixed(1.40200f); - g = y_fixed + (cr*-stbi__float2fixed(0.71414f)) + ((cb*-stbi__float2fixed(0.34414f)) & 0xffff0000); - b = y_fixed + cb* stbi__float2fixed(1.77200f); - r >>= 20; - g >>= 20; - b >>= 20; - if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; } - if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; } - if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; } - out[0] = (stbi_uc)r; - out[1] = (stbi_uc)g; - out[2] = (stbi_uc)b; - out[3] = 255; - out += step; - } -} - -#if defined(STBI_SSE2) || defined(STBI_NEON) -static void stbi__YCbCr_to_RGB_simd(stbi_uc *out, stbi_uc const *y, stbi_uc const *pcb, stbi_uc const *pcr, int count, int step) -{ - int i = 0; - -#ifdef STBI_SSE2 - // step == 3 is pretty ugly on the final interleave, and i'm not convinced - // it's useful in practice (you wouldn't use it for textures, for example). - // so just accelerate step == 4 case. - if (step == 4) { - // this is a fairly straightforward implementation and not super-optimized. - __m128i signflip = _mm_set1_epi8(-0x80); - __m128i cr_const0 = _mm_set1_epi16( (short) ( 1.40200f*4096.0f+0.5f)); - __m128i cr_const1 = _mm_set1_epi16( - (short) ( 0.71414f*4096.0f+0.5f)); - __m128i cb_const0 = _mm_set1_epi16( - (short) ( 0.34414f*4096.0f+0.5f)); - __m128i cb_const1 = _mm_set1_epi16( (short) ( 1.77200f*4096.0f+0.5f)); - __m128i y_bias = _mm_set1_epi8((char) (unsigned char) 128); - __m128i xw = _mm_set1_epi16(255); // alpha channel - - for (; i+7 < count; i += 8) { - // load - __m128i y_bytes = _mm_loadl_epi64((__m128i *) (y+i)); - __m128i cr_bytes = _mm_loadl_epi64((__m128i *) (pcr+i)); - __m128i cb_bytes = _mm_loadl_epi64((__m128i *) (pcb+i)); - __m128i cr_biased = _mm_xor_si128(cr_bytes, signflip); // -128 - __m128i cb_biased = _mm_xor_si128(cb_bytes, signflip); // -128 - - // unpack to short (and left-shift cr, cb by 8) - __m128i yw = _mm_unpacklo_epi8(y_bias, y_bytes); - __m128i crw = _mm_unpacklo_epi8(_mm_setzero_si128(), cr_biased); - __m128i cbw = _mm_unpacklo_epi8(_mm_setzero_si128(), cb_biased); - - // color transform - __m128i yws = _mm_srli_epi16(yw, 4); - __m128i cr0 = _mm_mulhi_epi16(cr_const0, crw); - __m128i cb0 = _mm_mulhi_epi16(cb_const0, cbw); - __m128i cb1 = _mm_mulhi_epi16(cbw, cb_const1); - __m128i cr1 = _mm_mulhi_epi16(crw, cr_const1); - __m128i rws = _mm_add_epi16(cr0, yws); - __m128i gwt = _mm_add_epi16(cb0, yws); - __m128i bws = _mm_add_epi16(yws, cb1); - __m128i gws = _mm_add_epi16(gwt, cr1); - - // descale - __m128i rw = _mm_srai_epi16(rws, 4); - __m128i bw = _mm_srai_epi16(bws, 4); - __m128i gw = _mm_srai_epi16(gws, 4); - - // back to byte, set up for transpose - __m128i brb = _mm_packus_epi16(rw, bw); - __m128i gxb = _mm_packus_epi16(gw, xw); - - // transpose to interleave channels - __m128i t0 = _mm_unpacklo_epi8(brb, gxb); - __m128i t1 = _mm_unpackhi_epi8(brb, gxb); - __m128i o0 = _mm_unpacklo_epi16(t0, t1); - __m128i o1 = _mm_unpackhi_epi16(t0, t1); - - // store - _mm_storeu_si128((__m128i *) (out + 0), o0); - _mm_storeu_si128((__m128i *) (out + 16), o1); - out += 32; - } - } -#endif - -#ifdef STBI_NEON - // in this version, step=3 support would be easy to add. but is there demand? - if (step == 4) { - // this is a fairly straightforward implementation and not super-optimized. - uint8x8_t signflip = vdup_n_u8(0x80); - int16x8_t cr_const0 = vdupq_n_s16( (short) ( 1.40200f*4096.0f+0.5f)); - int16x8_t cr_const1 = vdupq_n_s16( - (short) ( 0.71414f*4096.0f+0.5f)); - int16x8_t cb_const0 = vdupq_n_s16( - (short) ( 0.34414f*4096.0f+0.5f)); - int16x8_t cb_const1 = vdupq_n_s16( (short) ( 1.77200f*4096.0f+0.5f)); - - for (; i+7 < count; i += 8) { - // load - uint8x8_t y_bytes = vld1_u8(y + i); - uint8x8_t cr_bytes = vld1_u8(pcr + i); - uint8x8_t cb_bytes = vld1_u8(pcb + i); - int8x8_t cr_biased = vreinterpret_s8_u8(vsub_u8(cr_bytes, signflip)); - int8x8_t cb_biased = vreinterpret_s8_u8(vsub_u8(cb_bytes, signflip)); - - // expand to s16 - int16x8_t yws = vreinterpretq_s16_u16(vshll_n_u8(y_bytes, 4)); - int16x8_t crw = vshll_n_s8(cr_biased, 7); - int16x8_t cbw = vshll_n_s8(cb_biased, 7); - - // color transform - int16x8_t cr0 = vqdmulhq_s16(crw, cr_const0); - int16x8_t cb0 = vqdmulhq_s16(cbw, cb_const0); - int16x8_t cr1 = vqdmulhq_s16(crw, cr_const1); - int16x8_t cb1 = vqdmulhq_s16(cbw, cb_const1); - int16x8_t rws = vaddq_s16(yws, cr0); - int16x8_t gws = vaddq_s16(vaddq_s16(yws, cb0), cr1); - int16x8_t bws = vaddq_s16(yws, cb1); - - // undo scaling, round, convert to byte - uint8x8x4_t o; - o.val[0] = vqrshrun_n_s16(rws, 4); - o.val[1] = vqrshrun_n_s16(gws, 4); - o.val[2] = vqrshrun_n_s16(bws, 4); - o.val[3] = vdup_n_u8(255); - - // store, interleaving r/g/b/a - vst4_u8(out, o); - out += 8*4; - } - } -#endif - - for (; i < count; ++i) { - int y_fixed = (y[i] << 20) + (1<<19); // rounding - int r,g,b; - int cr = pcr[i] - 128; - int cb = pcb[i] - 128; - r = y_fixed + cr* stbi__float2fixed(1.40200f); - g = y_fixed + cr*-stbi__float2fixed(0.71414f) + ((cb*-stbi__float2fixed(0.34414f)) & 0xffff0000); - b = y_fixed + cb* stbi__float2fixed(1.77200f); - r >>= 20; - g >>= 20; - b >>= 20; - if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; } - if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; } - if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; } - out[0] = (stbi_uc)r; - out[1] = (stbi_uc)g; - out[2] = (stbi_uc)b; - out[3] = 255; - out += step; - } -} -#endif - -// set up the kernels -static void stbi__setup_jpeg(stbi__jpeg *j) -{ - j->idct_block_kernel = stbi__idct_block; - j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_row; - j->resample_row_hv_2_kernel = stbi__resample_row_hv_2; - -#ifdef STBI_SSE2 - if (stbi__sse2_available()) { - j->idct_block_kernel = stbi__idct_simd; - j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd; - j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd; - } -#endif - -#ifdef STBI_NEON - j->idct_block_kernel = stbi__idct_simd; - j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd; - j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd; -#endif -} - -// clean up the temporary component buffers -static void stbi__cleanup_jpeg(stbi__jpeg *j) -{ - stbi__free_jpeg_components(j, j->s->img_n, 0); -} - -typedef struct -{ - resample_row_func resample; - stbi_uc *line0,*line1; - int hs,vs; // expansion factor in each axis - int w_lores; // horizontal pixels pre-expansion - int ystep; // how far through vertical expansion we are - int ypos; // which pre-expansion row we're on -} stbi__resample; - -// fast 0..255 * 0..255 => 0..255 rounded multiplication -static stbi_uc stbi__blinn_8x8(stbi_uc x, stbi_uc y) -{ - unsigned int t = x*y + 128; - return (stbi_uc) ((t + (t >>8)) >> 8); -} - -static stbi_uc *load_jpeg_image(stbi__jpeg *z, int *out_x, int *out_y, int *comp, int req_comp) -{ - int n, decode_n, is_rgb; - z->s->img_n = 0; // make stbi__cleanup_jpeg safe - - // validate req_comp - if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error"); - - // load a jpeg image from whichever source, but leave in YCbCr format - if (!stbi__decode_jpeg_image(z)) { stbi__cleanup_jpeg(z); return NULL; } - - // determine actual number of components to generate - n = req_comp ? req_comp : z->s->img_n >= 3 ? 3 : 1; - - is_rgb = z->s->img_n == 3 && (z->rgb == 3 || (z->app14_color_transform == 0 && !z->jfif)); - - if (z->s->img_n == 3 && n < 3 && !is_rgb) - decode_n = 1; - else - decode_n = z->s->img_n; - - // nothing to do if no components requested; check this now to avoid - // accessing uninitialized coutput[0] later - if (decode_n <= 0) { stbi__cleanup_jpeg(z); return NULL; } - - // resample and color-convert - { - int k; - unsigned int i,j; - stbi_uc *output; - stbi_uc *coutput[4] = { NULL, NULL, NULL, NULL }; - - stbi__resample res_comp[4]; - - for (k=0; k < decode_n; ++k) { - stbi__resample *r = &res_comp[k]; - - // allocate line buffer big enough for upsampling off the edges - // with upsample factor of 4 - z->img_comp[k].linebuf = (stbi_uc *) stbi__malloc(z->s->img_x + 3); - if (!z->img_comp[k].linebuf) { stbi__cleanup_jpeg(z); return stbi__errpuc("outofmem", "Out of memory"); } - - r->hs = z->img_h_max / z->img_comp[k].h; - r->vs = z->img_v_max / z->img_comp[k].v; - r->ystep = r->vs >> 1; - r->w_lores = (z->s->img_x + r->hs-1) / r->hs; - r->ypos = 0; - r->line0 = r->line1 = z->img_comp[k].data; - - if (r->hs == 1 && r->vs == 1) r->resample = resample_row_1; - else if (r->hs == 1 && r->vs == 2) r->resample = stbi__resample_row_v_2; - else if (r->hs == 2 && r->vs == 1) r->resample = stbi__resample_row_h_2; - else if (r->hs == 2 && r->vs == 2) r->resample = z->resample_row_hv_2_kernel; - else r->resample = stbi__resample_row_generic; - } - - // can't error after this so, this is safe - output = (stbi_uc *) stbi__malloc_mad3(n, z->s->img_x, z->s->img_y, 1); - if (!output) { stbi__cleanup_jpeg(z); return stbi__errpuc("outofmem", "Out of memory"); } - - // now go ahead and resample - for (j=0; j < z->s->img_y; ++j) { - stbi_uc *out = output + n * z->s->img_x * j; - for (k=0; k < decode_n; ++k) { - stbi__resample *r = &res_comp[k]; - int y_bot = r->ystep >= (r->vs >> 1); - coutput[k] = r->resample(z->img_comp[k].linebuf, - y_bot ? r->line1 : r->line0, - y_bot ? r->line0 : r->line1, - r->w_lores, r->hs); - if (++r->ystep >= r->vs) { - r->ystep = 0; - r->line0 = r->line1; - if (++r->ypos < z->img_comp[k].y) - r->line1 += z->img_comp[k].w2; - } - } - if (n >= 3) { - stbi_uc *y = coutput[0]; - if (z->s->img_n == 3) { - if (is_rgb) { - for (i=0; i < z->s->img_x; ++i) { - out[0] = y[i]; - out[1] = coutput[1][i]; - out[2] = coutput[2][i]; - out[3] = 255; - out += n; - } - } else { - z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); - } - } else if (z->s->img_n == 4) { - if (z->app14_color_transform == 0) { // CMYK - for (i=0; i < z->s->img_x; ++i) { - stbi_uc m = coutput[3][i]; - out[0] = stbi__blinn_8x8(coutput[0][i], m); - out[1] = stbi__blinn_8x8(coutput[1][i], m); - out[2] = stbi__blinn_8x8(coutput[2][i], m); - out[3] = 255; - out += n; - } - } else if (z->app14_color_transform == 2) { // YCCK - z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); - for (i=0; i < z->s->img_x; ++i) { - stbi_uc m = coutput[3][i]; - out[0] = stbi__blinn_8x8(255 - out[0], m); - out[1] = stbi__blinn_8x8(255 - out[1], m); - out[2] = stbi__blinn_8x8(255 - out[2], m); - out += n; - } - } else { // YCbCr + alpha? Ignore the fourth channel for now - z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); - } - } else - for (i=0; i < z->s->img_x; ++i) { - out[0] = out[1] = out[2] = y[i]; - out[3] = 255; // not used if n==3 - out += n; - } - } else { - if (is_rgb) { - if (n == 1) - for (i=0; i < z->s->img_x; ++i) - *out++ = stbi__compute_y(coutput[0][i], coutput[1][i], coutput[2][i]); - else { - for (i=0; i < z->s->img_x; ++i, out += 2) { - out[0] = stbi__compute_y(coutput[0][i], coutput[1][i], coutput[2][i]); - out[1] = 255; - } - } - } else if (z->s->img_n == 4 && z->app14_color_transform == 0) { - for (i=0; i < z->s->img_x; ++i) { - stbi_uc m = coutput[3][i]; - stbi_uc r = stbi__blinn_8x8(coutput[0][i], m); - stbi_uc g = stbi__blinn_8x8(coutput[1][i], m); - stbi_uc b = stbi__blinn_8x8(coutput[2][i], m); - out[0] = stbi__compute_y(r, g, b); - out[1] = 255; - out += n; - } - } else if (z->s->img_n == 4 && z->app14_color_transform == 2) { - for (i=0; i < z->s->img_x; ++i) { - out[0] = stbi__blinn_8x8(255 - coutput[0][i], coutput[3][i]); - out[1] = 255; - out += n; - } - } else { - stbi_uc *y = coutput[0]; - if (n == 1) - for (i=0; i < z->s->img_x; ++i) out[i] = y[i]; - else - for (i=0; i < z->s->img_x; ++i) { *out++ = y[i]; *out++ = 255; } - } - } - } - stbi__cleanup_jpeg(z); - *out_x = z->s->img_x; - *out_y = z->s->img_y; - if (comp) *comp = z->s->img_n >= 3 ? 3 : 1; // report original components, not output - return output; - } -} - -static void *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) -{ - unsigned char* result; - stbi__jpeg* j = (stbi__jpeg*) stbi__malloc(sizeof(stbi__jpeg)); - if (!j) return stbi__errpuc("outofmem", "Out of memory"); - STBI_NOTUSED(ri); - j->s = s; - stbi__setup_jpeg(j); - result = load_jpeg_image(j, x,y,comp,req_comp); - STBI_FREE(j); - return result; -} - -static int stbi__jpeg_test(stbi__context *s) -{ - int r; - stbi__jpeg* j = (stbi__jpeg*)stbi__malloc(sizeof(stbi__jpeg)); - if (!j) return stbi__err("outofmem", "Out of memory"); - j->s = s; - stbi__setup_jpeg(j); - r = stbi__decode_jpeg_header(j, STBI__SCAN_type); - stbi__rewind(s); - STBI_FREE(j); - return r; -} - -static int stbi__jpeg_info_raw(stbi__jpeg *j, int *x, int *y, int *comp) -{ - if (!stbi__decode_jpeg_header(j, STBI__SCAN_header)) { - stbi__rewind( j->s ); - return 0; - } - if (x) *x = j->s->img_x; - if (y) *y = j->s->img_y; - if (comp) *comp = j->s->img_n >= 3 ? 3 : 1; - return 1; -} - -static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp) -{ - int result; - stbi__jpeg* j = (stbi__jpeg*) (stbi__malloc(sizeof(stbi__jpeg))); - if (!j) return stbi__err("outofmem", "Out of memory"); - j->s = s; - result = stbi__jpeg_info_raw(j, x, y, comp); - STBI_FREE(j); - return result; -} -#endif - -// public domain zlib decode v0.2 Sean Barrett 2006-11-18 -// simple implementation -// - all input must be provided in an upfront buffer -// - all output is written to a single output buffer (can malloc/realloc) -// performance -// - fast huffman - -#ifndef STBI_NO_ZLIB - -// fast-way is faster to check than jpeg huffman, but slow way is slower -#define STBI__ZFAST_BITS 9 // accelerate all cases in default tables -#define STBI__ZFAST_MASK ((1 << STBI__ZFAST_BITS) - 1) -#define STBI__ZNSYMS 288 // number of symbols in literal/length alphabet - -// zlib-style huffman encoding -// (jpegs packs from left, zlib from right, so can't share code) -typedef struct -{ - stbi__uint16 fast[1 << STBI__ZFAST_BITS]; - stbi__uint16 firstcode[16]; - int maxcode[17]; - stbi__uint16 firstsymbol[16]; - stbi_uc size[STBI__ZNSYMS]; - stbi__uint16 value[STBI__ZNSYMS]; -} stbi__zhuffman; - -stbi_inline static int stbi__bitreverse16(int n) -{ - n = ((n & 0xAAAA) >> 1) | ((n & 0x5555) << 1); - n = ((n & 0xCCCC) >> 2) | ((n & 0x3333) << 2); - n = ((n & 0xF0F0) >> 4) | ((n & 0x0F0F) << 4); - n = ((n & 0xFF00) >> 8) | ((n & 0x00FF) << 8); - return n; -} - -stbi_inline static int stbi__bit_reverse(int v, int bits) -{ - STBI_ASSERT(bits <= 16); - // to bit reverse n bits, reverse 16 and shift - // e.g. 11 bits, bit reverse and shift away 5 - return stbi__bitreverse16(v) >> (16-bits); -} - -static int stbi__zbuild_huffman(stbi__zhuffman *z, const stbi_uc *sizelist, int num) -{ - int i,k=0; - int code, next_code[16], sizes[17]; - - // DEFLATE spec for generating codes - memset(sizes, 0, sizeof(sizes)); - memset(z->fast, 0, sizeof(z->fast)); - for (i=0; i < num; ++i) - ++sizes[sizelist[i]]; - sizes[0] = 0; - for (i=1; i < 16; ++i) - if (sizes[i] > (1 << i)) - return stbi__err("bad sizes", "Corrupt PNG"); - code = 0; - for (i=1; i < 16; ++i) { - next_code[i] = code; - z->firstcode[i] = (stbi__uint16) code; - z->firstsymbol[i] = (stbi__uint16) k; - code = (code + sizes[i]); - if (sizes[i]) - if (code-1 >= (1 << i)) return stbi__err("bad codelengths","Corrupt PNG"); - z->maxcode[i] = code << (16-i); // preshift for inner loop - code <<= 1; - k += sizes[i]; - } - z->maxcode[16] = 0x10000; // sentinel - for (i=0; i < num; ++i) { - int s = sizelist[i]; - if (s) { - int c = next_code[s] - z->firstcode[s] + z->firstsymbol[s]; - stbi__uint16 fastv = (stbi__uint16) ((s << 9) | i); - z->size [c] = (stbi_uc ) s; - z->value[c] = (stbi__uint16) i; - if (s <= STBI__ZFAST_BITS) { - int j = stbi__bit_reverse(next_code[s],s); - while (j < (1 << STBI__ZFAST_BITS)) { - z->fast[j] = fastv; - j += (1 << s); - } - } - ++next_code[s]; - } - } - return 1; -} - -// zlib-from-memory implementation for PNG reading -// because PNG allows splitting the zlib stream arbitrarily, -// and it's annoying structurally to have PNG call ZLIB call PNG, -// we require PNG read all the IDATs and combine them into a single -// memory buffer - -typedef struct -{ - stbi_uc *zbuffer, *zbuffer_end; - int num_bits; - stbi__uint32 code_buffer; - - char *zout; - char *zout_start; - char *zout_end; - int z_expandable; - - stbi__zhuffman z_length, z_distance; -} stbi__zbuf; - -stbi_inline static int stbi__zeof(stbi__zbuf *z) -{ - return (z->zbuffer >= z->zbuffer_end); -} - -stbi_inline static stbi_uc stbi__zget8(stbi__zbuf *z) -{ - return stbi__zeof(z) ? 0 : *z->zbuffer++; -} - -static void stbi__fill_bits(stbi__zbuf *z) -{ - do { - if (z->code_buffer >= (1U << z->num_bits)) { - z->zbuffer = z->zbuffer_end; /* treat this as EOF so we fail. */ - return; - } - z->code_buffer |= (unsigned int) stbi__zget8(z) << z->num_bits; - z->num_bits += 8; - } while (z->num_bits <= 24); -} - -stbi_inline static unsigned int stbi__zreceive(stbi__zbuf *z, int n) -{ - unsigned int k; - if (z->num_bits < n) stbi__fill_bits(z); - k = z->code_buffer & ((1 << n) - 1); - z->code_buffer >>= n; - z->num_bits -= n; - return k; -} - -static int stbi__zhuffman_decode_slowpath(stbi__zbuf *a, stbi__zhuffman *z) -{ - int b,s,k; - // not resolved by fast table, so compute it the slow way - // use jpeg approach, which requires MSbits at top - k = stbi__bit_reverse(a->code_buffer, 16); - for (s=STBI__ZFAST_BITS+1; ; ++s) - if (k < z->maxcode[s]) - break; - if (s >= 16) return -1; // invalid code! - // code size is s, so: - b = (k >> (16-s)) - z->firstcode[s] + z->firstsymbol[s]; - if (b >= STBI__ZNSYMS) return -1; // some data was corrupt somewhere! - if (z->size[b] != s) return -1; // was originally an assert, but report failure instead. - a->code_buffer >>= s; - a->num_bits -= s; - return z->value[b]; -} - -stbi_inline static int stbi__zhuffman_decode(stbi__zbuf *a, stbi__zhuffman *z) -{ - int b,s; - if (a->num_bits < 16) { - if (stbi__zeof(a)) { - return -1; /* report error for unexpected end of data. */ - } - stbi__fill_bits(a); - } - b = z->fast[a->code_buffer & STBI__ZFAST_MASK]; - if (b) { - s = b >> 9; - a->code_buffer >>= s; - a->num_bits -= s; - return b & 511; - } - return stbi__zhuffman_decode_slowpath(a, z); -} - -static int stbi__zexpand(stbi__zbuf *z, char *zout, int n) // need to make room for n bytes -{ - char *q; - unsigned int cur, limit, old_limit; - z->zout = zout; - if (!z->z_expandable) return stbi__err("output buffer limit","Corrupt PNG"); - cur = (unsigned int) (z->zout - z->zout_start); - limit = old_limit = (unsigned) (z->zout_end - z->zout_start); - if (UINT_MAX - cur < (unsigned) n) return stbi__err("outofmem", "Out of memory"); - while (cur + n > limit) { - if(limit > UINT_MAX / 2) return stbi__err("outofmem", "Out of memory"); - limit *= 2; - } - q = (char *) STBI_REALLOC_SIZED(z->zout_start, old_limit, limit); - STBI_NOTUSED(old_limit); - if (q == NULL) return stbi__err("outofmem", "Out of memory"); - z->zout_start = q; - z->zout = q + cur; - z->zout_end = q + limit; - return 1; -} - -static const int stbi__zlength_base[31] = { - 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 }; - -static const int stbi__zlength_extra[31]= -{ 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,0,0 }; - -static const int stbi__zdist_base[32] = { 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,0,0}; - -static const int stbi__zdist_extra[32] = -{ 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}; - -static int stbi__parse_huffman_block(stbi__zbuf *a) -{ - char *zout = a->zout; - for(;;) { - int z = stbi__zhuffman_decode(a, &a->z_length); - if (z < 256) { - if (z < 0) return stbi__err("bad huffman code","Corrupt PNG"); // error in huffman codes - if (zout >= a->zout_end) { - if (!stbi__zexpand(a, zout, 1)) return 0; - zout = a->zout; - } - *zout++ = (char) z; - } else { - stbi_uc *p; - int len,dist; - if (z == 256) { - a->zout = zout; - return 1; - } - z -= 257; - len = stbi__zlength_base[z]; - if (stbi__zlength_extra[z]) len += stbi__zreceive(a, stbi__zlength_extra[z]); - z = stbi__zhuffman_decode(a, &a->z_distance); - if (z < 0) return stbi__err("bad huffman code","Corrupt PNG"); - dist = stbi__zdist_base[z]; - if (stbi__zdist_extra[z]) dist += stbi__zreceive(a, stbi__zdist_extra[z]); - if (zout - a->zout_start < dist) return stbi__err("bad dist","Corrupt PNG"); - if (zout + len > a->zout_end) { - if (!stbi__zexpand(a, zout, len)) return 0; - zout = a->zout; - } - p = (stbi_uc *) (zout - dist); - if (dist == 1) { // run of one byte; common in images. - stbi_uc v = *p; - if (len) { do *zout++ = v; while (--len); } - } else { - if (len) { do *zout++ = *p++; while (--len); } - } - } - } -} - -static int stbi__compute_huffman_codes(stbi__zbuf *a) -{ - static const stbi_uc length_dezigzag[19] = { 16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15 }; - stbi__zhuffman z_codelength; - stbi_uc lencodes[286+32+137];//padding for maximum single op - stbi_uc codelength_sizes[19]; - int i,n; - - int hlit = stbi__zreceive(a,5) + 257; - int hdist = stbi__zreceive(a,5) + 1; - int hclen = stbi__zreceive(a,4) + 4; - int ntot = hlit + hdist; - - memset(codelength_sizes, 0, sizeof(codelength_sizes)); - for (i=0; i < hclen; ++i) { - int s = stbi__zreceive(a,3); - codelength_sizes[length_dezigzag[i]] = (stbi_uc) s; - } - if (!stbi__zbuild_huffman(&z_codelength, codelength_sizes, 19)) return 0; - - n = 0; - while (n < ntot) { - int c = stbi__zhuffman_decode(a, &z_codelength); - if (c < 0 || c >= 19) return stbi__err("bad codelengths", "Corrupt PNG"); - if (c < 16) - lencodes[n++] = (stbi_uc) c; - else { - stbi_uc fill = 0; - if (c == 16) { - c = stbi__zreceive(a,2)+3; - if (n == 0) return stbi__err("bad codelengths", "Corrupt PNG"); - fill = lencodes[n-1]; - } else if (c == 17) { - c = stbi__zreceive(a,3)+3; - } else if (c == 18) { - c = stbi__zreceive(a,7)+11; - } else { - return stbi__err("bad codelengths", "Corrupt PNG"); - } - if (ntot - n < c) return stbi__err("bad codelengths", "Corrupt PNG"); - memset(lencodes+n, fill, c); - n += c; - } - } - if (n != ntot) return stbi__err("bad codelengths","Corrupt PNG"); - if (!stbi__zbuild_huffman(&a->z_length, lencodes, hlit)) return 0; - if (!stbi__zbuild_huffman(&a->z_distance, lencodes+hlit, hdist)) return 0; - return 1; -} - -static int stbi__parse_uncompressed_block(stbi__zbuf *a) -{ - stbi_uc header[4]; - int len,nlen,k; - if (a->num_bits & 7) - stbi__zreceive(a, a->num_bits & 7); // discard - // drain the bit-packed data into header - k = 0; - while (a->num_bits > 0) { - header[k++] = (stbi_uc) (a->code_buffer & 255); // suppress MSVC run-time check - a->code_buffer >>= 8; - a->num_bits -= 8; - } - if (a->num_bits < 0) return stbi__err("zlib corrupt","Corrupt PNG"); - // now fill header the normal way - while (k < 4) - header[k++] = stbi__zget8(a); - len = header[1] * 256 + header[0]; - nlen = header[3] * 256 + header[2]; - if (nlen != (len ^ 0xffff)) return stbi__err("zlib corrupt","Corrupt PNG"); - if (a->zbuffer + len > a->zbuffer_end) return stbi__err("read past buffer","Corrupt PNG"); - if (a->zout + len > a->zout_end) - if (!stbi__zexpand(a, a->zout, len)) return 0; - memcpy(a->zout, a->zbuffer, len); - a->zbuffer += len; - a->zout += len; - return 1; -} - -static int stbi__parse_zlib_header(stbi__zbuf *a) -{ - int cmf = stbi__zget8(a); - int cm = cmf & 15; - /* int cinfo = cmf >> 4; */ - int flg = stbi__zget8(a); - if (stbi__zeof(a)) return stbi__err("bad zlib header","Corrupt PNG"); // zlib spec - if ((cmf*256+flg) % 31 != 0) return stbi__err("bad zlib header","Corrupt PNG"); // zlib spec - if (flg & 32) return stbi__err("no preset dict","Corrupt PNG"); // preset dictionary not allowed in png - if (cm != 8) return stbi__err("bad compression","Corrupt PNG"); // DEFLATE required for png - // window = 1 << (8 + cinfo)... but who cares, we fully buffer output - return 1; -} - -static const stbi_uc stbi__zdefault_length[STBI__ZNSYMS] = -{ - 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, - 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, - 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, - 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, - 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 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, - 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,8,8,8,8,8,8 -}; -static const stbi_uc stbi__zdefault_distance[32] = -{ - 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 -}; -/* -Init algorithm: -{ - int i; // use <= to match clearly with spec - for (i=0; i <= 143; ++i) stbi__zdefault_length[i] = 8; - for ( ; i <= 255; ++i) stbi__zdefault_length[i] = 9; - for ( ; i <= 279; ++i) stbi__zdefault_length[i] = 7; - for ( ; i <= 287; ++i) stbi__zdefault_length[i] = 8; - - for (i=0; i <= 31; ++i) stbi__zdefault_distance[i] = 5; -} -*/ - -static int stbi__parse_zlib(stbi__zbuf *a, int parse_header) -{ - int final, type; - if (parse_header) - if (!stbi__parse_zlib_header(a)) return 0; - a->num_bits = 0; - a->code_buffer = 0; - do { - final = stbi__zreceive(a,1); - type = stbi__zreceive(a,2); - if (type == 0) { - if (!stbi__parse_uncompressed_block(a)) return 0; - } else if (type == 3) { - return 0; - } else { - if (type == 1) { - // use fixed code lengths - if (!stbi__zbuild_huffman(&a->z_length , stbi__zdefault_length , STBI__ZNSYMS)) return 0; - if (!stbi__zbuild_huffman(&a->z_distance, stbi__zdefault_distance, 32)) return 0; - } else { - if (!stbi__compute_huffman_codes(a)) return 0; - } - if (!stbi__parse_huffman_block(a)) return 0; - } - } while (!final); - return 1; -} - -static int stbi__do_zlib(stbi__zbuf *a, char *obuf, int olen, int exp, int parse_header) -{ - a->zout_start = obuf; - a->zout = obuf; - a->zout_end = obuf + olen; - a->z_expandable = exp; - - return stbi__parse_zlib(a, parse_header); -} - -STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen) -{ - stbi__zbuf a; - char *p = (char *) stbi__malloc(initial_size); - if (p == NULL) return NULL; - a.zbuffer = (stbi_uc *) buffer; - a.zbuffer_end = (stbi_uc *) buffer + len; - if (stbi__do_zlib(&a, p, initial_size, 1, 1)) { - if (outlen) *outlen = (int) (a.zout - a.zout_start); - return a.zout_start; - } else { - STBI_FREE(a.zout_start); - return NULL; - } -} - -STBIDEF char *stbi_zlib_decode_malloc(char const *buffer, int len, int *outlen) -{ - return stbi_zlib_decode_malloc_guesssize(buffer, len, 16384, outlen); -} - -STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, int len, int initial_size, int *outlen, int parse_header) -{ - stbi__zbuf a; - char *p = (char *) stbi__malloc(initial_size); - if (p == NULL) return NULL; - a.zbuffer = (stbi_uc *) buffer; - a.zbuffer_end = (stbi_uc *) buffer + len; - if (stbi__do_zlib(&a, p, initial_size, 1, parse_header)) { - if (outlen) *outlen = (int) (a.zout - a.zout_start); - return a.zout_start; - } else { - STBI_FREE(a.zout_start); - return NULL; - } -} - -STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, char const *ibuffer, int ilen) -{ - stbi__zbuf a; - a.zbuffer = (stbi_uc *) ibuffer; - a.zbuffer_end = (stbi_uc *) ibuffer + ilen; - if (stbi__do_zlib(&a, obuffer, olen, 0, 1)) - return (int) (a.zout - a.zout_start); - else - return -1; -} - -STBIDEF char *stbi_zlib_decode_noheader_malloc(char const *buffer, int len, int *outlen) -{ - stbi__zbuf a; - char *p = (char *) stbi__malloc(16384); - if (p == NULL) return NULL; - a.zbuffer = (stbi_uc *) buffer; - a.zbuffer_end = (stbi_uc *) buffer+len; - if (stbi__do_zlib(&a, p, 16384, 1, 0)) { - if (outlen) *outlen = (int) (a.zout - a.zout_start); - return a.zout_start; - } else { - STBI_FREE(a.zout_start); - return NULL; - } -} - -STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen) -{ - stbi__zbuf a; - a.zbuffer = (stbi_uc *) ibuffer; - a.zbuffer_end = (stbi_uc *) ibuffer + ilen; - if (stbi__do_zlib(&a, obuffer, olen, 0, 0)) - return (int) (a.zout - a.zout_start); - else - return -1; -} -#endif - -// public domain "baseline" PNG decoder v0.10 Sean Barrett 2006-11-18 -// simple implementation -// - only 8-bit samples -// - no CRC checking -// - allocates lots of intermediate memory -// - avoids problem of streaming data between subsystems -// - avoids explicit window management -// performance -// - uses stb_zlib, a PD zlib implementation with fast huffman decoding - -#ifndef STBI_NO_PNG -typedef struct -{ - stbi__uint32 length; - stbi__uint32 type; -} stbi__pngchunk; - -static stbi__pngchunk stbi__get_chunk_header(stbi__context *s) -{ - stbi__pngchunk c; - c.length = stbi__get32be(s); - c.type = stbi__get32be(s); - return c; -} - -static int stbi__check_png_header(stbi__context *s) -{ - static const stbi_uc png_sig[8] = { 137,80,78,71,13,10,26,10 }; - int i; - for (i=0; i < 8; ++i) - if (stbi__get8(s) != png_sig[i]) return stbi__err("bad png sig","Not a PNG"); - return 1; -} - -typedef struct -{ - stbi__context *s; - stbi_uc *idata, *expanded, *out; - int depth; -} stbi__png; - - -enum { - STBI__F_none=0, - STBI__F_sub=1, - STBI__F_up=2, - STBI__F_avg=3, - STBI__F_paeth=4, - // synthetic filters used for first scanline to avoid needing a dummy row of 0s - STBI__F_avg_first, - STBI__F_paeth_first -}; - -static stbi_uc first_row_filter[5] = -{ - STBI__F_none, - STBI__F_sub, - STBI__F_none, - STBI__F_avg_first, - STBI__F_paeth_first -}; - -static int stbi__paeth(int a, int b, int c) -{ - int p = a + b - c; - int pa = abs(p-a); - int pb = abs(p-b); - int pc = abs(p-c); - if (pa <= pb && pa <= pc) return a; - if (pb <= pc) return b; - return c; -} - -static const stbi_uc stbi__depth_scale_table[9] = { 0, 0xff, 0x55, 0, 0x11, 0,0,0, 0x01 }; - -// create the png data from post-deflated data -static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 raw_len, int out_n, stbi__uint32 x, stbi__uint32 y, int depth, int color) -{ - int bytes = (depth == 16? 2 : 1); - stbi__context *s = a->s; - stbi__uint32 i,j,stride = x*out_n*bytes; - stbi__uint32 img_len, img_width_bytes; - int k; - int img_n = s->img_n; // copy it into a local for later - - int output_bytes = out_n*bytes; - int filter_bytes = img_n*bytes; - int width = x; - - STBI_ASSERT(out_n == s->img_n || out_n == s->img_n+1); - a->out = (stbi_uc *) stbi__malloc_mad3(x, y, output_bytes, 0); // extra bytes to write off the end into - if (!a->out) return stbi__err("outofmem", "Out of memory"); - - if (!stbi__mad3sizes_valid(img_n, x, depth, 7)) return stbi__err("too large", "Corrupt PNG"); - img_width_bytes = (((img_n * x * depth) + 7) >> 3); - img_len = (img_width_bytes + 1) * y; - - // we used to check for exact match between raw_len and img_len on non-interlaced PNGs, - // but issue #276 reported a PNG in the wild that had extra data at the end (all zeros), - // so just check for raw_len < img_len always. - if (raw_len < img_len) return stbi__err("not enough pixels","Corrupt PNG"); - - for (j=0; j < y; ++j) { - stbi_uc *cur = a->out + stride*j; - stbi_uc *prior; - int filter = *raw++; - - if (filter > 4) - return stbi__err("invalid filter","Corrupt PNG"); - - if (depth < 8) { - if (img_width_bytes > x) return stbi__err("invalid width","Corrupt PNG"); - cur += x*out_n - img_width_bytes; // store output to the rightmost img_len bytes, so we can decode in place - filter_bytes = 1; - width = img_width_bytes; - } - prior = cur - stride; // bugfix: need to compute this after 'cur +=' computation above - - // if first row, use special filter that doesn't sample previous row - if (j == 0) filter = first_row_filter[filter]; - - // handle first byte explicitly - for (k=0; k < filter_bytes; ++k) { - switch (filter) { - case STBI__F_none : cur[k] = raw[k]; break; - case STBI__F_sub : cur[k] = raw[k]; break; - case STBI__F_up : cur[k] = STBI__BYTECAST(raw[k] + prior[k]); break; - case STBI__F_avg : cur[k] = STBI__BYTECAST(raw[k] + (prior[k]>>1)); break; - case STBI__F_paeth : cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(0,prior[k],0)); break; - case STBI__F_avg_first : cur[k] = raw[k]; break; - case STBI__F_paeth_first: cur[k] = raw[k]; break; - } - } - - if (depth == 8) { - if (img_n != out_n) - cur[img_n] = 255; // first pixel - raw += img_n; - cur += out_n; - prior += out_n; - } else if (depth == 16) { - if (img_n != out_n) { - cur[filter_bytes] = 255; // first pixel top byte - cur[filter_bytes+1] = 255; // first pixel bottom byte - } - raw += filter_bytes; - cur += output_bytes; - prior += output_bytes; - } else { - raw += 1; - cur += 1; - prior += 1; - } - - // this is a little gross, so that we don't switch per-pixel or per-component - if (depth < 8 || img_n == out_n) { - int nk = (width - 1)*filter_bytes; - #define STBI__CASE(f) \ - case f: \ - for (k=0; k < nk; ++k) - switch (filter) { - // "none" filter turns into a memcpy here; make that explicit. - case STBI__F_none: memcpy(cur, raw, nk); break; - STBI__CASE(STBI__F_sub) { cur[k] = STBI__BYTECAST(raw[k] + cur[k-filter_bytes]); } break; - STBI__CASE(STBI__F_up) { cur[k] = STBI__BYTECAST(raw[k] + prior[k]); } break; - STBI__CASE(STBI__F_avg) { cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k-filter_bytes])>>1)); } break; - STBI__CASE(STBI__F_paeth) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],prior[k],prior[k-filter_bytes])); } break; - STBI__CASE(STBI__F_avg_first) { cur[k] = STBI__BYTECAST(raw[k] + (cur[k-filter_bytes] >> 1)); } break; - STBI__CASE(STBI__F_paeth_first) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes],0,0)); } break; - } - #undef STBI__CASE - raw += nk; - } else { - STBI_ASSERT(img_n+1 == out_n); - #define STBI__CASE(f) \ - case f: \ - for (i=x-1; i >= 1; --i, cur[filter_bytes]=255,raw+=filter_bytes,cur+=output_bytes,prior+=output_bytes) \ - for (k=0; k < filter_bytes; ++k) - switch (filter) { - STBI__CASE(STBI__F_none) { cur[k] = raw[k]; } break; - STBI__CASE(STBI__F_sub) { cur[k] = STBI__BYTECAST(raw[k] + cur[k- output_bytes]); } break; - STBI__CASE(STBI__F_up) { cur[k] = STBI__BYTECAST(raw[k] + prior[k]); } break; - STBI__CASE(STBI__F_avg) { cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k- output_bytes])>>1)); } break; - STBI__CASE(STBI__F_paeth) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k- output_bytes],prior[k],prior[k- output_bytes])); } break; - STBI__CASE(STBI__F_avg_first) { cur[k] = STBI__BYTECAST(raw[k] + (cur[k- output_bytes] >> 1)); } break; - STBI__CASE(STBI__F_paeth_first) { cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k- output_bytes],0,0)); } break; - } - #undef STBI__CASE - - // the loop above sets the high byte of the pixels' alpha, but for - // 16 bit png files we also need the low byte set. we'll do that here. - if (depth == 16) { - cur = a->out + stride*j; // start at the beginning of the row again - for (i=0; i < x; ++i,cur+=output_bytes) { - cur[filter_bytes+1] = 255; - } - } - } - } - - // we make a separate pass to expand bits to pixels; for performance, - // this could run two scanlines behind the above code, so it won't - // intefere with filtering but will still be in the cache. - if (depth < 8) { - for (j=0; j < y; ++j) { - stbi_uc *cur = a->out + stride*j; - stbi_uc *in = a->out + stride*j + x*out_n - img_width_bytes; - // unpack 1/2/4-bit into a 8-bit buffer. allows us to keep the common 8-bit path optimal at minimal cost for 1/2/4-bit - // png guarante byte alignment, if width is not multiple of 8/4/2 we'll decode dummy trailing data that will be skipped in the later loop - stbi_uc scale = (color == 0) ? stbi__depth_scale_table[depth] : 1; // scale grayscale values to 0..255 range - - // note that the final byte might overshoot and write more data than desired. - // we can allocate enough data that this never writes out of memory, but it - // could also overwrite the next scanline. can it overwrite non-empty data - // on the next scanline? yes, consider 1-pixel-wide scanlines with 1-bit-per-pixel. - // so we need to explicitly clamp the final ones - - if (depth == 4) { - for (k=x*img_n; k >= 2; k-=2, ++in) { - *cur++ = scale * ((*in >> 4) ); - *cur++ = scale * ((*in ) & 0x0f); - } - if (k > 0) *cur++ = scale * ((*in >> 4) ); - } else if (depth == 2) { - for (k=x*img_n; k >= 4; k-=4, ++in) { - *cur++ = scale * ((*in >> 6) ); - *cur++ = scale * ((*in >> 4) & 0x03); - *cur++ = scale * ((*in >> 2) & 0x03); - *cur++ = scale * ((*in ) & 0x03); - } - if (k > 0) *cur++ = scale * ((*in >> 6) ); - if (k > 1) *cur++ = scale * ((*in >> 4) & 0x03); - if (k > 2) *cur++ = scale * ((*in >> 2) & 0x03); - } else if (depth == 1) { - for (k=x*img_n; k >= 8; k-=8, ++in) { - *cur++ = scale * ((*in >> 7) ); - *cur++ = scale * ((*in >> 6) & 0x01); - *cur++ = scale * ((*in >> 5) & 0x01); - *cur++ = scale * ((*in >> 4) & 0x01); - *cur++ = scale * ((*in >> 3) & 0x01); - *cur++ = scale * ((*in >> 2) & 0x01); - *cur++ = scale * ((*in >> 1) & 0x01); - *cur++ = scale * ((*in ) & 0x01); - } - if (k > 0) *cur++ = scale * ((*in >> 7) ); - if (k > 1) *cur++ = scale * ((*in >> 6) & 0x01); - if (k > 2) *cur++ = scale * ((*in >> 5) & 0x01); - if (k > 3) *cur++ = scale * ((*in >> 4) & 0x01); - if (k > 4) *cur++ = scale * ((*in >> 3) & 0x01); - if (k > 5) *cur++ = scale * ((*in >> 2) & 0x01); - if (k > 6) *cur++ = scale * ((*in >> 1) & 0x01); - } - if (img_n != out_n) { - int q; - // insert alpha = 255 - cur = a->out + stride*j; - if (img_n == 1) { - for (q=x-1; q >= 0; --q) { - cur[q*2+1] = 255; - cur[q*2+0] = cur[q]; - } - } else { - STBI_ASSERT(img_n == 3); - for (q=x-1; q >= 0; --q) { - cur[q*4+3] = 255; - cur[q*4+2] = cur[q*3+2]; - cur[q*4+1] = cur[q*3+1]; - cur[q*4+0] = cur[q*3+0]; - } - } - } - } - } else if (depth == 16) { - // force the image data from big-endian to platform-native. - // this is done in a separate pass due to the decoding relying - // on the data being untouched, but could probably be done - // per-line during decode if care is taken. - stbi_uc *cur = a->out; - stbi__uint16 *cur16 = (stbi__uint16*)cur; - - for(i=0; i < x*y*out_n; ++i,cur16++,cur+=2) { - *cur16 = (cur[0] << 8) | cur[1]; - } - } - - return 1; -} - -static int stbi__create_png_image(stbi__png *a, stbi_uc *image_data, stbi__uint32 image_data_len, int out_n, int depth, int color, int interlaced) -{ - int bytes = (depth == 16 ? 2 : 1); - int out_bytes = out_n * bytes; - stbi_uc *final; - int p; - if (!interlaced) - return stbi__create_png_image_raw(a, image_data, image_data_len, out_n, a->s->img_x, a->s->img_y, depth, color); - - // de-interlacing - final = (stbi_uc *) stbi__malloc_mad3(a->s->img_x, a->s->img_y, out_bytes, 0); - if (!final) return stbi__err("outofmem", "Out of memory"); - for (p=0; p < 7; ++p) { - int xorig[] = { 0,4,0,2,0,1,0 }; - int yorig[] = { 0,0,4,0,2,0,1 }; - int xspc[] = { 8,8,4,4,2,2,1 }; - int yspc[] = { 8,8,8,4,4,2,2 }; - int i,j,x,y; - // pass1_x[4] = 0, pass1_x[5] = 1, pass1_x[12] = 1 - x = (a->s->img_x - xorig[p] + xspc[p]-1) / xspc[p]; - y = (a->s->img_y - yorig[p] + yspc[p]-1) / yspc[p]; - if (x && y) { - stbi__uint32 img_len = ((((a->s->img_n * x * depth) + 7) >> 3) + 1) * y; - if (!stbi__create_png_image_raw(a, image_data, image_data_len, out_n, x, y, depth, color)) { - STBI_FREE(final); - return 0; - } - for (j=0; j < y; ++j) { - for (i=0; i < x; ++i) { - int out_y = j*yspc[p]+yorig[p]; - int out_x = i*xspc[p]+xorig[p]; - memcpy(final + out_y*a->s->img_x*out_bytes + out_x*out_bytes, - a->out + (j*x+i)*out_bytes, out_bytes); - } - } - STBI_FREE(a->out); - image_data += img_len; - image_data_len -= img_len; - } - } - a->out = final; - - return 1; -} - -static int stbi__compute_transparency(stbi__png *z, stbi_uc tc[3], int out_n) -{ - stbi__context *s = z->s; - stbi__uint32 i, pixel_count = s->img_x * s->img_y; - stbi_uc *p = z->out; - - // compute color-based transparency, assuming we've - // already got 255 as the alpha value in the output - STBI_ASSERT(out_n == 2 || out_n == 4); - - if (out_n == 2) { - for (i=0; i < pixel_count; ++i) { - p[1] = (p[0] == tc[0] ? 0 : 255); - p += 2; - } - } else { - for (i=0; i < pixel_count; ++i) { - if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) - p[3] = 0; - p += 4; - } - } - return 1; -} - -static int stbi__compute_transparency16(stbi__png *z, stbi__uint16 tc[3], int out_n) -{ - stbi__context *s = z->s; - stbi__uint32 i, pixel_count = s->img_x * s->img_y; - stbi__uint16 *p = (stbi__uint16*) z->out; - - // compute color-based transparency, assuming we've - // already got 65535 as the alpha value in the output - STBI_ASSERT(out_n == 2 || out_n == 4); - - if (out_n == 2) { - for (i = 0; i < pixel_count; ++i) { - p[1] = (p[0] == tc[0] ? 0 : 65535); - p += 2; - } - } else { - for (i = 0; i < pixel_count; ++i) { - if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) - p[3] = 0; - p += 4; - } - } - return 1; -} - -static int stbi__expand_png_palette(stbi__png *a, stbi_uc *palette, int len, int pal_img_n) -{ - stbi__uint32 i, pixel_count = a->s->img_x * a->s->img_y; - stbi_uc *p, *temp_out, *orig = a->out; - - p = (stbi_uc *) stbi__malloc_mad2(pixel_count, pal_img_n, 0); - if (p == NULL) return stbi__err("outofmem", "Out of memory"); - - // between here and free(out) below, exitting would leak - temp_out = p; - - if (pal_img_n == 3) { - for (i=0; i < pixel_count; ++i) { - int n = orig[i]*4; - p[0] = palette[n ]; - p[1] = palette[n+1]; - p[2] = palette[n+2]; - p += 3; - } - } else { - for (i=0; i < pixel_count; ++i) { - int n = orig[i]*4; - p[0] = palette[n ]; - p[1] = palette[n+1]; - p[2] = palette[n+2]; - p[3] = palette[n+3]; - p += 4; - } - } - STBI_FREE(a->out); - a->out = temp_out; - - STBI_NOTUSED(len); - - return 1; -} - -static int stbi__unpremultiply_on_load_global = 0; -static int stbi__de_iphone_flag_global = 0; - -STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply) -{ - stbi__unpremultiply_on_load_global = flag_true_if_should_unpremultiply; -} - -STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert) -{ - stbi__de_iphone_flag_global = flag_true_if_should_convert; -} - -#ifndef STBI_THREAD_LOCAL -#define stbi__unpremultiply_on_load stbi__unpremultiply_on_load_global -#define stbi__de_iphone_flag stbi__de_iphone_flag_global -#else -static STBI_THREAD_LOCAL int stbi__unpremultiply_on_load_local, stbi__unpremultiply_on_load_set; -static STBI_THREAD_LOCAL int stbi__de_iphone_flag_local, stbi__de_iphone_flag_set; - -STBIDEF void stbi__unpremultiply_on_load_thread(int flag_true_if_should_unpremultiply) -{ - stbi__unpremultiply_on_load_local = flag_true_if_should_unpremultiply; - stbi__unpremultiply_on_load_set = 1; -} - -STBIDEF void stbi_convert_iphone_png_to_rgb_thread(int flag_true_if_should_convert) -{ - stbi__de_iphone_flag_local = flag_true_if_should_convert; - stbi__de_iphone_flag_set = 1; -} - -#define stbi__unpremultiply_on_load (stbi__unpremultiply_on_load_set \ - ? stbi__unpremultiply_on_load_local \ - : stbi__unpremultiply_on_load_global) -#define stbi__de_iphone_flag (stbi__de_iphone_flag_set \ - ? stbi__de_iphone_flag_local \ - : stbi__de_iphone_flag_global) -#endif // STBI_THREAD_LOCAL - -static void stbi__de_iphone(stbi__png *z) -{ - stbi__context *s = z->s; - stbi__uint32 i, pixel_count = s->img_x * s->img_y; - stbi_uc *p = z->out; - - if (s->img_out_n == 3) { // convert bgr to rgb - for (i=0; i < pixel_count; ++i) { - stbi_uc t = p[0]; - p[0] = p[2]; - p[2] = t; - p += 3; - } - } else { - STBI_ASSERT(s->img_out_n == 4); - if (stbi__unpremultiply_on_load) { - // convert bgr to rgb and unpremultiply - for (i=0; i < pixel_count; ++i) { - stbi_uc a = p[3]; - stbi_uc t = p[0]; - if (a) { - stbi_uc half = a / 2; - p[0] = (p[2] * 255 + half) / a; - p[1] = (p[1] * 255 + half) / a; - p[2] = ( t * 255 + half) / a; - } else { - p[0] = p[2]; - p[2] = t; - } - p += 4; - } - } else { - // convert bgr to rgb - for (i=0; i < pixel_count; ++i) { - stbi_uc t = p[0]; - p[0] = p[2]; - p[2] = t; - p += 4; - } - } - } -} - -#define STBI__PNG_TYPE(a,b,c,d) (((unsigned) (a) << 24) + ((unsigned) (b) << 16) + ((unsigned) (c) << 8) + (unsigned) (d)) - -static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp) -{ - stbi_uc palette[1024], pal_img_n=0; - stbi_uc has_trans=0, tc[3]={0}; - stbi__uint16 tc16[3]; - stbi__uint32 ioff=0, idata_limit=0, i, pal_len=0; - int first=1,k,interlace=0, color=0, is_iphone=0; - stbi__context *s = z->s; - - z->expanded = NULL; - z->idata = NULL; - z->out = NULL; - - if (!stbi__check_png_header(s)) return 0; - - if (scan == STBI__SCAN_type) return 1; - - for (;;) { - stbi__pngchunk c = stbi__get_chunk_header(s); - switch (c.type) { - case STBI__PNG_TYPE('C','g','B','I'): - is_iphone = 1; - stbi__skip(s, c.length); - break; - case STBI__PNG_TYPE('I','H','D','R'): { - int comp,filter; - if (!first) return stbi__err("multiple IHDR","Corrupt PNG"); - first = 0; - if (c.length != 13) return stbi__err("bad IHDR len","Corrupt PNG"); - s->img_x = stbi__get32be(s); - s->img_y = stbi__get32be(s); - if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); - if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); - z->depth = stbi__get8(s); if (z->depth != 1 && z->depth != 2 && z->depth != 4 && z->depth != 8 && z->depth != 16) return stbi__err("1/2/4/8/16-bit only","PNG not supported: 1/2/4/8/16-bit only"); - color = stbi__get8(s); if (color > 6) return stbi__err("bad ctype","Corrupt PNG"); - if (color == 3 && z->depth == 16) return stbi__err("bad ctype","Corrupt PNG"); - if (color == 3) pal_img_n = 3; else if (color & 1) return stbi__err("bad ctype","Corrupt PNG"); - comp = stbi__get8(s); if (comp) return stbi__err("bad comp method","Corrupt PNG"); - filter= stbi__get8(s); if (filter) return stbi__err("bad filter method","Corrupt PNG"); - interlace = stbi__get8(s); if (interlace>1) return stbi__err("bad interlace method","Corrupt PNG"); - if (!s->img_x || !s->img_y) return stbi__err("0-pixel image","Corrupt PNG"); - if (!pal_img_n) { - s->img_n = (color & 2 ? 3 : 1) + (color & 4 ? 1 : 0); - if ((1 << 30) / s->img_x / s->img_n < s->img_y) return stbi__err("too large", "Image too large to decode"); - if (scan == STBI__SCAN_header) return 1; - } else { - // if paletted, then pal_n is our final components, and - // img_n is # components to decompress/filter. - s->img_n = 1; - if ((1 << 30) / s->img_x / 4 < s->img_y) return stbi__err("too large","Corrupt PNG"); - // if SCAN_header, have to scan to see if we have a tRNS - } - break; - } - - case STBI__PNG_TYPE('P','L','T','E'): { - if (first) return stbi__err("first not IHDR", "Corrupt PNG"); - if (c.length > 256*3) return stbi__err("invalid PLTE","Corrupt PNG"); - pal_len = c.length / 3; - if (pal_len * 3 != c.length) return stbi__err("invalid PLTE","Corrupt PNG"); - for (i=0; i < pal_len; ++i) { - palette[i*4+0] = stbi__get8(s); - palette[i*4+1] = stbi__get8(s); - palette[i*4+2] = stbi__get8(s); - palette[i*4+3] = 255; - } - break; - } - - case STBI__PNG_TYPE('t','R','N','S'): { - if (first) return stbi__err("first not IHDR", "Corrupt PNG"); - if (z->idata) return stbi__err("tRNS after IDAT","Corrupt PNG"); - if (pal_img_n) { - if (scan == STBI__SCAN_header) { s->img_n = 4; return 1; } - if (pal_len == 0) return stbi__err("tRNS before PLTE","Corrupt PNG"); - if (c.length > pal_len) return stbi__err("bad tRNS len","Corrupt PNG"); - pal_img_n = 4; - for (i=0; i < c.length; ++i) - palette[i*4+3] = stbi__get8(s); - } else { - if (!(s->img_n & 1)) return stbi__err("tRNS with alpha","Corrupt PNG"); - if (c.length != (stbi__uint32) s->img_n*2) return stbi__err("bad tRNS len","Corrupt PNG"); - has_trans = 1; - if (z->depth == 16) { - for (k = 0; k < s->img_n; ++k) tc16[k] = (stbi__uint16)stbi__get16be(s); // copy the values as-is - } else { - for (k = 0; k < s->img_n; ++k) tc[k] = (stbi_uc)(stbi__get16be(s) & 255) * stbi__depth_scale_table[z->depth]; // non 8-bit images will be larger - } - } - break; - } - - case STBI__PNG_TYPE('I','D','A','T'): { - if (first) return stbi__err("first not IHDR", "Corrupt PNG"); - if (pal_img_n && !pal_len) return stbi__err("no PLTE","Corrupt PNG"); - if (scan == STBI__SCAN_header) { s->img_n = pal_img_n; return 1; } - if ((int)(ioff + c.length) < (int)ioff) return 0; - if (ioff + c.length > idata_limit) { - stbi__uint32 idata_limit_old = idata_limit; - stbi_uc *p; - if (idata_limit == 0) idata_limit = c.length > 4096 ? c.length : 4096; - while (ioff + c.length > idata_limit) - idata_limit *= 2; - STBI_NOTUSED(idata_limit_old); - p = (stbi_uc *) STBI_REALLOC_SIZED(z->idata, idata_limit_old, idata_limit); if (p == NULL) return stbi__err("outofmem", "Out of memory"); - z->idata = p; - } - if (!stbi__getn(s, z->idata+ioff,c.length)) return stbi__err("outofdata","Corrupt PNG"); - ioff += c.length; - break; - } - - case STBI__PNG_TYPE('I','E','N','D'): { - stbi__uint32 raw_len, bpl; - if (first) return stbi__err("first not IHDR", "Corrupt PNG"); - if (scan != STBI__SCAN_load) return 1; - if (z->idata == NULL) return stbi__err("no IDAT","Corrupt PNG"); - // initial guess for decoded data size to avoid unnecessary reallocs - bpl = (s->img_x * z->depth + 7) / 8; // bytes per line, per component - raw_len = bpl * s->img_y * s->img_n /* pixels */ + s->img_y /* filter mode per row */; - z->expanded = (stbi_uc *) stbi_zlib_decode_malloc_guesssize_headerflag((char *) z->idata, ioff, raw_len, (int *) &raw_len, !is_iphone); - if (z->expanded == NULL) return 0; // zlib should set error - STBI_FREE(z->idata); z->idata = NULL; - if ((req_comp == s->img_n+1 && req_comp != 3 && !pal_img_n) || has_trans) - s->img_out_n = s->img_n+1; - else - s->img_out_n = s->img_n; - if (!stbi__create_png_image(z, z->expanded, raw_len, s->img_out_n, z->depth, color, interlace)) return 0; - if (has_trans) { - if (z->depth == 16) { - if (!stbi__compute_transparency16(z, tc16, s->img_out_n)) return 0; - } else { - if (!stbi__compute_transparency(z, tc, s->img_out_n)) return 0; - } - } - if (is_iphone && stbi__de_iphone_flag && s->img_out_n > 2) - stbi__de_iphone(z); - if (pal_img_n) { - // pal_img_n == 3 or 4 - s->img_n = pal_img_n; // record the actual colors we had - s->img_out_n = pal_img_n; - if (req_comp >= 3) s->img_out_n = req_comp; - if (!stbi__expand_png_palette(z, palette, pal_len, s->img_out_n)) - return 0; - } else if (has_trans) { - // non-paletted image with tRNS -> source image has (constant) alpha - ++s->img_n; - } - STBI_FREE(z->expanded); z->expanded = NULL; - // end of PNG chunk, read and skip CRC - stbi__get32be(s); - return 1; - } - - default: - // if critical, fail - if (first) return stbi__err("first not IHDR", "Corrupt PNG"); - if ((c.type & (1 << 29)) == 0) { - #ifndef STBI_NO_FAILURE_STRINGS - // not threadsafe - static char invalid_chunk[] = "XXXX PNG chunk not known"; - invalid_chunk[0] = STBI__BYTECAST(c.type >> 24); - invalid_chunk[1] = STBI__BYTECAST(c.type >> 16); - invalid_chunk[2] = STBI__BYTECAST(c.type >> 8); - invalid_chunk[3] = STBI__BYTECAST(c.type >> 0); - #endif - return stbi__err(invalid_chunk, "PNG not supported: unknown PNG chunk type"); - } - stbi__skip(s, c.length); - break; - } - // end of PNG chunk, read and skip CRC - stbi__get32be(s); - } -} - -static void *stbi__do_png(stbi__png *p, int *x, int *y, int *n, int req_comp, stbi__result_info *ri) -{ - void *result=NULL; - if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error"); - if (stbi__parse_png_file(p, STBI__SCAN_load, req_comp)) { - if (p->depth <= 8) - ri->bits_per_channel = 8; - else if (p->depth == 16) - ri->bits_per_channel = 16; - else - return stbi__errpuc("bad bits_per_channel", "PNG not supported: unsupported color depth"); - result = p->out; - p->out = NULL; - if (req_comp && req_comp != p->s->img_out_n) { - if (ri->bits_per_channel == 8) - result = stbi__convert_format((unsigned char *) result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y); - else - result = stbi__convert_format16((stbi__uint16 *) result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y); - p->s->img_out_n = req_comp; - if (result == NULL) return result; - } - *x = p->s->img_x; - *y = p->s->img_y; - if (n) *n = p->s->img_n; - } - STBI_FREE(p->out); p->out = NULL; - STBI_FREE(p->expanded); p->expanded = NULL; - STBI_FREE(p->idata); p->idata = NULL; - - return result; -} - -static void *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) -{ - stbi__png p; - p.s = s; - return stbi__do_png(&p, x,y,comp,req_comp, ri); -} - -static int stbi__png_test(stbi__context *s) -{ - int r; - r = stbi__check_png_header(s); - stbi__rewind(s); - return r; -} - -static int stbi__png_info_raw(stbi__png *p, int *x, int *y, int *comp) -{ - if (!stbi__parse_png_file(p, STBI__SCAN_header, 0)) { - stbi__rewind( p->s ); - return 0; - } - if (x) *x = p->s->img_x; - if (y) *y = p->s->img_y; - if (comp) *comp = p->s->img_n; - return 1; -} - -static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp) -{ - stbi__png p; - p.s = s; - return stbi__png_info_raw(&p, x, y, comp); -} - -static int stbi__png_is16(stbi__context *s) -{ - stbi__png p; - p.s = s; - if (!stbi__png_info_raw(&p, NULL, NULL, NULL)) - return 0; - if (p.depth != 16) { - stbi__rewind(p.s); - return 0; - } - return 1; -} -#endif - -// Microsoft/Windows BMP image - -#ifndef STBI_NO_BMP -static int stbi__bmp_test_raw(stbi__context *s) -{ - int r; - int sz; - if (stbi__get8(s) != 'B') return 0; - if (stbi__get8(s) != 'M') return 0; - stbi__get32le(s); // discard filesize - stbi__get16le(s); // discard reserved - stbi__get16le(s); // discard reserved - stbi__get32le(s); // discard data offset - sz = stbi__get32le(s); - r = (sz == 12 || sz == 40 || sz == 56 || sz == 108 || sz == 124); - return r; -} - -static int stbi__bmp_test(stbi__context *s) -{ - int r = stbi__bmp_test_raw(s); - stbi__rewind(s); - return r; -} - - -// returns 0..31 for the highest set bit -static int stbi__high_bit(unsigned int z) -{ - int n=0; - if (z == 0) return -1; - if (z >= 0x10000) { n += 16; z >>= 16; } - if (z >= 0x00100) { n += 8; z >>= 8; } - if (z >= 0x00010) { n += 4; z >>= 4; } - if (z >= 0x00004) { n += 2; z >>= 2; } - if (z >= 0x00002) { n += 1;/* >>= 1;*/ } - return n; -} - -static int stbi__bitcount(unsigned int a) -{ - a = (a & 0x55555555) + ((a >> 1) & 0x55555555); // max 2 - a = (a & 0x33333333) + ((a >> 2) & 0x33333333); // max 4 - a = (a + (a >> 4)) & 0x0f0f0f0f; // max 8 per 4, now 8 bits - a = (a + (a >> 8)); // max 16 per 8 bits - a = (a + (a >> 16)); // max 32 per 8 bits - return a & 0xff; -} - -// extract an arbitrarily-aligned N-bit value (N=bits) -// from v, and then make it 8-bits long and fractionally -// extend it to full full range. -static int stbi__shiftsigned(unsigned int v, int shift, int bits) -{ - static unsigned int mul_table[9] = { - 0, - 0xff/*0b11111111*/, 0x55/*0b01010101*/, 0x49/*0b01001001*/, 0x11/*0b00010001*/, - 0x21/*0b00100001*/, 0x41/*0b01000001*/, 0x81/*0b10000001*/, 0x01/*0b00000001*/, - }; - static unsigned int shift_table[9] = { - 0, 0,0,1,0,2,4,6,0, - }; - if (shift < 0) - v <<= -shift; - else - v >>= shift; - STBI_ASSERT(v < 256); - v >>= (8-bits); - STBI_ASSERT(bits >= 0 && bits <= 8); - return (int) ((unsigned) v * mul_table[bits]) >> shift_table[bits]; -} - -typedef struct -{ - int bpp, offset, hsz; - unsigned int mr,mg,mb,ma, all_a; - int extra_read; -} stbi__bmp_data; - -static int stbi__bmp_set_mask_defaults(stbi__bmp_data *info, int compress) -{ - // BI_BITFIELDS specifies masks explicitly, don't override - if (compress == 3) - return 1; - - if (compress == 0) { - if (info->bpp == 16) { - info->mr = 31u << 10; - info->mg = 31u << 5; - info->mb = 31u << 0; - } else if (info->bpp == 32) { - info->mr = 0xffu << 16; - info->mg = 0xffu << 8; - info->mb = 0xffu << 0; - info->ma = 0xffu << 24; - info->all_a = 0; // if all_a is 0 at end, then we loaded alpha channel but it was all 0 - } else { - // otherwise, use defaults, which is all-0 - info->mr = info->mg = info->mb = info->ma = 0; - } - return 1; - } - return 0; // error -} - -static void *stbi__bmp_parse_header(stbi__context *s, stbi__bmp_data *info) -{ - int hsz; - if (stbi__get8(s) != 'B' || stbi__get8(s) != 'M') return stbi__errpuc("not BMP", "Corrupt BMP"); - stbi__get32le(s); // discard filesize - stbi__get16le(s); // discard reserved - stbi__get16le(s); // discard reserved - info->offset = stbi__get32le(s); - info->hsz = hsz = stbi__get32le(s); - info->mr = info->mg = info->mb = info->ma = 0; - info->extra_read = 14; - - if (info->offset < 0) return stbi__errpuc("bad BMP", "bad BMP"); - - if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108 && hsz != 124) return stbi__errpuc("unknown BMP", "BMP type not supported: unknown"); - if (hsz == 12) { - s->img_x = stbi__get16le(s); - s->img_y = stbi__get16le(s); - } else { - s->img_x = stbi__get32le(s); - s->img_y = stbi__get32le(s); - } - if (stbi__get16le(s) != 1) return stbi__errpuc("bad BMP", "bad BMP"); - info->bpp = stbi__get16le(s); - if (hsz != 12) { - int compress = stbi__get32le(s); - if (compress == 1 || compress == 2) return stbi__errpuc("BMP RLE", "BMP type not supported: RLE"); - if (compress >= 4) return stbi__errpuc("BMP JPEG/PNG", "BMP type not supported: unsupported compression"); // this includes PNG/JPEG modes - if (compress == 3 && info->bpp != 16 && info->bpp != 32) return stbi__errpuc("bad BMP", "bad BMP"); // bitfields requires 16 or 32 bits/pixel - stbi__get32le(s); // discard sizeof - stbi__get32le(s); // discard hres - stbi__get32le(s); // discard vres - stbi__get32le(s); // discard colorsused - stbi__get32le(s); // discard max important - if (hsz == 40 || hsz == 56) { - if (hsz == 56) { - stbi__get32le(s); - stbi__get32le(s); - stbi__get32le(s); - stbi__get32le(s); - } - if (info->bpp == 16 || info->bpp == 32) { - if (compress == 0) { - stbi__bmp_set_mask_defaults(info, compress); - } else if (compress == 3) { - info->mr = stbi__get32le(s); - info->mg = stbi__get32le(s); - info->mb = stbi__get32le(s); - info->extra_read += 12; - // not documented, but generated by photoshop and handled by mspaint - if (info->mr == info->mg && info->mg == info->mb) { - // ?!?!? - return stbi__errpuc("bad BMP", "bad BMP"); - } - } else - return stbi__errpuc("bad BMP", "bad BMP"); - } - } else { - // V4/V5 header - int i; - if (hsz != 108 && hsz != 124) - return stbi__errpuc("bad BMP", "bad BMP"); - info->mr = stbi__get32le(s); - info->mg = stbi__get32le(s); - info->mb = stbi__get32le(s); - info->ma = stbi__get32le(s); - if (compress != 3) // override mr/mg/mb unless in BI_BITFIELDS mode, as per docs - stbi__bmp_set_mask_defaults(info, compress); - stbi__get32le(s); // discard color space - for (i=0; i < 12; ++i) - stbi__get32le(s); // discard color space parameters - if (hsz == 124) { - stbi__get32le(s); // discard rendering intent - stbi__get32le(s); // discard offset of profile data - stbi__get32le(s); // discard size of profile data - stbi__get32le(s); // discard reserved - } - } - } - return (void *) 1; -} - - -static void *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) -{ - stbi_uc *out; - unsigned int mr=0,mg=0,mb=0,ma=0, all_a; - stbi_uc pal[256][4]; - int psize=0,i,j,width; - int flip_vertically, pad, target; - stbi__bmp_data info; - STBI_NOTUSED(ri); - - info.all_a = 255; - if (stbi__bmp_parse_header(s, &info) == NULL) - return NULL; // error code already set - - flip_vertically = ((int) s->img_y) > 0; - s->img_y = abs((int) s->img_y); - - if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); - if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); - - mr = info.mr; - mg = info.mg; - mb = info.mb; - ma = info.ma; - all_a = info.all_a; - - if (info.hsz == 12) { - if (info.bpp < 24) - psize = (info.offset - info.extra_read - 24) / 3; - } else { - if (info.bpp < 16) - psize = (info.offset - info.extra_read - info.hsz) >> 2; - } - if (psize == 0) { - if (info.offset != s->callback_already_read + (s->img_buffer - s->img_buffer_original)) { - return stbi__errpuc("bad offset", "Corrupt BMP"); - } - } - - if (info.bpp == 24 && ma == 0xff000000) - s->img_n = 3; - else - s->img_n = ma ? 4 : 3; - if (req_comp && req_comp >= 3) // we can directly decode 3 or 4 - target = req_comp; - else - target = s->img_n; // if they want monochrome, we'll post-convert - - // sanity-check size - if (!stbi__mad3sizes_valid(target, s->img_x, s->img_y, 0)) - return stbi__errpuc("too large", "Corrupt BMP"); - - out = (stbi_uc *) stbi__malloc_mad3(target, s->img_x, s->img_y, 0); - if (!out) return stbi__errpuc("outofmem", "Out of memory"); - if (info.bpp < 16) { - int z=0; - if (psize == 0 || psize > 256) { STBI_FREE(out); return stbi__errpuc("invalid", "Corrupt BMP"); } - for (i=0; i < psize; ++i) { - pal[i][2] = stbi__get8(s); - pal[i][1] = stbi__get8(s); - pal[i][0] = stbi__get8(s); - if (info.hsz != 12) stbi__get8(s); - pal[i][3] = 255; - } - stbi__skip(s, info.offset - info.extra_read - info.hsz - psize * (info.hsz == 12 ? 3 : 4)); - if (info.bpp == 1) width = (s->img_x + 7) >> 3; - else if (info.bpp == 4) width = (s->img_x + 1) >> 1; - else if (info.bpp == 8) width = s->img_x; - else { STBI_FREE(out); return stbi__errpuc("bad bpp", "Corrupt BMP"); } - pad = (-width)&3; - if (info.bpp == 1) { - for (j=0; j < (int) s->img_y; ++j) { - int bit_offset = 7, v = stbi__get8(s); - for (i=0; i < (int) s->img_x; ++i) { - int color = (v>>bit_offset)&0x1; - out[z++] = pal[color][0]; - out[z++] = pal[color][1]; - out[z++] = pal[color][2]; - if (target == 4) out[z++] = 255; - if (i+1 == (int) s->img_x) break; - if((--bit_offset) < 0) { - bit_offset = 7; - v = stbi__get8(s); - } - } - stbi__skip(s, pad); - } - } else { - for (j=0; j < (int) s->img_y; ++j) { - for (i=0; i < (int) s->img_x; i += 2) { - int v=stbi__get8(s),v2=0; - if (info.bpp == 4) { - v2 = v & 15; - v >>= 4; - } - out[z++] = pal[v][0]; - out[z++] = pal[v][1]; - out[z++] = pal[v][2]; - if (target == 4) out[z++] = 255; - if (i+1 == (int) s->img_x) break; - v = (info.bpp == 8) ? stbi__get8(s) : v2; - out[z++] = pal[v][0]; - out[z++] = pal[v][1]; - out[z++] = pal[v][2]; - if (target == 4) out[z++] = 255; - } - stbi__skip(s, pad); - } - } - } else { - int rshift=0,gshift=0,bshift=0,ashift=0,rcount=0,gcount=0,bcount=0,acount=0; - int z = 0; - int easy=0; - stbi__skip(s, info.offset - info.extra_read - info.hsz); - if (info.bpp == 24) width = 3 * s->img_x; - else if (info.bpp == 16) width = 2*s->img_x; - else /* bpp = 32 and pad = 0 */ width=0; - pad = (-width) & 3; - if (info.bpp == 24) { - easy = 1; - } else if (info.bpp == 32) { - if (mb == 0xff && mg == 0xff00 && mr == 0x00ff0000 && ma == 0xff000000) - easy = 2; - } - if (!easy) { - if (!mr || !mg || !mb) { STBI_FREE(out); return stbi__errpuc("bad masks", "Corrupt BMP"); } - // right shift amt to put high bit in position #7 - rshift = stbi__high_bit(mr)-7; rcount = stbi__bitcount(mr); - gshift = stbi__high_bit(mg)-7; gcount = stbi__bitcount(mg); - bshift = stbi__high_bit(mb)-7; bcount = stbi__bitcount(mb); - ashift = stbi__high_bit(ma)-7; acount = stbi__bitcount(ma); - if (rcount > 8 || gcount > 8 || bcount > 8 || acount > 8) { STBI_FREE(out); return stbi__errpuc("bad masks", "Corrupt BMP"); } - } - for (j=0; j < (int) s->img_y; ++j) { - if (easy) { - for (i=0; i < (int) s->img_x; ++i) { - unsigned char a; - out[z+2] = stbi__get8(s); - out[z+1] = stbi__get8(s); - out[z+0] = stbi__get8(s); - z += 3; - a = (easy == 2 ? stbi__get8(s) : 255); - all_a |= a; - if (target == 4) out[z++] = a; - } - } else { - int bpp = info.bpp; - for (i=0; i < (int) s->img_x; ++i) { - stbi__uint32 v = (bpp == 16 ? (stbi__uint32) stbi__get16le(s) : stbi__get32le(s)); - unsigned int a; - out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mr, rshift, rcount)); - out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mg, gshift, gcount)); - out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mb, bshift, bcount)); - a = (ma ? stbi__shiftsigned(v & ma, ashift, acount) : 255); - all_a |= a; - if (target == 4) out[z++] = STBI__BYTECAST(a); - } - } - stbi__skip(s, pad); - } - } - - // if alpha channel is all 0s, replace with all 255s - if (target == 4 && all_a == 0) - for (i=4*s->img_x*s->img_y-1; i >= 0; i -= 4) - out[i] = 255; - - if (flip_vertically) { - stbi_uc t; - for (j=0; j < (int) s->img_y>>1; ++j) { - stbi_uc *p1 = out + j *s->img_x*target; - stbi_uc *p2 = out + (s->img_y-1-j)*s->img_x*target; - for (i=0; i < (int) s->img_x*target; ++i) { - t = p1[i]; p1[i] = p2[i]; p2[i] = t; - } - } - } - - if (req_comp && req_comp != target) { - out = stbi__convert_format(out, target, req_comp, s->img_x, s->img_y); - if (out == NULL) return out; // stbi__convert_format frees input on failure - } - - *x = s->img_x; - *y = s->img_y; - if (comp) *comp = s->img_n; - return out; -} -#endif - -// Targa Truevision - TGA -// by Jonathan Dummer -#ifndef STBI_NO_TGA -// returns STBI_rgb or whatever, 0 on error -static int stbi__tga_get_comp(int bits_per_pixel, int is_grey, int* is_rgb16) -{ - // only RGB or RGBA (incl. 16bit) or grey allowed - if (is_rgb16) *is_rgb16 = 0; - switch(bits_per_pixel) { - case 8: return STBI_grey; - case 16: if(is_grey) return STBI_grey_alpha; - // fallthrough - case 15: if(is_rgb16) *is_rgb16 = 1; - return STBI_rgb; - case 24: // fallthrough - case 32: return bits_per_pixel/8; - default: return 0; - } -} - -static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp) -{ - int tga_w, tga_h, tga_comp, tga_image_type, tga_bits_per_pixel, tga_colormap_bpp; - int sz, tga_colormap_type; - stbi__get8(s); // discard Offset - tga_colormap_type = stbi__get8(s); // colormap type - if( tga_colormap_type > 1 ) { - stbi__rewind(s); - return 0; // only RGB or indexed allowed - } - tga_image_type = stbi__get8(s); // image type - if ( tga_colormap_type == 1 ) { // colormapped (paletted) image - if (tga_image_type != 1 && tga_image_type != 9) { - stbi__rewind(s); - return 0; - } - stbi__skip(s,4); // skip index of first colormap entry and number of entries - sz = stbi__get8(s); // check bits per palette color entry - if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) { - stbi__rewind(s); - return 0; - } - stbi__skip(s,4); // skip image x and y origin - tga_colormap_bpp = sz; - } else { // "normal" image w/o colormap - only RGB or grey allowed, +/- RLE - if ( (tga_image_type != 2) && (tga_image_type != 3) && (tga_image_type != 10) && (tga_image_type != 11) ) { - stbi__rewind(s); - return 0; // only RGB or grey allowed, +/- RLE - } - stbi__skip(s,9); // skip colormap specification and image x/y origin - tga_colormap_bpp = 0; - } - tga_w = stbi__get16le(s); - if( tga_w < 1 ) { - stbi__rewind(s); - return 0; // test width - } - tga_h = stbi__get16le(s); - if( tga_h < 1 ) { - stbi__rewind(s); - return 0; // test height - } - tga_bits_per_pixel = stbi__get8(s); // bits per pixel - stbi__get8(s); // ignore alpha bits - if (tga_colormap_bpp != 0) { - if((tga_bits_per_pixel != 8) && (tga_bits_per_pixel != 16)) { - // when using a colormap, tga_bits_per_pixel is the size of the indexes - // I don't think anything but 8 or 16bit indexes makes sense - stbi__rewind(s); - return 0; - } - tga_comp = stbi__tga_get_comp(tga_colormap_bpp, 0, NULL); - } else { - tga_comp = stbi__tga_get_comp(tga_bits_per_pixel, (tga_image_type == 3) || (tga_image_type == 11), NULL); - } - if(!tga_comp) { - stbi__rewind(s); - return 0; - } - if (x) *x = tga_w; - if (y) *y = tga_h; - if (comp) *comp = tga_comp; - return 1; // seems to have passed everything -} - -static int stbi__tga_test(stbi__context *s) -{ - int res = 0; - int sz, tga_color_type; - stbi__get8(s); // discard Offset - tga_color_type = stbi__get8(s); // color type - if ( tga_color_type > 1 ) goto errorEnd; // only RGB or indexed allowed - sz = stbi__get8(s); // image type - if ( tga_color_type == 1 ) { // colormapped (paletted) image - if (sz != 1 && sz != 9) goto errorEnd; // colortype 1 demands image type 1 or 9 - stbi__skip(s,4); // skip index of first colormap entry and number of entries - sz = stbi__get8(s); // check bits per palette color entry - if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) goto errorEnd; - stbi__skip(s,4); // skip image x and y origin - } else { // "normal" image w/o colormap - if ( (sz != 2) && (sz != 3) && (sz != 10) && (sz != 11) ) goto errorEnd; // only RGB or grey allowed, +/- RLE - stbi__skip(s,9); // skip colormap specification and image x/y origin - } - if ( stbi__get16le(s) < 1 ) goto errorEnd; // test width - if ( stbi__get16le(s) < 1 ) goto errorEnd; // test height - sz = stbi__get8(s); // bits per pixel - if ( (tga_color_type == 1) && (sz != 8) && (sz != 16) ) goto errorEnd; // for colormapped images, bpp is size of an index - if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) goto errorEnd; - - res = 1; // if we got this far, everything's good and we can return 1 instead of 0 - -errorEnd: - stbi__rewind(s); - return res; -} - -// read 16bit value and convert to 24bit RGB -static void stbi__tga_read_rgb16(stbi__context *s, stbi_uc* out) -{ - stbi__uint16 px = (stbi__uint16)stbi__get16le(s); - stbi__uint16 fiveBitMask = 31; - // we have 3 channels with 5bits each - int r = (px >> 10) & fiveBitMask; - int g = (px >> 5) & fiveBitMask; - int b = px & fiveBitMask; - // Note that this saves the data in RGB(A) order, so it doesn't need to be swapped later - out[0] = (stbi_uc)((r * 255)/31); - out[1] = (stbi_uc)((g * 255)/31); - out[2] = (stbi_uc)((b * 255)/31); - - // some people claim that the most significant bit might be used for alpha - // (possibly if an alpha-bit is set in the "image descriptor byte") - // but that only made 16bit test images completely translucent.. - // so let's treat all 15 and 16bit TGAs as RGB with no alpha. -} - -static void *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) -{ - // read in the TGA header stuff - int tga_offset = stbi__get8(s); - int tga_indexed = stbi__get8(s); - int tga_image_type = stbi__get8(s); - int tga_is_RLE = 0; - int tga_palette_start = stbi__get16le(s); - int tga_palette_len = stbi__get16le(s); - int tga_palette_bits = stbi__get8(s); - int tga_x_origin = stbi__get16le(s); - int tga_y_origin = stbi__get16le(s); - int tga_width = stbi__get16le(s); - int tga_height = stbi__get16le(s); - int tga_bits_per_pixel = stbi__get8(s); - int tga_comp, tga_rgb16=0; - int tga_inverted = stbi__get8(s); - // int tga_alpha_bits = tga_inverted & 15; // the 4 lowest bits - unused (useless?) - // image data - unsigned char *tga_data; - unsigned char *tga_palette = NULL; - int i, j; - unsigned char raw_data[4] = {0}; - int RLE_count = 0; - int RLE_repeating = 0; - int read_next_pixel = 1; - STBI_NOTUSED(ri); - STBI_NOTUSED(tga_x_origin); // @TODO - STBI_NOTUSED(tga_y_origin); // @TODO - - if (tga_height > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); - if (tga_width > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); - - // do a tiny bit of precessing - if ( tga_image_type >= 8 ) - { - tga_image_type -= 8; - tga_is_RLE = 1; - } - tga_inverted = 1 - ((tga_inverted >> 5) & 1); - - // If I'm paletted, then I'll use the number of bits from the palette - if ( tga_indexed ) tga_comp = stbi__tga_get_comp(tga_palette_bits, 0, &tga_rgb16); - else tga_comp = stbi__tga_get_comp(tga_bits_per_pixel, (tga_image_type == 3), &tga_rgb16); - - if(!tga_comp) // shouldn't really happen, stbi__tga_test() should have ensured basic consistency - return stbi__errpuc("bad format", "Can't find out TGA pixelformat"); - - // tga info - *x = tga_width; - *y = tga_height; - if (comp) *comp = tga_comp; - - if (!stbi__mad3sizes_valid(tga_width, tga_height, tga_comp, 0)) - return stbi__errpuc("too large", "Corrupt TGA"); - - tga_data = (unsigned char*)stbi__malloc_mad3(tga_width, tga_height, tga_comp, 0); - if (!tga_data) return stbi__errpuc("outofmem", "Out of memory"); - - // skip to the data's starting position (offset usually = 0) - stbi__skip(s, tga_offset ); - - if ( !tga_indexed && !tga_is_RLE && !tga_rgb16 ) { - for (i=0; i < tga_height; ++i) { - int row = tga_inverted ? tga_height -i - 1 : i; - stbi_uc *tga_row = tga_data + row*tga_width*tga_comp; - stbi__getn(s, tga_row, tga_width * tga_comp); - } - } else { - // do I need to load a palette? - if ( tga_indexed) - { - if (tga_palette_len == 0) { /* you have to have at least one entry! */ - STBI_FREE(tga_data); - return stbi__errpuc("bad palette", "Corrupt TGA"); - } - - // any data to skip? (offset usually = 0) - stbi__skip(s, tga_palette_start ); - // load the palette - tga_palette = (unsigned char*)stbi__malloc_mad2(tga_palette_len, tga_comp, 0); - if (!tga_palette) { - STBI_FREE(tga_data); - return stbi__errpuc("outofmem", "Out of memory"); - } - if (tga_rgb16) { - stbi_uc *pal_entry = tga_palette; - STBI_ASSERT(tga_comp == STBI_rgb); - for (i=0; i < tga_palette_len; ++i) { - stbi__tga_read_rgb16(s, pal_entry); - pal_entry += tga_comp; - } - } else if (!stbi__getn(s, tga_palette, tga_palette_len * tga_comp)) { - STBI_FREE(tga_data); - STBI_FREE(tga_palette); - return stbi__errpuc("bad palette", "Corrupt TGA"); - } - } - // load the data - for (i=0; i < tga_width * tga_height; ++i) - { - // if I'm in RLE mode, do I need to get a RLE stbi__pngchunk? - if ( tga_is_RLE ) - { - if ( RLE_count == 0 ) - { - // yep, get the next byte as a RLE command - int RLE_cmd = stbi__get8(s); - RLE_count = 1 + (RLE_cmd & 127); - RLE_repeating = RLE_cmd >> 7; - read_next_pixel = 1; - } else if ( !RLE_repeating ) - { - read_next_pixel = 1; - } - } else - { - read_next_pixel = 1; - } - // OK, if I need to read a pixel, do it now - if ( read_next_pixel ) - { - // load however much data we did have - if ( tga_indexed ) - { - // read in index, then perform the lookup - int pal_idx = (tga_bits_per_pixel == 8) ? stbi__get8(s) : stbi__get16le(s); - if ( pal_idx >= tga_palette_len ) { - // invalid index - pal_idx = 0; - } - pal_idx *= tga_comp; - for (j = 0; j < tga_comp; ++j) { - raw_data[j] = tga_palette[pal_idx+j]; - } - } else if(tga_rgb16) { - STBI_ASSERT(tga_comp == STBI_rgb); - stbi__tga_read_rgb16(s, raw_data); - } else { - // read in the data raw - for (j = 0; j < tga_comp; ++j) { - raw_data[j] = stbi__get8(s); - } - } - // clear the reading flag for the next pixel - read_next_pixel = 0; - } // end of reading a pixel - - // copy data - for (j = 0; j < tga_comp; ++j) - tga_data[i*tga_comp+j] = raw_data[j]; - - // in case we're in RLE mode, keep counting down - --RLE_count; - } - // do I need to invert the image? - if ( tga_inverted ) - { - for (j = 0; j*2 < tga_height; ++j) - { - int index1 = j * tga_width * tga_comp; - int index2 = (tga_height - 1 - j) * tga_width * tga_comp; - for (i = tga_width * tga_comp; i > 0; --i) - { - unsigned char temp = tga_data[index1]; - tga_data[index1] = tga_data[index2]; - tga_data[index2] = temp; - ++index1; - ++index2; - } - } - } - // clear my palette, if I had one - if ( tga_palette != NULL ) - { - STBI_FREE( tga_palette ); - } - } - - // swap RGB - if the source data was RGB16, it already is in the right order - if (tga_comp >= 3 && !tga_rgb16) - { - unsigned char* tga_pixel = tga_data; - for (i=0; i < tga_width * tga_height; ++i) - { - unsigned char temp = tga_pixel[0]; - tga_pixel[0] = tga_pixel[2]; - tga_pixel[2] = temp; - tga_pixel += tga_comp; - } - } - - // convert to target component count - if (req_comp && req_comp != tga_comp) - tga_data = stbi__convert_format(tga_data, tga_comp, req_comp, tga_width, tga_height); - - // the things I do to get rid of an error message, and yet keep - // Microsoft's C compilers happy... [8^( - tga_palette_start = tga_palette_len = tga_palette_bits = - tga_x_origin = tga_y_origin = 0; - STBI_NOTUSED(tga_palette_start); - // OK, done - return tga_data; -} -#endif - -// ************************************************************************************************* -// Photoshop PSD loader -- PD by Thatcher Ulrich, integration by Nicolas Schulz, tweaked by STB - -#ifndef STBI_NO_PSD -static int stbi__psd_test(stbi__context *s) -{ - int r = (stbi__get32be(s) == 0x38425053); - stbi__rewind(s); - return r; -} - -static int stbi__psd_decode_rle(stbi__context *s, stbi_uc *p, int pixelCount) -{ - int count, nleft, len; - - count = 0; - while ((nleft = pixelCount - count) > 0) { - len = stbi__get8(s); - if (len == 128) { - // No-op. - } else if (len < 128) { - // Copy next len+1 bytes literally. - len++; - if (len > nleft) return 0; // corrupt data - count += len; - while (len) { - *p = stbi__get8(s); - p += 4; - len--; - } - } else if (len > 128) { - stbi_uc val; - // Next -len+1 bytes in the dest are replicated from next source byte. - // (Interpret len as a negative 8-bit int.) - len = 257 - len; - if (len > nleft) return 0; // corrupt data - val = stbi__get8(s); - count += len; - while (len) { - *p = val; - p += 4; - len--; - } - } - } - - return 1; -} - -static void *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc) -{ - int pixelCount; - int channelCount, compression; - int channel, i; - int bitdepth; - int w,h; - stbi_uc *out; - STBI_NOTUSED(ri); - - // Check identifier - if (stbi__get32be(s) != 0x38425053) // "8BPS" - return stbi__errpuc("not PSD", "Corrupt PSD image"); - - // Check file type version. - if (stbi__get16be(s) != 1) - return stbi__errpuc("wrong version", "Unsupported version of PSD image"); - - // Skip 6 reserved bytes. - stbi__skip(s, 6 ); - - // Read the number of channels (R, G, B, A, etc). - channelCount = stbi__get16be(s); - if (channelCount < 0 || channelCount > 16) - return stbi__errpuc("wrong channel count", "Unsupported number of channels in PSD image"); - - // Read the rows and columns of the image. - h = stbi__get32be(s); - w = stbi__get32be(s); - - if (h > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); - if (w > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); - - // Make sure the depth is 8 bits. - bitdepth = stbi__get16be(s); - if (bitdepth != 8 && bitdepth != 16) - return stbi__errpuc("unsupported bit depth", "PSD bit depth is not 8 or 16 bit"); - - // Make sure the color mode is RGB. - // Valid options are: - // 0: Bitmap - // 1: Grayscale - // 2: Indexed color - // 3: RGB color - // 4: CMYK color - // 7: Multichannel - // 8: Duotone - // 9: Lab color - if (stbi__get16be(s) != 3) - return stbi__errpuc("wrong color format", "PSD is not in RGB color format"); - - // Skip the Mode Data. (It's the palette for indexed color; other info for other modes.) - stbi__skip(s,stbi__get32be(s) ); - - // Skip the image resources. (resolution, pen tool paths, etc) - stbi__skip(s, stbi__get32be(s) ); - - // Skip the reserved data. - stbi__skip(s, stbi__get32be(s) ); - - // Find out if the data is compressed. - // Known values: - // 0: no compression - // 1: RLE compressed - compression = stbi__get16be(s); - if (compression > 1) - return stbi__errpuc("bad compression", "PSD has an unknown compression format"); - - // Check size - if (!stbi__mad3sizes_valid(4, w, h, 0)) - return stbi__errpuc("too large", "Corrupt PSD"); - - // Create the destination image. - - if (!compression && bitdepth == 16 && bpc == 16) { - out = (stbi_uc *) stbi__malloc_mad3(8, w, h, 0); - ri->bits_per_channel = 16; - } else - out = (stbi_uc *) stbi__malloc(4 * w*h); - - if (!out) return stbi__errpuc("outofmem", "Out of memory"); - pixelCount = w*h; - - // Initialize the data to zero. - //memset( out, 0, pixelCount * 4 ); - - // Finally, the image data. - if (compression) { - // RLE as used by .PSD and .TIFF - // Loop until you get the number of unpacked bytes you are expecting: - // Read the next source byte into n. - // If n is between 0 and 127 inclusive, copy the next n+1 bytes literally. - // Else if n is between -127 and -1 inclusive, copy the next byte -n+1 times. - // Else if n is 128, noop. - // Endloop - - // The RLE-compressed data is preceded by a 2-byte data count for each row in the data, - // which we're going to just skip. - stbi__skip(s, h * channelCount * 2 ); - - // Read the RLE data by channel. - for (channel = 0; channel < 4; channel++) { - stbi_uc *p; - - p = out+channel; - if (channel >= channelCount) { - // Fill this channel with default data. - for (i = 0; i < pixelCount; i++, p += 4) - *p = (channel == 3 ? 255 : 0); - } else { - // Read the RLE data. - if (!stbi__psd_decode_rle(s, p, pixelCount)) { - STBI_FREE(out); - return stbi__errpuc("corrupt", "bad RLE data"); - } - } - } - - } else { - // We're at the raw image data. It's each channel in order (Red, Green, Blue, Alpha, ...) - // where each channel consists of an 8-bit (or 16-bit) value for each pixel in the image. - - // Read the data by channel. - for (channel = 0; channel < 4; channel++) { - if (channel >= channelCount) { - // Fill this channel with default data. - if (bitdepth == 16 && bpc == 16) { - stbi__uint16 *q = ((stbi__uint16 *) out) + channel; - stbi__uint16 val = channel == 3 ? 65535 : 0; - for (i = 0; i < pixelCount; i++, q += 4) - *q = val; - } else { - stbi_uc *p = out+channel; - stbi_uc val = channel == 3 ? 255 : 0; - for (i = 0; i < pixelCount; i++, p += 4) - *p = val; - } - } else { - if (ri->bits_per_channel == 16) { // output bpc - stbi__uint16 *q = ((stbi__uint16 *) out) + channel; - for (i = 0; i < pixelCount; i++, q += 4) - *q = (stbi__uint16) stbi__get16be(s); - } else { - stbi_uc *p = out+channel; - if (bitdepth == 16) { // input bpc - for (i = 0; i < pixelCount; i++, p += 4) - *p = (stbi_uc) (stbi__get16be(s) >> 8); - } else { - for (i = 0; i < pixelCount; i++, p += 4) - *p = stbi__get8(s); - } - } - } - } - } - - // remove weird white matte from PSD - if (channelCount >= 4) { - if (ri->bits_per_channel == 16) { - for (i=0; i < w*h; ++i) { - stbi__uint16 *pixel = (stbi__uint16 *) out + 4*i; - if (pixel[3] != 0 && pixel[3] != 65535) { - float a = pixel[3] / 65535.0f; - float ra = 1.0f / a; - float inv_a = 65535.0f * (1 - ra); - pixel[0] = (stbi__uint16) (pixel[0]*ra + inv_a); - pixel[1] = (stbi__uint16) (pixel[1]*ra + inv_a); - pixel[2] = (stbi__uint16) (pixel[2]*ra + inv_a); - } - } - } else { - for (i=0; i < w*h; ++i) { - unsigned char *pixel = out + 4*i; - if (pixel[3] != 0 && pixel[3] != 255) { - float a = pixel[3] / 255.0f; - float ra = 1.0f / a; - float inv_a = 255.0f * (1 - ra); - pixel[0] = (unsigned char) (pixel[0]*ra + inv_a); - pixel[1] = (unsigned char) (pixel[1]*ra + inv_a); - pixel[2] = (unsigned char) (pixel[2]*ra + inv_a); - } - } - } - } - - // convert to desired output format - if (req_comp && req_comp != 4) { - if (ri->bits_per_channel == 16) - out = (stbi_uc *) stbi__convert_format16((stbi__uint16 *) out, 4, req_comp, w, h); - else - out = stbi__convert_format(out, 4, req_comp, w, h); - if (out == NULL) return out; // stbi__convert_format frees input on failure - } - - if (comp) *comp = 4; - *y = h; - *x = w; - - return out; -} -#endif - -// ************************************************************************************************* -// Softimage PIC loader -// by Tom Seddon -// -// See http://softimage.wiki.softimage.com/index.php/INFO:_PIC_file_format -// See http://ozviz.wasp.uwa.edu.au/~pbourke/dataformats/softimagepic/ - -#ifndef STBI_NO_PIC -static int stbi__pic_is4(stbi__context *s,const char *str) -{ - int i; - for (i=0; i<4; ++i) - if (stbi__get8(s) != (stbi_uc)str[i]) - return 0; - - return 1; -} - -static int stbi__pic_test_core(stbi__context *s) -{ - int i; - - if (!stbi__pic_is4(s,"\x53\x80\xF6\x34")) - return 0; - - for(i=0;i<84;++i) - stbi__get8(s); - - if (!stbi__pic_is4(s,"PICT")) - return 0; - - return 1; -} - -typedef struct -{ - stbi_uc size,type,channel; -} stbi__pic_packet; - -static stbi_uc *stbi__readval(stbi__context *s, int channel, stbi_uc *dest) -{ - int mask=0x80, i; - - for (i=0; i<4; ++i, mask>>=1) { - if (channel & mask) { - if (stbi__at_eof(s)) return stbi__errpuc("bad file","PIC file too short"); - dest[i]=stbi__get8(s); - } - } - - return dest; -} - -static void stbi__copyval(int channel,stbi_uc *dest,const stbi_uc *src) -{ - int mask=0x80,i; - - for (i=0;i<4; ++i, mask>>=1) - if (channel&mask) - dest[i]=src[i]; -} - -static stbi_uc *stbi__pic_load_core(stbi__context *s,int width,int height,int *comp, stbi_uc *result) -{ - int act_comp=0,num_packets=0,y,chained; - stbi__pic_packet packets[10]; - - // this will (should...) cater for even some bizarre stuff like having data - // for the same channel in multiple packets. - do { - stbi__pic_packet *packet; - - if (num_packets==sizeof(packets)/sizeof(packets[0])) - return stbi__errpuc("bad format","too many packets"); - - packet = &packets[num_packets++]; - - chained = stbi__get8(s); - packet->size = stbi__get8(s); - packet->type = stbi__get8(s); - packet->channel = stbi__get8(s); - - act_comp |= packet->channel; - - if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (reading packets)"); - if (packet->size != 8) return stbi__errpuc("bad format","packet isn't 8bpp"); - } while (chained); - - *comp = (act_comp & 0x10 ? 4 : 3); // has alpha channel? - - for(y=0; ytype) { - default: - return stbi__errpuc("bad format","packet has bad compression type"); - - case 0: {//uncompressed - int x; - - for(x=0;xchannel,dest)) - return 0; - break; - } - - case 1://Pure RLE - { - int left=width, i; - - while (left>0) { - stbi_uc count,value[4]; - - count=stbi__get8(s); - if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (pure read count)"); - - if (count > left) - count = (stbi_uc) left; - - if (!stbi__readval(s,packet->channel,value)) return 0; - - for(i=0; ichannel,dest,value); - left -= count; - } - } - break; - - case 2: {//Mixed RLE - int left=width; - while (left>0) { - int count = stbi__get8(s), i; - if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (mixed read count)"); - - if (count >= 128) { // Repeated - stbi_uc value[4]; - - if (count==128) - count = stbi__get16be(s); - else - count -= 127; - if (count > left) - return stbi__errpuc("bad file","scanline overrun"); - - if (!stbi__readval(s,packet->channel,value)) - return 0; - - for(i=0;ichannel,dest,value); - } else { // Raw - ++count; - if (count>left) return stbi__errpuc("bad file","scanline overrun"); - - for(i=0;ichannel,dest)) - return 0; - } - left-=count; - } - break; - } - } - } - } - - return result; -} - -static void *stbi__pic_load(stbi__context *s,int *px,int *py,int *comp,int req_comp, stbi__result_info *ri) -{ - stbi_uc *result; - int i, x,y, internal_comp; - STBI_NOTUSED(ri); - - if (!comp) comp = &internal_comp; - - for (i=0; i<92; ++i) - stbi__get8(s); - - x = stbi__get16be(s); - y = stbi__get16be(s); - - if (y > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); - if (x > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); - - if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (pic header)"); - if (!stbi__mad3sizes_valid(x, y, 4, 0)) return stbi__errpuc("too large", "PIC image too large to decode"); - - stbi__get32be(s); //skip `ratio' - stbi__get16be(s); //skip `fields' - stbi__get16be(s); //skip `pad' - - // intermediate buffer is RGBA - result = (stbi_uc *) stbi__malloc_mad3(x, y, 4, 0); - if (!result) return stbi__errpuc("outofmem", "Out of memory"); - memset(result, 0xff, x*y*4); - - if (!stbi__pic_load_core(s,x,y,comp, result)) { - STBI_FREE(result); - result=0; - } - *px = x; - *py = y; - if (req_comp == 0) req_comp = *comp; - result=stbi__convert_format(result,4,req_comp,x,y); - - return result; -} - -static int stbi__pic_test(stbi__context *s) -{ - int r = stbi__pic_test_core(s); - stbi__rewind(s); - return r; -} -#endif - -// ************************************************************************************************* -// GIF loader -- public domain by Jean-Marc Lienher -- simplified/shrunk by stb - -#ifndef STBI_NO_GIF -typedef struct -{ - stbi__int16 prefix; - stbi_uc first; - stbi_uc suffix; -} stbi__gif_lzw; - -typedef struct -{ - int w,h; - stbi_uc *out; // output buffer (always 4 components) - stbi_uc *background; // The current "background" as far as a gif is concerned - stbi_uc *history; - int flags, bgindex, ratio, transparent, eflags; - stbi_uc pal[256][4]; - stbi_uc lpal[256][4]; - stbi__gif_lzw codes[8192]; - stbi_uc *color_table; - int parse, step; - int lflags; - int start_x, start_y; - int max_x, max_y; - int cur_x, cur_y; - int line_size; - int delay; -} stbi__gif; - -static int stbi__gif_test_raw(stbi__context *s) -{ - int sz; - if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8') return 0; - sz = stbi__get8(s); - if (sz != '9' && sz != '7') return 0; - if (stbi__get8(s) != 'a') return 0; - return 1; -} - -static int stbi__gif_test(stbi__context *s) -{ - int r = stbi__gif_test_raw(s); - stbi__rewind(s); - return r; -} - -static void stbi__gif_parse_colortable(stbi__context *s, stbi_uc pal[256][4], int num_entries, int transp) -{ - int i; - for (i=0; i < num_entries; ++i) { - pal[i][2] = stbi__get8(s); - pal[i][1] = stbi__get8(s); - pal[i][0] = stbi__get8(s); - pal[i][3] = transp == i ? 0 : 255; - } -} - -static int stbi__gif_header(stbi__context *s, stbi__gif *g, int *comp, int is_info) -{ - stbi_uc version; - if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8') - return stbi__err("not GIF", "Corrupt GIF"); - - version = stbi__get8(s); - if (version != '7' && version != '9') return stbi__err("not GIF", "Corrupt GIF"); - if (stbi__get8(s) != 'a') return stbi__err("not GIF", "Corrupt GIF"); - - stbi__g_failure_reason = ""; - g->w = stbi__get16le(s); - g->h = stbi__get16le(s); - g->flags = stbi__get8(s); - g->bgindex = stbi__get8(s); - g->ratio = stbi__get8(s); - g->transparent = -1; - - if (g->w > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); - if (g->h > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); - - if (comp != 0) *comp = 4; // can't actually tell whether it's 3 or 4 until we parse the comments - - if (is_info) return 1; - - if (g->flags & 0x80) - stbi__gif_parse_colortable(s,g->pal, 2 << (g->flags & 7), -1); - - return 1; -} - -static int stbi__gif_info_raw(stbi__context *s, int *x, int *y, int *comp) -{ - stbi__gif* g = (stbi__gif*) stbi__malloc(sizeof(stbi__gif)); - if (!g) return stbi__err("outofmem", "Out of memory"); - if (!stbi__gif_header(s, g, comp, 1)) { - STBI_FREE(g); - stbi__rewind( s ); - return 0; - } - if (x) *x = g->w; - if (y) *y = g->h; - STBI_FREE(g); - return 1; -} - -static void stbi__out_gif_code(stbi__gif *g, stbi__uint16 code) -{ - stbi_uc *p, *c; - int idx; - - // recurse to decode the prefixes, since the linked-list is backwards, - // and working backwards through an interleaved image would be nasty - if (g->codes[code].prefix >= 0) - stbi__out_gif_code(g, g->codes[code].prefix); - - if (g->cur_y >= g->max_y) return; - - idx = g->cur_x + g->cur_y; - p = &g->out[idx]; - g->history[idx / 4] = 1; - - c = &g->color_table[g->codes[code].suffix * 4]; - if (c[3] > 128) { // don't render transparent pixels; - p[0] = c[2]; - p[1] = c[1]; - p[2] = c[0]; - p[3] = c[3]; - } - g->cur_x += 4; - - if (g->cur_x >= g->max_x) { - g->cur_x = g->start_x; - g->cur_y += g->step; - - while (g->cur_y >= g->max_y && g->parse > 0) { - g->step = (1 << g->parse) * g->line_size; - g->cur_y = g->start_y + (g->step >> 1); - --g->parse; - } - } -} - -static stbi_uc *stbi__process_gif_raster(stbi__context *s, stbi__gif *g) -{ - stbi_uc lzw_cs; - stbi__int32 len, init_code; - stbi__uint32 first; - stbi__int32 codesize, codemask, avail, oldcode, bits, valid_bits, clear; - stbi__gif_lzw *p; - - lzw_cs = stbi__get8(s); - if (lzw_cs > 12) return NULL; - clear = 1 << lzw_cs; - first = 1; - codesize = lzw_cs + 1; - codemask = (1 << codesize) - 1; - bits = 0; - valid_bits = 0; - for (init_code = 0; init_code < clear; init_code++) { - g->codes[init_code].prefix = -1; - g->codes[init_code].first = (stbi_uc) init_code; - g->codes[init_code].suffix = (stbi_uc) init_code; - } - - // support no starting clear code - avail = clear+2; - oldcode = -1; - - len = 0; - for(;;) { - if (valid_bits < codesize) { - if (len == 0) { - len = stbi__get8(s); // start new block - if (len == 0) - return g->out; - } - --len; - bits |= (stbi__int32) stbi__get8(s) << valid_bits; - valid_bits += 8; - } else { - stbi__int32 code = bits & codemask; - bits >>= codesize; - valid_bits -= codesize; - // @OPTIMIZE: is there some way we can accelerate the non-clear path? - if (code == clear) { // clear code - codesize = lzw_cs + 1; - codemask = (1 << codesize) - 1; - avail = clear + 2; - oldcode = -1; - first = 0; - } else if (code == clear + 1) { // end of stream code - stbi__skip(s, len); - while ((len = stbi__get8(s)) > 0) - stbi__skip(s,len); - return g->out; - } else if (code <= avail) { - if (first) { - return stbi__errpuc("no clear code", "Corrupt GIF"); - } - - if (oldcode >= 0) { - p = &g->codes[avail++]; - if (avail > 8192) { - return stbi__errpuc("too many codes", "Corrupt GIF"); - } - - p->prefix = (stbi__int16) oldcode; - p->first = g->codes[oldcode].first; - p->suffix = (code == avail) ? p->first : g->codes[code].first; - } else if (code == avail) - return stbi__errpuc("illegal code in raster", "Corrupt GIF"); - - stbi__out_gif_code(g, (stbi__uint16) code); - - if ((avail & codemask) == 0 && avail <= 0x0FFF) { - codesize++; - codemask = (1 << codesize) - 1; - } - - oldcode = code; - } else { - return stbi__errpuc("illegal code in raster", "Corrupt GIF"); - } - } - } -} - -// this function is designed to support animated gifs, although stb_image doesn't support it -// two back is the image from two frames ago, used for a very specific disposal format -static stbi_uc *stbi__gif_load_next(stbi__context *s, stbi__gif *g, int *comp, int req_comp, stbi_uc *two_back) -{ - int dispose; - int first_frame; - int pi; - int pcount; - STBI_NOTUSED(req_comp); - - // on first frame, any non-written pixels get the background colour (non-transparent) - first_frame = 0; - if (g->out == 0) { - if (!stbi__gif_header(s, g, comp,0)) return 0; // stbi__g_failure_reason set by stbi__gif_header - if (!stbi__mad3sizes_valid(4, g->w, g->h, 0)) - return stbi__errpuc("too large", "GIF image is too large"); - pcount = g->w * g->h; - g->out = (stbi_uc *) stbi__malloc(4 * pcount); - g->background = (stbi_uc *) stbi__malloc(4 * pcount); - g->history = (stbi_uc *) stbi__malloc(pcount); - if (!g->out || !g->background || !g->history) - return stbi__errpuc("outofmem", "Out of memory"); - - // image is treated as "transparent" at the start - ie, nothing overwrites the current background; - // background colour is only used for pixels that are not rendered first frame, after that "background" - // color refers to the color that was there the previous frame. - memset(g->out, 0x00, 4 * pcount); - memset(g->background, 0x00, 4 * pcount); // state of the background (starts transparent) - memset(g->history, 0x00, pcount); // pixels that were affected previous frame - first_frame = 1; - } else { - // second frame - how do we dispose of the previous one? - dispose = (g->eflags & 0x1C) >> 2; - pcount = g->w * g->h; - - if ((dispose == 3) && (two_back == 0)) { - dispose = 2; // if I don't have an image to revert back to, default to the old background - } - - if (dispose == 3) { // use previous graphic - for (pi = 0; pi < pcount; ++pi) { - if (g->history[pi]) { - memcpy( &g->out[pi * 4], &two_back[pi * 4], 4 ); - } - } - } else if (dispose == 2) { - // restore what was changed last frame to background before that frame; - for (pi = 0; pi < pcount; ++pi) { - if (g->history[pi]) { - memcpy( &g->out[pi * 4], &g->background[pi * 4], 4 ); - } - } - } else { - // This is a non-disposal case eithe way, so just - // leave the pixels as is, and they will become the new background - // 1: do not dispose - // 0: not specified. - } - - // background is what out is after the undoing of the previou frame; - memcpy( g->background, g->out, 4 * g->w * g->h ); - } - - // clear my history; - memset( g->history, 0x00, g->w * g->h ); // pixels that were affected previous frame - - for (;;) { - int tag = stbi__get8(s); - switch (tag) { - case 0x2C: /* Image Descriptor */ - { - stbi__int32 x, y, w, h; - stbi_uc *o; - - x = stbi__get16le(s); - y = stbi__get16le(s); - w = stbi__get16le(s); - h = stbi__get16le(s); - if (((x + w) > (g->w)) || ((y + h) > (g->h))) - return stbi__errpuc("bad Image Descriptor", "Corrupt GIF"); - - g->line_size = g->w * 4; - g->start_x = x * 4; - g->start_y = y * g->line_size; - g->max_x = g->start_x + w * 4; - g->max_y = g->start_y + h * g->line_size; - g->cur_x = g->start_x; - g->cur_y = g->start_y; - - // if the width of the specified rectangle is 0, that means - // we may not see *any* pixels or the image is malformed; - // to make sure this is caught, move the current y down to - // max_y (which is what out_gif_code checks). - if (w == 0) - g->cur_y = g->max_y; - - g->lflags = stbi__get8(s); - - if (g->lflags & 0x40) { - g->step = 8 * g->line_size; // first interlaced spacing - g->parse = 3; - } else { - g->step = g->line_size; - g->parse = 0; - } - - if (g->lflags & 0x80) { - stbi__gif_parse_colortable(s,g->lpal, 2 << (g->lflags & 7), g->eflags & 0x01 ? g->transparent : -1); - g->color_table = (stbi_uc *) g->lpal; - } else if (g->flags & 0x80) { - g->color_table = (stbi_uc *) g->pal; - } else - return stbi__errpuc("missing color table", "Corrupt GIF"); - - o = stbi__process_gif_raster(s, g); - if (!o) return NULL; - - // if this was the first frame, - pcount = g->w * g->h; - if (first_frame && (g->bgindex > 0)) { - // if first frame, any pixel not drawn to gets the background color - for (pi = 0; pi < pcount; ++pi) { - if (g->history[pi] == 0) { - g->pal[g->bgindex][3] = 255; // just in case it was made transparent, undo that; It will be reset next frame if need be; - memcpy( &g->out[pi * 4], &g->pal[g->bgindex], 4 ); - } - } - } - - return o; - } - - case 0x21: // Comment Extension. - { - int len; - int ext = stbi__get8(s); - if (ext == 0xF9) { // Graphic Control Extension. - len = stbi__get8(s); - if (len == 4) { - g->eflags = stbi__get8(s); - g->delay = 10 * stbi__get16le(s); // delay - 1/100th of a second, saving as 1/1000ths. - - // unset old transparent - if (g->transparent >= 0) { - g->pal[g->transparent][3] = 255; - } - if (g->eflags & 0x01) { - g->transparent = stbi__get8(s); - if (g->transparent >= 0) { - g->pal[g->transparent][3] = 0; - } - } else { - // don't need transparent - stbi__skip(s, 1); - g->transparent = -1; - } - } else { - stbi__skip(s, len); - break; - } - } - while ((len = stbi__get8(s)) != 0) { - stbi__skip(s, len); - } - break; - } - - case 0x3B: // gif stream termination code - return (stbi_uc *) s; // using '1' causes warning on some compilers - - default: - return stbi__errpuc("unknown code", "Corrupt GIF"); - } - } -} - -static void *stbi__load_gif_main_outofmem(stbi__gif *g, stbi_uc *out, int **delays) -{ - STBI_FREE(g->out); - STBI_FREE(g->history); - STBI_FREE(g->background); - - if (out) STBI_FREE(out); - if (delays && *delays) STBI_FREE(*delays); - return stbi__errpuc("outofmem", "Out of memory"); -} - -static void *stbi__load_gif_main(stbi__context *s, int **delays, int *x, int *y, int *z, int *comp, int req_comp) -{ - if (stbi__gif_test(s)) { - int layers = 0; - stbi_uc *u = 0; - stbi_uc *out = 0; - stbi_uc *two_back = 0; - stbi__gif g; - int stride; - int out_size = 0; - int delays_size = 0; - - STBI_NOTUSED(out_size); - STBI_NOTUSED(delays_size); - - memset(&g, 0, sizeof(g)); - if (delays) { - *delays = 0; - } - - do { - u = stbi__gif_load_next(s, &g, comp, req_comp, two_back); - if (u == (stbi_uc *) s) u = 0; // end of animated gif marker - - if (u) { - *x = g.w; - *y = g.h; - ++layers; - stride = g.w * g.h * 4; - - if (out) { - void *tmp = (stbi_uc*) STBI_REALLOC_SIZED( out, out_size, layers * stride ); - if (!tmp) - return stbi__load_gif_main_outofmem(&g, out, delays); - else { - out = (stbi_uc*) tmp; - out_size = layers * stride; - } - - if (delays) { - int *new_delays = (int*) STBI_REALLOC_SIZED( *delays, delays_size, sizeof(int) * layers ); - if (!new_delays) - return stbi__load_gif_main_outofmem(&g, out, delays); - *delays = new_delays; - delays_size = layers * sizeof(int); - } - } else { - out = (stbi_uc*)stbi__malloc( layers * stride ); - if (!out) - return stbi__load_gif_main_outofmem(&g, out, delays); - out_size = layers * stride; - if (delays) { - *delays = (int*) stbi__malloc( layers * sizeof(int) ); - if (!*delays) - return stbi__load_gif_main_outofmem(&g, out, delays); - delays_size = layers * sizeof(int); - } - } - memcpy( out + ((layers - 1) * stride), u, stride ); - if (layers >= 2) { - two_back = out - 2 * stride; - } - - if (delays) { - (*delays)[layers - 1U] = g.delay; - } - } - } while (u != 0); - - // free temp buffer; - STBI_FREE(g.out); - STBI_FREE(g.history); - STBI_FREE(g.background); - - // do the final conversion after loading everything; - if (req_comp && req_comp != 4) - out = stbi__convert_format(out, 4, req_comp, layers * g.w, g.h); - - *z = layers; - return out; - } else { - return stbi__errpuc("not GIF", "Image was not as a gif type."); - } -} - -static void *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) -{ - stbi_uc *u = 0; - stbi__gif g; - memset(&g, 0, sizeof(g)); - STBI_NOTUSED(ri); - - u = stbi__gif_load_next(s, &g, comp, req_comp, 0); - if (u == (stbi_uc *) s) u = 0; // end of animated gif marker - if (u) { - *x = g.w; - *y = g.h; - - // moved conversion to after successful load so that the same - // can be done for multiple frames. - if (req_comp && req_comp != 4) - u = stbi__convert_format(u, 4, req_comp, g.w, g.h); - } else if (g.out) { - // if there was an error and we allocated an image buffer, free it! - STBI_FREE(g.out); - } - - // free buffers needed for multiple frame loading; - STBI_FREE(g.history); - STBI_FREE(g.background); - - return u; -} - -static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp) -{ - return stbi__gif_info_raw(s,x,y,comp); -} -#endif - -// ************************************************************************************************* -// Radiance RGBE HDR loader -// originally by Nicolas Schulz -#ifndef STBI_NO_HDR -static int stbi__hdr_test_core(stbi__context *s, const char *signature) -{ - int i; - for (i=0; signature[i]; ++i) - if (stbi__get8(s) != signature[i]) - return 0; - stbi__rewind(s); - return 1; -} - -static int stbi__hdr_test(stbi__context* s) -{ - int r = stbi__hdr_test_core(s, "#?RADIANCE\n"); - stbi__rewind(s); - if(!r) { - r = stbi__hdr_test_core(s, "#?RGBE\n"); - stbi__rewind(s); - } - return r; -} - -#define STBI__HDR_BUFLEN 1024 -static char *stbi__hdr_gettoken(stbi__context *z, char *buffer) -{ - int len=0; - char c = '\0'; - - c = (char) stbi__get8(z); - - while (!stbi__at_eof(z) && c != '\n') { - buffer[len++] = c; - if (len == STBI__HDR_BUFLEN-1) { - // flush to end of line - while (!stbi__at_eof(z) && stbi__get8(z) != '\n') - ; - break; - } - c = (char) stbi__get8(z); - } - - buffer[len] = 0; - return buffer; -} - -static void stbi__hdr_convert(float *output, stbi_uc *input, int req_comp) -{ - if ( input[3] != 0 ) { - float f1; - // Exponent - f1 = (float) ldexp(1.0f, input[3] - (int)(128 + 8)); - if (req_comp <= 2) - output[0] = (input[0] + input[1] + input[2]) * f1 / 3; - else { - output[0] = input[0] * f1; - output[1] = input[1] * f1; - output[2] = input[2] * f1; - } - if (req_comp == 2) output[1] = 1; - if (req_comp == 4) output[3] = 1; - } else { - switch (req_comp) { - case 4: output[3] = 1; /* fallthrough */ - case 3: output[0] = output[1] = output[2] = 0; - break; - case 2: output[1] = 1; /* fallthrough */ - case 1: output[0] = 0; - break; - } - } -} - -static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) -{ - char buffer[STBI__HDR_BUFLEN]; - char *token; - int valid = 0; - int width, height; - stbi_uc *scanline; - float *hdr_data; - int len; - unsigned char count, value; - int i, j, k, c1,c2, z; - const char *headerToken; - STBI_NOTUSED(ri); - - // Check identifier - headerToken = stbi__hdr_gettoken(s,buffer); - if (strcmp(headerToken, "#?RADIANCE") != 0 && strcmp(headerToken, "#?RGBE") != 0) - return stbi__errpf("not HDR", "Corrupt HDR image"); - - // Parse header - for(;;) { - token = stbi__hdr_gettoken(s,buffer); - if (token[0] == 0) break; - if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; - } - - if (!valid) return stbi__errpf("unsupported format", "Unsupported HDR format"); - - // Parse width and height - // can't use sscanf() if we're not using stdio! - token = stbi__hdr_gettoken(s,buffer); - if (strncmp(token, "-Y ", 3)) return stbi__errpf("unsupported data layout", "Unsupported HDR format"); - token += 3; - height = (int) strtol(token, &token, 10); - while (*token == ' ') ++token; - if (strncmp(token, "+X ", 3)) return stbi__errpf("unsupported data layout", "Unsupported HDR format"); - token += 3; - width = (int) strtol(token, NULL, 10); - - if (height > STBI_MAX_DIMENSIONS) return stbi__errpf("too large","Very large image (corrupt?)"); - if (width > STBI_MAX_DIMENSIONS) return stbi__errpf("too large","Very large image (corrupt?)"); - - *x = width; - *y = height; - - if (comp) *comp = 3; - if (req_comp == 0) req_comp = 3; - - if (!stbi__mad4sizes_valid(width, height, req_comp, sizeof(float), 0)) - return stbi__errpf("too large", "HDR image is too large"); - - // Read data - hdr_data = (float *) stbi__malloc_mad4(width, height, req_comp, sizeof(float), 0); - if (!hdr_data) - return stbi__errpf("outofmem", "Out of memory"); - - // Load image data - // image data is stored as some number of sca - if ( width < 8 || width >= 32768) { - // Read flat data - for (j=0; j < height; ++j) { - for (i=0; i < width; ++i) { - stbi_uc rgbe[4]; - main_decode_loop: - stbi__getn(s, rgbe, 4); - stbi__hdr_convert(hdr_data + j * width * req_comp + i * req_comp, rgbe, req_comp); - } - } - } else { - // Read RLE-encoded data - scanline = NULL; - - for (j = 0; j < height; ++j) { - c1 = stbi__get8(s); - c2 = stbi__get8(s); - len = stbi__get8(s); - if (c1 != 2 || c2 != 2 || (len & 0x80)) { - // not run-length encoded, so we have to actually use THIS data as a decoded - // pixel (note this can't be a valid pixel--one of RGB must be >= 128) - stbi_uc rgbe[4]; - rgbe[0] = (stbi_uc) c1; - rgbe[1] = (stbi_uc) c2; - rgbe[2] = (stbi_uc) len; - rgbe[3] = (stbi_uc) stbi__get8(s); - stbi__hdr_convert(hdr_data, rgbe, req_comp); - i = 1; - j = 0; - STBI_FREE(scanline); - goto main_decode_loop; // yes, this makes no sense - } - len <<= 8; - len |= stbi__get8(s); - if (len != width) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("invalid decoded scanline length", "corrupt HDR"); } - if (scanline == NULL) { - scanline = (stbi_uc *) stbi__malloc_mad2(width, 4, 0); - if (!scanline) { - STBI_FREE(hdr_data); - return stbi__errpf("outofmem", "Out of memory"); - } - } - - for (k = 0; k < 4; ++k) { - int nleft; - i = 0; - while ((nleft = width - i) > 0) { - count = stbi__get8(s); - if (count > 128) { - // Run - value = stbi__get8(s); - count -= 128; - if (count > nleft) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("corrupt", "bad RLE data in HDR"); } - for (z = 0; z < count; ++z) - scanline[i++ * 4 + k] = value; - } else { - // Dump - if (count > nleft) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("corrupt", "bad RLE data in HDR"); } - for (z = 0; z < count; ++z) - scanline[i++ * 4 + k] = stbi__get8(s); - } - } - } - for (i=0; i < width; ++i) - stbi__hdr_convert(hdr_data+(j*width + i)*req_comp, scanline + i*4, req_comp); - } - if (scanline) - STBI_FREE(scanline); - } - - return hdr_data; -} - -static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp) -{ - char buffer[STBI__HDR_BUFLEN]; - char *token; - int valid = 0; - int dummy; - - if (!x) x = &dummy; - if (!y) y = &dummy; - if (!comp) comp = &dummy; - - if (stbi__hdr_test(s) == 0) { - stbi__rewind( s ); - return 0; - } - - for(;;) { - token = stbi__hdr_gettoken(s,buffer); - if (token[0] == 0) break; - if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; - } - - if (!valid) { - stbi__rewind( s ); - return 0; - } - token = stbi__hdr_gettoken(s,buffer); - if (strncmp(token, "-Y ", 3)) { - stbi__rewind( s ); - return 0; - } - token += 3; - *y = (int) strtol(token, &token, 10); - while (*token == ' ') ++token; - if (strncmp(token, "+X ", 3)) { - stbi__rewind( s ); - return 0; - } - token += 3; - *x = (int) strtol(token, NULL, 10); - *comp = 3; - return 1; -} -#endif // STBI_NO_HDR - -#ifndef STBI_NO_BMP -static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp) -{ - void *p; - stbi__bmp_data info; - - info.all_a = 255; - p = stbi__bmp_parse_header(s, &info); - if (p == NULL) { - stbi__rewind( s ); - return 0; - } - if (x) *x = s->img_x; - if (y) *y = s->img_y; - if (comp) { - if (info.bpp == 24 && info.ma == 0xff000000) - *comp = 3; - else - *comp = info.ma ? 4 : 3; - } - return 1; -} -#endif - -#ifndef STBI_NO_PSD -static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp) -{ - int channelCount, dummy, depth; - if (!x) x = &dummy; - if (!y) y = &dummy; - if (!comp) comp = &dummy; - if (stbi__get32be(s) != 0x38425053) { - stbi__rewind( s ); - return 0; - } - if (stbi__get16be(s) != 1) { - stbi__rewind( s ); - return 0; - } - stbi__skip(s, 6); - channelCount = stbi__get16be(s); - if (channelCount < 0 || channelCount > 16) { - stbi__rewind( s ); - return 0; - } - *y = stbi__get32be(s); - *x = stbi__get32be(s); - depth = stbi__get16be(s); - if (depth != 8 && depth != 16) { - stbi__rewind( s ); - return 0; - } - if (stbi__get16be(s) != 3) { - stbi__rewind( s ); - return 0; - } - *comp = 4; - return 1; -} - -static int stbi__psd_is16(stbi__context *s) -{ - int channelCount, depth; - if (stbi__get32be(s) != 0x38425053) { - stbi__rewind( s ); - return 0; - } - if (stbi__get16be(s) != 1) { - stbi__rewind( s ); - return 0; - } - stbi__skip(s, 6); - channelCount = stbi__get16be(s); - if (channelCount < 0 || channelCount > 16) { - stbi__rewind( s ); - return 0; - } - STBI_NOTUSED(stbi__get32be(s)); - STBI_NOTUSED(stbi__get32be(s)); - depth = stbi__get16be(s); - if (depth != 16) { - stbi__rewind( s ); - return 0; - } - return 1; -} -#endif - -#ifndef STBI_NO_PIC -static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp) -{ - int act_comp=0,num_packets=0,chained,dummy; - stbi__pic_packet packets[10]; - - if (!x) x = &dummy; - if (!y) y = &dummy; - if (!comp) comp = &dummy; - - if (!stbi__pic_is4(s,"\x53\x80\xF6\x34")) { - stbi__rewind(s); - return 0; - } - - stbi__skip(s, 88); - - *x = stbi__get16be(s); - *y = stbi__get16be(s); - if (stbi__at_eof(s)) { - stbi__rewind( s); - return 0; - } - if ( (*x) != 0 && (1 << 28) / (*x) < (*y)) { - stbi__rewind( s ); - return 0; - } - - stbi__skip(s, 8); - - do { - stbi__pic_packet *packet; - - if (num_packets==sizeof(packets)/sizeof(packets[0])) - return 0; - - packet = &packets[num_packets++]; - chained = stbi__get8(s); - packet->size = stbi__get8(s); - packet->type = stbi__get8(s); - packet->channel = stbi__get8(s); - act_comp |= packet->channel; - - if (stbi__at_eof(s)) { - stbi__rewind( s ); - return 0; - } - if (packet->size != 8) { - stbi__rewind( s ); - return 0; - } - } while (chained); - - *comp = (act_comp & 0x10 ? 4 : 3); - - return 1; -} -#endif - -// ************************************************************************************************* -// Portable Gray Map and Portable Pixel Map loader -// by Ken Miller -// -// PGM: http://netpbm.sourceforge.net/doc/pgm.html -// PPM: http://netpbm.sourceforge.net/doc/ppm.html -// -// Known limitations: -// Does not support comments in the header section -// Does not support ASCII image data (formats P2 and P3) - -#ifndef STBI_NO_PNM - -static int stbi__pnm_test(stbi__context *s) -{ - char p, t; - p = (char) stbi__get8(s); - t = (char) stbi__get8(s); - if (p != 'P' || (t != '5' && t != '6')) { - stbi__rewind( s ); - return 0; - } - return 1; -} - -static void *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) -{ - stbi_uc *out; - STBI_NOTUSED(ri); - - ri->bits_per_channel = stbi__pnm_info(s, (int *)&s->img_x, (int *)&s->img_y, (int *)&s->img_n); - if (ri->bits_per_channel == 0) - return 0; - - if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); - if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); - - *x = s->img_x; - *y = s->img_y; - if (comp) *comp = s->img_n; - - if (!stbi__mad4sizes_valid(s->img_n, s->img_x, s->img_y, ri->bits_per_channel / 8, 0)) - return stbi__errpuc("too large", "PNM too large"); - - out = (stbi_uc *) stbi__malloc_mad4(s->img_n, s->img_x, s->img_y, ri->bits_per_channel / 8, 0); - if (!out) return stbi__errpuc("outofmem", "Out of memory"); - stbi__getn(s, out, s->img_n * s->img_x * s->img_y * (ri->bits_per_channel / 8)); - - if (req_comp && req_comp != s->img_n) { - out = stbi__convert_format(out, s->img_n, req_comp, s->img_x, s->img_y); - if (out == NULL) return out; // stbi__convert_format frees input on failure - } - return out; -} - -static int stbi__pnm_isspace(char c) -{ - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; -} - -static void stbi__pnm_skip_whitespace(stbi__context *s, char *c) -{ - for (;;) { - while (!stbi__at_eof(s) && stbi__pnm_isspace(*c)) - *c = (char) stbi__get8(s); - - if (stbi__at_eof(s) || *c != '#') - break; - - while (!stbi__at_eof(s) && *c != '\n' && *c != '\r' ) - *c = (char) stbi__get8(s); - } -} - -static int stbi__pnm_isdigit(char c) -{ - return c >= '0' && c <= '9'; -} - -static int stbi__pnm_getinteger(stbi__context *s, char *c) -{ - int value = 0; - - while (!stbi__at_eof(s) && stbi__pnm_isdigit(*c)) { - value = value*10 + (*c - '0'); - *c = (char) stbi__get8(s); - } - - return value; -} - -static int stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp) -{ - int maxv, dummy; - char c, p, t; - - if (!x) x = &dummy; - if (!y) y = &dummy; - if (!comp) comp = &dummy; - - stbi__rewind(s); - - // Get identifier - p = (char) stbi__get8(s); - t = (char) stbi__get8(s); - if (p != 'P' || (t != '5' && t != '6')) { - stbi__rewind(s); - return 0; - } - - *comp = (t == '6') ? 3 : 1; // '5' is 1-component .pgm; '6' is 3-component .ppm - - c = (char) stbi__get8(s); - stbi__pnm_skip_whitespace(s, &c); - - *x = stbi__pnm_getinteger(s, &c); // read width - stbi__pnm_skip_whitespace(s, &c); - - *y = stbi__pnm_getinteger(s, &c); // read height - stbi__pnm_skip_whitespace(s, &c); - - maxv = stbi__pnm_getinteger(s, &c); // read max value - if (maxv > 65535) - return stbi__err("max value > 65535", "PPM image supports only 8-bit and 16-bit images"); - else if (maxv > 255) - return 16; - else - return 8; -} - -static int stbi__pnm_is16(stbi__context *s) -{ - if (stbi__pnm_info(s, NULL, NULL, NULL) == 16) - return 1; - return 0; -} -#endif - -static int stbi__info_main(stbi__context *s, int *x, int *y, int *comp) -{ - #ifndef STBI_NO_JPEG - if (stbi__jpeg_info(s, x, y, comp)) return 1; - #endif - - #ifndef STBI_NO_PNG - if (stbi__png_info(s, x, y, comp)) return 1; - #endif - - #ifndef STBI_NO_GIF - if (stbi__gif_info(s, x, y, comp)) return 1; - #endif - - #ifndef STBI_NO_BMP - if (stbi__bmp_info(s, x, y, comp)) return 1; - #endif - - #ifndef STBI_NO_PSD - if (stbi__psd_info(s, x, y, comp)) return 1; - #endif - - #ifndef STBI_NO_PIC - if (stbi__pic_info(s, x, y, comp)) return 1; - #endif - - #ifndef STBI_NO_PNM - if (stbi__pnm_info(s, x, y, comp)) return 1; - #endif - - #ifndef STBI_NO_HDR - if (stbi__hdr_info(s, x, y, comp)) return 1; - #endif - - // test tga last because it's a crappy test! - #ifndef STBI_NO_TGA - if (stbi__tga_info(s, x, y, comp)) - return 1; - #endif - return stbi__err("unknown image type", "Image not of any known type, or corrupt"); -} - -static int stbi__is_16_main(stbi__context *s) -{ - #ifndef STBI_NO_PNG - if (stbi__png_is16(s)) return 1; - #endif - - #ifndef STBI_NO_PSD - if (stbi__psd_is16(s)) return 1; - #endif - - #ifndef STBI_NO_PNM - if (stbi__pnm_is16(s)) return 1; - #endif - return 0; -} - -#ifndef STBI_NO_STDIO -STBIDEF int stbi_info(char const *filename, int *x, int *y, int *comp) -{ - FILE *f = stbi__fopen(filename, "rb"); - int result; - if (!f) return stbi__err("can't fopen", "Unable to open file"); - result = stbi_info_from_file(f, x, y, comp); - fclose(f); - return result; -} - -STBIDEF int stbi_info_from_file(FILE *f, int *x, int *y, int *comp) -{ - int r; - stbi__context s; - long pos = ftell(f); - stbi__start_file(&s, f); - r = stbi__info_main(&s,x,y,comp); - fseek(f,pos,SEEK_SET); - return r; -} - -STBIDEF int stbi_is_16_bit(char const *filename) -{ - FILE *f = stbi__fopen(filename, "rb"); - int result; - if (!f) return stbi__err("can't fopen", "Unable to open file"); - result = stbi_is_16_bit_from_file(f); - fclose(f); - return result; -} - -STBIDEF int stbi_is_16_bit_from_file(FILE *f) -{ - int r; - stbi__context s; - long pos = ftell(f); - stbi__start_file(&s, f); - r = stbi__is_16_main(&s); - fseek(f,pos,SEEK_SET); - return r; -} -#endif // !STBI_NO_STDIO - -STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp) -{ - stbi__context s; - stbi__start_mem(&s,buffer,len); - return stbi__info_main(&s,x,y,comp); -} - -STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *c, void *user, int *x, int *y, int *comp) -{ - stbi__context s; - stbi__start_callbacks(&s, (stbi_io_callbacks *) c, user); - return stbi__info_main(&s,x,y,comp); -} - -STBIDEF int stbi_is_16_bit_from_memory(stbi_uc const *buffer, int len) -{ - stbi__context s; - stbi__start_mem(&s,buffer,len); - return stbi__is_16_main(&s); -} - -STBIDEF int stbi_is_16_bit_from_callbacks(stbi_io_callbacks const *c, void *user) -{ - stbi__context s; - stbi__start_callbacks(&s, (stbi_io_callbacks *) c, user); - return stbi__is_16_main(&s); -} - -#endif // STB_IMAGE_IMPLEMENTATION - -/* - revision history: - 2.20 (2019-02-07) support utf8 filenames in Windows; fix warnings and platform ifdefs - 2.19 (2018-02-11) fix warning - 2.18 (2018-01-30) fix warnings - 2.17 (2018-01-29) change sbti__shiftsigned to avoid clang -O2 bug - 1-bit BMP - *_is_16_bit api - avoid warnings - 2.16 (2017-07-23) all functions have 16-bit variants; - STBI_NO_STDIO works again; - compilation fixes; - fix rounding in unpremultiply; - optimize vertical flip; - disable raw_len validation; - documentation fixes - 2.15 (2017-03-18) fix png-1,2,4 bug; now all Imagenet JPGs decode; - warning fixes; disable run-time SSE detection on gcc; - uniform handling of optional "return" values; - thread-safe initialization of zlib tables - 2.14 (2017-03-03) remove deprecated STBI_JPEG_OLD; fixes for Imagenet JPGs - 2.13 (2016-11-29) add 16-bit API, only supported for PNG right now - 2.12 (2016-04-02) fix typo in 2.11 PSD fix that caused crashes - 2.11 (2016-04-02) allocate large structures on the stack - remove white matting for transparent PSD - fix reported channel count for PNG & BMP - re-enable SSE2 in non-gcc 64-bit - support RGB-formatted JPEG - read 16-bit PNGs (only as 8-bit) - 2.10 (2016-01-22) avoid warning introduced in 2.09 by STBI_REALLOC_SIZED - 2.09 (2016-01-16) allow comments in PNM files - 16-bit-per-pixel TGA (not bit-per-component) - info() for TGA could break due to .hdr handling - info() for BMP to shares code instead of sloppy parse - can use STBI_REALLOC_SIZED if allocator doesn't support realloc - code cleanup - 2.08 (2015-09-13) fix to 2.07 cleanup, reading RGB PSD as RGBA - 2.07 (2015-09-13) fix compiler warnings - partial animated GIF support - limited 16-bpc PSD support - #ifdef unused functions - bug with < 92 byte PIC,PNM,HDR,TGA - 2.06 (2015-04-19) fix bug where PSD returns wrong '*comp' value - 2.05 (2015-04-19) fix bug in progressive JPEG handling, fix warning - 2.04 (2015-04-15) try to re-enable SIMD on MinGW 64-bit - 2.03 (2015-04-12) extra corruption checking (mmozeiko) - stbi_set_flip_vertically_on_load (nguillemot) - fix NEON support; fix mingw support - 2.02 (2015-01-19) fix incorrect assert, fix warning - 2.01 (2015-01-17) fix various warnings; suppress SIMD on gcc 32-bit without -msse2 - 2.00b (2014-12-25) fix STBI_MALLOC in progressive JPEG - 2.00 (2014-12-25) optimize JPG, including x86 SSE2 & NEON SIMD (ryg) - progressive JPEG (stb) - PGM/PPM support (Ken Miller) - STBI_MALLOC,STBI_REALLOC,STBI_FREE - GIF bugfix -- seemingly never worked - STBI_NO_*, STBI_ONLY_* - 1.48 (2014-12-14) fix incorrectly-named assert() - 1.47 (2014-12-14) 1/2/4-bit PNG support, both direct and paletted (Omar Cornut & stb) - optimize PNG (ryg) - fix bug in interlaced PNG with user-specified channel count (stb) - 1.46 (2014-08-26) - fix broken tRNS chunk (colorkey-style transparency) in non-paletted PNG - 1.45 (2014-08-16) - fix MSVC-ARM internal compiler error by wrapping malloc - 1.44 (2014-08-07) - various warning fixes from Ronny Chevalier - 1.43 (2014-07-15) - fix MSVC-only compiler problem in code changed in 1.42 - 1.42 (2014-07-09) - don't define _CRT_SECURE_NO_WARNINGS (affects user code) - fixes to stbi__cleanup_jpeg path - added STBI_ASSERT to avoid requiring assert.h - 1.41 (2014-06-25) - fix search&replace from 1.36 that messed up comments/error messages - 1.40 (2014-06-22) - fix gcc struct-initialization warning - 1.39 (2014-06-15) - fix to TGA optimization when req_comp != number of components in TGA; - fix to GIF loading because BMP wasn't rewinding (whoops, no GIFs in my test suite) - add support for BMP version 5 (more ignored fields) - 1.38 (2014-06-06) - suppress MSVC warnings on integer casts truncating values - fix accidental rename of 'skip' field of I/O - 1.37 (2014-06-04) - remove duplicate typedef - 1.36 (2014-06-03) - convert to header file single-file library - if de-iphone isn't set, load iphone images color-swapped instead of returning NULL - 1.35 (2014-05-27) - various warnings - fix broken STBI_SIMD path - fix bug where stbi_load_from_file no longer left file pointer in correct place - fix broken non-easy path for 32-bit BMP (possibly never used) - TGA optimization by Arseny Kapoulkine - 1.34 (unknown) - use STBI_NOTUSED in stbi__resample_row_generic(), fix one more leak in tga failure case - 1.33 (2011-07-14) - make stbi_is_hdr work in STBI_NO_HDR (as specified), minor compiler-friendly improvements - 1.32 (2011-07-13) - support for "info" function for all supported filetypes (SpartanJ) - 1.31 (2011-06-20) - a few more leak fixes, bug in PNG handling (SpartanJ) - 1.30 (2011-06-11) - added ability to load files via callbacks to accomidate custom input streams (Ben Wenger) - removed deprecated format-specific test/load functions - removed support for installable file formats (stbi_loader) -- would have been broken for IO callbacks anyway - error cases in bmp and tga give messages and don't leak (Raymond Barbiero, grisha) - fix inefficiency in decoding 32-bit BMP (David Woo) - 1.29 (2010-08-16) - various warning fixes from Aurelien Pocheville - 1.28 (2010-08-01) - fix bug in GIF palette transparency (SpartanJ) - 1.27 (2010-08-01) - cast-to-stbi_uc to fix warnings - 1.26 (2010-07-24) - fix bug in file buffering for PNG reported by SpartanJ - 1.25 (2010-07-17) - refix trans_data warning (Won Chun) - 1.24 (2010-07-12) - perf improvements reading from files on platforms with lock-heavy fgetc() - minor perf improvements for jpeg - deprecated type-specific functions so we'll get feedback if they're needed - attempt to fix trans_data warning (Won Chun) - 1.23 fixed bug in iPhone support - 1.22 (2010-07-10) - removed image *writing* support - stbi_info support from Jetro Lauha - GIF support from Jean-Marc Lienher - iPhone PNG-extensions from James Brown - warning-fixes from Nicolas Schulz and Janez Zemva (i.stbi__err. Janez (U+017D)emva) - 1.21 fix use of 'stbi_uc' in header (reported by jon blow) - 1.20 added support for Softimage PIC, by Tom Seddon - 1.19 bug in interlaced PNG corruption check (found by ryg) - 1.18 (2008-08-02) - fix a threading bug (local mutable static) - 1.17 support interlaced PNG - 1.16 major bugfix - stbi__convert_format converted one too many pixels - 1.15 initialize some fields for thread safety - 1.14 fix threadsafe conversion bug - header-file-only version (#define STBI_HEADER_FILE_ONLY before including) - 1.13 threadsafe - 1.12 const qualifiers in the API - 1.11 Support installable IDCT, colorspace conversion routines - 1.10 Fixes for 64-bit (don't use "unsigned long") - optimized upsampling by Fabian "ryg" Giesen - 1.09 Fix format-conversion for PSD code (bad global variables!) - 1.08 Thatcher Ulrich's PSD code integrated by Nicolas Schulz - 1.07 attempt to fix C++ warning/errors again - 1.06 attempt to fix C++ warning/errors again - 1.05 fix TGA loading to return correct *comp and use good luminance calc - 1.04 default float alpha is 1, not 255; use 'void *' for stbi_image_free - 1.03 bugfixes to STBI_NO_STDIO, STBI_NO_HDR - 1.02 support for (subset of) HDR files, float interface for preferred access to them - 1.01 fix bug: possible bug in handling right-side up bmps... not sure - fix bug: the stbi__bmp_load() and stbi__tga_load() functions didn't work at all - 1.00 interface to zlib that skips zlib header - 0.99 correct handling of alpha in palette - 0.98 TGA loader by lonesock; dynamically add loaders (untested) - 0.97 jpeg errors on too large a file; also catch another malloc failure - 0.96 fix detection of invalid v value - particleman@mollyrocket forum - 0.95 during header scan, seek to markers in case of padding - 0.94 STBI_NO_STDIO to disable stdio usage; rename all #defines the same - 0.93 handle jpegtran output; verbose errors - 0.92 read 4,8,16,24,32-bit BMP files of several formats - 0.91 output 24-bit Windows 3.0 BMP files - 0.90 fix a few more warnings; bump version number to approach 1.0 - 0.61 bugfixes due to Marc LeBlanc, Christopher Lloyd - 0.60 fix compiling as c++ - 0.59 fix warnings: merge Dave Moore's -Wall fixes - 0.58 fix bug: zlib uncompressed mode len/nlen was wrong endian - 0.57 fix bug: jpg last huffman symbol before marker was >9 bits but less than 16 available - 0.56 fix bug: zlib uncompressed mode len vs. nlen - 0.55 fix bug: restart_interval not initialized to 0 - 0.54 allow NULL for 'int *comp' - 0.53 fix bug in png 3->4; speedup png decoding - 0.52 png handles req_comp=3,4 directly; minor cleanup; jpeg comments - 0.51 obey req_comp requests, 1-component jpegs return as 1-component, - on 'test' only check type, not whether we support this variant - 0.50 (2006-11-19) - first released version -*/ - - -/* ------------------------------------------------------------------------------- -This software is available under 2 licenses -- choose whichever you prefer. ------------------------------------------------------------------------------- -ALTERNATIVE A - MIT License -Copyright (c) 2017 Sean Barrett -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. ------------------------------------------------------------------------------- -ALTERNATIVE B - Public Domain (www.unlicense.org) -This is free and unencumbered software released into the public domain. -Anyone is free to copy, modify, publish, use, compile, sell, or distribute this -software, either in source code form or as a compiled binary, for any purpose, -commercial or non-commercial, and by any means. -In jurisdictions that recognize copyright laws, the author or authors of this -software dedicate any and all copyright interest in the software to the public -domain. We make this dedication for the benefit of the public at large and to -the detriment of our heirs and successors. We intend this dedication to be an -overt act of relinquishment in perpetuity of all present and future rights to -this software under copyright law. -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 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. ------------------------------------------------------------------------------- -*/ diff --git a/src/vendor/stb_image/stb_image_resize.h b/src/vendor/stb_image/stb_image_resize.h deleted file mode 100755 index ef9e6fe..0000000 --- a/src/vendor/stb_image/stb_image_resize.h +++ /dev/null @@ -1,2634 +0,0 @@ -/* stb_image_resize - v0.97 - public domain image resizing - by Jorge L Rodriguez (@VinoBS) - 2014 - http://github.com/nothings/stb - - Written with emphasis on usability, portability, and efficiency. (No - SIMD or threads, so it be easily outperformed by libs that use those.) - Only scaling and translation is supported, no rotations or shears. - Easy API downsamples w/Mitchell filter, upsamples w/cubic interpolation. - - COMPILING & LINKING - In one C/C++ file that #includes this file, do this: - #define STB_IMAGE_RESIZE_IMPLEMENTATION - before the #include. That will create the implementation in that file. - - QUICKSTART - stbir_resize_uint8( input_pixels , in_w , in_h , 0, - output_pixels, out_w, out_h, 0, num_channels) - stbir_resize_float(...) - stbir_resize_uint8_srgb( input_pixels , in_w , in_h , 0, - output_pixels, out_w, out_h, 0, - num_channels , alpha_chan , 0) - stbir_resize_uint8_srgb_edgemode( - input_pixels , in_w , in_h , 0, - output_pixels, out_w, out_h, 0, - num_channels , alpha_chan , 0, STBIR_EDGE_CLAMP) - // WRAP/REFLECT/ZERO - - FULL API - See the "header file" section of the source for API documentation. - - ADDITIONAL DOCUMENTATION - - SRGB & FLOATING POINT REPRESENTATION - The sRGB functions presume IEEE floating point. If you do not have - IEEE floating point, define STBIR_NON_IEEE_FLOAT. This will use - a slower implementation. - - MEMORY ALLOCATION - The resize functions here perform a single memory allocation using - malloc. To control the memory allocation, before the #include that - triggers the implementation, do: - - #define STBIR_MALLOC(size,context) ... - #define STBIR_FREE(ptr,context) ... - - Each resize function makes exactly one call to malloc/free, so to use - temp memory, store the temp memory in the context and return that. - - ASSERT - Define STBIR_ASSERT(boolval) to override assert() and not use assert.h - - OPTIMIZATION - Define STBIR_SATURATE_INT to compute clamp values in-range using - integer operations instead of float operations. This may be faster - on some platforms. - - DEFAULT FILTERS - For functions which don't provide explicit control over what filters - to use, you can change the compile-time defaults with - - #define STBIR_DEFAULT_FILTER_UPSAMPLE STBIR_FILTER_something - #define STBIR_DEFAULT_FILTER_DOWNSAMPLE STBIR_FILTER_something - - See stbir_filter in the header-file section for the list of filters. - - NEW FILTERS - A number of 1D filter kernels are used. For a list of - supported filters see the stbir_filter enum. To add a new filter, - write a filter function and add it to stbir__filter_info_table. - - PROGRESS - For interactive use with slow resize operations, you can install - a progress-report callback: - - #define STBIR_PROGRESS_REPORT(val) some_func(val) - - The parameter val is a float which goes from 0 to 1 as progress is made. - - For example: - - static void my_progress_report(float progress); - #define STBIR_PROGRESS_REPORT(val) my_progress_report(val) - - #define STB_IMAGE_RESIZE_IMPLEMENTATION - #include "stb_image_resize.h" - - static void my_progress_report(float progress) - { - printf("Progress: %f%%\n", progress*100); - } - - MAX CHANNELS - If your image has more than 64 channels, define STBIR_MAX_CHANNELS - to the max you'll have. - - ALPHA CHANNEL - Most of the resizing functions provide the ability to control how - the alpha channel of an image is processed. The important things - to know about this: - - 1. The best mathematically-behaved version of alpha to use is - called "premultiplied alpha", in which the other color channels - have had the alpha value multiplied in. If you use premultiplied - alpha, linear filtering (such as image resampling done by this - library, or performed in texture units on GPUs) does the "right - thing". While premultiplied alpha is standard in the movie CGI - industry, it is still uncommon in the videogame/real-time world. - - If you linearly filter non-premultiplied alpha, strange effects - occur. (For example, the 50/50 average of 99% transparent bright green - and 1% transparent black produces 50% transparent dark green when - non-premultiplied, whereas premultiplied it produces 50% - transparent near-black. The former introduces green energy - that doesn't exist in the source image.) - - 2. Artists should not edit premultiplied-alpha images; artists - want non-premultiplied alpha images. Thus, art tools generally output - non-premultiplied alpha images. - - 3. You will get best results in most cases by converting images - to premultiplied alpha before processing them mathematically. - - 4. If you pass the flag STBIR_FLAG_ALPHA_PREMULTIPLIED, the - resizer does not do anything special for the alpha channel; - it is resampled identically to other channels. This produces - the correct results for premultiplied-alpha images, but produces - less-than-ideal results for non-premultiplied-alpha images. - - 5. If you do not pass the flag STBIR_FLAG_ALPHA_PREMULTIPLIED, - then the resizer weights the contribution of input pixels - based on their alpha values, or, equivalently, it multiplies - the alpha value into the color channels, resamples, then divides - by the resultant alpha value. Input pixels which have alpha=0 do - not contribute at all to output pixels unless _all_ of the input - pixels affecting that output pixel have alpha=0, in which case - the result for that pixel is the same as it would be without - STBIR_FLAG_ALPHA_PREMULTIPLIED. However, this is only true for - input images in integer formats. For input images in float format, - input pixels with alpha=0 have no effect, and output pixels - which have alpha=0 will be 0 in all channels. (For float images, - you can manually achieve the same result by adding a tiny epsilon - value to the alpha channel of every image, and then subtracting - or clamping it at the end.) - - 6. You can suppress the behavior described in #5 and make - all-0-alpha pixels have 0 in all channels by #defining - STBIR_NO_ALPHA_EPSILON. - - 7. You can separately control whether the alpha channel is - interpreted as linear or affected by the colorspace. By default - it is linear; you almost never want to apply the colorspace. - (For example, graphics hardware does not apply sRGB conversion - to the alpha channel.) - - CONTRIBUTORS - Jorge L Rodriguez: Implementation - Sean Barrett: API design, optimizations - Aras Pranckevicius: bugfix - Nathan Reed: warning fixes - - REVISIONS - 0.97 (2020-02-02) fixed warning - 0.96 (2019-03-04) fixed warnings - 0.95 (2017-07-23) fixed warnings - 0.94 (2017-03-18) fixed warnings - 0.93 (2017-03-03) fixed bug with certain combinations of heights - 0.92 (2017-01-02) fix integer overflow on large (>2GB) images - 0.91 (2016-04-02) fix warnings; fix handling of subpixel regions - 0.90 (2014-09-17) first released version - - LICENSE - See end of file for license information. - - TODO - Don't decode all of the image data when only processing a partial tile - Don't use full-width decode buffers when only processing a partial tile - When processing wide images, break processing into tiles so data fits in L1 cache - Installable filters? - Resize that respects alpha test coverage - (Reference code: FloatImage::alphaTestCoverage and FloatImage::scaleAlphaToCoverage: - https://code.google.com/p/nvidia-texture-tools/source/browse/trunk/src/nvimage/FloatImage.cpp ) -*/ - -#ifndef STBIR_INCLUDE_STB_IMAGE_RESIZE_H -#define STBIR_INCLUDE_STB_IMAGE_RESIZE_H - -#ifdef _MSC_VER -typedef unsigned char stbir_uint8; -typedef unsigned short stbir_uint16; -typedef unsigned int stbir_uint32; -#else -#include -typedef uint8_t stbir_uint8; -typedef uint16_t stbir_uint16; -typedef uint32_t stbir_uint32; -#endif - -#ifndef STBIRDEF -#ifdef STB_IMAGE_RESIZE_STATIC -#define STBIRDEF static -#else -#ifdef __cplusplus -#define STBIRDEF extern "C" -#else -#define STBIRDEF extern -#endif -#endif -#endif - -////////////////////////////////////////////////////////////////////////////// -// -// Easy-to-use API: -// -// * "input pixels" points to an array of image data with 'num_channels' channels (e.g. RGB=3, RGBA=4) -// * input_w is input image width (x-axis), input_h is input image height (y-axis) -// * stride is the offset between successive rows of image data in memory, in bytes. you can -// specify 0 to mean packed continuously in memory -// * alpha channel is treated identically to other channels. -// * colorspace is linear or sRGB as specified by function name -// * returned result is 1 for success or 0 in case of an error. -// #define STBIR_ASSERT() to trigger an assert on parameter validation errors. -// * Memory required grows approximately linearly with input and output size, but with -// discontinuities at input_w == output_w and input_h == output_h. -// * These functions use a "default" resampling filter defined at compile time. To change the filter, -// you can change the compile-time defaults by #defining STBIR_DEFAULT_FILTER_UPSAMPLE -// and STBIR_DEFAULT_FILTER_DOWNSAMPLE, or you can use the medium-complexity API. - -STBIRDEF int stbir_resize_uint8( const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes, - unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes, - int num_channels); - -STBIRDEF int stbir_resize_float( const float *input_pixels , int input_w , int input_h , int input_stride_in_bytes, - float *output_pixels, int output_w, int output_h, int output_stride_in_bytes, - int num_channels); - - -// The following functions interpret image data as gamma-corrected sRGB. -// Specify STBIR_ALPHA_CHANNEL_NONE if you have no alpha channel, -// or otherwise provide the index of the alpha channel. Flags value -// of 0 will probably do the right thing if you're not sure what -// the flags mean. - -#define STBIR_ALPHA_CHANNEL_NONE -1 - -// Set this flag if your texture has premultiplied alpha. Otherwise, stbir will -// use alpha-weighted resampling (effectively premultiplying, resampling, -// then unpremultiplying). -#define STBIR_FLAG_ALPHA_PREMULTIPLIED (1 << 0) -// The specified alpha channel should be handled as gamma-corrected value even -// when doing sRGB operations. -#define STBIR_FLAG_ALPHA_USES_COLORSPACE (1 << 1) - -STBIRDEF int stbir_resize_uint8_srgb(const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes, - unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes, - int num_channels, int alpha_channel, int flags); - - -typedef enum -{ - STBIR_EDGE_CLAMP = 1, - STBIR_EDGE_REFLECT = 2, - STBIR_EDGE_WRAP = 3, - STBIR_EDGE_ZERO = 4, -} stbir_edge; - -// This function adds the ability to specify how requests to sample off the edge of the image are handled. -STBIRDEF int stbir_resize_uint8_srgb_edgemode(const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes, - unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes, - int num_channels, int alpha_channel, int flags, - stbir_edge edge_wrap_mode); - -////////////////////////////////////////////////////////////////////////////// -// -// Medium-complexity API -// -// This extends the easy-to-use API as follows: -// -// * Alpha-channel can be processed separately -// * If alpha_channel is not STBIR_ALPHA_CHANNEL_NONE -// * Alpha channel will not be gamma corrected (unless flags&STBIR_FLAG_GAMMA_CORRECT) -// * Filters will be weighted by alpha channel (unless flags&STBIR_FLAG_ALPHA_PREMULTIPLIED) -// * Filter can be selected explicitly -// * uint16 image type -// * sRGB colorspace available for all types -// * context parameter for passing to STBIR_MALLOC - -typedef enum -{ - STBIR_FILTER_DEFAULT = 0, // use same filter type that easy-to-use API chooses - STBIR_FILTER_BOX = 1, // A trapezoid w/1-pixel wide ramps, same result as box for integer scale ratios - STBIR_FILTER_TRIANGLE = 2, // On upsampling, produces same results as bilinear texture filtering - STBIR_FILTER_CUBICBSPLINE = 3, // The cubic b-spline (aka Mitchell-Netrevalli with B=1,C=0), gaussian-esque - STBIR_FILTER_CATMULLROM = 4, // An interpolating cubic spline - STBIR_FILTER_MITCHELL = 5, // Mitchell-Netrevalli filter with B=1/3, C=1/3 -} stbir_filter; - -typedef enum -{ - STBIR_COLORSPACE_LINEAR, - STBIR_COLORSPACE_SRGB, - - STBIR_MAX_COLORSPACES, -} stbir_colorspace; - -// The following functions are all identical except for the type of the image data - -STBIRDEF int stbir_resize_uint8_generic( const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes, - unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes, - int num_channels, int alpha_channel, int flags, - stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space, - void *alloc_context); - -STBIRDEF int stbir_resize_uint16_generic(const stbir_uint16 *input_pixels , int input_w , int input_h , int input_stride_in_bytes, - stbir_uint16 *output_pixels , int output_w, int output_h, int output_stride_in_bytes, - int num_channels, int alpha_channel, int flags, - stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space, - void *alloc_context); - -STBIRDEF int stbir_resize_float_generic( const float *input_pixels , int input_w , int input_h , int input_stride_in_bytes, - float *output_pixels , int output_w, int output_h, int output_stride_in_bytes, - int num_channels, int alpha_channel, int flags, - stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space, - void *alloc_context); - - - -////////////////////////////////////////////////////////////////////////////// -// -// Full-complexity API -// -// This extends the medium API as follows: -// -// * uint32 image type -// * not typesafe -// * separate filter types for each axis -// * separate edge modes for each axis -// * can specify scale explicitly for subpixel correctness -// * can specify image source tile using texture coordinates - -typedef enum -{ - STBIR_TYPE_UINT8 , - STBIR_TYPE_UINT16, - STBIR_TYPE_UINT32, - STBIR_TYPE_FLOAT , - - STBIR_MAX_TYPES -} stbir_datatype; - -STBIRDEF int stbir_resize( const void *input_pixels , int input_w , int input_h , int input_stride_in_bytes, - void *output_pixels, int output_w, int output_h, int output_stride_in_bytes, - stbir_datatype datatype, - int num_channels, int alpha_channel, int flags, - stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical, - stbir_filter filter_horizontal, stbir_filter filter_vertical, - stbir_colorspace space, void *alloc_context); - -STBIRDEF int stbir_resize_subpixel(const void *input_pixels , int input_w , int input_h , int input_stride_in_bytes, - void *output_pixels, int output_w, int output_h, int output_stride_in_bytes, - stbir_datatype datatype, - int num_channels, int alpha_channel, int flags, - stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical, - stbir_filter filter_horizontal, stbir_filter filter_vertical, - stbir_colorspace space, void *alloc_context, - float x_scale, float y_scale, - float x_offset, float y_offset); - -STBIRDEF int stbir_resize_region( const void *input_pixels , int input_w , int input_h , int input_stride_in_bytes, - void *output_pixels, int output_w, int output_h, int output_stride_in_bytes, - stbir_datatype datatype, - int num_channels, int alpha_channel, int flags, - stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical, - stbir_filter filter_horizontal, stbir_filter filter_vertical, - stbir_colorspace space, void *alloc_context, - float s0, float t0, float s1, float t1); -// (s0, t0) & (s1, t1) are the top-left and bottom right corner (uv addressing style: [0, 1]x[0, 1]) of a region of the input image to use. - -// -// -//// end header file ///////////////////////////////////////////////////// -#endif // STBIR_INCLUDE_STB_IMAGE_RESIZE_H - - - - - -#ifdef STB_IMAGE_RESIZE_IMPLEMENTATION - -#ifndef STBIR_ASSERT -#include -#define STBIR_ASSERT(x) assert(x) -#endif - -// For memset -#include - -#include - -#ifndef STBIR_MALLOC -#include -// use comma operator to evaluate c, to avoid "unused parameter" warnings -#define STBIR_MALLOC(size,c) ((void)(c), malloc(size)) -#define STBIR_FREE(ptr,c) ((void)(c), free(ptr)) -#endif - -#ifndef _MSC_VER -#ifdef __cplusplus -#define stbir__inline inline -#else -#define stbir__inline -#endif -#else -#define stbir__inline __forceinline -#endif - - -// should produce compiler error if size is wrong -typedef unsigned char stbir__validate_uint32[sizeof(stbir_uint32) == 4 ? 1 : -1]; - -#ifdef _MSC_VER -#define STBIR__NOTUSED(v) (void)(v) -#else -#define STBIR__NOTUSED(v) (void)sizeof(v) -#endif - -#define STBIR__ARRAY_SIZE(a) (sizeof((a))/sizeof((a)[0])) - -#ifndef STBIR_DEFAULT_FILTER_UPSAMPLE -#define STBIR_DEFAULT_FILTER_UPSAMPLE STBIR_FILTER_CATMULLROM -#endif - -#ifndef STBIR_DEFAULT_FILTER_DOWNSAMPLE -#define STBIR_DEFAULT_FILTER_DOWNSAMPLE STBIR_FILTER_MITCHELL -#endif - -#ifndef STBIR_PROGRESS_REPORT -#define STBIR_PROGRESS_REPORT(float_0_to_1) -#endif - -#ifndef STBIR_MAX_CHANNELS -#define STBIR_MAX_CHANNELS 64 -#endif - -#if STBIR_MAX_CHANNELS > 65536 -#error "Too many channels; STBIR_MAX_CHANNELS must be no more than 65536." -// because we store the indices in 16-bit variables -#endif - -// This value is added to alpha just before premultiplication to avoid -// zeroing out color values. It is equivalent to 2^-80. If you don't want -// that behavior (it may interfere if you have floating point images with -// very small alpha values) then you can define STBIR_NO_ALPHA_EPSILON to -// disable it. -#ifndef STBIR_ALPHA_EPSILON -#define STBIR_ALPHA_EPSILON ((float)1 / (1 << 20) / (1 << 20) / (1 << 20) / (1 << 20)) -#endif - - - -#ifdef _MSC_VER -#define STBIR__UNUSED_PARAM(v) (void)(v) -#else -#define STBIR__UNUSED_PARAM(v) (void)sizeof(v) -#endif - -// must match stbir_datatype -static unsigned char stbir__type_size[] = { - 1, // STBIR_TYPE_UINT8 - 2, // STBIR_TYPE_UINT16 - 4, // STBIR_TYPE_UINT32 - 4, // STBIR_TYPE_FLOAT -}; - -// Kernel function centered at 0 -typedef float (stbir__kernel_fn)(float x, float scale); -typedef float (stbir__support_fn)(float scale); - -typedef struct -{ - stbir__kernel_fn* kernel; - stbir__support_fn* support; -} stbir__filter_info; - -// When upsampling, the contributors are which source pixels contribute. -// When downsampling, the contributors are which destination pixels are contributed to. -typedef struct -{ - int n0; // First contributing pixel - int n1; // Last contributing pixel -} stbir__contributors; - -typedef struct -{ - const void* input_data; - int input_w; - int input_h; - int input_stride_bytes; - - void* output_data; - int output_w; - int output_h; - int output_stride_bytes; - - float s0, t0, s1, t1; - - float horizontal_shift; // Units: output pixels - float vertical_shift; // Units: output pixels - float horizontal_scale; - float vertical_scale; - - int channels; - int alpha_channel; - stbir_uint32 flags; - stbir_datatype type; - stbir_filter horizontal_filter; - stbir_filter vertical_filter; - stbir_edge edge_horizontal; - stbir_edge edge_vertical; - stbir_colorspace colorspace; - - stbir__contributors* horizontal_contributors; - float* horizontal_coefficients; - - stbir__contributors* vertical_contributors; - float* vertical_coefficients; - - int decode_buffer_pixels; - float* decode_buffer; - - float* horizontal_buffer; - - // cache these because ceil/floor are inexplicably showing up in profile - int horizontal_coefficient_width; - int vertical_coefficient_width; - int horizontal_filter_pixel_width; - int vertical_filter_pixel_width; - int horizontal_filter_pixel_margin; - int vertical_filter_pixel_margin; - int horizontal_num_contributors; - int vertical_num_contributors; - - int ring_buffer_length_bytes; // The length of an individual entry in the ring buffer. The total number of ring buffers is stbir__get_filter_pixel_width(filter) - int ring_buffer_num_entries; // Total number of entries in the ring buffer. - int ring_buffer_first_scanline; - int ring_buffer_last_scanline; - int ring_buffer_begin_index; // first_scanline is at this index in the ring buffer - float* ring_buffer; - - float* encode_buffer; // A temporary buffer to store floats so we don't lose precision while we do multiply-adds. - - int horizontal_contributors_size; - int horizontal_coefficients_size; - int vertical_contributors_size; - int vertical_coefficients_size; - int decode_buffer_size; - int horizontal_buffer_size; - int ring_buffer_size; - int encode_buffer_size; -} stbir__info; - - -static const float stbir__max_uint8_as_float = 255.0f; -static const float stbir__max_uint16_as_float = 65535.0f; -static const double stbir__max_uint32_as_float = 4294967295.0; - - -static stbir__inline int stbir__min(int a, int b) -{ - return a < b ? a : b; -} - -static stbir__inline float stbir__saturate(float x) -{ - if (x < 0) - return 0; - - if (x > 1) - return 1; - - return x; -} - -#ifdef STBIR_SATURATE_INT -static stbir__inline stbir_uint8 stbir__saturate8(int x) -{ - if ((unsigned int) x <= 255) - return x; - - if (x < 0) - return 0; - - return 255; -} - -static stbir__inline stbir_uint16 stbir__saturate16(int x) -{ - if ((unsigned int) x <= 65535) - return x; - - if (x < 0) - return 0; - - return 65535; -} -#endif - -static float stbir__srgb_uchar_to_linear_float[256] = { - 0.000000f, 0.000304f, 0.000607f, 0.000911f, 0.001214f, 0.001518f, 0.001821f, 0.002125f, 0.002428f, 0.002732f, 0.003035f, - 0.003347f, 0.003677f, 0.004025f, 0.004391f, 0.004777f, 0.005182f, 0.005605f, 0.006049f, 0.006512f, 0.006995f, 0.007499f, - 0.008023f, 0.008568f, 0.009134f, 0.009721f, 0.010330f, 0.010960f, 0.011612f, 0.012286f, 0.012983f, 0.013702f, 0.014444f, - 0.015209f, 0.015996f, 0.016807f, 0.017642f, 0.018500f, 0.019382f, 0.020289f, 0.021219f, 0.022174f, 0.023153f, 0.024158f, - 0.025187f, 0.026241f, 0.027321f, 0.028426f, 0.029557f, 0.030713f, 0.031896f, 0.033105f, 0.034340f, 0.035601f, 0.036889f, - 0.038204f, 0.039546f, 0.040915f, 0.042311f, 0.043735f, 0.045186f, 0.046665f, 0.048172f, 0.049707f, 0.051269f, 0.052861f, - 0.054480f, 0.056128f, 0.057805f, 0.059511f, 0.061246f, 0.063010f, 0.064803f, 0.066626f, 0.068478f, 0.070360f, 0.072272f, - 0.074214f, 0.076185f, 0.078187f, 0.080220f, 0.082283f, 0.084376f, 0.086500f, 0.088656f, 0.090842f, 0.093059f, 0.095307f, - 0.097587f, 0.099899f, 0.102242f, 0.104616f, 0.107023f, 0.109462f, 0.111932f, 0.114435f, 0.116971f, 0.119538f, 0.122139f, - 0.124772f, 0.127438f, 0.130136f, 0.132868f, 0.135633f, 0.138432f, 0.141263f, 0.144128f, 0.147027f, 0.149960f, 0.152926f, - 0.155926f, 0.158961f, 0.162029f, 0.165132f, 0.168269f, 0.171441f, 0.174647f, 0.177888f, 0.181164f, 0.184475f, 0.187821f, - 0.191202f, 0.194618f, 0.198069f, 0.201556f, 0.205079f, 0.208637f, 0.212231f, 0.215861f, 0.219526f, 0.223228f, 0.226966f, - 0.230740f, 0.234551f, 0.238398f, 0.242281f, 0.246201f, 0.250158f, 0.254152f, 0.258183f, 0.262251f, 0.266356f, 0.270498f, - 0.274677f, 0.278894f, 0.283149f, 0.287441f, 0.291771f, 0.296138f, 0.300544f, 0.304987f, 0.309469f, 0.313989f, 0.318547f, - 0.323143f, 0.327778f, 0.332452f, 0.337164f, 0.341914f, 0.346704f, 0.351533f, 0.356400f, 0.361307f, 0.366253f, 0.371238f, - 0.376262f, 0.381326f, 0.386430f, 0.391573f, 0.396755f, 0.401978f, 0.407240f, 0.412543f, 0.417885f, 0.423268f, 0.428691f, - 0.434154f, 0.439657f, 0.445201f, 0.450786f, 0.456411f, 0.462077f, 0.467784f, 0.473532f, 0.479320f, 0.485150f, 0.491021f, - 0.496933f, 0.502887f, 0.508881f, 0.514918f, 0.520996f, 0.527115f, 0.533276f, 0.539480f, 0.545725f, 0.552011f, 0.558340f, - 0.564712f, 0.571125f, 0.577581f, 0.584078f, 0.590619f, 0.597202f, 0.603827f, 0.610496f, 0.617207f, 0.623960f, 0.630757f, - 0.637597f, 0.644480f, 0.651406f, 0.658375f, 0.665387f, 0.672443f, 0.679543f, 0.686685f, 0.693872f, 0.701102f, 0.708376f, - 0.715694f, 0.723055f, 0.730461f, 0.737911f, 0.745404f, 0.752942f, 0.760525f, 0.768151f, 0.775822f, 0.783538f, 0.791298f, - 0.799103f, 0.806952f, 0.814847f, 0.822786f, 0.830770f, 0.838799f, 0.846873f, 0.854993f, 0.863157f, 0.871367f, 0.879622f, - 0.887923f, 0.896269f, 0.904661f, 0.913099f, 0.921582f, 0.930111f, 0.938686f, 0.947307f, 0.955974f, 0.964686f, 0.973445f, - 0.982251f, 0.991102f, 1.0f -}; - -static float stbir__srgb_to_linear(float f) -{ - if (f <= 0.04045f) - return f / 12.92f; - else - return (float)pow((f + 0.055f) / 1.055f, 2.4f); -} - -static float stbir__linear_to_srgb(float f) -{ - if (f <= 0.0031308f) - return f * 12.92f; - else - return 1.055f * (float)pow(f, 1 / 2.4f) - 0.055f; -} - -#ifndef STBIR_NON_IEEE_FLOAT -// From https://gist.github.com/rygorous/2203834 - -typedef union -{ - stbir_uint32 u; - float f; -} stbir__FP32; - -static const stbir_uint32 fp32_to_srgb8_tab4[104] = { - 0x0073000d, 0x007a000d, 0x0080000d, 0x0087000d, 0x008d000d, 0x0094000d, 0x009a000d, 0x00a1000d, - 0x00a7001a, 0x00b4001a, 0x00c1001a, 0x00ce001a, 0x00da001a, 0x00e7001a, 0x00f4001a, 0x0101001a, - 0x010e0033, 0x01280033, 0x01410033, 0x015b0033, 0x01750033, 0x018f0033, 0x01a80033, 0x01c20033, - 0x01dc0067, 0x020f0067, 0x02430067, 0x02760067, 0x02aa0067, 0x02dd0067, 0x03110067, 0x03440067, - 0x037800ce, 0x03df00ce, 0x044600ce, 0x04ad00ce, 0x051400ce, 0x057b00c5, 0x05dd00bc, 0x063b00b5, - 0x06970158, 0x07420142, 0x07e30130, 0x087b0120, 0x090b0112, 0x09940106, 0x0a1700fc, 0x0a9500f2, - 0x0b0f01cb, 0x0bf401ae, 0x0ccb0195, 0x0d950180, 0x0e56016e, 0x0f0d015e, 0x0fbc0150, 0x10630143, - 0x11070264, 0x1238023e, 0x1357021d, 0x14660201, 0x156601e9, 0x165a01d3, 0x174401c0, 0x182401af, - 0x18fe0331, 0x1a9602fe, 0x1c1502d2, 0x1d7e02ad, 0x1ed4028d, 0x201a0270, 0x21520256, 0x227d0240, - 0x239f0443, 0x25c003fe, 0x27bf03c4, 0x29a10392, 0x2b6a0367, 0x2d1d0341, 0x2ebe031f, 0x304d0300, - 0x31d105b0, 0x34a80555, 0x37520507, 0x39d504c5, 0x3c37048b, 0x3e7c0458, 0x40a8042a, 0x42bd0401, - 0x44c20798, 0x488e071e, 0x4c1c06b6, 0x4f76065d, 0x52a50610, 0x55ac05cc, 0x5892058f, 0x5b590559, - 0x5e0c0a23, 0x631c0980, 0x67db08f6, 0x6c55087f, 0x70940818, 0x74a007bd, 0x787d076c, 0x7c330723, -}; - -static stbir_uint8 stbir__linear_to_srgb_uchar(float in) -{ - static const stbir__FP32 almostone = { 0x3f7fffff }; // 1-eps - static const stbir__FP32 minval = { (127-13) << 23 }; - stbir_uint32 tab,bias,scale,t; - stbir__FP32 f; - - // Clamp to [2^(-13), 1-eps]; these two values map to 0 and 1, respectively. - // The tests are carefully written so that NaNs map to 0, same as in the reference - // implementation. - if (!(in > minval.f)) // written this way to catch NaNs - in = minval.f; - if (in > almostone.f) - in = almostone.f; - - // Do the table lookup and unpack bias, scale - f.f = in; - tab = fp32_to_srgb8_tab4[(f.u - minval.u) >> 20]; - bias = (tab >> 16) << 9; - scale = tab & 0xffff; - - // Grab next-highest mantissa bits and perform linear interpolation - t = (f.u >> 12) & 0xff; - return (unsigned char) ((bias + scale*t) >> 16); -} - -#else -// sRGB transition values, scaled by 1<<28 -static int stbir__srgb_offset_to_linear_scaled[256] = -{ - 0, 40738, 122216, 203693, 285170, 366648, 448125, 529603, - 611080, 692557, 774035, 855852, 942009, 1033024, 1128971, 1229926, - 1335959, 1447142, 1563542, 1685229, 1812268, 1944725, 2082664, 2226148, - 2375238, 2529996, 2690481, 2856753, 3028870, 3206888, 3390865, 3580856, - 3776916, 3979100, 4187460, 4402049, 4622919, 4850123, 5083710, 5323731, - 5570236, 5823273, 6082892, 6349140, 6622065, 6901714, 7188133, 7481369, - 7781466, 8088471, 8402427, 8723380, 9051372, 9386448, 9728650, 10078021, - 10434603, 10798439, 11169569, 11548036, 11933879, 12327139, 12727857, 13136073, - 13551826, 13975156, 14406100, 14844697, 15290987, 15745007, 16206795, 16676389, - 17153826, 17639142, 18132374, 18633560, 19142734, 19659934, 20185196, 20718552, - 21260042, 21809696, 22367554, 22933648, 23508010, 24090680, 24681686, 25281066, - 25888850, 26505076, 27129772, 27762974, 28404716, 29055026, 29713942, 30381490, - 31057708, 31742624, 32436272, 33138682, 33849884, 34569912, 35298800, 36036568, - 36783260, 37538896, 38303512, 39077136, 39859796, 40651528, 41452360, 42262316, - 43081432, 43909732, 44747252, 45594016, 46450052, 47315392, 48190064, 49074096, - 49967516, 50870356, 51782636, 52704392, 53635648, 54576432, 55526772, 56486700, - 57456236, 58435408, 59424248, 60422780, 61431036, 62449032, 63476804, 64514376, - 65561776, 66619028, 67686160, 68763192, 69850160, 70947088, 72053992, 73170912, - 74297864, 75434880, 76581976, 77739184, 78906536, 80084040, 81271736, 82469648, - 83677792, 84896192, 86124888, 87363888, 88613232, 89872928, 91143016, 92423512, - 93714432, 95015816, 96327688, 97650056, 98982952, 100326408, 101680440, 103045072, - 104420320, 105806224, 107202800, 108610064, 110028048, 111456776, 112896264, 114346544, - 115807632, 117279552, 118762328, 120255976, 121760536, 123276016, 124802440, 126339832, - 127888216, 129447616, 131018048, 132599544, 134192112, 135795792, 137410592, 139036528, - 140673648, 142321952, 143981456, 145652208, 147334208, 149027488, 150732064, 152447968, - 154175200, 155913792, 157663776, 159425168, 161197984, 162982240, 164777968, 166585184, - 168403904, 170234160, 172075968, 173929344, 175794320, 177670896, 179559120, 181458992, - 183370528, 185293776, 187228736, 189175424, 191133888, 193104112, 195086128, 197079968, - 199085648, 201103184, 203132592, 205173888, 207227120, 209292272, 211369392, 213458480, - 215559568, 217672656, 219797792, 221934976, 224084240, 226245600, 228419056, 230604656, - 232802400, 235012320, 237234432, 239468736, 241715280, 243974080, 246245120, 248528464, - 250824112, 253132064, 255452368, 257785040, 260130080, 262487520, 264857376, 267239664, -}; - -static stbir_uint8 stbir__linear_to_srgb_uchar(float f) -{ - int x = (int) (f * (1 << 28)); // has headroom so you don't need to clamp - int v = 0; - int i; - - // Refine the guess with a short binary search. - i = v + 128; if (x >= stbir__srgb_offset_to_linear_scaled[i]) v = i; - i = v + 64; if (x >= stbir__srgb_offset_to_linear_scaled[i]) v = i; - i = v + 32; if (x >= stbir__srgb_offset_to_linear_scaled[i]) v = i; - i = v + 16; if (x >= stbir__srgb_offset_to_linear_scaled[i]) v = i; - i = v + 8; if (x >= stbir__srgb_offset_to_linear_scaled[i]) v = i; - i = v + 4; if (x >= stbir__srgb_offset_to_linear_scaled[i]) v = i; - i = v + 2; if (x >= stbir__srgb_offset_to_linear_scaled[i]) v = i; - i = v + 1; if (x >= stbir__srgb_offset_to_linear_scaled[i]) v = i; - - return (stbir_uint8) v; -} -#endif - -static float stbir__filter_trapezoid(float x, float scale) -{ - float halfscale = scale / 2; - float t = 0.5f + halfscale; - STBIR_ASSERT(scale <= 1); - - x = (float)fabs(x); - - if (x >= t) - return 0; - else - { - float r = 0.5f - halfscale; - if (x <= r) - return 1; - else - return (t - x) / scale; - } -} - -static float stbir__support_trapezoid(float scale) -{ - STBIR_ASSERT(scale <= 1); - return 0.5f + scale / 2; -} - -static float stbir__filter_triangle(float x, float s) -{ - STBIR__UNUSED_PARAM(s); - - x = (float)fabs(x); - - if (x <= 1.0f) - return 1 - x; - else - return 0; -} - -static float stbir__filter_cubic(float x, float s) -{ - STBIR__UNUSED_PARAM(s); - - x = (float)fabs(x); - - if (x < 1.0f) - return (4 + x*x*(3*x - 6))/6; - else if (x < 2.0f) - return (8 + x*(-12 + x*(6 - x)))/6; - - return (0.0f); -} - -static float stbir__filter_catmullrom(float x, float s) -{ - STBIR__UNUSED_PARAM(s); - - x = (float)fabs(x); - - if (x < 1.0f) - return 1 - x*x*(2.5f - 1.5f*x); - else if (x < 2.0f) - return 2 - x*(4 + x*(0.5f*x - 2.5f)); - - return (0.0f); -} - -static float stbir__filter_mitchell(float x, float s) -{ - STBIR__UNUSED_PARAM(s); - - x = (float)fabs(x); - - if (x < 1.0f) - return (16 + x*x*(21 * x - 36))/18; - else if (x < 2.0f) - return (32 + x*(-60 + x*(36 - 7*x)))/18; - - return (0.0f); -} - -static float stbir__support_zero(float s) -{ - STBIR__UNUSED_PARAM(s); - return 0; -} - -static float stbir__support_one(float s) -{ - STBIR__UNUSED_PARAM(s); - return 1; -} - -static float stbir__support_two(float s) -{ - STBIR__UNUSED_PARAM(s); - return 2; -} - -static stbir__filter_info stbir__filter_info_table[] = { - { NULL, stbir__support_zero }, - { stbir__filter_trapezoid, stbir__support_trapezoid }, - { stbir__filter_triangle, stbir__support_one }, - { stbir__filter_cubic, stbir__support_two }, - { stbir__filter_catmullrom, stbir__support_two }, - { stbir__filter_mitchell, stbir__support_two }, -}; - -stbir__inline static int stbir__use_upsampling(float ratio) -{ - return ratio > 1; -} - -stbir__inline static int stbir__use_width_upsampling(stbir__info* stbir_info) -{ - return stbir__use_upsampling(stbir_info->horizontal_scale); -} - -stbir__inline static int stbir__use_height_upsampling(stbir__info* stbir_info) -{ - return stbir__use_upsampling(stbir_info->vertical_scale); -} - -// This is the maximum number of input samples that can affect an output sample -// with the given filter -static int stbir__get_filter_pixel_width(stbir_filter filter, float scale) -{ - STBIR_ASSERT(filter != 0); - STBIR_ASSERT(filter < STBIR__ARRAY_SIZE(stbir__filter_info_table)); - - if (stbir__use_upsampling(scale)) - return (int)ceil(stbir__filter_info_table[filter].support(1/scale) * 2); - else - return (int)ceil(stbir__filter_info_table[filter].support(scale) * 2 / scale); -} - -// This is how much to expand buffers to account for filters seeking outside -// the image boundaries. -static int stbir__get_filter_pixel_margin(stbir_filter filter, float scale) -{ - return stbir__get_filter_pixel_width(filter, scale) / 2; -} - -static int stbir__get_coefficient_width(stbir_filter filter, float scale) -{ - if (stbir__use_upsampling(scale)) - return (int)ceil(stbir__filter_info_table[filter].support(1 / scale) * 2); - else - return (int)ceil(stbir__filter_info_table[filter].support(scale) * 2); -} - -static int stbir__get_contributors(float scale, stbir_filter filter, int input_size, int output_size) -{ - if (stbir__use_upsampling(scale)) - return output_size; - else - return (input_size + stbir__get_filter_pixel_margin(filter, scale) * 2); -} - -static int stbir__get_total_horizontal_coefficients(stbir__info* info) -{ - return info->horizontal_num_contributors - * stbir__get_coefficient_width (info->horizontal_filter, info->horizontal_scale); -} - -static int stbir__get_total_vertical_coefficients(stbir__info* info) -{ - return info->vertical_num_contributors - * stbir__get_coefficient_width (info->vertical_filter, info->vertical_scale); -} - -static stbir__contributors* stbir__get_contributor(stbir__contributors* contributors, int n) -{ - return &contributors[n]; -} - -// For perf reasons this code is duplicated in stbir__resample_horizontal_upsample/downsample, -// if you change it here change it there too. -static float* stbir__get_coefficient(float* coefficients, stbir_filter filter, float scale, int n, int c) -{ - int width = stbir__get_coefficient_width(filter, scale); - return &coefficients[width*n + c]; -} - -static int stbir__edge_wrap_slow(stbir_edge edge, int n, int max) -{ - switch (edge) - { - case STBIR_EDGE_ZERO: - return 0; // we'll decode the wrong pixel here, and then overwrite with 0s later - - case STBIR_EDGE_CLAMP: - if (n < 0) - return 0; - - if (n >= max) - return max - 1; - - return n; // NOTREACHED - - case STBIR_EDGE_REFLECT: - { - if (n < 0) - { - if (n < max) - return -n; - else - return max - 1; - } - - if (n >= max) - { - int max2 = max * 2; - if (n >= max2) - return 0; - else - return max2 - n - 1; - } - - return n; // NOTREACHED - } - - case STBIR_EDGE_WRAP: - if (n >= 0) - return (n % max); - else - { - int m = (-n) % max; - - if (m != 0) - m = max - m; - - return (m); - } - // NOTREACHED - - default: - STBIR_ASSERT(!"Unimplemented edge type"); - return 0; - } -} - -stbir__inline static int stbir__edge_wrap(stbir_edge edge, int n, int max) -{ - // avoid per-pixel switch - if (n >= 0 && n < max) - return n; - return stbir__edge_wrap_slow(edge, n, max); -} - -// What input pixels contribute to this output pixel? -static void stbir__calculate_sample_range_upsample(int n, float out_filter_radius, float scale_ratio, float out_shift, int* in_first_pixel, int* in_last_pixel, float* in_center_of_out) -{ - float out_pixel_center = (float)n + 0.5f; - float out_pixel_influence_lowerbound = out_pixel_center - out_filter_radius; - float out_pixel_influence_upperbound = out_pixel_center + out_filter_radius; - - float in_pixel_influence_lowerbound = (out_pixel_influence_lowerbound + out_shift) / scale_ratio; - float in_pixel_influence_upperbound = (out_pixel_influence_upperbound + out_shift) / scale_ratio; - - *in_center_of_out = (out_pixel_center + out_shift) / scale_ratio; - *in_first_pixel = (int)(floor(in_pixel_influence_lowerbound + 0.5)); - *in_last_pixel = (int)(floor(in_pixel_influence_upperbound - 0.5)); -} - -// What output pixels does this input pixel contribute to? -static void stbir__calculate_sample_range_downsample(int n, float in_pixels_radius, float scale_ratio, float out_shift, int* out_first_pixel, int* out_last_pixel, float* out_center_of_in) -{ - float in_pixel_center = (float)n + 0.5f; - float in_pixel_influence_lowerbound = in_pixel_center - in_pixels_radius; - float in_pixel_influence_upperbound = in_pixel_center + in_pixels_radius; - - float out_pixel_influence_lowerbound = in_pixel_influence_lowerbound * scale_ratio - out_shift; - float out_pixel_influence_upperbound = in_pixel_influence_upperbound * scale_ratio - out_shift; - - *out_center_of_in = in_pixel_center * scale_ratio - out_shift; - *out_first_pixel = (int)(floor(out_pixel_influence_lowerbound + 0.5)); - *out_last_pixel = (int)(floor(out_pixel_influence_upperbound - 0.5)); -} - -static void stbir__calculate_coefficients_upsample(stbir_filter filter, float scale, int in_first_pixel, int in_last_pixel, float in_center_of_out, stbir__contributors* contributor, float* coefficient_group) -{ - int i; - float total_filter = 0; - float filter_scale; - - STBIR_ASSERT(in_last_pixel - in_first_pixel <= (int)ceil(stbir__filter_info_table[filter].support(1/scale) * 2)); // Taken directly from stbir__get_coefficient_width() which we can't call because we don't know if we're horizontal or vertical. - - contributor->n0 = in_first_pixel; - contributor->n1 = in_last_pixel; - - STBIR_ASSERT(contributor->n1 >= contributor->n0); - - for (i = 0; i <= in_last_pixel - in_first_pixel; i++) - { - float in_pixel_center = (float)(i + in_first_pixel) + 0.5f; - coefficient_group[i] = stbir__filter_info_table[filter].kernel(in_center_of_out - in_pixel_center, 1 / scale); - - // If the coefficient is zero, skip it. (Don't do the <0 check here, we want the influence of those outside pixels.) - if (i == 0 && !coefficient_group[i]) - { - contributor->n0 = ++in_first_pixel; - i--; - continue; - } - - total_filter += coefficient_group[i]; - } - - // NOTE(fg): Not actually true in general, nor is there any reason to expect it should be. - // It would be true in exact math but is at best approximately true in floating-point math, - // and it would not make sense to try and put actual bounds on this here because it depends - // on the image aspect ratio which can get pretty extreme. - //STBIR_ASSERT(stbir__filter_info_table[filter].kernel((float)(in_last_pixel + 1) + 0.5f - in_center_of_out, 1/scale) == 0); - - STBIR_ASSERT(total_filter > 0.9); - STBIR_ASSERT(total_filter < 1.1f); // Make sure it's not way off. - - // Make sure the sum of all coefficients is 1. - filter_scale = 1 / total_filter; - - for (i = 0; i <= in_last_pixel - in_first_pixel; i++) - coefficient_group[i] *= filter_scale; - - for (i = in_last_pixel - in_first_pixel; i >= 0; i--) - { - if (coefficient_group[i]) - break; - - // This line has no weight. We can skip it. - contributor->n1 = contributor->n0 + i - 1; - } -} - -static void stbir__calculate_coefficients_downsample(stbir_filter filter, float scale_ratio, int out_first_pixel, int out_last_pixel, float out_center_of_in, stbir__contributors* contributor, float* coefficient_group) -{ - int i; - - STBIR_ASSERT(out_last_pixel - out_first_pixel <= (int)ceil(stbir__filter_info_table[filter].support(scale_ratio) * 2)); // Taken directly from stbir__get_coefficient_width() which we can't call because we don't know if we're horizontal or vertical. - - contributor->n0 = out_first_pixel; - contributor->n1 = out_last_pixel; - - STBIR_ASSERT(contributor->n1 >= contributor->n0); - - for (i = 0; i <= out_last_pixel - out_first_pixel; i++) - { - float out_pixel_center = (float)(i + out_first_pixel) + 0.5f; - float x = out_pixel_center - out_center_of_in; - coefficient_group[i] = stbir__filter_info_table[filter].kernel(x, scale_ratio) * scale_ratio; - } - - // NOTE(fg): Not actually true in general, nor is there any reason to expect it should be. - // It would be true in exact math but is at best approximately true in floating-point math, - // and it would not make sense to try and put actual bounds on this here because it depends - // on the image aspect ratio which can get pretty extreme. - //STBIR_ASSERT(stbir__filter_info_table[filter].kernel((float)(out_last_pixel + 1) + 0.5f - out_center_of_in, scale_ratio) == 0); - - for (i = out_last_pixel - out_first_pixel; i >= 0; i--) - { - if (coefficient_group[i]) - break; - - // This line has no weight. We can skip it. - contributor->n1 = contributor->n0 + i - 1; - } -} - -static void stbir__normalize_downsample_coefficients(stbir__contributors* contributors, float* coefficients, stbir_filter filter, float scale_ratio, int input_size, int output_size) -{ - int num_contributors = stbir__get_contributors(scale_ratio, filter, input_size, output_size); - int num_coefficients = stbir__get_coefficient_width(filter, scale_ratio); - int i, j; - int skip; - - for (i = 0; i < output_size; i++) - { - float scale; - float total = 0; - - for (j = 0; j < num_contributors; j++) - { - if (i >= contributors[j].n0 && i <= contributors[j].n1) - { - float coefficient = *stbir__get_coefficient(coefficients, filter, scale_ratio, j, i - contributors[j].n0); - total += coefficient; - } - else if (i < contributors[j].n0) - break; - } - - STBIR_ASSERT(total > 0.9f); - STBIR_ASSERT(total < 1.1f); - - scale = 1 / total; - - for (j = 0; j < num_contributors; j++) - { - if (i >= contributors[j].n0 && i <= contributors[j].n1) - *stbir__get_coefficient(coefficients, filter, scale_ratio, j, i - contributors[j].n0) *= scale; - else if (i < contributors[j].n0) - break; - } - } - - // Optimize: Skip zero coefficients and contributions outside of image bounds. - // Do this after normalizing because normalization depends on the n0/n1 values. - for (j = 0; j < num_contributors; j++) - { - int range, max, width; - - skip = 0; - while (*stbir__get_coefficient(coefficients, filter, scale_ratio, j, skip) == 0) - skip++; - - contributors[j].n0 += skip; - - while (contributors[j].n0 < 0) - { - contributors[j].n0++; - skip++; - } - - range = contributors[j].n1 - contributors[j].n0 + 1; - max = stbir__min(num_coefficients, range); - - width = stbir__get_coefficient_width(filter, scale_ratio); - for (i = 0; i < max; i++) - { - if (i + skip >= width) - break; - - *stbir__get_coefficient(coefficients, filter, scale_ratio, j, i) = *stbir__get_coefficient(coefficients, filter, scale_ratio, j, i + skip); - } - - continue; - } - - // Using min to avoid writing into invalid pixels. - for (i = 0; i < num_contributors; i++) - contributors[i].n1 = stbir__min(contributors[i].n1, output_size - 1); -} - -// Each scan line uses the same kernel values so we should calculate the kernel -// values once and then we can use them for every scan line. -static void stbir__calculate_filters(stbir__contributors* contributors, float* coefficients, stbir_filter filter, float scale_ratio, float shift, int input_size, int output_size) -{ - int n; - int total_contributors = stbir__get_contributors(scale_ratio, filter, input_size, output_size); - - if (stbir__use_upsampling(scale_ratio)) - { - float out_pixels_radius = stbir__filter_info_table[filter].support(1 / scale_ratio) * scale_ratio; - - // Looping through out pixels - for (n = 0; n < total_contributors; n++) - { - float in_center_of_out; // Center of the current out pixel in the in pixel space - int in_first_pixel, in_last_pixel; - - stbir__calculate_sample_range_upsample(n, out_pixels_radius, scale_ratio, shift, &in_first_pixel, &in_last_pixel, &in_center_of_out); - - stbir__calculate_coefficients_upsample(filter, scale_ratio, in_first_pixel, in_last_pixel, in_center_of_out, stbir__get_contributor(contributors, n), stbir__get_coefficient(coefficients, filter, scale_ratio, n, 0)); - } - } - else - { - float in_pixels_radius = stbir__filter_info_table[filter].support(scale_ratio) / scale_ratio; - - // Looping through in pixels - for (n = 0; n < total_contributors; n++) - { - float out_center_of_in; // Center of the current out pixel in the in pixel space - int out_first_pixel, out_last_pixel; - int n_adjusted = n - stbir__get_filter_pixel_margin(filter, scale_ratio); - - stbir__calculate_sample_range_downsample(n_adjusted, in_pixels_radius, scale_ratio, shift, &out_first_pixel, &out_last_pixel, &out_center_of_in); - - stbir__calculate_coefficients_downsample(filter, scale_ratio, out_first_pixel, out_last_pixel, out_center_of_in, stbir__get_contributor(contributors, n), stbir__get_coefficient(coefficients, filter, scale_ratio, n, 0)); - } - - stbir__normalize_downsample_coefficients(contributors, coefficients, filter, scale_ratio, input_size, output_size); - } -} - -static float* stbir__get_decode_buffer(stbir__info* stbir_info) -{ - // The 0 index of the decode buffer starts after the margin. This makes - // it okay to use negative indexes on the decode buffer. - return &stbir_info->decode_buffer[stbir_info->horizontal_filter_pixel_margin * stbir_info->channels]; -} - -#define STBIR__DECODE(type, colorspace) ((int)(type) * (STBIR_MAX_COLORSPACES) + (int)(colorspace)) - -static void stbir__decode_scanline(stbir__info* stbir_info, int n) -{ - int c; - int channels = stbir_info->channels; - int alpha_channel = stbir_info->alpha_channel; - int type = stbir_info->type; - int colorspace = stbir_info->colorspace; - int input_w = stbir_info->input_w; - size_t input_stride_bytes = stbir_info->input_stride_bytes; - float* decode_buffer = stbir__get_decode_buffer(stbir_info); - stbir_edge edge_horizontal = stbir_info->edge_horizontal; - stbir_edge edge_vertical = stbir_info->edge_vertical; - size_t in_buffer_row_offset = stbir__edge_wrap(edge_vertical, n, stbir_info->input_h) * input_stride_bytes; - const void* input_data = (char *) stbir_info->input_data + in_buffer_row_offset; - int max_x = input_w + stbir_info->horizontal_filter_pixel_margin; - int decode = STBIR__DECODE(type, colorspace); - - int x = -stbir_info->horizontal_filter_pixel_margin; - - // special handling for STBIR_EDGE_ZERO because it needs to return an item that doesn't appear in the input, - // and we want to avoid paying overhead on every pixel if not STBIR_EDGE_ZERO - if (edge_vertical == STBIR_EDGE_ZERO && (n < 0 || n >= stbir_info->input_h)) - { - for (; x < max_x; x++) - for (c = 0; c < channels; c++) - decode_buffer[x*channels + c] = 0; - return; - } - - switch (decode) - { - case STBIR__DECODE(STBIR_TYPE_UINT8, STBIR_COLORSPACE_LINEAR): - for (; x < max_x; x++) - { - int decode_pixel_index = x * channels; - int input_pixel_index = stbir__edge_wrap(edge_horizontal, x, input_w) * channels; - for (c = 0; c < channels; c++) - decode_buffer[decode_pixel_index + c] = ((float)((const unsigned char*)input_data)[input_pixel_index + c]) / stbir__max_uint8_as_float; - } - break; - - case STBIR__DECODE(STBIR_TYPE_UINT8, STBIR_COLORSPACE_SRGB): - for (; x < max_x; x++) - { - int decode_pixel_index = x * channels; - int input_pixel_index = stbir__edge_wrap(edge_horizontal, x, input_w) * channels; - for (c = 0; c < channels; c++) - decode_buffer[decode_pixel_index + c] = stbir__srgb_uchar_to_linear_float[((const unsigned char*)input_data)[input_pixel_index + c]]; - - if (!(stbir_info->flags&STBIR_FLAG_ALPHA_USES_COLORSPACE)) - decode_buffer[decode_pixel_index + alpha_channel] = ((float)((const unsigned char*)input_data)[input_pixel_index + alpha_channel]) / stbir__max_uint8_as_float; - } - break; - - case STBIR__DECODE(STBIR_TYPE_UINT16, STBIR_COLORSPACE_LINEAR): - for (; x < max_x; x++) - { - int decode_pixel_index = x * channels; - int input_pixel_index = stbir__edge_wrap(edge_horizontal, x, input_w) * channels; - for (c = 0; c < channels; c++) - decode_buffer[decode_pixel_index + c] = ((float)((const unsigned short*)input_data)[input_pixel_index + c]) / stbir__max_uint16_as_float; - } - break; - - case STBIR__DECODE(STBIR_TYPE_UINT16, STBIR_COLORSPACE_SRGB): - for (; x < max_x; x++) - { - int decode_pixel_index = x * channels; - int input_pixel_index = stbir__edge_wrap(edge_horizontal, x, input_w) * channels; - for (c = 0; c < channels; c++) - decode_buffer[decode_pixel_index + c] = stbir__srgb_to_linear(((float)((const unsigned short*)input_data)[input_pixel_index + c]) / stbir__max_uint16_as_float); - - if (!(stbir_info->flags&STBIR_FLAG_ALPHA_USES_COLORSPACE)) - decode_buffer[decode_pixel_index + alpha_channel] = ((float)((const unsigned short*)input_data)[input_pixel_index + alpha_channel]) / stbir__max_uint16_as_float; - } - break; - - case STBIR__DECODE(STBIR_TYPE_UINT32, STBIR_COLORSPACE_LINEAR): - for (; x < max_x; x++) - { - int decode_pixel_index = x * channels; - int input_pixel_index = stbir__edge_wrap(edge_horizontal, x, input_w) * channels; - for (c = 0; c < channels; c++) - decode_buffer[decode_pixel_index + c] = (float)(((double)((const unsigned int*)input_data)[input_pixel_index + c]) / stbir__max_uint32_as_float); - } - break; - - case STBIR__DECODE(STBIR_TYPE_UINT32, STBIR_COLORSPACE_SRGB): - for (; x < max_x; x++) - { - int decode_pixel_index = x * channels; - int input_pixel_index = stbir__edge_wrap(edge_horizontal, x, input_w) * channels; - for (c = 0; c < channels; c++) - decode_buffer[decode_pixel_index + c] = stbir__srgb_to_linear((float)(((double)((const unsigned int*)input_data)[input_pixel_index + c]) / stbir__max_uint32_as_float)); - - if (!(stbir_info->flags&STBIR_FLAG_ALPHA_USES_COLORSPACE)) - decode_buffer[decode_pixel_index + alpha_channel] = (float)(((double)((const unsigned int*)input_data)[input_pixel_index + alpha_channel]) / stbir__max_uint32_as_float); - } - break; - - case STBIR__DECODE(STBIR_TYPE_FLOAT, STBIR_COLORSPACE_LINEAR): - for (; x < max_x; x++) - { - int decode_pixel_index = x * channels; - int input_pixel_index = stbir__edge_wrap(edge_horizontal, x, input_w) * channels; - for (c = 0; c < channels; c++) - decode_buffer[decode_pixel_index + c] = ((const float*)input_data)[input_pixel_index + c]; - } - break; - - case STBIR__DECODE(STBIR_TYPE_FLOAT, STBIR_COLORSPACE_SRGB): - for (; x < max_x; x++) - { - int decode_pixel_index = x * channels; - int input_pixel_index = stbir__edge_wrap(edge_horizontal, x, input_w) * channels; - for (c = 0; c < channels; c++) - decode_buffer[decode_pixel_index + c] = stbir__srgb_to_linear(((const float*)input_data)[input_pixel_index + c]); - - if (!(stbir_info->flags&STBIR_FLAG_ALPHA_USES_COLORSPACE)) - decode_buffer[decode_pixel_index + alpha_channel] = ((const float*)input_data)[input_pixel_index + alpha_channel]; - } - - break; - - default: - STBIR_ASSERT(!"Unknown type/colorspace/channels combination."); - break; - } - - if (!(stbir_info->flags & STBIR_FLAG_ALPHA_PREMULTIPLIED)) - { - for (x = -stbir_info->horizontal_filter_pixel_margin; x < max_x; x++) - { - int decode_pixel_index = x * channels; - - // If the alpha value is 0 it will clobber the color values. Make sure it's not. - float alpha = decode_buffer[decode_pixel_index + alpha_channel]; -#ifndef STBIR_NO_ALPHA_EPSILON - if (stbir_info->type != STBIR_TYPE_FLOAT) { - alpha += STBIR_ALPHA_EPSILON; - decode_buffer[decode_pixel_index + alpha_channel] = alpha; - } -#endif - for (c = 0; c < channels; c++) - { - if (c == alpha_channel) - continue; - - decode_buffer[decode_pixel_index + c] *= alpha; - } - } - } - - if (edge_horizontal == STBIR_EDGE_ZERO) - { - for (x = -stbir_info->horizontal_filter_pixel_margin; x < 0; x++) - { - for (c = 0; c < channels; c++) - decode_buffer[x*channels + c] = 0; - } - for (x = input_w; x < max_x; x++) - { - for (c = 0; c < channels; c++) - decode_buffer[x*channels + c] = 0; - } - } -} - -static float* stbir__get_ring_buffer_entry(float* ring_buffer, int index, int ring_buffer_length) -{ - return &ring_buffer[index * ring_buffer_length]; -} - -static float* stbir__add_empty_ring_buffer_entry(stbir__info* stbir_info, int n) -{ - int ring_buffer_index; - float* ring_buffer; - - stbir_info->ring_buffer_last_scanline = n; - - if (stbir_info->ring_buffer_begin_index < 0) - { - ring_buffer_index = stbir_info->ring_buffer_begin_index = 0; - stbir_info->ring_buffer_first_scanline = n; - } - else - { - ring_buffer_index = (stbir_info->ring_buffer_begin_index + (stbir_info->ring_buffer_last_scanline - stbir_info->ring_buffer_first_scanline)) % stbir_info->ring_buffer_num_entries; - STBIR_ASSERT(ring_buffer_index != stbir_info->ring_buffer_begin_index); - } - - ring_buffer = stbir__get_ring_buffer_entry(stbir_info->ring_buffer, ring_buffer_index, stbir_info->ring_buffer_length_bytes / sizeof(float)); - memset(ring_buffer, 0, stbir_info->ring_buffer_length_bytes); - - return ring_buffer; -} - - -static void stbir__resample_horizontal_upsample(stbir__info* stbir_info, float* output_buffer) -{ - int x, k; - int output_w = stbir_info->output_w; - int channels = stbir_info->channels; - float* decode_buffer = stbir__get_decode_buffer(stbir_info); - stbir__contributors* horizontal_contributors = stbir_info->horizontal_contributors; - float* horizontal_coefficients = stbir_info->horizontal_coefficients; - int coefficient_width = stbir_info->horizontal_coefficient_width; - - for (x = 0; x < output_w; x++) - { - int n0 = horizontal_contributors[x].n0; - int n1 = horizontal_contributors[x].n1; - - int out_pixel_index = x * channels; - int coefficient_group = coefficient_width * x; - int coefficient_counter = 0; - - STBIR_ASSERT(n1 >= n0); - STBIR_ASSERT(n0 >= -stbir_info->horizontal_filter_pixel_margin); - STBIR_ASSERT(n1 >= -stbir_info->horizontal_filter_pixel_margin); - STBIR_ASSERT(n0 < stbir_info->input_w + stbir_info->horizontal_filter_pixel_margin); - STBIR_ASSERT(n1 < stbir_info->input_w + stbir_info->horizontal_filter_pixel_margin); - - switch (channels) { - case 1: - for (k = n0; k <= n1; k++) - { - int in_pixel_index = k * 1; - float coefficient = horizontal_coefficients[coefficient_group + coefficient_counter++]; - STBIR_ASSERT(coefficient != 0); - output_buffer[out_pixel_index + 0] += decode_buffer[in_pixel_index + 0] * coefficient; - } - break; - case 2: - for (k = n0; k <= n1; k++) - { - int in_pixel_index = k * 2; - float coefficient = horizontal_coefficients[coefficient_group + coefficient_counter++]; - STBIR_ASSERT(coefficient != 0); - output_buffer[out_pixel_index + 0] += decode_buffer[in_pixel_index + 0] * coefficient; - output_buffer[out_pixel_index + 1] += decode_buffer[in_pixel_index + 1] * coefficient; - } - break; - case 3: - for (k = n0; k <= n1; k++) - { - int in_pixel_index = k * 3; - float coefficient = horizontal_coefficients[coefficient_group + coefficient_counter++]; - STBIR_ASSERT(coefficient != 0); - output_buffer[out_pixel_index + 0] += decode_buffer[in_pixel_index + 0] * coefficient; - output_buffer[out_pixel_index + 1] += decode_buffer[in_pixel_index + 1] * coefficient; - output_buffer[out_pixel_index + 2] += decode_buffer[in_pixel_index + 2] * coefficient; - } - break; - case 4: - for (k = n0; k <= n1; k++) - { - int in_pixel_index = k * 4; - float coefficient = horizontal_coefficients[coefficient_group + coefficient_counter++]; - STBIR_ASSERT(coefficient != 0); - output_buffer[out_pixel_index + 0] += decode_buffer[in_pixel_index + 0] * coefficient; - output_buffer[out_pixel_index + 1] += decode_buffer[in_pixel_index + 1] * coefficient; - output_buffer[out_pixel_index + 2] += decode_buffer[in_pixel_index + 2] * coefficient; - output_buffer[out_pixel_index + 3] += decode_buffer[in_pixel_index + 3] * coefficient; - } - break; - default: - for (k = n0; k <= n1; k++) - { - int in_pixel_index = k * channels; - float coefficient = horizontal_coefficients[coefficient_group + coefficient_counter++]; - int c; - STBIR_ASSERT(coefficient != 0); - for (c = 0; c < channels; c++) - output_buffer[out_pixel_index + c] += decode_buffer[in_pixel_index + c] * coefficient; - } - break; - } - } -} - -static void stbir__resample_horizontal_downsample(stbir__info* stbir_info, float* output_buffer) -{ - int x, k; - int input_w = stbir_info->input_w; - int channels = stbir_info->channels; - float* decode_buffer = stbir__get_decode_buffer(stbir_info); - stbir__contributors* horizontal_contributors = stbir_info->horizontal_contributors; - float* horizontal_coefficients = stbir_info->horizontal_coefficients; - int coefficient_width = stbir_info->horizontal_coefficient_width; - int filter_pixel_margin = stbir_info->horizontal_filter_pixel_margin; - int max_x = input_w + filter_pixel_margin * 2; - - STBIR_ASSERT(!stbir__use_width_upsampling(stbir_info)); - - switch (channels) { - case 1: - for (x = 0; x < max_x; x++) - { - int n0 = horizontal_contributors[x].n0; - int n1 = horizontal_contributors[x].n1; - - int in_x = x - filter_pixel_margin; - int in_pixel_index = in_x * 1; - int max_n = n1; - int coefficient_group = coefficient_width * x; - - for (k = n0; k <= max_n; k++) - { - int out_pixel_index = k * 1; - float coefficient = horizontal_coefficients[coefficient_group + k - n0]; - output_buffer[out_pixel_index + 0] += decode_buffer[in_pixel_index + 0] * coefficient; - } - } - break; - - case 2: - for (x = 0; x < max_x; x++) - { - int n0 = horizontal_contributors[x].n0; - int n1 = horizontal_contributors[x].n1; - - int in_x = x - filter_pixel_margin; - int in_pixel_index = in_x * 2; - int max_n = n1; - int coefficient_group = coefficient_width * x; - - for (k = n0; k <= max_n; k++) - { - int out_pixel_index = k * 2; - float coefficient = horizontal_coefficients[coefficient_group + k - n0]; - output_buffer[out_pixel_index + 0] += decode_buffer[in_pixel_index + 0] * coefficient; - output_buffer[out_pixel_index + 1] += decode_buffer[in_pixel_index + 1] * coefficient; - } - } - break; - - case 3: - for (x = 0; x < max_x; x++) - { - int n0 = horizontal_contributors[x].n0; - int n1 = horizontal_contributors[x].n1; - - int in_x = x - filter_pixel_margin; - int in_pixel_index = in_x * 3; - int max_n = n1; - int coefficient_group = coefficient_width * x; - - for (k = n0; k <= max_n; k++) - { - int out_pixel_index = k * 3; - float coefficient = horizontal_coefficients[coefficient_group + k - n0]; - output_buffer[out_pixel_index + 0] += decode_buffer[in_pixel_index + 0] * coefficient; - output_buffer[out_pixel_index + 1] += decode_buffer[in_pixel_index + 1] * coefficient; - output_buffer[out_pixel_index + 2] += decode_buffer[in_pixel_index + 2] * coefficient; - } - } - break; - - case 4: - for (x = 0; x < max_x; x++) - { - int n0 = horizontal_contributors[x].n0; - int n1 = horizontal_contributors[x].n1; - - int in_x = x - filter_pixel_margin; - int in_pixel_index = in_x * 4; - int max_n = n1; - int coefficient_group = coefficient_width * x; - - for (k = n0; k <= max_n; k++) - { - int out_pixel_index = k * 4; - float coefficient = horizontal_coefficients[coefficient_group + k - n0]; - output_buffer[out_pixel_index + 0] += decode_buffer[in_pixel_index + 0] * coefficient; - output_buffer[out_pixel_index + 1] += decode_buffer[in_pixel_index + 1] * coefficient; - output_buffer[out_pixel_index + 2] += decode_buffer[in_pixel_index + 2] * coefficient; - output_buffer[out_pixel_index + 3] += decode_buffer[in_pixel_index + 3] * coefficient; - } - } - break; - - default: - for (x = 0; x < max_x; x++) - { - int n0 = horizontal_contributors[x].n0; - int n1 = horizontal_contributors[x].n1; - - int in_x = x - filter_pixel_margin; - int in_pixel_index = in_x * channels; - int max_n = n1; - int coefficient_group = coefficient_width * x; - - for (k = n0; k <= max_n; k++) - { - int c; - int out_pixel_index = k * channels; - float coefficient = horizontal_coefficients[coefficient_group + k - n0]; - for (c = 0; c < channels; c++) - output_buffer[out_pixel_index + c] += decode_buffer[in_pixel_index + c] * coefficient; - } - } - break; - } -} - -static void stbir__decode_and_resample_upsample(stbir__info* stbir_info, int n) -{ - // Decode the nth scanline from the source image into the decode buffer. - stbir__decode_scanline(stbir_info, n); - - // Now resample it into the ring buffer. - if (stbir__use_width_upsampling(stbir_info)) - stbir__resample_horizontal_upsample(stbir_info, stbir__add_empty_ring_buffer_entry(stbir_info, n)); - else - stbir__resample_horizontal_downsample(stbir_info, stbir__add_empty_ring_buffer_entry(stbir_info, n)); - - // Now it's sitting in the ring buffer ready to be used as source for the vertical sampling. -} - -static void stbir__decode_and_resample_downsample(stbir__info* stbir_info, int n) -{ - // Decode the nth scanline from the source image into the decode buffer. - stbir__decode_scanline(stbir_info, n); - - memset(stbir_info->horizontal_buffer, 0, stbir_info->output_w * stbir_info->channels * sizeof(float)); - - // Now resample it into the horizontal buffer. - if (stbir__use_width_upsampling(stbir_info)) - stbir__resample_horizontal_upsample(stbir_info, stbir_info->horizontal_buffer); - else - stbir__resample_horizontal_downsample(stbir_info, stbir_info->horizontal_buffer); - - // Now it's sitting in the horizontal buffer ready to be distributed into the ring buffers. -} - -// Get the specified scan line from the ring buffer. -static float* stbir__get_ring_buffer_scanline(int get_scanline, float* ring_buffer, int begin_index, int first_scanline, int ring_buffer_num_entries, int ring_buffer_length) -{ - int ring_buffer_index = (begin_index + (get_scanline - first_scanline)) % ring_buffer_num_entries; - return stbir__get_ring_buffer_entry(ring_buffer, ring_buffer_index, ring_buffer_length); -} - - -static void stbir__encode_scanline(stbir__info* stbir_info, int num_pixels, void *output_buffer, float *encode_buffer, int channels, int alpha_channel, int decode) -{ - int x; - int n; - int num_nonalpha; - stbir_uint16 nonalpha[STBIR_MAX_CHANNELS]; - - if (!(stbir_info->flags&STBIR_FLAG_ALPHA_PREMULTIPLIED)) - { - for (x=0; x < num_pixels; ++x) - { - int pixel_index = x*channels; - - float alpha = encode_buffer[pixel_index + alpha_channel]; - float reciprocal_alpha = alpha ? 1.0f / alpha : 0; - - // unrolling this produced a 1% slowdown upscaling a large RGBA linear-space image on my machine - stb - for (n = 0; n < channels; n++) - if (n != alpha_channel) - encode_buffer[pixel_index + n] *= reciprocal_alpha; - - // We added in a small epsilon to prevent the color channel from being deleted with zero alpha. - // Because we only add it for integer types, it will automatically be discarded on integer - // conversion, so we don't need to subtract it back out (which would be problematic for - // numeric precision reasons). - } - } - - // build a table of all channels that need colorspace correction, so - // we don't perform colorspace correction on channels that don't need it. - for (x = 0, num_nonalpha = 0; x < channels; ++x) - { - if (x != alpha_channel || (stbir_info->flags & STBIR_FLAG_ALPHA_USES_COLORSPACE)) - { - nonalpha[num_nonalpha++] = (stbir_uint16)x; - } - } - - #define STBIR__ROUND_INT(f) ((int) ((f)+0.5)) - #define STBIR__ROUND_UINT(f) ((stbir_uint32) ((f)+0.5)) - - #ifdef STBIR__SATURATE_INT - #define STBIR__ENCODE_LINEAR8(f) stbir__saturate8 (STBIR__ROUND_INT((f) * stbir__max_uint8_as_float )) - #define STBIR__ENCODE_LINEAR16(f) stbir__saturate16(STBIR__ROUND_INT((f) * stbir__max_uint16_as_float)) - #else - #define STBIR__ENCODE_LINEAR8(f) (unsigned char ) STBIR__ROUND_INT(stbir__saturate(f) * stbir__max_uint8_as_float ) - #define STBIR__ENCODE_LINEAR16(f) (unsigned short) STBIR__ROUND_INT(stbir__saturate(f) * stbir__max_uint16_as_float) - #endif - - switch (decode) - { - case STBIR__DECODE(STBIR_TYPE_UINT8, STBIR_COLORSPACE_LINEAR): - for (x=0; x < num_pixels; ++x) - { - int pixel_index = x*channels; - - for (n = 0; n < channels; n++) - { - int index = pixel_index + n; - ((unsigned char*)output_buffer)[index] = STBIR__ENCODE_LINEAR8(encode_buffer[index]); - } - } - break; - - case STBIR__DECODE(STBIR_TYPE_UINT8, STBIR_COLORSPACE_SRGB): - for (x=0; x < num_pixels; ++x) - { - int pixel_index = x*channels; - - for (n = 0; n < num_nonalpha; n++) - { - int index = pixel_index + nonalpha[n]; - ((unsigned char*)output_buffer)[index] = stbir__linear_to_srgb_uchar(encode_buffer[index]); - } - - if (!(stbir_info->flags & STBIR_FLAG_ALPHA_USES_COLORSPACE)) - ((unsigned char *)output_buffer)[pixel_index + alpha_channel] = STBIR__ENCODE_LINEAR8(encode_buffer[pixel_index+alpha_channel]); - } - break; - - case STBIR__DECODE(STBIR_TYPE_UINT16, STBIR_COLORSPACE_LINEAR): - for (x=0; x < num_pixels; ++x) - { - int pixel_index = x*channels; - - for (n = 0; n < channels; n++) - { - int index = pixel_index + n; - ((unsigned short*)output_buffer)[index] = STBIR__ENCODE_LINEAR16(encode_buffer[index]); - } - } - break; - - case STBIR__DECODE(STBIR_TYPE_UINT16, STBIR_COLORSPACE_SRGB): - for (x=0; x < num_pixels; ++x) - { - int pixel_index = x*channels; - - for (n = 0; n < num_nonalpha; n++) - { - int index = pixel_index + nonalpha[n]; - ((unsigned short*)output_buffer)[index] = (unsigned short)STBIR__ROUND_INT(stbir__linear_to_srgb(stbir__saturate(encode_buffer[index])) * stbir__max_uint16_as_float); - } - - if (!(stbir_info->flags&STBIR_FLAG_ALPHA_USES_COLORSPACE)) - ((unsigned short*)output_buffer)[pixel_index + alpha_channel] = STBIR__ENCODE_LINEAR16(encode_buffer[pixel_index + alpha_channel]); - } - - break; - - case STBIR__DECODE(STBIR_TYPE_UINT32, STBIR_COLORSPACE_LINEAR): - for (x=0; x < num_pixels; ++x) - { - int pixel_index = x*channels; - - for (n = 0; n < channels; n++) - { - int index = pixel_index + n; - ((unsigned int*)output_buffer)[index] = (unsigned int)STBIR__ROUND_UINT(((double)stbir__saturate(encode_buffer[index])) * stbir__max_uint32_as_float); - } - } - break; - - case STBIR__DECODE(STBIR_TYPE_UINT32, STBIR_COLORSPACE_SRGB): - for (x=0; x < num_pixels; ++x) - { - int pixel_index = x*channels; - - for (n = 0; n < num_nonalpha; n++) - { - int index = pixel_index + nonalpha[n]; - ((unsigned int*)output_buffer)[index] = (unsigned int)STBIR__ROUND_UINT(((double)stbir__linear_to_srgb(stbir__saturate(encode_buffer[index]))) * stbir__max_uint32_as_float); - } - - if (!(stbir_info->flags&STBIR_FLAG_ALPHA_USES_COLORSPACE)) - ((unsigned int*)output_buffer)[pixel_index + alpha_channel] = (unsigned int)STBIR__ROUND_INT(((double)stbir__saturate(encode_buffer[pixel_index + alpha_channel])) * stbir__max_uint32_as_float); - } - break; - - case STBIR__DECODE(STBIR_TYPE_FLOAT, STBIR_COLORSPACE_LINEAR): - for (x=0; x < num_pixels; ++x) - { - int pixel_index = x*channels; - - for (n = 0; n < channels; n++) - { - int index = pixel_index + n; - ((float*)output_buffer)[index] = encode_buffer[index]; - } - } - break; - - case STBIR__DECODE(STBIR_TYPE_FLOAT, STBIR_COLORSPACE_SRGB): - for (x=0; x < num_pixels; ++x) - { - int pixel_index = x*channels; - - for (n = 0; n < num_nonalpha; n++) - { - int index = pixel_index + nonalpha[n]; - ((float*)output_buffer)[index] = stbir__linear_to_srgb(encode_buffer[index]); - } - - if (!(stbir_info->flags&STBIR_FLAG_ALPHA_USES_COLORSPACE)) - ((float*)output_buffer)[pixel_index + alpha_channel] = encode_buffer[pixel_index + alpha_channel]; - } - break; - - default: - STBIR_ASSERT(!"Unknown type/colorspace/channels combination."); - break; - } -} - -static void stbir__resample_vertical_upsample(stbir__info* stbir_info, int n) -{ - int x, k; - int output_w = stbir_info->output_w; - stbir__contributors* vertical_contributors = stbir_info->vertical_contributors; - float* vertical_coefficients = stbir_info->vertical_coefficients; - int channels = stbir_info->channels; - int alpha_channel = stbir_info->alpha_channel; - int type = stbir_info->type; - int colorspace = stbir_info->colorspace; - int ring_buffer_entries = stbir_info->ring_buffer_num_entries; - void* output_data = stbir_info->output_data; - float* encode_buffer = stbir_info->encode_buffer; - int decode = STBIR__DECODE(type, colorspace); - int coefficient_width = stbir_info->vertical_coefficient_width; - int coefficient_counter; - int contributor = n; - - float* ring_buffer = stbir_info->ring_buffer; - int ring_buffer_begin_index = stbir_info->ring_buffer_begin_index; - int ring_buffer_first_scanline = stbir_info->ring_buffer_first_scanline; - int ring_buffer_length = stbir_info->ring_buffer_length_bytes/sizeof(float); - - int n0,n1, output_row_start; - int coefficient_group = coefficient_width * contributor; - - n0 = vertical_contributors[contributor].n0; - n1 = vertical_contributors[contributor].n1; - - output_row_start = n * stbir_info->output_stride_bytes; - - STBIR_ASSERT(stbir__use_height_upsampling(stbir_info)); - - memset(encode_buffer, 0, output_w * sizeof(float) * channels); - - // I tried reblocking this for better cache usage of encode_buffer - // (using x_outer, k, x_inner), but it lost speed. -- stb - - coefficient_counter = 0; - switch (channels) { - case 1: - for (k = n0; k <= n1; k++) - { - int coefficient_index = coefficient_counter++; - float* ring_buffer_entry = stbir__get_ring_buffer_scanline(k, ring_buffer, ring_buffer_begin_index, ring_buffer_first_scanline, ring_buffer_entries, ring_buffer_length); - float coefficient = vertical_coefficients[coefficient_group + coefficient_index]; - for (x = 0; x < output_w; ++x) - { - int in_pixel_index = x * 1; - encode_buffer[in_pixel_index + 0] += ring_buffer_entry[in_pixel_index + 0] * coefficient; - } - } - break; - case 2: - for (k = n0; k <= n1; k++) - { - int coefficient_index = coefficient_counter++; - float* ring_buffer_entry = stbir__get_ring_buffer_scanline(k, ring_buffer, ring_buffer_begin_index, ring_buffer_first_scanline, ring_buffer_entries, ring_buffer_length); - float coefficient = vertical_coefficients[coefficient_group + coefficient_index]; - for (x = 0; x < output_w; ++x) - { - int in_pixel_index = x * 2; - encode_buffer[in_pixel_index + 0] += ring_buffer_entry[in_pixel_index + 0] * coefficient; - encode_buffer[in_pixel_index + 1] += ring_buffer_entry[in_pixel_index + 1] * coefficient; - } - } - break; - case 3: - for (k = n0; k <= n1; k++) - { - int coefficient_index = coefficient_counter++; - float* ring_buffer_entry = stbir__get_ring_buffer_scanline(k, ring_buffer, ring_buffer_begin_index, ring_buffer_first_scanline, ring_buffer_entries, ring_buffer_length); - float coefficient = vertical_coefficients[coefficient_group + coefficient_index]; - for (x = 0; x < output_w; ++x) - { - int in_pixel_index = x * 3; - encode_buffer[in_pixel_index + 0] += ring_buffer_entry[in_pixel_index + 0] * coefficient; - encode_buffer[in_pixel_index + 1] += ring_buffer_entry[in_pixel_index + 1] * coefficient; - encode_buffer[in_pixel_index + 2] += ring_buffer_entry[in_pixel_index + 2] * coefficient; - } - } - break; - case 4: - for (k = n0; k <= n1; k++) - { - int coefficient_index = coefficient_counter++; - float* ring_buffer_entry = stbir__get_ring_buffer_scanline(k, ring_buffer, ring_buffer_begin_index, ring_buffer_first_scanline, ring_buffer_entries, ring_buffer_length); - float coefficient = vertical_coefficients[coefficient_group + coefficient_index]; - for (x = 0; x < output_w; ++x) - { - int in_pixel_index = x * 4; - encode_buffer[in_pixel_index + 0] += ring_buffer_entry[in_pixel_index + 0] * coefficient; - encode_buffer[in_pixel_index + 1] += ring_buffer_entry[in_pixel_index + 1] * coefficient; - encode_buffer[in_pixel_index + 2] += ring_buffer_entry[in_pixel_index + 2] * coefficient; - encode_buffer[in_pixel_index + 3] += ring_buffer_entry[in_pixel_index + 3] * coefficient; - } - } - break; - default: - for (k = n0; k <= n1; k++) - { - int coefficient_index = coefficient_counter++; - float* ring_buffer_entry = stbir__get_ring_buffer_scanline(k, ring_buffer, ring_buffer_begin_index, ring_buffer_first_scanline, ring_buffer_entries, ring_buffer_length); - float coefficient = vertical_coefficients[coefficient_group + coefficient_index]; - for (x = 0; x < output_w; ++x) - { - int in_pixel_index = x * channels; - int c; - for (c = 0; c < channels; c++) - encode_buffer[in_pixel_index + c] += ring_buffer_entry[in_pixel_index + c] * coefficient; - } - } - break; - } - stbir__encode_scanline(stbir_info, output_w, (char *) output_data + output_row_start, encode_buffer, channels, alpha_channel, decode); -} - -static void stbir__resample_vertical_downsample(stbir__info* stbir_info, int n) -{ - int x, k; - int output_w = stbir_info->output_w; - stbir__contributors* vertical_contributors = stbir_info->vertical_contributors; - float* vertical_coefficients = stbir_info->vertical_coefficients; - int channels = stbir_info->channels; - int ring_buffer_entries = stbir_info->ring_buffer_num_entries; - float* horizontal_buffer = stbir_info->horizontal_buffer; - int coefficient_width = stbir_info->vertical_coefficient_width; - int contributor = n + stbir_info->vertical_filter_pixel_margin; - - float* ring_buffer = stbir_info->ring_buffer; - int ring_buffer_begin_index = stbir_info->ring_buffer_begin_index; - int ring_buffer_first_scanline = stbir_info->ring_buffer_first_scanline; - int ring_buffer_length = stbir_info->ring_buffer_length_bytes/sizeof(float); - int n0,n1; - - n0 = vertical_contributors[contributor].n0; - n1 = vertical_contributors[contributor].n1; - - STBIR_ASSERT(!stbir__use_height_upsampling(stbir_info)); - - for (k = n0; k <= n1; k++) - { - int coefficient_index = k - n0; - int coefficient_group = coefficient_width * contributor; - float coefficient = vertical_coefficients[coefficient_group + coefficient_index]; - - float* ring_buffer_entry = stbir__get_ring_buffer_scanline(k, ring_buffer, ring_buffer_begin_index, ring_buffer_first_scanline, ring_buffer_entries, ring_buffer_length); - - switch (channels) { - case 1: - for (x = 0; x < output_w; x++) - { - int in_pixel_index = x * 1; - ring_buffer_entry[in_pixel_index + 0] += horizontal_buffer[in_pixel_index + 0] * coefficient; - } - break; - case 2: - for (x = 0; x < output_w; x++) - { - int in_pixel_index = x * 2; - ring_buffer_entry[in_pixel_index + 0] += horizontal_buffer[in_pixel_index + 0] * coefficient; - ring_buffer_entry[in_pixel_index + 1] += horizontal_buffer[in_pixel_index + 1] * coefficient; - } - break; - case 3: - for (x = 0; x < output_w; x++) - { - int in_pixel_index = x * 3; - ring_buffer_entry[in_pixel_index + 0] += horizontal_buffer[in_pixel_index + 0] * coefficient; - ring_buffer_entry[in_pixel_index + 1] += horizontal_buffer[in_pixel_index + 1] * coefficient; - ring_buffer_entry[in_pixel_index + 2] += horizontal_buffer[in_pixel_index + 2] * coefficient; - } - break; - case 4: - for (x = 0; x < output_w; x++) - { - int in_pixel_index = x * 4; - ring_buffer_entry[in_pixel_index + 0] += horizontal_buffer[in_pixel_index + 0] * coefficient; - ring_buffer_entry[in_pixel_index + 1] += horizontal_buffer[in_pixel_index + 1] * coefficient; - ring_buffer_entry[in_pixel_index + 2] += horizontal_buffer[in_pixel_index + 2] * coefficient; - ring_buffer_entry[in_pixel_index + 3] += horizontal_buffer[in_pixel_index + 3] * coefficient; - } - break; - default: - for (x = 0; x < output_w; x++) - { - int in_pixel_index = x * channels; - - int c; - for (c = 0; c < channels; c++) - ring_buffer_entry[in_pixel_index + c] += horizontal_buffer[in_pixel_index + c] * coefficient; - } - break; - } - } -} - -static void stbir__buffer_loop_upsample(stbir__info* stbir_info) -{ - int y; - float scale_ratio = stbir_info->vertical_scale; - float out_scanlines_radius = stbir__filter_info_table[stbir_info->vertical_filter].support(1/scale_ratio) * scale_ratio; - - STBIR_ASSERT(stbir__use_height_upsampling(stbir_info)); - - for (y = 0; y < stbir_info->output_h; y++) - { - float in_center_of_out = 0; // Center of the current out scanline in the in scanline space - int in_first_scanline = 0, in_last_scanline = 0; - - stbir__calculate_sample_range_upsample(y, out_scanlines_radius, scale_ratio, stbir_info->vertical_shift, &in_first_scanline, &in_last_scanline, &in_center_of_out); - - STBIR_ASSERT(in_last_scanline - in_first_scanline + 1 <= stbir_info->ring_buffer_num_entries); - - if (stbir_info->ring_buffer_begin_index >= 0) - { - // Get rid of whatever we don't need anymore. - while (in_first_scanline > stbir_info->ring_buffer_first_scanline) - { - if (stbir_info->ring_buffer_first_scanline == stbir_info->ring_buffer_last_scanline) - { - // We just popped the last scanline off the ring buffer. - // Reset it to the empty state. - stbir_info->ring_buffer_begin_index = -1; - stbir_info->ring_buffer_first_scanline = 0; - stbir_info->ring_buffer_last_scanline = 0; - break; - } - else - { - stbir_info->ring_buffer_first_scanline++; - stbir_info->ring_buffer_begin_index = (stbir_info->ring_buffer_begin_index + 1) % stbir_info->ring_buffer_num_entries; - } - } - } - - // Load in new ones. - if (stbir_info->ring_buffer_begin_index < 0) - stbir__decode_and_resample_upsample(stbir_info, in_first_scanline); - - while (in_last_scanline > stbir_info->ring_buffer_last_scanline) - stbir__decode_and_resample_upsample(stbir_info, stbir_info->ring_buffer_last_scanline + 1); - - // Now all buffers should be ready to write a row of vertical sampling. - stbir__resample_vertical_upsample(stbir_info, y); - - STBIR_PROGRESS_REPORT((float)y / stbir_info->output_h); - } -} - -static void stbir__empty_ring_buffer(stbir__info* stbir_info, int first_necessary_scanline) -{ - int output_stride_bytes = stbir_info->output_stride_bytes; - int channels = stbir_info->channels; - int alpha_channel = stbir_info->alpha_channel; - int type = stbir_info->type; - int colorspace = stbir_info->colorspace; - int output_w = stbir_info->output_w; - void* output_data = stbir_info->output_data; - int decode = STBIR__DECODE(type, colorspace); - - float* ring_buffer = stbir_info->ring_buffer; - int ring_buffer_length = stbir_info->ring_buffer_length_bytes/sizeof(float); - - if (stbir_info->ring_buffer_begin_index >= 0) - { - // Get rid of whatever we don't need anymore. - while (first_necessary_scanline > stbir_info->ring_buffer_first_scanline) - { - if (stbir_info->ring_buffer_first_scanline >= 0 && stbir_info->ring_buffer_first_scanline < stbir_info->output_h) - { - int output_row_start = stbir_info->ring_buffer_first_scanline * output_stride_bytes; - float* ring_buffer_entry = stbir__get_ring_buffer_entry(ring_buffer, stbir_info->ring_buffer_begin_index, ring_buffer_length); - stbir__encode_scanline(stbir_info, output_w, (char *) output_data + output_row_start, ring_buffer_entry, channels, alpha_channel, decode); - STBIR_PROGRESS_REPORT((float)stbir_info->ring_buffer_first_scanline / stbir_info->output_h); - } - - if (stbir_info->ring_buffer_first_scanline == stbir_info->ring_buffer_last_scanline) - { - // We just popped the last scanline off the ring buffer. - // Reset it to the empty state. - stbir_info->ring_buffer_begin_index = -1; - stbir_info->ring_buffer_first_scanline = 0; - stbir_info->ring_buffer_last_scanline = 0; - break; - } - else - { - stbir_info->ring_buffer_first_scanline++; - stbir_info->ring_buffer_begin_index = (stbir_info->ring_buffer_begin_index + 1) % stbir_info->ring_buffer_num_entries; - } - } - } -} - -static void stbir__buffer_loop_downsample(stbir__info* stbir_info) -{ - int y; - float scale_ratio = stbir_info->vertical_scale; - int output_h = stbir_info->output_h; - float in_pixels_radius = stbir__filter_info_table[stbir_info->vertical_filter].support(scale_ratio) / scale_ratio; - int pixel_margin = stbir_info->vertical_filter_pixel_margin; - int max_y = stbir_info->input_h + pixel_margin; - - STBIR_ASSERT(!stbir__use_height_upsampling(stbir_info)); - - for (y = -pixel_margin; y < max_y; y++) - { - float out_center_of_in; // Center of the current out scanline in the in scanline space - int out_first_scanline, out_last_scanline; - - stbir__calculate_sample_range_downsample(y, in_pixels_radius, scale_ratio, stbir_info->vertical_shift, &out_first_scanline, &out_last_scanline, &out_center_of_in); - - STBIR_ASSERT(out_last_scanline - out_first_scanline + 1 <= stbir_info->ring_buffer_num_entries); - - if (out_last_scanline < 0 || out_first_scanline >= output_h) - continue; - - stbir__empty_ring_buffer(stbir_info, out_first_scanline); - - stbir__decode_and_resample_downsample(stbir_info, y); - - // Load in new ones. - if (stbir_info->ring_buffer_begin_index < 0) - stbir__add_empty_ring_buffer_entry(stbir_info, out_first_scanline); - - while (out_last_scanline > stbir_info->ring_buffer_last_scanline) - stbir__add_empty_ring_buffer_entry(stbir_info, stbir_info->ring_buffer_last_scanline + 1); - - // Now the horizontal buffer is ready to write to all ring buffer rows. - stbir__resample_vertical_downsample(stbir_info, y); - } - - stbir__empty_ring_buffer(stbir_info, stbir_info->output_h); -} - -static void stbir__setup(stbir__info *info, int input_w, int input_h, int output_w, int output_h, int channels) -{ - info->input_w = input_w; - info->input_h = input_h; - info->output_w = output_w; - info->output_h = output_h; - info->channels = channels; -} - -static void stbir__calculate_transform(stbir__info *info, float s0, float t0, float s1, float t1, float *transform) -{ - info->s0 = s0; - info->t0 = t0; - info->s1 = s1; - info->t1 = t1; - - if (transform) - { - info->horizontal_scale = transform[0]; - info->vertical_scale = transform[1]; - info->horizontal_shift = transform[2]; - info->vertical_shift = transform[3]; - } - else - { - info->horizontal_scale = ((float)info->output_w / info->input_w) / (s1 - s0); - info->vertical_scale = ((float)info->output_h / info->input_h) / (t1 - t0); - - info->horizontal_shift = s0 * info->output_w / (s1 - s0); - info->vertical_shift = t0 * info->output_h / (t1 - t0); - } -} - -static void stbir__choose_filter(stbir__info *info, stbir_filter h_filter, stbir_filter v_filter) -{ - if (h_filter == 0) - h_filter = stbir__use_upsampling(info->horizontal_scale) ? STBIR_DEFAULT_FILTER_UPSAMPLE : STBIR_DEFAULT_FILTER_DOWNSAMPLE; - if (v_filter == 0) - v_filter = stbir__use_upsampling(info->vertical_scale) ? STBIR_DEFAULT_FILTER_UPSAMPLE : STBIR_DEFAULT_FILTER_DOWNSAMPLE; - info->horizontal_filter = h_filter; - info->vertical_filter = v_filter; -} - -static stbir_uint32 stbir__calculate_memory(stbir__info *info) -{ - int pixel_margin = stbir__get_filter_pixel_margin(info->horizontal_filter, info->horizontal_scale); - int filter_height = stbir__get_filter_pixel_width(info->vertical_filter, info->vertical_scale); - - info->horizontal_num_contributors = stbir__get_contributors(info->horizontal_scale, info->horizontal_filter, info->input_w, info->output_w); - info->vertical_num_contributors = stbir__get_contributors(info->vertical_scale , info->vertical_filter , info->input_h, info->output_h); - - // One extra entry because floating point precision problems sometimes cause an extra to be necessary. - info->ring_buffer_num_entries = filter_height + 1; - - info->horizontal_contributors_size = info->horizontal_num_contributors * sizeof(stbir__contributors); - info->horizontal_coefficients_size = stbir__get_total_horizontal_coefficients(info) * sizeof(float); - info->vertical_contributors_size = info->vertical_num_contributors * sizeof(stbir__contributors); - info->vertical_coefficients_size = stbir__get_total_vertical_coefficients(info) * sizeof(float); - info->decode_buffer_size = (info->input_w + pixel_margin * 2) * info->channels * sizeof(float); - info->horizontal_buffer_size = info->output_w * info->channels * sizeof(float); - info->ring_buffer_size = info->output_w * info->channels * info->ring_buffer_num_entries * sizeof(float); - info->encode_buffer_size = info->output_w * info->channels * sizeof(float); - - STBIR_ASSERT(info->horizontal_filter != 0); - STBIR_ASSERT(info->horizontal_filter < STBIR__ARRAY_SIZE(stbir__filter_info_table)); // this now happens too late - STBIR_ASSERT(info->vertical_filter != 0); - STBIR_ASSERT(info->vertical_filter < STBIR__ARRAY_SIZE(stbir__filter_info_table)); // this now happens too late - - if (stbir__use_height_upsampling(info)) - // The horizontal buffer is for when we're downsampling the height and we - // can't output the result of sampling the decode buffer directly into the - // ring buffers. - info->horizontal_buffer_size = 0; - else - // The encode buffer is to retain precision in the height upsampling method - // and isn't used when height downsampling. - info->encode_buffer_size = 0; - - return info->horizontal_contributors_size + info->horizontal_coefficients_size - + info->vertical_contributors_size + info->vertical_coefficients_size - + info->decode_buffer_size + info->horizontal_buffer_size - + info->ring_buffer_size + info->encode_buffer_size; -} - -static int stbir__resize_allocated(stbir__info *info, - const void* input_data, int input_stride_in_bytes, - void* output_data, int output_stride_in_bytes, - int alpha_channel, stbir_uint32 flags, stbir_datatype type, - stbir_edge edge_horizontal, stbir_edge edge_vertical, stbir_colorspace colorspace, - void* tempmem, size_t tempmem_size_in_bytes) -{ - size_t memory_required = stbir__calculate_memory(info); - - int width_stride_input = input_stride_in_bytes ? input_stride_in_bytes : info->channels * info->input_w * stbir__type_size[type]; - int width_stride_output = output_stride_in_bytes ? output_stride_in_bytes : info->channels * info->output_w * stbir__type_size[type]; - -#ifdef STBIR_DEBUG_OVERWRITE_TEST -#define OVERWRITE_ARRAY_SIZE 8 - unsigned char overwrite_output_before_pre[OVERWRITE_ARRAY_SIZE]; - unsigned char overwrite_tempmem_before_pre[OVERWRITE_ARRAY_SIZE]; - unsigned char overwrite_output_after_pre[OVERWRITE_ARRAY_SIZE]; - unsigned char overwrite_tempmem_after_pre[OVERWRITE_ARRAY_SIZE]; - - size_t begin_forbidden = width_stride_output * (info->output_h - 1) + info->output_w * info->channels * stbir__type_size[type]; - memcpy(overwrite_output_before_pre, &((unsigned char*)output_data)[-OVERWRITE_ARRAY_SIZE], OVERWRITE_ARRAY_SIZE); - memcpy(overwrite_output_after_pre, &((unsigned char*)output_data)[begin_forbidden], OVERWRITE_ARRAY_SIZE); - memcpy(overwrite_tempmem_before_pre, &((unsigned char*)tempmem)[-OVERWRITE_ARRAY_SIZE], OVERWRITE_ARRAY_SIZE); - memcpy(overwrite_tempmem_after_pre, &((unsigned char*)tempmem)[tempmem_size_in_bytes], OVERWRITE_ARRAY_SIZE); -#endif - - STBIR_ASSERT(info->channels >= 0); - STBIR_ASSERT(info->channels <= STBIR_MAX_CHANNELS); - - if (info->channels < 0 || info->channels > STBIR_MAX_CHANNELS) - return 0; - - STBIR_ASSERT(info->horizontal_filter < STBIR__ARRAY_SIZE(stbir__filter_info_table)); - STBIR_ASSERT(info->vertical_filter < STBIR__ARRAY_SIZE(stbir__filter_info_table)); - - if (info->horizontal_filter >= STBIR__ARRAY_SIZE(stbir__filter_info_table)) - return 0; - if (info->vertical_filter >= STBIR__ARRAY_SIZE(stbir__filter_info_table)) - return 0; - - if (alpha_channel < 0) - flags |= STBIR_FLAG_ALPHA_USES_COLORSPACE | STBIR_FLAG_ALPHA_PREMULTIPLIED; - - if (!(flags&STBIR_FLAG_ALPHA_USES_COLORSPACE) || !(flags&STBIR_FLAG_ALPHA_PREMULTIPLIED)) { - STBIR_ASSERT(alpha_channel >= 0 && alpha_channel < info->channels); - } - - if (alpha_channel >= info->channels) - return 0; - - STBIR_ASSERT(tempmem); - - if (!tempmem) - return 0; - - STBIR_ASSERT(tempmem_size_in_bytes >= memory_required); - - if (tempmem_size_in_bytes < memory_required) - return 0; - - memset(tempmem, 0, tempmem_size_in_bytes); - - info->input_data = input_data; - info->input_stride_bytes = width_stride_input; - - info->output_data = output_data; - info->output_stride_bytes = width_stride_output; - - info->alpha_channel = alpha_channel; - info->flags = flags; - info->type = type; - info->edge_horizontal = edge_horizontal; - info->edge_vertical = edge_vertical; - info->colorspace = colorspace; - - info->horizontal_coefficient_width = stbir__get_coefficient_width (info->horizontal_filter, info->horizontal_scale); - info->vertical_coefficient_width = stbir__get_coefficient_width (info->vertical_filter , info->vertical_scale ); - info->horizontal_filter_pixel_width = stbir__get_filter_pixel_width (info->horizontal_filter, info->horizontal_scale); - info->vertical_filter_pixel_width = stbir__get_filter_pixel_width (info->vertical_filter , info->vertical_scale ); - info->horizontal_filter_pixel_margin = stbir__get_filter_pixel_margin(info->horizontal_filter, info->horizontal_scale); - info->vertical_filter_pixel_margin = stbir__get_filter_pixel_margin(info->vertical_filter , info->vertical_scale ); - - info->ring_buffer_length_bytes = info->output_w * info->channels * sizeof(float); - info->decode_buffer_pixels = info->input_w + info->horizontal_filter_pixel_margin * 2; - -#define STBIR__NEXT_MEMPTR(current, newtype) (newtype*)(((unsigned char*)current) + current##_size) - - info->horizontal_contributors = (stbir__contributors *) tempmem; - info->horizontal_coefficients = STBIR__NEXT_MEMPTR(info->horizontal_contributors, float); - info->vertical_contributors = STBIR__NEXT_MEMPTR(info->horizontal_coefficients, stbir__contributors); - info->vertical_coefficients = STBIR__NEXT_MEMPTR(info->vertical_contributors, float); - info->decode_buffer = STBIR__NEXT_MEMPTR(info->vertical_coefficients, float); - - if (stbir__use_height_upsampling(info)) - { - info->horizontal_buffer = NULL; - info->ring_buffer = STBIR__NEXT_MEMPTR(info->decode_buffer, float); - info->encode_buffer = STBIR__NEXT_MEMPTR(info->ring_buffer, float); - - STBIR_ASSERT((size_t)STBIR__NEXT_MEMPTR(info->encode_buffer, unsigned char) == (size_t)tempmem + tempmem_size_in_bytes); - } - else - { - info->horizontal_buffer = STBIR__NEXT_MEMPTR(info->decode_buffer, float); - info->ring_buffer = STBIR__NEXT_MEMPTR(info->horizontal_buffer, float); - info->encode_buffer = NULL; - - STBIR_ASSERT((size_t)STBIR__NEXT_MEMPTR(info->ring_buffer, unsigned char) == (size_t)tempmem + tempmem_size_in_bytes); - } - -#undef STBIR__NEXT_MEMPTR - - // This signals that the ring buffer is empty - info->ring_buffer_begin_index = -1; - - stbir__calculate_filters(info->horizontal_contributors, info->horizontal_coefficients, info->horizontal_filter, info->horizontal_scale, info->horizontal_shift, info->input_w, info->output_w); - stbir__calculate_filters(info->vertical_contributors, info->vertical_coefficients, info->vertical_filter, info->vertical_scale, info->vertical_shift, info->input_h, info->output_h); - - STBIR_PROGRESS_REPORT(0); - - if (stbir__use_height_upsampling(info)) - stbir__buffer_loop_upsample(info); - else - stbir__buffer_loop_downsample(info); - - STBIR_PROGRESS_REPORT(1); - -#ifdef STBIR_DEBUG_OVERWRITE_TEST - STBIR_ASSERT(memcmp(overwrite_output_before_pre, &((unsigned char*)output_data)[-OVERWRITE_ARRAY_SIZE], OVERWRITE_ARRAY_SIZE) == 0); - STBIR_ASSERT(memcmp(overwrite_output_after_pre, &((unsigned char*)output_data)[begin_forbidden], OVERWRITE_ARRAY_SIZE) == 0); - STBIR_ASSERT(memcmp(overwrite_tempmem_before_pre, &((unsigned char*)tempmem)[-OVERWRITE_ARRAY_SIZE], OVERWRITE_ARRAY_SIZE) == 0); - STBIR_ASSERT(memcmp(overwrite_tempmem_after_pre, &((unsigned char*)tempmem)[tempmem_size_in_bytes], OVERWRITE_ARRAY_SIZE) == 0); -#endif - - return 1; -} - - -static int stbir__resize_arbitrary( - void *alloc_context, - const void* input_data, int input_w, int input_h, int input_stride_in_bytes, - void* output_data, int output_w, int output_h, int output_stride_in_bytes, - float s0, float t0, float s1, float t1, float *transform, - int channels, int alpha_channel, stbir_uint32 flags, stbir_datatype type, - stbir_filter h_filter, stbir_filter v_filter, - stbir_edge edge_horizontal, stbir_edge edge_vertical, stbir_colorspace colorspace) -{ - stbir__info info; - int result; - size_t memory_required; - void* extra_memory; - - stbir__setup(&info, input_w, input_h, output_w, output_h, channels); - stbir__calculate_transform(&info, s0,t0,s1,t1,transform); - stbir__choose_filter(&info, h_filter, v_filter); - memory_required = stbir__calculate_memory(&info); - extra_memory = STBIR_MALLOC(memory_required, alloc_context); - - if (!extra_memory) - return 0; - - result = stbir__resize_allocated(&info, input_data, input_stride_in_bytes, - output_data, output_stride_in_bytes, - alpha_channel, flags, type, - edge_horizontal, edge_vertical, - colorspace, extra_memory, memory_required); - - STBIR_FREE(extra_memory, alloc_context); - - return result; -} - -STBIRDEF int stbir_resize_uint8( const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes, - unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes, - int num_channels) -{ - return stbir__resize_arbitrary(NULL, input_pixels, input_w, input_h, input_stride_in_bytes, - output_pixels, output_w, output_h, output_stride_in_bytes, - 0,0,1,1,NULL,num_channels,-1,0, STBIR_TYPE_UINT8, STBIR_FILTER_DEFAULT, STBIR_FILTER_DEFAULT, - STBIR_EDGE_CLAMP, STBIR_EDGE_CLAMP, STBIR_COLORSPACE_LINEAR); -} - -STBIRDEF int stbir_resize_float( const float *input_pixels , int input_w , int input_h , int input_stride_in_bytes, - float *output_pixels, int output_w, int output_h, int output_stride_in_bytes, - int num_channels) -{ - return stbir__resize_arbitrary(NULL, input_pixels, input_w, input_h, input_stride_in_bytes, - output_pixels, output_w, output_h, output_stride_in_bytes, - 0,0,1,1,NULL,num_channels,-1,0, STBIR_TYPE_FLOAT, STBIR_FILTER_DEFAULT, STBIR_FILTER_DEFAULT, - STBIR_EDGE_CLAMP, STBIR_EDGE_CLAMP, STBIR_COLORSPACE_LINEAR); -} - -STBIRDEF int stbir_resize_uint8_srgb(const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes, - unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes, - int num_channels, int alpha_channel, int flags) -{ - return stbir__resize_arbitrary(NULL, input_pixels, input_w, input_h, input_stride_in_bytes, - output_pixels, output_w, output_h, output_stride_in_bytes, - 0,0,1,1,NULL,num_channels,alpha_channel,flags, STBIR_TYPE_UINT8, STBIR_FILTER_DEFAULT, STBIR_FILTER_DEFAULT, - STBIR_EDGE_CLAMP, STBIR_EDGE_CLAMP, STBIR_COLORSPACE_SRGB); -} - -STBIRDEF int stbir_resize_uint8_srgb_edgemode(const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes, - unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes, - int num_channels, int alpha_channel, int flags, - stbir_edge edge_wrap_mode) -{ - return stbir__resize_arbitrary(NULL, input_pixels, input_w, input_h, input_stride_in_bytes, - output_pixels, output_w, output_h, output_stride_in_bytes, - 0,0,1,1,NULL,num_channels,alpha_channel,flags, STBIR_TYPE_UINT8, STBIR_FILTER_DEFAULT, STBIR_FILTER_DEFAULT, - edge_wrap_mode, edge_wrap_mode, STBIR_COLORSPACE_SRGB); -} - -STBIRDEF int stbir_resize_uint8_generic( const unsigned char *input_pixels , int input_w , int input_h , int input_stride_in_bytes, - unsigned char *output_pixels, int output_w, int output_h, int output_stride_in_bytes, - int num_channels, int alpha_channel, int flags, - stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space, - void *alloc_context) -{ - return stbir__resize_arbitrary(alloc_context, input_pixels, input_w, input_h, input_stride_in_bytes, - output_pixels, output_w, output_h, output_stride_in_bytes, - 0,0,1,1,NULL,num_channels,alpha_channel,flags, STBIR_TYPE_UINT8, filter, filter, - edge_wrap_mode, edge_wrap_mode, space); -} - -STBIRDEF int stbir_resize_uint16_generic(const stbir_uint16 *input_pixels , int input_w , int input_h , int input_stride_in_bytes, - stbir_uint16 *output_pixels , int output_w, int output_h, int output_stride_in_bytes, - int num_channels, int alpha_channel, int flags, - stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space, - void *alloc_context) -{ - return stbir__resize_arbitrary(alloc_context, input_pixels, input_w, input_h, input_stride_in_bytes, - output_pixels, output_w, output_h, output_stride_in_bytes, - 0,0,1,1,NULL,num_channels,alpha_channel,flags, STBIR_TYPE_UINT16, filter, filter, - edge_wrap_mode, edge_wrap_mode, space); -} - - -STBIRDEF int stbir_resize_float_generic( const float *input_pixels , int input_w , int input_h , int input_stride_in_bytes, - float *output_pixels , int output_w, int output_h, int output_stride_in_bytes, - int num_channels, int alpha_channel, int flags, - stbir_edge edge_wrap_mode, stbir_filter filter, stbir_colorspace space, - void *alloc_context) -{ - return stbir__resize_arbitrary(alloc_context, input_pixels, input_w, input_h, input_stride_in_bytes, - output_pixels, output_w, output_h, output_stride_in_bytes, - 0,0,1,1,NULL,num_channels,alpha_channel,flags, STBIR_TYPE_FLOAT, filter, filter, - edge_wrap_mode, edge_wrap_mode, space); -} - - -STBIRDEF int stbir_resize( const void *input_pixels , int input_w , int input_h , int input_stride_in_bytes, - void *output_pixels, int output_w, int output_h, int output_stride_in_bytes, - stbir_datatype datatype, - int num_channels, int alpha_channel, int flags, - stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical, - stbir_filter filter_horizontal, stbir_filter filter_vertical, - stbir_colorspace space, void *alloc_context) -{ - return stbir__resize_arbitrary(alloc_context, input_pixels, input_w, input_h, input_stride_in_bytes, - output_pixels, output_w, output_h, output_stride_in_bytes, - 0,0,1,1,NULL,num_channels,alpha_channel,flags, datatype, filter_horizontal, filter_vertical, - edge_mode_horizontal, edge_mode_vertical, space); -} - - -STBIRDEF int stbir_resize_subpixel(const void *input_pixels , int input_w , int input_h , int input_stride_in_bytes, - void *output_pixels, int output_w, int output_h, int output_stride_in_bytes, - stbir_datatype datatype, - int num_channels, int alpha_channel, int flags, - stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical, - stbir_filter filter_horizontal, stbir_filter filter_vertical, - stbir_colorspace space, void *alloc_context, - float x_scale, float y_scale, - float x_offset, float y_offset) -{ - float transform[4]; - transform[0] = x_scale; - transform[1] = y_scale; - transform[2] = x_offset; - transform[3] = y_offset; - return stbir__resize_arbitrary(alloc_context, input_pixels, input_w, input_h, input_stride_in_bytes, - output_pixels, output_w, output_h, output_stride_in_bytes, - 0,0,1,1,transform,num_channels,alpha_channel,flags, datatype, filter_horizontal, filter_vertical, - edge_mode_horizontal, edge_mode_vertical, space); -} - -STBIRDEF int stbir_resize_region( const void *input_pixels , int input_w , int input_h , int input_stride_in_bytes, - void *output_pixels, int output_w, int output_h, int output_stride_in_bytes, - stbir_datatype datatype, - int num_channels, int alpha_channel, int flags, - stbir_edge edge_mode_horizontal, stbir_edge edge_mode_vertical, - stbir_filter filter_horizontal, stbir_filter filter_vertical, - stbir_colorspace space, void *alloc_context, - float s0, float t0, float s1, float t1) -{ - return stbir__resize_arbitrary(alloc_context, input_pixels, input_w, input_h, input_stride_in_bytes, - output_pixels, output_w, output_h, output_stride_in_bytes, - s0,t0,s1,t1,NULL,num_channels,alpha_channel,flags, datatype, filter_horizontal, filter_vertical, - edge_mode_horizontal, edge_mode_vertical, space); -} - -#endif // STB_IMAGE_RESIZE_IMPLEMENTATION - -/* ------------------------------------------------------------------------------- -This software is available under 2 licenses -- choose whichever you prefer. ------------------------------------------------------------------------------- -ALTERNATIVE A - MIT License -Copyright (c) 2017 Sean Barrett -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. ------------------------------------------------------------------------------- -ALTERNATIVE B - Public Domain (www.unlicense.org) -This is free and unencumbered software released into the public domain. -Anyone is free to copy, modify, publish, use, compile, sell, or distribute this -software, either in source code form or as a compiled binary, for any purpose, -commercial or non-commercial, and by any means. -In jurisdictions that recognize copyright laws, the author or authors of this -software dedicate any and all copyright interest in the software to the public -domain. We make this dedication for the benefit of the public at large and to -the detriment of our heirs and successors. We intend this dedication to be an -overt act of relinquishment in perpetuity of all present and future rights to -this software under copyright law. -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 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. ------------------------------------------------------------------------------- -*/ diff --git a/src/vendor/stb_image/stb_image_write.h b/src/vendor/stb_image/stb_image_write.h deleted file mode 100755 index e4b32ed..0000000 --- a/src/vendor/stb_image/stb_image_write.h +++ /dev/null @@ -1,1724 +0,0 @@ -/* stb_image_write - v1.16 - public domain - http://nothings.org/stb - writes out PNG/BMP/TGA/JPEG/HDR images to C stdio - Sean Barrett 2010-2015 - no warranty implied; use at your own risk - - Before #including, - - #define STB_IMAGE_WRITE_IMPLEMENTATION - - in the file that you want to have the implementation. - - Will probably not work correctly with strict-aliasing optimizations. - -ABOUT: - - This header file is a library for writing images to C stdio or a callback. - - The PNG output is not optimal; it is 20-50% larger than the file - written by a decent optimizing implementation; though providing a custom - zlib compress function (see STBIW_ZLIB_COMPRESS) can mitigate that. - This library is designed for source code compactness and simplicity, - not optimal image file size or run-time performance. - -BUILDING: - - You can #define STBIW_ASSERT(x) before the #include to avoid using assert.h. - You can #define STBIW_MALLOC(), STBIW_REALLOC(), and STBIW_FREE() to replace - malloc,realloc,free. - You can #define STBIW_MEMMOVE() to replace memmove() - You can #define STBIW_ZLIB_COMPRESS to use a custom zlib-style compress function - for PNG compression (instead of the builtin one), it must have the following signature: - unsigned char * my_compress(unsigned char *data, int data_len, int *out_len, int quality); - The returned data will be freed with STBIW_FREE() (free() by default), - so it must be heap allocated with STBIW_MALLOC() (malloc() by default), - -UNICODE: - - If compiling for Windows and you wish to use Unicode filenames, compile - with - #define STBIW_WINDOWS_UTF8 - and pass utf8-encoded filenames. Call stbiw_convert_wchar_to_utf8 to convert - Windows wchar_t filenames to utf8. - -USAGE: - - There are five functions, one for each image file format: - - int stbi_write_png(char const *filename, int w, int h, int comp, const void *data, int stride_in_bytes); - int stbi_write_bmp(char const *filename, int w, int h, int comp, const void *data); - int stbi_write_tga(char const *filename, int w, int h, int comp, const void *data); - int stbi_write_jpg(char const *filename, int w, int h, int comp, const void *data, int quality); - int stbi_write_hdr(char const *filename, int w, int h, int comp, const float *data); - - void stbi_flip_vertically_on_write(int flag); // flag is non-zero to flip data vertically - - There are also five equivalent functions that use an arbitrary write function. You are - expected to open/close your file-equivalent before and after calling these: - - int stbi_write_png_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data, int stride_in_bytes); - int stbi_write_bmp_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data); - int stbi_write_tga_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data); - int stbi_write_hdr_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const float *data); - int stbi_write_jpg_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data, int quality); - - where the callback is: - void stbi_write_func(void *context, void *data, int size); - - You can configure it with these global variables: - int stbi_write_tga_with_rle; // defaults to true; set to 0 to disable RLE - int stbi_write_png_compression_level; // defaults to 8; set to higher for more compression - int stbi_write_force_png_filter; // defaults to -1; set to 0..5 to force a filter mode - - - You can define STBI_WRITE_NO_STDIO to disable the file variant of these - functions, so the library will not use stdio.h at all. However, this will - also disable HDR writing, because it requires stdio for formatted output. - - Each function returns 0 on failure and non-0 on success. - - The functions create an image file defined by the parameters. The image - is a rectangle of pixels stored from left-to-right, top-to-bottom. - Each pixel contains 'comp' channels of data stored interleaved with 8-bits - per channel, in the following order: 1=Y, 2=YA, 3=RGB, 4=RGBA. (Y is - monochrome color.) The rectangle is 'w' pixels wide and 'h' pixels tall. - The *data pointer points to the first byte of the top-left-most pixel. - For PNG, "stride_in_bytes" is the distance in bytes from the first byte of - a row of pixels to the first byte of the next row of pixels. - - PNG creates output files with the same number of components as the input. - The BMP format expands Y to RGB in the file format and does not - output alpha. - - PNG supports writing rectangles of data even when the bytes storing rows of - data are not consecutive in memory (e.g. sub-rectangles of a larger image), - by supplying the stride between the beginning of adjacent rows. The other - formats do not. (Thus you cannot write a native-format BMP through the BMP - writer, both because it is in BGR order and because it may have padding - at the end of the line.) - - PNG allows you to set the deflate compression level by setting the global - variable 'stbi_write_png_compression_level' (it defaults to 8). - - HDR expects linear float data. Since the format is always 32-bit rgb(e) - data, alpha (if provided) is discarded, and for monochrome data it is - replicated across all three channels. - - TGA supports RLE or non-RLE compressed data. To use non-RLE-compressed - data, set the global variable 'stbi_write_tga_with_rle' to 0. - - JPEG does ignore alpha channels in input data; quality is between 1 and 100. - Higher quality looks better but results in a bigger image. - JPEG baseline (no JPEG progressive). - -CREDITS: - - - Sean Barrett - PNG/BMP/TGA - Baldur Karlsson - HDR - Jean-Sebastien Guay - TGA monochrome - Tim Kelsey - misc enhancements - Alan Hickman - TGA RLE - Emmanuel Julien - initial file IO callback implementation - Jon Olick - original jo_jpeg.cpp code - Daniel Gibson - integrate JPEG, allow external zlib - Aarni Koskela - allow choosing PNG filter - - bugfixes: - github:Chribba - Guillaume Chereau - github:jry2 - github:romigrou - Sergio Gonzalez - Jonas Karlsson - Filip Wasil - Thatcher Ulrich - github:poppolopoppo - Patrick Boettcher - github:xeekworx - Cap Petschulat - Simon Rodriguez - Ivan Tikhonov - github:ignotion - Adam Schackart - Andrew Kensler - -LICENSE - - See end of file for license information. - -*/ - -#ifndef INCLUDE_STB_IMAGE_WRITE_H -#define INCLUDE_STB_IMAGE_WRITE_H - -#include - -// if STB_IMAGE_WRITE_STATIC causes problems, try defining STBIWDEF to 'inline' or 'static inline' -#ifndef STBIWDEF -#ifdef STB_IMAGE_WRITE_STATIC -#define STBIWDEF static -#else -#ifdef __cplusplus -#define STBIWDEF extern "C" -#else -#define STBIWDEF extern -#endif -#endif -#endif - -#ifndef STB_IMAGE_WRITE_STATIC // C++ forbids static forward declarations -STBIWDEF int stbi_write_tga_with_rle; -STBIWDEF int stbi_write_png_compression_level; -STBIWDEF int stbi_write_force_png_filter; -#endif - -#ifndef STBI_WRITE_NO_STDIO -STBIWDEF int stbi_write_png(char const *filename, int w, int h, int comp, const void *data, int stride_in_bytes); -STBIWDEF int stbi_write_bmp(char const *filename, int w, int h, int comp, const void *data); -STBIWDEF int stbi_write_tga(char const *filename, int w, int h, int comp, const void *data); -STBIWDEF int stbi_write_hdr(char const *filename, int w, int h, int comp, const float *data); -STBIWDEF int stbi_write_jpg(char const *filename, int x, int y, int comp, const void *data, int quality); - -#ifdef STBIW_WINDOWS_UTF8 -STBIWDEF int stbiw_convert_wchar_to_utf8(char *buffer, size_t bufferlen, const wchar_t* input); -#endif -#endif - -typedef void stbi_write_func(void *context, void *data, int size); - -STBIWDEF int stbi_write_png_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data, int stride_in_bytes); -STBIWDEF int stbi_write_bmp_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data); -STBIWDEF int stbi_write_tga_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const void *data); -STBIWDEF int stbi_write_hdr_to_func(stbi_write_func *func, void *context, int w, int h, int comp, const float *data); -STBIWDEF int stbi_write_jpg_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data, int quality); - -STBIWDEF void stbi_flip_vertically_on_write(int flip_boolean); - -#endif//INCLUDE_STB_IMAGE_WRITE_H - -#ifdef STB_IMAGE_WRITE_IMPLEMENTATION - -#ifdef _WIN32 - #ifndef _CRT_SECURE_NO_WARNINGS - #define _CRT_SECURE_NO_WARNINGS - #endif - #ifndef _CRT_NONSTDC_NO_DEPRECATE - #define _CRT_NONSTDC_NO_DEPRECATE - #endif -#endif - -#ifndef STBI_WRITE_NO_STDIO -#include -#endif // STBI_WRITE_NO_STDIO - -#include -#include -#include -#include - -#if defined(STBIW_MALLOC) && defined(STBIW_FREE) && (defined(STBIW_REALLOC) || defined(STBIW_REALLOC_SIZED)) -// ok -#elif !defined(STBIW_MALLOC) && !defined(STBIW_FREE) && !defined(STBIW_REALLOC) && !defined(STBIW_REALLOC_SIZED) -// ok -#else -#error "Must define all or none of STBIW_MALLOC, STBIW_FREE, and STBIW_REALLOC (or STBIW_REALLOC_SIZED)." -#endif - -#ifndef STBIW_MALLOC -#define STBIW_MALLOC(sz) malloc(sz) -#define STBIW_REALLOC(p,newsz) realloc(p,newsz) -#define STBIW_FREE(p) free(p) -#endif - -#ifndef STBIW_REALLOC_SIZED -#define STBIW_REALLOC_SIZED(p,oldsz,newsz) STBIW_REALLOC(p,newsz) -#endif - - -#ifndef STBIW_MEMMOVE -#define STBIW_MEMMOVE(a,b,sz) memmove(a,b,sz) -#endif - - -#ifndef STBIW_ASSERT -#include -#define STBIW_ASSERT(x) assert(x) -#endif - -#define STBIW_UCHAR(x) (unsigned char) ((x) & 0xff) - -#ifdef STB_IMAGE_WRITE_STATIC -static int stbi_write_png_compression_level = 8; -static int stbi_write_tga_with_rle = 1; -static int stbi_write_force_png_filter = -1; -#else -int stbi_write_png_compression_level = 8; -int stbi_write_tga_with_rle = 1; -int stbi_write_force_png_filter = -1; -#endif - -static int stbi__flip_vertically_on_write = 0; - -STBIWDEF void stbi_flip_vertically_on_write(int flag) -{ - stbi__flip_vertically_on_write = flag; -} - -typedef struct -{ - stbi_write_func *func; - void *context; - unsigned char buffer[64]; - int buf_used; -} stbi__write_context; - -// initialize a callback-based context -static void stbi__start_write_callbacks(stbi__write_context *s, stbi_write_func *c, void *context) -{ - s->func = c; - s->context = context; -} - -#ifndef STBI_WRITE_NO_STDIO - -static void stbi__stdio_write(void *context, void *data, int size) -{ - fwrite(data,1,size,(FILE*) context); -} - -#if defined(_WIN32) && defined(STBIW_WINDOWS_UTF8) -#ifdef __cplusplus -#define STBIW_EXTERN extern "C" -#else -#define STBIW_EXTERN extern -#endif -STBIW_EXTERN __declspec(dllimport) int __stdcall MultiByteToWideChar(unsigned int cp, unsigned long flags, const char *str, int cbmb, wchar_t *widestr, int cchwide); -STBIW_EXTERN __declspec(dllimport) int __stdcall WideCharToMultiByte(unsigned int cp, unsigned long flags, const wchar_t *widestr, int cchwide, char *str, int cbmb, const char *defchar, int *used_default); - -STBIWDEF int stbiw_convert_wchar_to_utf8(char *buffer, size_t bufferlen, const wchar_t* input) -{ - return WideCharToMultiByte(65001 /* UTF8 */, 0, input, -1, buffer, (int) bufferlen, NULL, NULL); -} -#endif - -static FILE *stbiw__fopen(char const *filename, char const *mode) -{ - FILE *f; -#if defined(_WIN32) && defined(STBIW_WINDOWS_UTF8) - wchar_t wMode[64]; - wchar_t wFilename[1024]; - if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, filename, -1, wFilename, sizeof(wFilename)/sizeof(*wFilename))) - return 0; - - if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, mode, -1, wMode, sizeof(wMode)/sizeof(*wMode))) - return 0; - -#if defined(_MSC_VER) && _MSC_VER >= 1400 - if (0 != _wfopen_s(&f, wFilename, wMode)) - f = 0; -#else - f = _wfopen(wFilename, wMode); -#endif - -#elif defined(_MSC_VER) && _MSC_VER >= 1400 - if (0 != fopen_s(&f, filename, mode)) - f=0; -#else - f = fopen(filename, mode); -#endif - return f; -} - -static int stbi__start_write_file(stbi__write_context *s, const char *filename) -{ - FILE *f = stbiw__fopen(filename, "wb"); - stbi__start_write_callbacks(s, stbi__stdio_write, (void *) f); - return f != NULL; -} - -static void stbi__end_write_file(stbi__write_context *s) -{ - fclose((FILE *)s->context); -} - -#endif // !STBI_WRITE_NO_STDIO - -typedef unsigned int stbiw_uint32; -typedef int stb_image_write_test[sizeof(stbiw_uint32)==4 ? 1 : -1]; - -static void stbiw__writefv(stbi__write_context *s, const char *fmt, va_list v) -{ - while (*fmt) { - switch (*fmt++) { - case ' ': break; - case '1': { unsigned char x = STBIW_UCHAR(va_arg(v, int)); - s->func(s->context,&x,1); - break; } - case '2': { int x = va_arg(v,int); - unsigned char b[2]; - b[0] = STBIW_UCHAR(x); - b[1] = STBIW_UCHAR(x>>8); - s->func(s->context,b,2); - break; } - case '4': { stbiw_uint32 x = va_arg(v,int); - unsigned char b[4]; - b[0]=STBIW_UCHAR(x); - b[1]=STBIW_UCHAR(x>>8); - b[2]=STBIW_UCHAR(x>>16); - b[3]=STBIW_UCHAR(x>>24); - s->func(s->context,b,4); - break; } - default: - STBIW_ASSERT(0); - return; - } - } -} - -static void stbiw__writef(stbi__write_context *s, const char *fmt, ...) -{ - va_list v; - va_start(v, fmt); - stbiw__writefv(s, fmt, v); - va_end(v); -} - -static void stbiw__write_flush(stbi__write_context *s) -{ - if (s->buf_used) { - s->func(s->context, &s->buffer, s->buf_used); - s->buf_used = 0; - } -} - -static void stbiw__putc(stbi__write_context *s, unsigned char c) -{ - s->func(s->context, &c, 1); -} - -static void stbiw__write1(stbi__write_context *s, unsigned char a) -{ - if ((size_t)s->buf_used + 1 > sizeof(s->buffer)) - stbiw__write_flush(s); - s->buffer[s->buf_used++] = a; -} - -static void stbiw__write3(stbi__write_context *s, unsigned char a, unsigned char b, unsigned char c) -{ - int n; - if ((size_t)s->buf_used + 3 > sizeof(s->buffer)) - stbiw__write_flush(s); - n = s->buf_used; - s->buf_used = n+3; - s->buffer[n+0] = a; - s->buffer[n+1] = b; - s->buffer[n+2] = c; -} - -static void stbiw__write_pixel(stbi__write_context *s, int rgb_dir, int comp, int write_alpha, int expand_mono, unsigned char *d) -{ - unsigned char bg[3] = { 255, 0, 255}, px[3]; - int k; - - if (write_alpha < 0) - stbiw__write1(s, d[comp - 1]); - - switch (comp) { - case 2: // 2 pixels = mono + alpha, alpha is written separately, so same as 1-channel case - case 1: - if (expand_mono) - stbiw__write3(s, d[0], d[0], d[0]); // monochrome bmp - else - stbiw__write1(s, d[0]); // monochrome TGA - break; - case 4: - if (!write_alpha) { - // composite against pink background - for (k = 0; k < 3; ++k) - px[k] = bg[k] + ((d[k] - bg[k]) * d[3]) / 255; - stbiw__write3(s, px[1 - rgb_dir], px[1], px[1 + rgb_dir]); - break; - } - /* FALLTHROUGH */ - case 3: - stbiw__write3(s, d[1 - rgb_dir], d[1], d[1 + rgb_dir]); - break; - } - if (write_alpha > 0) - stbiw__write1(s, d[comp - 1]); -} - -static void stbiw__write_pixels(stbi__write_context *s, int rgb_dir, int vdir, int x, int y, int comp, void *data, int write_alpha, int scanline_pad, int expand_mono) -{ - stbiw_uint32 zero = 0; - int i,j, j_end; - - if (y <= 0) - return; - - if (stbi__flip_vertically_on_write) - vdir *= -1; - - if (vdir < 0) { - j_end = -1; j = y-1; - } else { - j_end = y; j = 0; - } - - for (; j != j_end; j += vdir) { - for (i=0; i < x; ++i) { - unsigned char *d = (unsigned char *) data + (j*x+i)*comp; - stbiw__write_pixel(s, rgb_dir, comp, write_alpha, expand_mono, d); - } - stbiw__write_flush(s); - s->func(s->context, &zero, scanline_pad); - } -} - -static int stbiw__outfile(stbi__write_context *s, int rgb_dir, int vdir, int x, int y, int comp, int expand_mono, void *data, int alpha, int pad, const char *fmt, ...) -{ - if (y < 0 || x < 0) { - return 0; - } else { - va_list v; - va_start(v, fmt); - stbiw__writefv(s, fmt, v); - va_end(v); - stbiw__write_pixels(s,rgb_dir,vdir,x,y,comp,data,alpha,pad, expand_mono); - return 1; - } -} - -static int stbi_write_bmp_core(stbi__write_context *s, int x, int y, int comp, const void *data) -{ - if (comp != 4) { - // write RGB bitmap - int pad = (-x*3) & 3; - return stbiw__outfile(s,-1,-1,x,y,comp,1,(void *) data,0,pad, - "11 4 22 4" "4 44 22 444444", - 'B', 'M', 14+40+(x*3+pad)*y, 0,0, 14+40, // file header - 40, x,y, 1,24, 0,0,0,0,0,0); // bitmap header - } else { - // RGBA bitmaps need a v4 header - // use BI_BITFIELDS mode with 32bpp and alpha mask - // (straight BI_RGB with alpha mask doesn't work in most readers) - return stbiw__outfile(s,-1,-1,x,y,comp,1,(void *)data,1,0, - "11 4 22 4" "4 44 22 444444 4444 4 444 444 444 444", - 'B', 'M', 14+108+x*y*4, 0, 0, 14+108, // file header - 108, x,y, 1,32, 3,0,0,0,0,0, 0xff0000,0xff00,0xff,0xff000000u, 0, 0,0,0, 0,0,0, 0,0,0, 0,0,0); // bitmap V4 header - } -} - -STBIWDEF int stbi_write_bmp_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data) -{ - stbi__write_context s = { 0 }; - stbi__start_write_callbacks(&s, func, context); - return stbi_write_bmp_core(&s, x, y, comp, data); -} - -#ifndef STBI_WRITE_NO_STDIO -STBIWDEF int stbi_write_bmp(char const *filename, int x, int y, int comp, const void *data) -{ - stbi__write_context s = { 0 }; - if (stbi__start_write_file(&s,filename)) { - int r = stbi_write_bmp_core(&s, x, y, comp, data); - stbi__end_write_file(&s); - return r; - } else - return 0; -} -#endif //!STBI_WRITE_NO_STDIO - -static int stbi_write_tga_core(stbi__write_context *s, int x, int y, int comp, void *data) -{ - int has_alpha = (comp == 2 || comp == 4); - int colorbytes = has_alpha ? comp-1 : comp; - int format = colorbytes < 2 ? 3 : 2; // 3 color channels (RGB/RGBA) = 2, 1 color channel (Y/YA) = 3 - - if (y < 0 || x < 0) - return 0; - - if (!stbi_write_tga_with_rle) { - return stbiw__outfile(s, -1, -1, x, y, comp, 0, (void *) data, has_alpha, 0, - "111 221 2222 11", 0, 0, format, 0, 0, 0, 0, 0, x, y, (colorbytes + has_alpha) * 8, has_alpha * 8); - } else { - int i,j,k; - int jend, jdir; - - stbiw__writef(s, "111 221 2222 11", 0,0,format+8, 0,0,0, 0,0,x,y, (colorbytes + has_alpha) * 8, has_alpha * 8); - - if (stbi__flip_vertically_on_write) { - j = 0; - jend = y; - jdir = 1; - } else { - j = y-1; - jend = -1; - jdir = -1; - } - for (; j != jend; j += jdir) { - unsigned char *row = (unsigned char *) data + j * x * comp; - int len; - - for (i = 0; i < x; i += len) { - unsigned char *begin = row + i * comp; - int diff = 1; - len = 1; - - if (i < x - 1) { - ++len; - diff = memcmp(begin, row + (i + 1) * comp, comp); - if (diff) { - const unsigned char *prev = begin; - for (k = i + 2; k < x && len < 128; ++k) { - if (memcmp(prev, row + k * comp, comp)) { - prev += comp; - ++len; - } else { - --len; - break; - } - } - } else { - for (k = i + 2; k < x && len < 128; ++k) { - if (!memcmp(begin, row + k * comp, comp)) { - ++len; - } else { - break; - } - } - } - } - - if (diff) { - unsigned char header = STBIW_UCHAR(len - 1); - stbiw__write1(s, header); - for (k = 0; k < len; ++k) { - stbiw__write_pixel(s, -1, comp, has_alpha, 0, begin + k * comp); - } - } else { - unsigned char header = STBIW_UCHAR(len - 129); - stbiw__write1(s, header); - stbiw__write_pixel(s, -1, comp, has_alpha, 0, begin); - } - } - } - stbiw__write_flush(s); - } - return 1; -} - -STBIWDEF int stbi_write_tga_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data) -{ - stbi__write_context s = { 0 }; - stbi__start_write_callbacks(&s, func, context); - return stbi_write_tga_core(&s, x, y, comp, (void *) data); -} - -#ifndef STBI_WRITE_NO_STDIO -STBIWDEF int stbi_write_tga(char const *filename, int x, int y, int comp, const void *data) -{ - stbi__write_context s = { 0 }; - if (stbi__start_write_file(&s,filename)) { - int r = stbi_write_tga_core(&s, x, y, comp, (void *) data); - stbi__end_write_file(&s); - return r; - } else - return 0; -} -#endif - -// ************************************************************************************************* -// Radiance RGBE HDR writer -// by Baldur Karlsson - -#define stbiw__max(a, b) ((a) > (b) ? (a) : (b)) - -#ifndef STBI_WRITE_NO_STDIO - -static void stbiw__linear_to_rgbe(unsigned char *rgbe, float *linear) -{ - int exponent; - float maxcomp = stbiw__max(linear[0], stbiw__max(linear[1], linear[2])); - - if (maxcomp < 1e-32f) { - rgbe[0] = rgbe[1] = rgbe[2] = rgbe[3] = 0; - } else { - float normalize = (float) frexp(maxcomp, &exponent) * 256.0f/maxcomp; - - rgbe[0] = (unsigned char)(linear[0] * normalize); - rgbe[1] = (unsigned char)(linear[1] * normalize); - rgbe[2] = (unsigned char)(linear[2] * normalize); - rgbe[3] = (unsigned char)(exponent + 128); - } -} - -static void stbiw__write_run_data(stbi__write_context *s, int length, unsigned char databyte) -{ - unsigned char lengthbyte = STBIW_UCHAR(length+128); - STBIW_ASSERT(length+128 <= 255); - s->func(s->context, &lengthbyte, 1); - s->func(s->context, &databyte, 1); -} - -static void stbiw__write_dump_data(stbi__write_context *s, int length, unsigned char *data) -{ - unsigned char lengthbyte = STBIW_UCHAR(length); - STBIW_ASSERT(length <= 128); // inconsistent with spec but consistent with official code - s->func(s->context, &lengthbyte, 1); - s->func(s->context, data, length); -} - -static void stbiw__write_hdr_scanline(stbi__write_context *s, int width, int ncomp, unsigned char *scratch, float *scanline) -{ - unsigned char scanlineheader[4] = { 2, 2, 0, 0 }; - unsigned char rgbe[4]; - float linear[3]; - int x; - - scanlineheader[2] = (width&0xff00)>>8; - scanlineheader[3] = (width&0x00ff); - - /* skip RLE for images too small or large */ - if (width < 8 || width >= 32768) { - for (x=0; x < width; x++) { - switch (ncomp) { - case 4: /* fallthrough */ - case 3: linear[2] = scanline[x*ncomp + 2]; - linear[1] = scanline[x*ncomp + 1]; - linear[0] = scanline[x*ncomp + 0]; - break; - default: - linear[0] = linear[1] = linear[2] = scanline[x*ncomp + 0]; - break; - } - stbiw__linear_to_rgbe(rgbe, linear); - s->func(s->context, rgbe, 4); - } - } else { - int c,r; - /* encode into scratch buffer */ - for (x=0; x < width; x++) { - switch(ncomp) { - case 4: /* fallthrough */ - case 3: linear[2] = scanline[x*ncomp + 2]; - linear[1] = scanline[x*ncomp + 1]; - linear[0] = scanline[x*ncomp + 0]; - break; - default: - linear[0] = linear[1] = linear[2] = scanline[x*ncomp + 0]; - break; - } - stbiw__linear_to_rgbe(rgbe, linear); - scratch[x + width*0] = rgbe[0]; - scratch[x + width*1] = rgbe[1]; - scratch[x + width*2] = rgbe[2]; - scratch[x + width*3] = rgbe[3]; - } - - s->func(s->context, scanlineheader, 4); - - /* RLE each component separately */ - for (c=0; c < 4; c++) { - unsigned char *comp = &scratch[width*c]; - - x = 0; - while (x < width) { - // find first run - r = x; - while (r+2 < width) { - if (comp[r] == comp[r+1] && comp[r] == comp[r+2]) - break; - ++r; - } - if (r+2 >= width) - r = width; - // dump up to first run - while (x < r) { - int len = r-x; - if (len > 128) len = 128; - stbiw__write_dump_data(s, len, &comp[x]); - x += len; - } - // if there's a run, output it - if (r+2 < width) { // same test as what we break out of in search loop, so only true if we break'd - // find next byte after run - while (r < width && comp[r] == comp[x]) - ++r; - // output run up to r - while (x < r) { - int len = r-x; - if (len > 127) len = 127; - stbiw__write_run_data(s, len, comp[x]); - x += len; - } - } - } - } - } -} - -static int stbi_write_hdr_core(stbi__write_context *s, int x, int y, int comp, float *data) -{ - if (y <= 0 || x <= 0 || data == NULL) - return 0; - else { - // Each component is stored separately. Allocate scratch space for full output scanline. - unsigned char *scratch = (unsigned char *) STBIW_MALLOC(x*4); - int i, len; - char buffer[128]; - char header[] = "#?RADIANCE\n# Written by stb_image_write.h\nFORMAT=32-bit_rle_rgbe\n"; - s->func(s->context, header, sizeof(header)-1); - -#ifdef __STDC_LIB_EXT1__ - len = sprintf_s(buffer, sizeof(buffer), "EXPOSURE= 1.0000000000000\n\n-Y %d +X %d\n", y, x); -#else - len = sprintf(buffer, "EXPOSURE= 1.0000000000000\n\n-Y %d +X %d\n", y, x); -#endif - s->func(s->context, buffer, len); - - for(i=0; i < y; i++) - stbiw__write_hdr_scanline(s, x, comp, scratch, data + comp*x*(stbi__flip_vertically_on_write ? y-1-i : i)); - STBIW_FREE(scratch); - return 1; - } -} - -STBIWDEF int stbi_write_hdr_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const float *data) -{ - stbi__write_context s = { 0 }; - stbi__start_write_callbacks(&s, func, context); - return stbi_write_hdr_core(&s, x, y, comp, (float *) data); -} - -STBIWDEF int stbi_write_hdr(char const *filename, int x, int y, int comp, const float *data) -{ - stbi__write_context s = { 0 }; - if (stbi__start_write_file(&s,filename)) { - int r = stbi_write_hdr_core(&s, x, y, comp, (float *) data); - stbi__end_write_file(&s); - return r; - } else - return 0; -} -#endif // STBI_WRITE_NO_STDIO - - -////////////////////////////////////////////////////////////////////////////// -// -// PNG writer -// - -#ifndef STBIW_ZLIB_COMPRESS -// stretchy buffer; stbiw__sbpush() == vector<>::push_back() -- stbiw__sbcount() == vector<>::size() -#define stbiw__sbraw(a) ((int *) (void *) (a) - 2) -#define stbiw__sbm(a) stbiw__sbraw(a)[0] -#define stbiw__sbn(a) stbiw__sbraw(a)[1] - -#define stbiw__sbneedgrow(a,n) ((a)==0 || stbiw__sbn(a)+n >= stbiw__sbm(a)) -#define stbiw__sbmaybegrow(a,n) (stbiw__sbneedgrow(a,(n)) ? stbiw__sbgrow(a,n) : 0) -#define stbiw__sbgrow(a,n) stbiw__sbgrowf((void **) &(a), (n), sizeof(*(a))) - -#define stbiw__sbpush(a, v) (stbiw__sbmaybegrow(a,1), (a)[stbiw__sbn(a)++] = (v)) -#define stbiw__sbcount(a) ((a) ? stbiw__sbn(a) : 0) -#define stbiw__sbfree(a) ((a) ? STBIW_FREE(stbiw__sbraw(a)),0 : 0) - -static void *stbiw__sbgrowf(void **arr, int increment, int itemsize) -{ - int m = *arr ? 2*stbiw__sbm(*arr)+increment : increment+1; - void *p = STBIW_REALLOC_SIZED(*arr ? stbiw__sbraw(*arr) : 0, *arr ? (stbiw__sbm(*arr)*itemsize + sizeof(int)*2) : 0, itemsize * m + sizeof(int)*2); - STBIW_ASSERT(p); - if (p) { - if (!*arr) ((int *) p)[1] = 0; - *arr = (void *) ((int *) p + 2); - stbiw__sbm(*arr) = m; - } - return *arr; -} - -static unsigned char *stbiw__zlib_flushf(unsigned char *data, unsigned int *bitbuffer, int *bitcount) -{ - while (*bitcount >= 8) { - stbiw__sbpush(data, STBIW_UCHAR(*bitbuffer)); - *bitbuffer >>= 8; - *bitcount -= 8; - } - return data; -} - -static int stbiw__zlib_bitrev(int code, int codebits) -{ - int res=0; - while (codebits--) { - res = (res << 1) | (code & 1); - code >>= 1; - } - return res; -} - -static unsigned int stbiw__zlib_countm(unsigned char *a, unsigned char *b, int limit) -{ - int i; - for (i=0; i < limit && i < 258; ++i) - if (a[i] != b[i]) break; - return i; -} - -static unsigned int stbiw__zhash(unsigned char *data) -{ - stbiw_uint32 hash = data[0] + (data[1] << 8) + (data[2] << 16); - hash ^= hash << 3; - hash += hash >> 5; - hash ^= hash << 4; - hash += hash >> 17; - hash ^= hash << 25; - hash += hash >> 6; - return hash; -} - -#define stbiw__zlib_flush() (out = stbiw__zlib_flushf(out, &bitbuf, &bitcount)) -#define stbiw__zlib_add(code,codebits) \ - (bitbuf |= (code) << bitcount, bitcount += (codebits), stbiw__zlib_flush()) -#define stbiw__zlib_huffa(b,c) stbiw__zlib_add(stbiw__zlib_bitrev(b,c),c) -// default huffman tables -#define stbiw__zlib_huff1(n) stbiw__zlib_huffa(0x30 + (n), 8) -#define stbiw__zlib_huff2(n) stbiw__zlib_huffa(0x190 + (n)-144, 9) -#define stbiw__zlib_huff3(n) stbiw__zlib_huffa(0 + (n)-256,7) -#define stbiw__zlib_huff4(n) stbiw__zlib_huffa(0xc0 + (n)-280,8) -#define stbiw__zlib_huff(n) ((n) <= 143 ? stbiw__zlib_huff1(n) : (n) <= 255 ? stbiw__zlib_huff2(n) : (n) <= 279 ? stbiw__zlib_huff3(n) : stbiw__zlib_huff4(n)) -#define stbiw__zlib_huffb(n) ((n) <= 143 ? stbiw__zlib_huff1(n) : stbiw__zlib_huff2(n)) - -#define stbiw__ZHASH 16384 - -#endif // STBIW_ZLIB_COMPRESS - -STBIWDEF unsigned char * stbi_zlib_compress(unsigned char *data, int data_len, int *out_len, int quality) -{ -#ifdef STBIW_ZLIB_COMPRESS - // user provided a zlib compress implementation, use that - return STBIW_ZLIB_COMPRESS(data, data_len, out_len, quality); -#else // use builtin - static unsigned short lengthc[] = { 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, 259 }; - static unsigned char lengtheb[]= { 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 }; - static unsigned short distc[] = { 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, 32768 }; - static unsigned char disteb[] = { 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 }; - unsigned int bitbuf=0; - int i,j, bitcount=0; - unsigned char *out = NULL; - unsigned char ***hash_table = (unsigned char***) STBIW_MALLOC(stbiw__ZHASH * sizeof(unsigned char**)); - if (hash_table == NULL) - return NULL; - if (quality < 5) quality = 5; - - stbiw__sbpush(out, 0x78); // DEFLATE 32K window - stbiw__sbpush(out, 0x5e); // FLEVEL = 1 - stbiw__zlib_add(1,1); // BFINAL = 1 - stbiw__zlib_add(1,2); // BTYPE = 1 -- fixed huffman - - for (i=0; i < stbiw__ZHASH; ++i) - hash_table[i] = NULL; - - i=0; - while (i < data_len-3) { - // hash next 3 bytes of data to be compressed - int h = stbiw__zhash(data+i)&(stbiw__ZHASH-1), best=3; - unsigned char *bestloc = 0; - unsigned char **hlist = hash_table[h]; - int n = stbiw__sbcount(hlist); - for (j=0; j < n; ++j) { - if (hlist[j]-data > i-32768) { // if entry lies within window - int d = stbiw__zlib_countm(hlist[j], data+i, data_len-i); - if (d >= best) { best=d; bestloc=hlist[j]; } - } - } - // when hash table entry is too long, delete half the entries - if (hash_table[h] && stbiw__sbn(hash_table[h]) == 2*quality) { - STBIW_MEMMOVE(hash_table[h], hash_table[h]+quality, sizeof(hash_table[h][0])*quality); - stbiw__sbn(hash_table[h]) = quality; - } - stbiw__sbpush(hash_table[h],data+i); - - if (bestloc) { - // "lazy matching" - check match at *next* byte, and if it's better, do cur byte as literal - h = stbiw__zhash(data+i+1)&(stbiw__ZHASH-1); - hlist = hash_table[h]; - n = stbiw__sbcount(hlist); - for (j=0; j < n; ++j) { - if (hlist[j]-data > i-32767) { - int e = stbiw__zlib_countm(hlist[j], data+i+1, data_len-i-1); - if (e > best) { // if next match is better, bail on current match - bestloc = NULL; - break; - } - } - } - } - - if (bestloc) { - int d = (int) (data+i - bestloc); // distance back - STBIW_ASSERT(d <= 32767 && best <= 258); - for (j=0; best > lengthc[j+1]-1; ++j); - stbiw__zlib_huff(j+257); - if (lengtheb[j]) stbiw__zlib_add(best - lengthc[j], lengtheb[j]); - for (j=0; d > distc[j+1]-1; ++j); - stbiw__zlib_add(stbiw__zlib_bitrev(j,5),5); - if (disteb[j]) stbiw__zlib_add(d - distc[j], disteb[j]); - i += best; - } else { - stbiw__zlib_huffb(data[i]); - ++i; - } - } - // write out final bytes - for (;i < data_len; ++i) - stbiw__zlib_huffb(data[i]); - stbiw__zlib_huff(256); // end of block - // pad with 0 bits to byte boundary - while (bitcount) - stbiw__zlib_add(0,1); - - for (i=0; i < stbiw__ZHASH; ++i) - (void) stbiw__sbfree(hash_table[i]); - STBIW_FREE(hash_table); - - // store uncompressed instead if compression was worse - if (stbiw__sbn(out) > data_len + 2 + ((data_len+32766)/32767)*5) { - stbiw__sbn(out) = 2; // truncate to DEFLATE 32K window and FLEVEL = 1 - for (j = 0; j < data_len;) { - int blocklen = data_len - j; - if (blocklen > 32767) blocklen = 32767; - stbiw__sbpush(out, data_len - j == blocklen); // BFINAL = ?, BTYPE = 0 -- no compression - stbiw__sbpush(out, STBIW_UCHAR(blocklen)); // LEN - stbiw__sbpush(out, STBIW_UCHAR(blocklen >> 8)); - stbiw__sbpush(out, STBIW_UCHAR(~blocklen)); // NLEN - stbiw__sbpush(out, STBIW_UCHAR(~blocklen >> 8)); - memcpy(out+stbiw__sbn(out), data+j, blocklen); - stbiw__sbn(out) += blocklen; - j += blocklen; - } - } - - { - // compute adler32 on input - unsigned int s1=1, s2=0; - int blocklen = (int) (data_len % 5552); - j=0; - while (j < data_len) { - for (i=0; i < blocklen; ++i) { s1 += data[j+i]; s2 += s1; } - s1 %= 65521; s2 %= 65521; - j += blocklen; - blocklen = 5552; - } - stbiw__sbpush(out, STBIW_UCHAR(s2 >> 8)); - stbiw__sbpush(out, STBIW_UCHAR(s2)); - stbiw__sbpush(out, STBIW_UCHAR(s1 >> 8)); - stbiw__sbpush(out, STBIW_UCHAR(s1)); - } - *out_len = stbiw__sbn(out); - // make returned pointer freeable - STBIW_MEMMOVE(stbiw__sbraw(out), out, *out_len); - return (unsigned char *) stbiw__sbraw(out); -#endif // STBIW_ZLIB_COMPRESS -} - -static unsigned int stbiw__crc32(unsigned char *buffer, int len) -{ -#ifdef STBIW_CRC32 - return STBIW_CRC32(buffer, len); -#else - static unsigned int crc_table[256] = - { - 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, - 0x0eDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, - 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, - 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, - 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, - 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, - 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, - 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, - 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, - 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, - 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, - 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, - 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, - 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, - 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, - 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, - 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, - 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, - 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, - 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, - 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, - 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, - 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, - 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, - 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, - 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, - 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, - 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, - 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, - 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, - 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, - 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D - }; - - unsigned int crc = ~0u; - int i; - for (i=0; i < len; ++i) - crc = (crc >> 8) ^ crc_table[buffer[i] ^ (crc & 0xff)]; - return ~crc; -#endif -} - -#define stbiw__wpng4(o,a,b,c,d) ((o)[0]=STBIW_UCHAR(a),(o)[1]=STBIW_UCHAR(b),(o)[2]=STBIW_UCHAR(c),(o)[3]=STBIW_UCHAR(d),(o)+=4) -#define stbiw__wp32(data,v) stbiw__wpng4(data, (v)>>24,(v)>>16,(v)>>8,(v)); -#define stbiw__wptag(data,s) stbiw__wpng4(data, s[0],s[1],s[2],s[3]) - -static void stbiw__wpcrc(unsigned char **data, int len) -{ - unsigned int crc = stbiw__crc32(*data - len - 4, len+4); - stbiw__wp32(*data, crc); -} - -static unsigned char stbiw__paeth(int a, int b, int c) -{ - int p = a + b - c, pa = abs(p-a), pb = abs(p-b), pc = abs(p-c); - if (pa <= pb && pa <= pc) return STBIW_UCHAR(a); - if (pb <= pc) return STBIW_UCHAR(b); - return STBIW_UCHAR(c); -} - -// @OPTIMIZE: provide an option that always forces left-predict or paeth predict -static void stbiw__encode_png_line(unsigned char *pixels, int stride_bytes, int width, int height, int y, int n, int filter_type, signed char *line_buffer) -{ - static int mapping[] = { 0,1,2,3,4 }; - static int firstmap[] = { 0,1,0,5,6 }; - int *mymap = (y != 0) ? mapping : firstmap; - int i; - int type = mymap[filter_type]; - unsigned char *z = pixels + stride_bytes * (stbi__flip_vertically_on_write ? height-1-y : y); - int signed_stride = stbi__flip_vertically_on_write ? -stride_bytes : stride_bytes; - - if (type==0) { - memcpy(line_buffer, z, width*n); - return; - } - - // first loop isn't optimized since it's just one pixel - for (i = 0; i < n; ++i) { - switch (type) { - case 1: line_buffer[i] = z[i]; break; - case 2: line_buffer[i] = z[i] - z[i-signed_stride]; break; - case 3: line_buffer[i] = z[i] - (z[i-signed_stride]>>1); break; - case 4: line_buffer[i] = (signed char) (z[i] - stbiw__paeth(0,z[i-signed_stride],0)); break; - case 5: line_buffer[i] = z[i]; break; - case 6: line_buffer[i] = z[i]; break; - } - } - switch (type) { - case 1: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - z[i-n]; break; - case 2: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - z[i-signed_stride]; break; - case 3: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - ((z[i-n] + z[i-signed_stride])>>1); break; - case 4: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - stbiw__paeth(z[i-n], z[i-signed_stride], z[i-signed_stride-n]); break; - case 5: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - (z[i-n]>>1); break; - case 6: for (i=n; i < width*n; ++i) line_buffer[i] = z[i] - stbiw__paeth(z[i-n], 0,0); break; - } -} - -STBIWDEF unsigned char *stbi_write_png_to_mem(const unsigned char *pixels, int stride_bytes, int x, int y, int n, int *out_len) -{ - int force_filter = stbi_write_force_png_filter; - int ctype[5] = { -1, 0, 4, 2, 6 }; - unsigned char sig[8] = { 137,80,78,71,13,10,26,10 }; - unsigned char *out,*o, *filt, *zlib; - signed char *line_buffer; - int j,zlen; - - if (stride_bytes == 0) - stride_bytes = x * n; - - if (force_filter >= 5) { - force_filter = -1; - } - - filt = (unsigned char *) STBIW_MALLOC((x*n+1) * y); if (!filt) return 0; - line_buffer = (signed char *) STBIW_MALLOC(x * n); if (!line_buffer) { STBIW_FREE(filt); return 0; } - for (j=0; j < y; ++j) { - int filter_type; - if (force_filter > -1) { - filter_type = force_filter; - stbiw__encode_png_line((unsigned char*)(pixels), stride_bytes, x, y, j, n, force_filter, line_buffer); - } else { // Estimate the best filter by running through all of them: - int best_filter = 0, best_filter_val = 0x7fffffff, est, i; - for (filter_type = 0; filter_type < 5; filter_type++) { - stbiw__encode_png_line((unsigned char*)(pixels), stride_bytes, x, y, j, n, filter_type, line_buffer); - - // Estimate the entropy of the line using this filter; the less, the better. - est = 0; - for (i = 0; i < x*n; ++i) { - est += abs((signed char) line_buffer[i]); - } - if (est < best_filter_val) { - best_filter_val = est; - best_filter = filter_type; - } - } - if (filter_type != best_filter) { // If the last iteration already got us the best filter, don't redo it - stbiw__encode_png_line((unsigned char*)(pixels), stride_bytes, x, y, j, n, best_filter, line_buffer); - filter_type = best_filter; - } - } - // when we get here, filter_type contains the filter type, and line_buffer contains the data - filt[j*(x*n+1)] = (unsigned char) filter_type; - STBIW_MEMMOVE(filt+j*(x*n+1)+1, line_buffer, x*n); - } - STBIW_FREE(line_buffer); - zlib = stbi_zlib_compress(filt, y*( x*n+1), &zlen, stbi_write_png_compression_level); - STBIW_FREE(filt); - if (!zlib) return 0; - - // each tag requires 12 bytes of overhead - out = (unsigned char *) STBIW_MALLOC(8 + 12+13 + 12+zlen + 12); - if (!out) return 0; - *out_len = 8 + 12+13 + 12+zlen + 12; - - o=out; - STBIW_MEMMOVE(o,sig,8); o+= 8; - stbiw__wp32(o, 13); // header length - stbiw__wptag(o, "IHDR"); - stbiw__wp32(o, x); - stbiw__wp32(o, y); - *o++ = 8; - *o++ = STBIW_UCHAR(ctype[n]); - *o++ = 0; - *o++ = 0; - *o++ = 0; - stbiw__wpcrc(&o,13); - - stbiw__wp32(o, zlen); - stbiw__wptag(o, "IDAT"); - STBIW_MEMMOVE(o, zlib, zlen); - o += zlen; - STBIW_FREE(zlib); - stbiw__wpcrc(&o, zlen); - - stbiw__wp32(o,0); - stbiw__wptag(o, "IEND"); - stbiw__wpcrc(&o,0); - - STBIW_ASSERT(o == out + *out_len); - - return out; -} - -#ifndef STBI_WRITE_NO_STDIO -STBIWDEF int stbi_write_png(char const *filename, int x, int y, int comp, const void *data, int stride_bytes) -{ - FILE *f; - int len; - unsigned char *png = stbi_write_png_to_mem((const unsigned char *) data, stride_bytes, x, y, comp, &len); - if (png == NULL) return 0; - - f = stbiw__fopen(filename, "wb"); - if (!f) { STBIW_FREE(png); return 0; } - fwrite(png, 1, len, f); - fclose(f); - STBIW_FREE(png); - return 1; -} -#endif - -STBIWDEF int stbi_write_png_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data, int stride_bytes) -{ - int len; - unsigned char *png = stbi_write_png_to_mem((const unsigned char *) data, stride_bytes, x, y, comp, &len); - if (png == NULL) return 0; - func(context, png, len); - STBIW_FREE(png); - return 1; -} - - -/* *************************************************************************** - * - * JPEG writer - * - * This is based on Jon Olick's jo_jpeg.cpp: - * public domain Simple, Minimalistic JPEG writer - http://www.jonolick.com/code.html - */ - -static const unsigned char stbiw__jpg_ZigZag[] = { 0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18, - 24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63 }; - -static void stbiw__jpg_writeBits(stbi__write_context *s, int *bitBufP, int *bitCntP, const unsigned short *bs) { - int bitBuf = *bitBufP, bitCnt = *bitCntP; - bitCnt += bs[1]; - bitBuf |= bs[0] << (24 - bitCnt); - while(bitCnt >= 8) { - unsigned char c = (bitBuf >> 16) & 255; - stbiw__putc(s, c); - if(c == 255) { - stbiw__putc(s, 0); - } - bitBuf <<= 8; - bitCnt -= 8; - } - *bitBufP = bitBuf; - *bitCntP = bitCnt; -} - -static void stbiw__jpg_DCT(float *d0p, float *d1p, float *d2p, float *d3p, float *d4p, float *d5p, float *d6p, float *d7p) { - float d0 = *d0p, d1 = *d1p, d2 = *d2p, d3 = *d3p, d4 = *d4p, d5 = *d5p, d6 = *d6p, d7 = *d7p; - float z1, z2, z3, z4, z5, z11, z13; - - float tmp0 = d0 + d7; - float tmp7 = d0 - d7; - float tmp1 = d1 + d6; - float tmp6 = d1 - d6; - float tmp2 = d2 + d5; - float tmp5 = d2 - d5; - float tmp3 = d3 + d4; - float tmp4 = d3 - d4; - - // Even part - float tmp10 = tmp0 + tmp3; // phase 2 - float tmp13 = tmp0 - tmp3; - float tmp11 = tmp1 + tmp2; - float tmp12 = tmp1 - tmp2; - - d0 = tmp10 + tmp11; // phase 3 - d4 = tmp10 - tmp11; - - z1 = (tmp12 + tmp13) * 0.707106781f; // c4 - d2 = tmp13 + z1; // phase 5 - d6 = tmp13 - z1; - - // Odd part - tmp10 = tmp4 + tmp5; // phase 2 - tmp11 = tmp5 + tmp6; - tmp12 = tmp6 + tmp7; - - // The rotator is modified from fig 4-8 to avoid extra negations. - z5 = (tmp10 - tmp12) * 0.382683433f; // c6 - z2 = tmp10 * 0.541196100f + z5; // c2-c6 - z4 = tmp12 * 1.306562965f + z5; // c2+c6 - z3 = tmp11 * 0.707106781f; // c4 - - z11 = tmp7 + z3; // phase 5 - z13 = tmp7 - z3; - - *d5p = z13 + z2; // phase 6 - *d3p = z13 - z2; - *d1p = z11 + z4; - *d7p = z11 - z4; - - *d0p = d0; *d2p = d2; *d4p = d4; *d6p = d6; -} - -static void stbiw__jpg_calcBits(int val, unsigned short bits[2]) { - int tmp1 = val < 0 ? -val : val; - val = val < 0 ? val-1 : val; - bits[1] = 1; - while(tmp1 >>= 1) { - ++bits[1]; - } - bits[0] = val & ((1<0)&&(DU[end0pos]==0); --end0pos) { - } - // end0pos = first element in reverse order !=0 - if(end0pos == 0) { - stbiw__jpg_writeBits(s, bitBuf, bitCnt, EOB); - return DU[0]; - } - for(i = 1; i <= end0pos; ++i) { - int startpos = i; - int nrzeroes; - unsigned short bits[2]; - for (; DU[i]==0 && i<=end0pos; ++i) { - } - nrzeroes = i-startpos; - if ( nrzeroes >= 16 ) { - int lng = nrzeroes>>4; - int nrmarker; - for (nrmarker=1; nrmarker <= lng; ++nrmarker) - stbiw__jpg_writeBits(s, bitBuf, bitCnt, M16zeroes); - nrzeroes &= 15; - } - stbiw__jpg_calcBits(DU[i], bits); - stbiw__jpg_writeBits(s, bitBuf, bitCnt, HTAC[(nrzeroes<<4)+bits[1]]); - stbiw__jpg_writeBits(s, bitBuf, bitCnt, bits); - } - if(end0pos != 63) { - stbiw__jpg_writeBits(s, bitBuf, bitCnt, EOB); - } - return DU[0]; -} - -static int stbi_write_jpg_core(stbi__write_context *s, int width, int height, int comp, const void* data, int quality) { - // Constants that don't pollute global namespace - static const unsigned char std_dc_luminance_nrcodes[] = {0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0}; - static const unsigned char std_dc_luminance_values[] = {0,1,2,3,4,5,6,7,8,9,10,11}; - static const unsigned char std_ac_luminance_nrcodes[] = {0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0x7d}; - static const unsigned char std_ac_luminance_values[] = { - 0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12,0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07,0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08, - 0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0,0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16,0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28, - 0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59, - 0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89, - 0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6, - 0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2, - 0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa - }; - static const unsigned char std_dc_chrominance_nrcodes[] = {0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0}; - static const unsigned char std_dc_chrominance_values[] = {0,1,2,3,4,5,6,7,8,9,10,11}; - static const unsigned char std_ac_chrominance_nrcodes[] = {0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,0x77}; - static const unsigned char std_ac_chrominance_values[] = { - 0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21,0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71,0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91, - 0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0,0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34,0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26, - 0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38,0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58, - 0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87, - 0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4, - 0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda, - 0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa - }; - // Huffman tables - static const unsigned short YDC_HT[256][2] = { {0,2},{2,3},{3,3},{4,3},{5,3},{6,3},{14,4},{30,5},{62,6},{126,7},{254,8},{510,9}}; - static const unsigned short UVDC_HT[256][2] = { {0,2},{1,2},{2,2},{6,3},{14,4},{30,5},{62,6},{126,7},{254,8},{510,9},{1022,10},{2046,11}}; - static const unsigned short YAC_HT[256][2] = { - {10,4},{0,2},{1,2},{4,3},{11,4},{26,5},{120,7},{248,8},{1014,10},{65410,16},{65411,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, - {12,4},{27,5},{121,7},{502,9},{2038,11},{65412,16},{65413,16},{65414,16},{65415,16},{65416,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, - {28,5},{249,8},{1015,10},{4084,12},{65417,16},{65418,16},{65419,16},{65420,16},{65421,16},{65422,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, - {58,6},{503,9},{4085,12},{65423,16},{65424,16},{65425,16},{65426,16},{65427,16},{65428,16},{65429,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, - {59,6},{1016,10},{65430,16},{65431,16},{65432,16},{65433,16},{65434,16},{65435,16},{65436,16},{65437,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, - {122,7},{2039,11},{65438,16},{65439,16},{65440,16},{65441,16},{65442,16},{65443,16},{65444,16},{65445,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, - {123,7},{4086,12},{65446,16},{65447,16},{65448,16},{65449,16},{65450,16},{65451,16},{65452,16},{65453,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, - {250,8},{4087,12},{65454,16},{65455,16},{65456,16},{65457,16},{65458,16},{65459,16},{65460,16},{65461,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, - {504,9},{32704,15},{65462,16},{65463,16},{65464,16},{65465,16},{65466,16},{65467,16},{65468,16},{65469,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, - {505,9},{65470,16},{65471,16},{65472,16},{65473,16},{65474,16},{65475,16},{65476,16},{65477,16},{65478,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, - {506,9},{65479,16},{65480,16},{65481,16},{65482,16},{65483,16},{65484,16},{65485,16},{65486,16},{65487,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, - {1017,10},{65488,16},{65489,16},{65490,16},{65491,16},{65492,16},{65493,16},{65494,16},{65495,16},{65496,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, - {1018,10},{65497,16},{65498,16},{65499,16},{65500,16},{65501,16},{65502,16},{65503,16},{65504,16},{65505,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, - {2040,11},{65506,16},{65507,16},{65508,16},{65509,16},{65510,16},{65511,16},{65512,16},{65513,16},{65514,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, - {65515,16},{65516,16},{65517,16},{65518,16},{65519,16},{65520,16},{65521,16},{65522,16},{65523,16},{65524,16},{0,0},{0,0},{0,0},{0,0},{0,0}, - {2041,11},{65525,16},{65526,16},{65527,16},{65528,16},{65529,16},{65530,16},{65531,16},{65532,16},{65533,16},{65534,16},{0,0},{0,0},{0,0},{0,0},{0,0} - }; - static const unsigned short UVAC_HT[256][2] = { - {0,2},{1,2},{4,3},{10,4},{24,5},{25,5},{56,6},{120,7},{500,9},{1014,10},{4084,12},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, - {11,4},{57,6},{246,8},{501,9},{2038,11},{4085,12},{65416,16},{65417,16},{65418,16},{65419,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, - {26,5},{247,8},{1015,10},{4086,12},{32706,15},{65420,16},{65421,16},{65422,16},{65423,16},{65424,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, - {27,5},{248,8},{1016,10},{4087,12},{65425,16},{65426,16},{65427,16},{65428,16},{65429,16},{65430,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, - {58,6},{502,9},{65431,16},{65432,16},{65433,16},{65434,16},{65435,16},{65436,16},{65437,16},{65438,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, - {59,6},{1017,10},{65439,16},{65440,16},{65441,16},{65442,16},{65443,16},{65444,16},{65445,16},{65446,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, - {121,7},{2039,11},{65447,16},{65448,16},{65449,16},{65450,16},{65451,16},{65452,16},{65453,16},{65454,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, - {122,7},{2040,11},{65455,16},{65456,16},{65457,16},{65458,16},{65459,16},{65460,16},{65461,16},{65462,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, - {249,8},{65463,16},{65464,16},{65465,16},{65466,16},{65467,16},{65468,16},{65469,16},{65470,16},{65471,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, - {503,9},{65472,16},{65473,16},{65474,16},{65475,16},{65476,16},{65477,16},{65478,16},{65479,16},{65480,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, - {504,9},{65481,16},{65482,16},{65483,16},{65484,16},{65485,16},{65486,16},{65487,16},{65488,16},{65489,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, - {505,9},{65490,16},{65491,16},{65492,16},{65493,16},{65494,16},{65495,16},{65496,16},{65497,16},{65498,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, - {506,9},{65499,16},{65500,16},{65501,16},{65502,16},{65503,16},{65504,16},{65505,16},{65506,16},{65507,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, - {2041,11},{65508,16},{65509,16},{65510,16},{65511,16},{65512,16},{65513,16},{65514,16},{65515,16},{65516,16},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0}, - {16352,14},{65517,16},{65518,16},{65519,16},{65520,16},{65521,16},{65522,16},{65523,16},{65524,16},{65525,16},{0,0},{0,0},{0,0},{0,0},{0,0}, - {1018,10},{32707,15},{65526,16},{65527,16},{65528,16},{65529,16},{65530,16},{65531,16},{65532,16},{65533,16},{65534,16},{0,0},{0,0},{0,0},{0,0},{0,0} - }; - static const int YQT[] = {16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22, - 37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99}; - static const int UVQT[] = {17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99, - 99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99}; - static const float aasf[] = { 1.0f * 2.828427125f, 1.387039845f * 2.828427125f, 1.306562965f * 2.828427125f, 1.175875602f * 2.828427125f, - 1.0f * 2.828427125f, 0.785694958f * 2.828427125f, 0.541196100f * 2.828427125f, 0.275899379f * 2.828427125f }; - - int row, col, i, k, subsample; - float fdtbl_Y[64], fdtbl_UV[64]; - unsigned char YTable[64], UVTable[64]; - - if(!data || !width || !height || comp > 4 || comp < 1) { - return 0; - } - - quality = quality ? quality : 90; - subsample = quality <= 90 ? 1 : 0; - quality = quality < 1 ? 1 : quality > 100 ? 100 : quality; - quality = quality < 50 ? 5000 / quality : 200 - quality * 2; - - for(i = 0; i < 64; ++i) { - int uvti, yti = (YQT[i]*quality+50)/100; - YTable[stbiw__jpg_ZigZag[i]] = (unsigned char) (yti < 1 ? 1 : yti > 255 ? 255 : yti); - uvti = (UVQT[i]*quality+50)/100; - UVTable[stbiw__jpg_ZigZag[i]] = (unsigned char) (uvti < 1 ? 1 : uvti > 255 ? 255 : uvti); - } - - for(row = 0, k = 0; row < 8; ++row) { - for(col = 0; col < 8; ++col, ++k) { - fdtbl_Y[k] = 1 / (YTable [stbiw__jpg_ZigZag[k]] * aasf[row] * aasf[col]); - fdtbl_UV[k] = 1 / (UVTable[stbiw__jpg_ZigZag[k]] * aasf[row] * aasf[col]); - } - } - - // Write Headers - { - static const unsigned char head0[] = { 0xFF,0xD8,0xFF,0xE0,0,0x10,'J','F','I','F',0,1,1,0,0,1,0,1,0,0,0xFF,0xDB,0,0x84,0 }; - static const unsigned char head2[] = { 0xFF,0xDA,0,0xC,3,1,0,2,0x11,3,0x11,0,0x3F,0 }; - const unsigned char head1[] = { 0xFF,0xC0,0,0x11,8,(unsigned char)(height>>8),STBIW_UCHAR(height),(unsigned char)(width>>8),STBIW_UCHAR(width), - 3,1,(unsigned char)(subsample?0x22:0x11),0,2,0x11,1,3,0x11,1,0xFF,0xC4,0x01,0xA2,0 }; - s->func(s->context, (void*)head0, sizeof(head0)); - s->func(s->context, (void*)YTable, sizeof(YTable)); - stbiw__putc(s, 1); - s->func(s->context, UVTable, sizeof(UVTable)); - s->func(s->context, (void*)head1, sizeof(head1)); - s->func(s->context, (void*)(std_dc_luminance_nrcodes+1), sizeof(std_dc_luminance_nrcodes)-1); - s->func(s->context, (void*)std_dc_luminance_values, sizeof(std_dc_luminance_values)); - stbiw__putc(s, 0x10); // HTYACinfo - s->func(s->context, (void*)(std_ac_luminance_nrcodes+1), sizeof(std_ac_luminance_nrcodes)-1); - s->func(s->context, (void*)std_ac_luminance_values, sizeof(std_ac_luminance_values)); - stbiw__putc(s, 1); // HTUDCinfo - s->func(s->context, (void*)(std_dc_chrominance_nrcodes+1), sizeof(std_dc_chrominance_nrcodes)-1); - s->func(s->context, (void*)std_dc_chrominance_values, sizeof(std_dc_chrominance_values)); - stbiw__putc(s, 0x11); // HTUACinfo - s->func(s->context, (void*)(std_ac_chrominance_nrcodes+1), sizeof(std_ac_chrominance_nrcodes)-1); - s->func(s->context, (void*)std_ac_chrominance_values, sizeof(std_ac_chrominance_values)); - s->func(s->context, (void*)head2, sizeof(head2)); - } - - // Encode 8x8 macroblocks - { - static const unsigned short fillBits[] = {0x7F, 7}; - int DCY=0, DCU=0, DCV=0; - int bitBuf=0, bitCnt=0; - // comp == 2 is grey+alpha (alpha is ignored) - int ofsG = comp > 2 ? 1 : 0, ofsB = comp > 2 ? 2 : 0; - const unsigned char *dataR = (const unsigned char *)data; - const unsigned char *dataG = dataR + ofsG; - const unsigned char *dataB = dataR + ofsB; - int x, y, pos; - if(subsample) { - for(y = 0; y < height; y += 16) { - for(x = 0; x < width; x += 16) { - float Y[256], U[256], V[256]; - for(row = y, pos = 0; row < y+16; ++row) { - // row >= height => use last input row - int clamped_row = (row < height) ? row : height - 1; - int base_p = (stbi__flip_vertically_on_write ? (height-1-clamped_row) : clamped_row)*width*comp; - for(col = x; col < x+16; ++col, ++pos) { - // if col >= width => use pixel from last input column - int p = base_p + ((col < width) ? col : (width-1))*comp; - float r = dataR[p], g = dataG[p], b = dataB[p]; - Y[pos]= +0.29900f*r + 0.58700f*g + 0.11400f*b - 128; - U[pos]= -0.16874f*r - 0.33126f*g + 0.50000f*b; - V[pos]= +0.50000f*r - 0.41869f*g - 0.08131f*b; - } - } - DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y+0, 16, fdtbl_Y, DCY, YDC_HT, YAC_HT); - DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y+8, 16, fdtbl_Y, DCY, YDC_HT, YAC_HT); - DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y+128, 16, fdtbl_Y, DCY, YDC_HT, YAC_HT); - DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y+136, 16, fdtbl_Y, DCY, YDC_HT, YAC_HT); - - // subsample U,V - { - float subU[64], subV[64]; - int yy, xx; - for(yy = 0, pos = 0; yy < 8; ++yy) { - for(xx = 0; xx < 8; ++xx, ++pos) { - int j = yy*32+xx*2; - subU[pos] = (U[j+0] + U[j+1] + U[j+16] + U[j+17]) * 0.25f; - subV[pos] = (V[j+0] + V[j+1] + V[j+16] + V[j+17]) * 0.25f; - } - } - DCU = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, subU, 8, fdtbl_UV, DCU, UVDC_HT, UVAC_HT); - DCV = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, subV, 8, fdtbl_UV, DCV, UVDC_HT, UVAC_HT); - } - } - } - } else { - for(y = 0; y < height; y += 8) { - for(x = 0; x < width; x += 8) { - float Y[64], U[64], V[64]; - for(row = y, pos = 0; row < y+8; ++row) { - // row >= height => use last input row - int clamped_row = (row < height) ? row : height - 1; - int base_p = (stbi__flip_vertically_on_write ? (height-1-clamped_row) : clamped_row)*width*comp; - for(col = x; col < x+8; ++col, ++pos) { - // if col >= width => use pixel from last input column - int p = base_p + ((col < width) ? col : (width-1))*comp; - float r = dataR[p], g = dataG[p], b = dataB[p]; - Y[pos]= +0.29900f*r + 0.58700f*g + 0.11400f*b - 128; - U[pos]= -0.16874f*r - 0.33126f*g + 0.50000f*b; - V[pos]= +0.50000f*r - 0.41869f*g - 0.08131f*b; - } - } - - DCY = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, Y, 8, fdtbl_Y, DCY, YDC_HT, YAC_HT); - DCU = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, U, 8, fdtbl_UV, DCU, UVDC_HT, UVAC_HT); - DCV = stbiw__jpg_processDU(s, &bitBuf, &bitCnt, V, 8, fdtbl_UV, DCV, UVDC_HT, UVAC_HT); - } - } - } - - // Do the bit alignment of the EOI marker - stbiw__jpg_writeBits(s, &bitBuf, &bitCnt, fillBits); - } - - // EOI - stbiw__putc(s, 0xFF); - stbiw__putc(s, 0xD9); - - return 1; -} - -STBIWDEF int stbi_write_jpg_to_func(stbi_write_func *func, void *context, int x, int y, int comp, const void *data, int quality) -{ - stbi__write_context s = { 0 }; - stbi__start_write_callbacks(&s, func, context); - return stbi_write_jpg_core(&s, x, y, comp, (void *) data, quality); -} - - -#ifndef STBI_WRITE_NO_STDIO -STBIWDEF int stbi_write_jpg(char const *filename, int x, int y, int comp, const void *data, int quality) -{ - stbi__write_context s = { 0 }; - if (stbi__start_write_file(&s,filename)) { - int r = stbi_write_jpg_core(&s, x, y, comp, data, quality); - stbi__end_write_file(&s); - return r; - } else - return 0; -} -#endif - -#endif // STB_IMAGE_WRITE_IMPLEMENTATION - -/* Revision history - 1.16 (2021-07-11) - make Deflate code emit uncompressed blocks when it would otherwise expand - support writing BMPs with alpha channel - 1.15 (2020-07-13) unknown - 1.14 (2020-02-02) updated JPEG writer to downsample chroma channels - 1.13 - 1.12 - 1.11 (2019-08-11) - - 1.10 (2019-02-07) - support utf8 filenames in Windows; fix warnings and platform ifdefs - 1.09 (2018-02-11) - fix typo in zlib quality API, improve STB_I_W_STATIC in C++ - 1.08 (2018-01-29) - add stbi__flip_vertically_on_write, external zlib, zlib quality, choose PNG filter - 1.07 (2017-07-24) - doc fix - 1.06 (2017-07-23) - writing JPEG (using Jon Olick's code) - 1.05 ??? - 1.04 (2017-03-03) - monochrome BMP expansion - 1.03 ??? - 1.02 (2016-04-02) - avoid allocating large structures on the stack - 1.01 (2016-01-16) - STBIW_REALLOC_SIZED: support allocators with no realloc support - avoid race-condition in crc initialization - minor compile issues - 1.00 (2015-09-14) - installable file IO function - 0.99 (2015-09-13) - warning fixes; TGA rle support - 0.98 (2015-04-08) - added STBIW_MALLOC, STBIW_ASSERT etc - 0.97 (2015-01-18) - fixed HDR asserts, rewrote HDR rle logic - 0.96 (2015-01-17) - add HDR output - fix monochrome BMP - 0.95 (2014-08-17) - add monochrome TGA output - 0.94 (2014-05-31) - rename private functions to avoid conflicts with stb_image.h - 0.93 (2014-05-27) - warning fixes - 0.92 (2010-08-01) - casts to unsigned char to fix warnings - 0.91 (2010-07-17) - first public release - 0.90 first internal release -*/ - -/* ------------------------------------------------------------------------------- -This software is available under 2 licenses -- choose whichever you prefer. ------------------------------------------------------------------------------- -ALTERNATIVE A - MIT License -Copyright (c) 2017 Sean Barrett -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. ------------------------------------------------------------------------------- -ALTERNATIVE B - Public Domain (www.unlicense.org) -This is free and unencumbered software released into the public domain. -Anyone is free to copy, modify, publish, use, compile, sell, or distribute this -software, either in source code form or as a compiled binary, for any purpose, -commercial or non-commercial, and by any means. -In jurisdictions that recognize copyright laws, the author or authors of this -software dedicate any and all copyright interest in the software to the public -domain. We make this dedication for the benefit of the public at large and to -the detriment of our heirs and successors. We intend this dedication to be an -overt act of relinquishment in perpetuity of all present and future rights to -this software under copyright law. -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 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. ------------------------------------------------------------------------------- -*/ diff --git a/tools/build.nr b/tools/build.nr index 11ad811..0fbe6bb 100755 --- a/tools/build.nr +++ b/tools/build.nr @@ -1 +1 @@ -1758 +1789

+cN8I83`olICW^C^LPSA%8qx6%~ltMDp1yO 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